SlideShare une entreprise Scribd logo
1  sur  16
SELinux, czyli zero-zero-day
          exploits

    Praktyczne wykorzystanie SELinuksa II



             Bielsko 2013

Adam Przybyła <adam@ertel.com.pl>

   (Creative Commons cc-by-nd)
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
Tradycyjne metody
                zabezpieczenia
●   DAC – prawa dostępu do plików
●   Firewall - iptables
●   Szyfrowanie – SSL
●   IDS/IPS
●   mod_security – firewall aplikacyjny
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 ~]#
[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']
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
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']
Pojedyncze poprawki

[root@synergia ~]# ll -Z .bashrc
 -rw-r--r--. root root system_u:object_r:admin_home_t:s0 .bashrc
[root@synergia ~]#
[root@synergia ~]# restorecon -v .bashrc
[root@synergia ~]#
[root@synergia ~]# restorecon -R -v /var/lib/
restorecon reset /var/lib/rsyslog context
system_u:object_r:var_lib_t:s0-
>system_u:object_r:syslogd_var_lib_t:s0
[root@synergia ~]#
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
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
Serwer HTTP z SELinuksem
●   Ustawienie parametrów za pomocą
    zmiennych
●   Sprawdzenie domenty demona
●   Sprawdzenie atrybutów plików
●   Własne reguły
[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 ~]#
Konteksty startowe
[root@synergia ~]# ll -Z /etc/init.d/httpd
-rwxr-xr-x. root root system_u:object_r:httpd_initrc_exec_t:s0
/etc/init.d/httpd
[root@synergia ~]# ll -Z /usr/sbin/httpd
-rwxr-xr-x. root root system_u:object_r:httpd_exec_t:s0
/usr/sbin/httpd
[root@synergia ~]#
Kontekst uruchomionego httpd

[root@synergia ~]# ps -ZC httpd
LABEL                       PID TTY       TIME CMD
unconfined_u:system_r:httpd_t:s0 7429 ?         00:00:00 httpd
unconfined_u:system_r:httpd_t:s0 7432 ?         00:00:00 httpd
unconfined_u:system_r:httpd_t:s0 7433 ?         00:00:00 httpd
unconfined_u:system_r:httpd_t:s0 7434 ?         00:00:00 httpd
unconfined_u:system_r:httpd_t:s0 7435 ?         00:00:00 httpd
unconfined_u:system_r:httpd_t:s0 7436 ?         00:00:00 httpd
unconfined_u:system_r:httpd_t:s0 7437 ?         00:00:00 httpd
unconfined_u:system_r:httpd_t:s0 7438 ?         00:00:00 httpd
unconfined_u:system_r:httpd_t:s0 7439 ?         00:00:00 httpd
[root@synergia ~]# ll /etc/httpd/conf.d/welcome.conf -Z
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0
/etc/httpd/conf.d/welcome.conf
[root@synergia ~]#
Semanage


[root@synergia ~]# semanage port -l |grep http_port_t
http_port_t           tcp   80, 443, 488, 8008, 8009, 8443
pegasus_http_port_t       tcp    5988
[root@synergia ~]#

[root@synergia ~]# semanage fcontext -a -t httpd_sys_content_t
"/web(/.*)?"
Pytania?

Contenu connexe

Similaire à SELinux, czyli zero-zero-day exploits - DWO 2013

NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.comNGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
Leszek Mi?
 
Linux. Bezpieczeństwo. Receptury
Linux. Bezpieczeństwo. RecepturyLinux. Bezpieczeństwo. Receptury
Linux. Bezpieczeństwo. Receptury
Wydawnictwo Helion
 
Fedora Core 2. Księga eksperta
Fedora Core 2. Księga ekspertaFedora Core 2. Księga eksperta
Fedora Core 2. Księga eksperta
Wydawnictwo Helion
 
Hack Proofing Linux. Edycja polska
Hack Proofing Linux. Edycja polskaHack Proofing Linux. Edycja polska
Hack Proofing Linux. Edycja polska
Wydawnictwo Helion
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
Wojciech Lichota
 

Similaire à SELinux, czyli zero-zero-day exploits - DWO 2013 (20)

NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.comNGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
 
PLNOG 6: Łukasz Jagiełło - Wdrożenie skalowalnego systemu plików GlusterFS w ...
PLNOG 6: Łukasz Jagiełło - Wdrożenie skalowalnego systemu plików GlusterFS w ...PLNOG 6: Łukasz Jagiełło - Wdrożenie skalowalnego systemu plików GlusterFS w ...
PLNOG 6: Łukasz Jagiełło - Wdrożenie skalowalnego systemu plików GlusterFS w ...
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
 
Linux. Bezpieczeństwo. Receptury
Linux. Bezpieczeństwo. RecepturyLinux. Bezpieczeństwo. Receptury
Linux. Bezpieczeństwo. Receptury
 
Gluster FS
Gluster FSGluster FS
Gluster FS
 
Serwer internetowy w systemie Linux
Serwer internetowy w systemie LinuxSerwer internetowy w systemie Linux
Serwer internetowy w systemie Linux
 
Devops/Sysops security
Devops/Sysops securityDevops/Sysops security
Devops/Sysops security
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP
 
Krytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiKrytyczne błędy konfiguracji
Krytyczne błędy konfiguracji
 
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel MikolajczykSecurity B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
 
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu Docker
 
Fedora Core 2. Księga eksperta
Fedora Core 2. Księga ekspertaFedora Core 2. Księga eksperta
Fedora Core 2. Księga eksperta
 
Hack Proofing Linux. Edycja polska
Hack Proofing Linux. Edycja polskaHack Proofing Linux. Edycja polska
Hack Proofing Linux. Edycja polska
 
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
 
Deployment historia pewnej aplikacji
Deployment   historia pewnej aplikacjiDeployment   historia pewnej aplikacji
Deployment historia pewnej aplikacji
 
100 M pakietów na sekundę dla każdego.
100 M pakietów na sekundę dla każdego. 100 M pakietów na sekundę dla każdego.
100 M pakietów na sekundę dla każdego.
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
 
DTrace
DTraceDTrace
DTrace
 
PLNOG 8: Jacek Skowyra - Zabezpieczenie routerów Juniper przed światem zewnę...
PLNOG 8: Jacek Skowyra  - Zabezpieczenie routerów Juniper przed światem zewnę...PLNOG 8: Jacek Skowyra  - Zabezpieczenie routerów Juniper przed światem zewnę...
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']
  • 8. Pojedyncze poprawki [root@synergia ~]# ll -Z .bashrc -rw-r--r--. root root system_u:object_r:admin_home_t:s0 .bashrc [root@synergia ~]# [root@synergia ~]# restorecon -v .bashrc [root@synergia ~]# [root@synergia ~]# restorecon -R -v /var/lib/ restorecon reset /var/lib/rsyslog context system_u:object_r:var_lib_t:s0- >system_u:object_r:syslogd_var_lib_t:s0 [root@synergia ~]#
  • 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 ~]#
  • 13. Konteksty startowe [root@synergia ~]# ll -Z /etc/init.d/httpd -rwxr-xr-x. root root system_u:object_r:httpd_initrc_exec_t:s0 /etc/init.d/httpd [root@synergia ~]# ll -Z /usr/sbin/httpd -rwxr-xr-x. root root system_u:object_r:httpd_exec_t:s0 /usr/sbin/httpd [root@synergia ~]#
  • 14. Kontekst uruchomionego httpd [root@synergia ~]# ps -ZC httpd LABEL PID TTY TIME CMD unconfined_u:system_r:httpd_t:s0 7429 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 7432 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 7433 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 7434 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 7435 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 7436 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 7437 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 7438 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 7439 ? 00:00:00 httpd [root@synergia ~]# ll /etc/httpd/conf.d/welcome.conf -Z -rw-r--r--. root root system_u:object_r:httpd_config_t:s0 /etc/httpd/conf.d/welcome.conf [root@synergia ~]#
  • 15. Semanage [root@synergia ~]# semanage port -l |grep http_port_t http_port_t tcp 80, 443, 488, 8008, 8009, 8443 pegasus_http_port_t tcp 5988 [root@synergia ~]# [root@synergia ~]# semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"