ݺߣ

ݺߣShare a Scribd company logo
Security Enhanced
Linux: Yüksek Güvenlikli
Linux
EMRE CAN KÜÇÜKOĞLU
ÖZGÜR YAZILIM VE LINUX GÜNLERI 2015
03.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ü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
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)
● Policy
o SELinux referans policy projesi [rpp]
o redhat, gentoo, debian, fedora, ...
14
15
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
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 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
20
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
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
23
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 );
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ü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
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
● chcat
o 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
● 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
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
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
● 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
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/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
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

More Related Content

SELinux: Yüksek Güvenlikli Linux

  • 1. Security Enhanced Linux: Yüksek Güvenlikli Linux EMRE CAN KÜÇÜKOĞLU ÖZGÜR YAZILIM VE LINUX GÜNLERI 2015 03.27.2015
  • 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
  • 11. 11
  • 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
  • 15. 15
  • 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
  • 18. 18
  • 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
  • 20. 20
  • 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
  • 23. 23
  • 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
  • 34. 34
  • 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
  • 37. 37
  • 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
  • 40. Lisans ● GNU General Public License (GPL) [sel] 40
  • 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
  • 42. 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
  • 43. 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