43
Security Enhanced Linux: Yüksek Güvenlikli Linux EMRE CAN KÜÇÜKOĞLU ÖZGÜR YAZILIM VE LINUX GÜNLERI 2015 03.27.2015

SELinux: Yüksek Güvenlikli Linux

Embed Size (px)

Citation preview

Page 1: 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

Page 2: SELinux: Yüksek Güvenlikli Linux

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

Page 3: SELinux: Yüksek Güvenlikli Linux

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

Page 4: SELinux: Yüksek Güvenlikli Linux

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

Page 5: SELinux: Yüksek Güvenlikli Linux

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

Page 6: SELinux: Yüksek Güvenlikli Linux

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

Page 7: SELinux: Yüksek Güvenlikli Linux

SELinux ne yapamaz

● Sistem kaynaklarının kontrolüo CPU, hafıza (RAM), ...o Tavsiye edilenler: grsecurity, cgroups, pam, ...

7

Page 8: SELinux: Yüksek Güvenlikli Linux

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

Page 9: SELinux: Yüksek Güvenlikli Linux

Devreye alma (1/5)

● Kernel desteği Linux 2.6 versiyonundan itibaran mainline dağıtımda mevcut.

9

Page 10: SELinux: Yüksek Güvenlikli Linux

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

Page 11: SELinux: Yüksek Güvenlikli Linux

11

Page 12: SELinux: Yüksek Güvenlikli Linux

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

Page 13: SELinux: Yüksek Güvenlikli Linux

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

Page 14: SELinux: Yüksek Güvenlikli Linux

Devreye alma (5/5)

● Policyo SELinux referans policy projesi [rpp]

o redhat, gentoo, debian, fedora, ...

14

Page 15: SELinux: Yüksek Güvenlikli Linux

15

Page 16: SELinux: Yüksek Güvenlikli Linux

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

Page 17: SELinux: Yüksek Güvenlikli Linux

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

Page 18: SELinux: Yüksek Güvenlikli Linux

18

Page 19: SELinux: Yüksek Güvenlikli Linux

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

Page 20: SELinux: Yüksek Güvenlikli Linux

20

Page 21: SELinux: Yüksek Güvenlikli Linux

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

Page 22: SELinux: Yüksek Güvenlikli Linux

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

Page 23: SELinux: Yüksek Güvenlikli Linux

23

Page 24: SELinux: Yüksek Güvenlikli Linux

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 );

Page 25: SELinux: Yüksek Güvenlikli Linux

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

Page 26: SELinux: Yüksek Güvenlikli Linux

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

Page 27: SELinux: Yüksek Güvenlikli Linux

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

Page 28: SELinux: Yüksek Güvenlikli Linux

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

Page 29: SELinux: Yüksek Güvenlikli Linux

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

Page 30: SELinux: Yüksek Güvenlikli Linux

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

Page 31: SELinux: Yüksek Güvenlikli Linux

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

Page 32: SELinux: Yüksek Güvenlikli Linux

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

Page 33: SELinux: Yüksek Güvenlikli Linux

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

Page 34: SELinux: Yüksek Güvenlikli Linux

34

Page 35: SELinux: Yüksek Güvenlikli Linux

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

Page 36: SELinux: Yüksek Güvenlikli Linux

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

Page 37: SELinux: Yüksek Güvenlikli Linux

37

Page 38: SELinux: Yüksek Güvenlikli Linux

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

Page 39: SELinux: Yüksek Güvenlikli Linux

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

Page 40: SELinux: Yüksek Güvenlikli Linux

Lisans

● GNU General Public License (GPL) [sel]

40

Page 41: SELinux: Yüksek Güvenlikli Linux

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

Page 42: SELinux: Yüksek Güvenlikli Linux

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

Page 43: SELinux: Yüksek Güvenlikli Linux

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