SELinux: Yüksek Güvenlikli Linux
-
Upload
emre-can-kucukoglu -
Category
Software
-
view
300 -
download
0
Transcript of SELinux: Yüksek Güvenlikli Linux
Security Enhanced Linux: Yüksek Güvenlikli LinuxEMRE CAN KÜÇÜKOĞLU
ÖZGÜR YAZILIM VE LINUX GÜNLERI 201503.27.2015
Konuşmacı
● Emre Can Küçükoğlu, Bilgisayar Mühendisi, Odtü Arçelik Ar-ge Tasarım Ofisi
● Konuyla ilgili çalışmaları:o Mobil cihazlarda kullanılmak üzere, yüksek güvenliğe sahip, gerçek
zamanlı işletim sistemi projesi için gömülü sistemlere SELinux entegrasyonu, policy yönetimi
o github.com/eckucukoglu/selinux-arm
2
Başlıklar
● SELinux nedir● SELinux neler yapabilir● SELinux ne yapamaz● Neden SELinux kullanmalı● Nasıl devreye sokulur● Farklı çalışma modları● Temel kavramları● Kullanıcı eşleştirmesi● Logging
● MLS ve MCS● SELinux politikaları (policy)● Userspace araçları● Performans verileri● Lisans● Sorular● Referanslar
3
SELinux nedir
● Programlar arası firewall
● Linux güvenlik modülü (LSM)o Diğerleri smack, tomoyo, apparmor.
● Zorunlu erişim denetimi (MAC)o Hangi özneler hangi nesnelere erişebilir
▪ Özneler: kullanıcılar, programlar.▪ Nesneler: dosyalar, donanımlar, soketler, ...
4
SELinux neler yapabilir (1/2)
● Engelledikleri:o process-lerin veri okumaları,o uygulama güvenlik mekanizmalarının atlanması,o güvenli olmayan programların çalışması
● Güvenlik policy-lerinin ihlalinde uygulamalara müdahale eder.
● Zararlı yazılımlardan kaynaklanacak muhtemel zararları sınırlandırabilir.
5
SELinux neler yapabilir (2/2)
● Tür zorlaması (Type enforcement)o Güvenlik konteksti (security contex) dahilinde tanımlı türlerin (type) kontrolü.
● Rol tabanlı erişim denetimi (Role-based access control)o Türlere rol atayarak erişim denetimini sağlar.
● Multi-level güvenlik (MLS ve MCS)o Verinin sınıflandırılarak korunmasını sağlar.
6
SELinux ne yapamaz
● Sistem kaynaklarının kontrolüo CPU, hafıza (RAM), ...o Tavsiye edilenler: grsecurity, cgroups, pam, ...
7
Neden SELinux kullanmalı
● Farklı fonksiyonları içinde barındıran sistemlerde, fonksiyonaliteleri ayrıştırmak için.o Web sunucularında, email – dns sunucu ayrımıo Akıllı televizyonlarda, ödeme işlemleri – eğlence/bilgi uygulamaları ayrımıo Yeni nesil yazar kasalarda, örneğin aygaz uygulaması – iş bankası uygulaması ayrımı
● Android 5.0 ile birlikte akıllı telefonlarda kullanılmaya başlandı.
8
Devreye alma (1/5)
● Kernel desteği Linux 2.6 versiyonundan itibaran mainline dağıtımda mevcut.
9
Devreye alma (2/5)
● Kernel konfigürasyonuo CONFIG_SECURITY_SELINUX
▪ NSA SELinux desteği açılır.o DEFAULT_SECURITY_SELINUX
▪ Kernelin varsayılan güvenlik modülü olarak SELinux ayarlanır.o SECURITY_SELINUX_AVC_STATS
▪ AVC istatistiklerini toplar.o CONFIG_SECURITY_SELINUX_BOOTPARAM
▪ SELinux’un boot anında kapatılmasına olanak verir.o SECURITY_SELINUX_DEVELOP
▪ Geliştirici modu. Policy geliştirmeleri için.o CONFIG_SECURITY_SELINUX_DISABLE
▪ İşleyiş süresinde (runtime) SELinux’un kapatılmasını sağlar.
10
11
Devreye alma (3/5)
● Userspace kütüphaneleri ve araçları [gse]o libsepol
▪ policy manipülasyonu.o libselinux
▪ SELinux araçları için gerekli kütüphane.▪ libsepol’a bağlı.
o libsemanage▪ policy yönetim araçları için gerekli olan kütüphane.▪ libsepol ve libselinux’a bağlı.
12
Devreye alma (4/5)
● SELinux userland packages [gse]o policycoreutils
▪ çeşitli policy araçları.▪ libselinux, libsepol ve libsemanage’a bağlı.
o sepolgen▪ policy oluşturmada kullanılır.
o checkpolicy▪ policy derleyici.▪ libsepol’a bağlı.
13
Devreye alma (5/5)
● Policyo SELinux referans policy projesi [rpp]
o redhat, gentoo, debian, fedora, ...
14
15
SELinux modları (1/2)
● Permissiveo Hataları kaydeder.o CONFIG_SECURITY_SELINUX_DEVELOPo ayrıca: Process-ler için ‘Permissive’ türü [pdr]
● Enforcedo Tam güvenlik kontrolü.
● Disabledo Policy-ler yüklenmez.o CONFIG_SECURITY_SELINUX_BOOTPARAMo Kernele boot parametresi olarak selinux=0 geçirilmeli.
16
SELinux modları (2/2)
● Çalışma anında mod değiştirme:o # setenforce 1 /* Enforcing */o # setenforce 0 /* Permissive */
● Kalıcı olarak:o /etc/selinux/config
▪ SELINUX=enforcing▪ SELINUX=permissive▪ SELINUX=disabled
o Boot parametresi ile: (config dosyasından üstündür)▪ enforcing=0 /* Permissive */ ▪ enforcing=1 /* Enforcing */▪ selinux=0 /* Disabled */
SELINUX=enforcing
17
18
Temel kavramlar (1/5)
● Güvenlik kontekstio process-ler ve nesnelere aittir.o syntax: user:role:type[:range]
▪ MLS range kısmı opsiyoneldir.o process-lerde ve dosyalarda üst öğeden kalıtım olur.
● Kullanıcılaro linux kullanıcılarından farklıdır.
▪ SELinux – Linux kullanıcısı eşleştirmesi konfigürasyonda tutulur.▪ SELinux kullanıcıları oturum süresince –su, sudo ile linux kullanıcılarında olduğu gibi – değiştirilemez.
o son ek: *_u. örn: user_uo rol veya rolleri olabilir.
19
20
Temel kavramlar (2/5)
● Rollero SELinux kullanıcılarına atanır.o son ek: *_r. örn: user_ro Tür veya türlere erişim iznine sahip olabilir.
● Türler (type)o Erişim izni türlere göre karar verilir.o son ek: *_t. örn music_to process ve nesnelerle eşleştirilir.
● Nitelikler (attribute)o Benzer özellikteki türlerin gruplandırılmasını sağlar.
21
Temel kavramlar (3/5)
● Sınırlar (range)o güvenlik seviyesi oluşturmak amacıyla kullanılır.o policy bünyesinde MCS / MLS desteği sağlanmalıdır.
● Nesne sınıflarıo Nesnelerin kategorilendirilmesi
▪ # ls /sys/fs/selinux/classo Her sınıfın izinler kümesi bulunur. [ocp]
▪ # ls /sys/fs/selinux/class/tcp_socket/perms/
● Kurallaro process ve nesnenin türüne göre erişim izinlerini verir.o örn: allow user_t user_home_t:file { create read write };
22
23
Temel kavramlar (4/5)
● Booleano policy-lerin aktif-pasif duruma geçmesine olanak verir.o # getsebool -ao # sesearch -b selinuxuser_execheap -AC
▪ ET allow user_t kernel_t : system syslog_read ; [ user_dmesg ]
● Kısıtlamalar (constrain)o Eylemin hangi koşullarda izne sahip olduğunu belirler.o # seinfo --constraino Örn:
24
constrain dir_file_class_set { create relabelto relabelfrom } (
u1 == u2 or t1 == can_change_object_identity );
Temel kavramlar (5/5)
● Tür dönüşümü (type transition)o nesneler için (dosya):
▪ # sesearch -T▪ type_transition [Creating Subject type] [Parent Object/Subject Type] : [Class of
new Object/Subject] [New Object/Subject Type]o özneler için (process):
▪ # pstree -Z▪ # sesearch -T -c process▪ type_transtion [Parent process type] [Type of process] : process [New type of the
process created]
25
Kullanıcı eşleştirmesi
● Her linux kullanıcısı yalnızca bir SELinux kullanıcısıyla eşleşir. [ual]
● SELinux kullanıcısı birden fazla linux kullanıcıyla eşleşebilir.
● # semanage login -l● # semanage login -a -s staff_u
emrecan
26
Logging
● Kural ihlalleri audit sisteminde kayıtlanır.o /var/log/audit/audit.log
● Permissive modunda daha fazla log üretilir.● # cat /var/log/audit/audit.log | audit2allow -r
27
Multi-level güvenlik ve MCS (1/2)
● Bell-La Padula modeli uygulanır.o “alt seviyeye yazma” ve “üst seviyeyi okuma”
● user:role:type:sensitivity [:category,...] - sensitivity [:category,...]o | LEVEL | - | LEVEL |o | RANGE |o sensitivity: s0 en düşük, s15 en yükseko kategori: opsiyonel, c0.c255.
▪ unordered and unrelated lists of "compartments".o level: sensitivity ve kategori’nin kombinasyonu.
● setrans.conf dosyasında anlamlandırılır:o s0 = tasnif dışı, s15 = çok gizli, ...o c0 = finans, c100 = eğlence, c255 = kitap, ...
28
Multi-level güvenlik ve MCS (2/2)
● android üzerinde:o aynı uygulamayı kullanan farklı kullanıcıların, birbirlerinin dosyalarını okuma ve
yazmasını engeller.
● pratikte MLS referans policy-leri ‘üst-seviyeye yazmaya’ ve ‘alt-seviyeyi okumaya’ da izin vermezler.o Yalnızca eşit seviyelere izin verilir.
29
SELinux politikaları (1/3)
● Binary dosyalardır.o daha düşük hafıza ihtiyacı için derlenir.
● Type enforcement dosyası (*.te)o zorunludur.o modülün isim ve versiyonunu içerir.o türler, kurallar, booleanlar, ... burada tanımlanır.
● File contexts dosyası (*.fc)o oluşturulan policy modülünü kullanan uygulamalar için varsayılan güvenlik
kontekstlerini içerir.● Interface dosyası (*.if)
o kural tanımlamalarında kullanılan makroları içerir.
30
SELinux politikaları (2/3)
● Gömülü sistemler için policy konfigürasyonu:o referens policy projesi,o kullanılmayan kuralların kaldırılması,
▪ proje bünyesinde, gömülü sistemler için fazla sayıda işlevsiz kural bulunmaktadır.
o gerekli kuralların eklenmesi.
31
SELinux politikaları (3/3)
● Referans policy projesi [rpp]o yeni policy oluşturmak için temel olarak kullanılır.o modüler olması sebebiyle distrolarda da kullanılır.o bağlı olduğu kütüphaneler:
▪ checkpolicy▪ policycoreutils▪ libsepol▪ libsemanage▪ python
32
Userspace araçları (1/4)● id, ls, ps, netstat -Z
o sırasıyla shell, dosya, process ve network güvenlik kontekstlerini gösterir.● audit2allow
o log dosyalarından, ihtiyaç duyulan kuralı oluşturur.● audit2why
o izin ihlalinin sebebini açıklar.● chcon
o dosyaların güvenlik kontekstini geçici olarak değiştirir. (restorecon)o chcon -t user_home_t /tmp/parser
● chcato dosyaların kategorilerini değiştirir.o kullanıcının yetki sahibi olduğu kategorileri değiştirir.
33
34
Userspace araçları (2/4)● getenforce
o SELinux modunu döner.● newrole
o rol, tür ve level değişimini sağlar.▪ newrole -r system_r -t unconfined_t
● semanageo boolean ayarları için kullanılır,o SELinux kullanıcılarının rol ve level değerlerini değiştirir,o Dosyaların güvenlik kontekstlerini kalıcı olarak değiştirir. (restorecon)
▪ semanage fcontext -a -t user_home_t /tmp/parser● semodule
o SELinux policy modüllerinin sisteme yüklenmesi, silinmesi ve listelenmesini sağlar.
35
Userspace araçları (3/4)
● setenforceo Permissive ve Enforced modları arası geçişi sağlar.
● seinfoo policy sorguları için kullanılır.
● setseboolo boolean aktifleştirilmesi/pasifleştirilmesini, geçici veya kalıcı olarak ayarlar.
● sestatuso SELinux sistem bilgilerini verir.
36
37
Userspace araçları (4/4)
● restorecon, restorecond*o Dosyanın varsayılan güvenlik kontekstine dönmesini sağlar.o customizable types [wct]
▪ Standart etiketleme operasyonuyla, güvenlik konteksti varsayılana dönmez.▪ # cat /etc/selinux/targeted/contexts/customizable_types
● runcono programı verilen kontekst ile çalıştırır.
▪ runcon system_u:system_r:crond_t:s0:c0.c255 /bin/bash● run_init [gs]
o servislerin doğru güvenlik konteksti ile çalışmasını sağlar.▪ run_init /etc/init.d/ssh start
38
Performans
● Sistem çağrılarını arttırır.● Hafıza ve dosya kullanımını arttırır.● Sisteme genel yükü ~ 7% civarında. [faq] [ffq]
39
Lisans
● GNU General Public License (GPL) [sel]
40
Sorular?
● SELinux’u grsecurity ile birlikte kullanabilir miyim?o Evet, özellikle PAX desteği tavsiye ediliyor. Yalnızca grsecurity’nin ACL desteği
kullanılmamalıdır. [gfq]● Boolean kontrolü ile güvenlik açığı oluşması mümkün mü?
o i.e. setsebool -P allow_execheap on/offo DAC öntanımlı koşullara sahip değildir. Boolean’lar bir esneklik katar fakat koşullu
policy yazımı şart değildir.● Enforced moddan çıkılması engellenebilir mi?
o Evet, kernel derlenirken yapılacak konfigürasyonlar ile Disabled ve Permissive modlara geçiş engellenebilir.
41
Referanslar (1/2)
[faq] http://www.crypt.gen.nz/selinux/faq.html[gse] https://github.com/SELinuxProject/selinux[gs] http://selinuxproject.org/page/Guide/Services[rpp] https://github.com/TresysTechnology/…[ocp] http://selinuxproject.org/page/ObjectCl…[pdr] http://selinuxproject.org/page/Permissi…[sqp] http://www.cs.virginia.edu/~jcg8f/SELi…
42
Referanslar (2/2)
[sel] https://www.nsa.gov/research/selinux/l...[ual] http://wiki.gentoo.org/wiki/SELinux/Use...[wct] http://wiki.gentoo.org/wiki/SELinux/Tuto...[gfq] http://wiki.gentoo.org/wiki/SELinux/FAQ[ffq] http://docs.fedoraproject.org/en-US/Fed…[use] http://www.fosteringlinux.com/category/…[nb4] http://taiga.selinuxproject.org/~rhaines/[mls] http://selinuxproject.org/page/MLSStat...
43