PLNOG 8: Jacek Skowyra - Zabezpieczenie routerów Juniper przed światem zewnę...
SELinux, czyli zero-zero-day exploits - DWO 2013
1. SELinux, czyli zero-zero-day
exploits
Praktyczne wykorzystanie SELinuksa II
Bielsko 2013
Adam Przybyła <adam@ertel.com.pl>
(Creative Commons cc-by-nd)
2. SELinux
● Security-Enhanced Linux
● Mandatory Access Control
● Projekt na zlecenie U.S. Department of
Defense
● Przy współpracy NSA (National Security
Agency)
● SELinux dla androida, KNOX
3. Tradycyjne metody
zabezpieczenia
● DAC – prawa dostępu do plików
● Firewall - iptables
● Szyfrowanie – SSL
● IDS/IPS
● mod_security – firewall aplikacyjny
4. Czy to SELinux?
[root@synergia ~]# setenforce 0
[root@synergia ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
[root@synergia ~]# setenforce 1
[root@synergia ~]#
5. [adam@synergia ~]$ python
Python 2.6.6 (r266:84292, Sep 11 2012, 08:34:23)
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
Type "help", "copyright", "credits" or "license" for more
information.
>>>
>>> import selinux
>>>
>>> selinux.getcon()
[0, 'unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023']
>>> selinux.getpidcon(1)
[0, 'system_u:system_r:init_t:s0']
6. Porządki na początek
[root@synergia ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@synergia ~]# touch /.autorelabel
[root@synergia ~]# reboot
7. Dostęp poprzez bibliotekę
adam@synergia ~]$ python
Python 2.6.6 (r266:84292, Sep 11 2012, 08:34:23)
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
Type "help", "copyright", "credits" or "license" for more
information.
>>>
>>> import selinux
>>>
>>> selinux.getcon()
[0, 'unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023']
>>> selinux.getpidcon(1)
[0, 'system_u:system_r:init_t:s0']
9. Składniki polityki SELinuksa
● Plik fc – definiuje kontekst bezpieczeństwa
plików
● Plik if – plik interface'u
● Plik te - reguły dostępu dla domeny
selinuksa
10. Zarządzanie selinuksem
● Semanage
– zmiany kontekstu plików
– zmiany kontekstu użytkowników
– przypisania kontekstu do portów
● Setenforce
– Wyłaczenie selinuksa
● getsebool/setsebool
– Zmiany parametrów polityki
● sestatus
● /etc/selinux/config
– Konfiguracja SELinuksa
11. Serwer HTTP z SELinuksem
● Ustawienie parametrów za pomocą
zmiennych
● Sprawdzenie domenty demona
● Sprawdzenie atrybutów plików
● Własne reguły
12. [root@malenstwo ~]# getsebool -a|grep http
allow_httpd_anon_write --> off
allow_httpd_mod_auth_ntlm_winbind --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_network_connect --> on
httpd_can_network_connect_db --> on
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> on
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> on
httpd_execmem --> off
httpd_read_user_content --> off
httpd_ssi_exec --> off
httpd_tmp_exec --> off
httpd_tty_comm --> on
httpd_unified --> on
httpd_use_cifs --> off
[root@malenstwo ~]#