2. 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
3. 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
4. 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
5. 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
6. 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
7. SELinux ne yapamaz
● Sistem kaynaklarının kontrolü
o CPU, hafıza (RAM), ...
o Tavsiye edilenler: grsecurity, cgroups, pam, ...
7
8. 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
9. Devreye alma (1/5)
● Kernel desteği Linux 2.6 versiyonundan itibaran mainline
dağıtımda mevcut.
9
10. Devreye alma (2/5)
● Kernel konfigürasyonu
o 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
12. 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
13. 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
14. Devreye alma (5/5)
● Policy
o SELinux referans policy projesi [rpp]
o redhat, gentoo, debian, fedora, ...
14
16. SELinux modları (1/2)
● Permissive
o Hataları kaydeder.
o CONFIG_SECURITY_SELINUX_DEVELOP
o ayrıca: Process-ler için ‘Permissive’ türü [pdr]
● Enforced
o Tam güvenlik kontrolü.
● Disabled
o Policy-ler yüklenmez.
o CONFIG_SECURITY_SELINUX_BOOTPARAM
o Kernele boot parametresi olarak selinux=0 geçirilmeli.
16
17. 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
19. Temel kavramlar (1/5)
● Güvenlik konteksti
o 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ılar
o 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_u
o rol veya rolleri olabilir.
19
21. Temel kavramlar (2/5)
● Roller
o SELinux kullanıcılarına atanır.
o son ek: *_r. örn: user_r
o 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_t
o process ve nesnelerle eşleştirilir.
● Nitelikler (attribute)
o Benzer özellikteki türlerin gruplandırılmasını sağlar.
21
22. 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/class
o Her sınıfın izinler kümesi bulunur. [ocp]
▪ # ls /sys/fs/selinux/class/tcp_socket/perms/
● Kurallar
o 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
24. Temel kavramlar (4/5)
● Boolean
o policy-lerin aktif-pasif duruma geçmesine olanak verir.
o # getsebool -a
o # 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 --constrain
o Örn:
24
constrain dir_file_class_set { create relabelto relabelfrom } (
u1 == u2
or t1 == can_change_object_identity );
25. 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
26. 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
27. 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
28. 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üksek
o 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
29. 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
30. 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
31. 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
32. 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
33. 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
● chcat
o dosyaların kategorilerini değiştirir.
o kullanıcının yetki sahibi olduğu kategorileri değiştirir.
33
35. 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
● semanage
o 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
36. Userspace araçları (3/4)
● setenforce
o Permissive ve Enforced modları arası geçişi sağlar.
● seinfo
o policy sorguları için kullanılır.
● setsebool
o boolean aktifleştirilmesi/pasifleştirilmesini, geçici veya kalıcı olarak ayarlar.
● sestatus
o SELinux sistem bilgilerini verir.
36
38. 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
● runcon
o 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
39. 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
41. 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/off
o 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