Bezpieczeństwo systemu GNU/Linux - podstawy Robert Jaroszuk <zim@iq.pl> Szkolenie TLUG Uniwersytet Gdański, 26 maja 2007
Spis Treści 1 Dlaczego? Podstawowe zasady bezpieczeństwa Usługi systemu Jądro systemu Ograniczanie dostępu do systemu System plików Limity zasobów
Spis Treści 2 Dlaczego? Podstawowe zasady bezpieczeństwa Usługi systemu Jądro systemu Ograniczanie dostępu do systemu System plików Limity zasobów
Dlaczego? 3 Czy ten temat w ogóle mnie dotyczy? Raport z iptables: 17 18 maja 2007 r. Probes port number 14 22 8 23 51 25 17 80 22 110 26 113 832 135 219 139 49 443 615 445 1 3128 4 3306 29 5900
Dlaczego? 4 Czy bezpieczeństwo jest aż tak istotne? Chcemy utrzymać kontrolę nad naszym systemem Nie chcemy być oskarżani o przestępstwo popełnione przez kogoś innego Nie chcemy być wykorzystywani przez innych Nie chcemy stracić dostępu do Internetu Nie lubimy co chwilę reinstalować systemu Nie lubimy tracić danych z dysku Zagrożenia: Każdy komputer podłączony do sieci jest celem IP + pasmo Robaki Lion / Ramen / Slapper Script Kiddies Spamerzy
Spis Treści 5 Dlaczego? Podstawowe zasady bezpieczeństwa Usługi systemu Jądro systemu Ograniczanie dostępu do systemu System plików Limity zasobów
Podstawy bezpieczeństwa 6 Bezpieczeństwo fizyczne Kopie zapasowe Podział dysku na partycje Ściany ogniowe / wrappery Kernel Popularne usługi Checklisty / skrypty Emeryci i renciści
Spis Treści 7 Dlaczego? Podstawowe zasady bezpieczeństwa Usługi systemu Jądro systemu Ograniczanie dostępu do systemu System plików Limity zasobów
Usługi systemu 8 # netstat -tupan Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:58281 0.0.0.0:* LISTEN 4216/rpc.statd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 3628/portmap tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 4573/X tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN 4019/cupsd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 4187/master udp 0 0 0.0.0.0:32768 0.0.0.0:* 4216/rpc.statd udp 0 0 0.0.0.0:514 0.0.0.0:* 4049/syslogd udp 0 0 0.0.0.0:68 0.0.0.0:* 4480/dhclient udp 0 0 0.0.0.0:1000 0.0.0.0:* 4216/rpc.statd udp 0 0 0.0.0.0:111 0.0.0.0:* 3628/portmap udp 0 0 0.0.0.0:631 0.0.0.0:* 4019/cupsd #
Usługi systemu 9 # sockstat sockstat 0.2 by P User Process Local Address/Port Remote Address/Port State T root portmap[3628] 0.0.0.0:111 0.0.0.0:0 LISTEN T root cupsd[4019] 0.0.0.0:631 0.0.0.0:0 LISTEN T root master[4187] 127.0.0.1:25 0.0.0.0:0 LISTEN T statd rpc.statd[4216] 0.0.0.0:58281 0.0.0.0:0 LISTEN T root Xorg[4573] 0.0.0.0:6000 0.0.0.0:0 LISTEN T root Xorg[4611] 0.0.0.0:6000 0.0.0.0:0 LISTEN U root portmap[3628] 0.0.0.0:111 0.0.0.0:0 CLOSED U root cupsd[4019] 0.0.0.0:631 0.0.0.0:0 CLOSED U root syslogd[4049] 0.0.0.0:514 0.0.0.0:0 CLOSED U statd rpc.statd[4216] 0.0.0.0:32768 0.0.0.0:0 CLOSED U root rpc.statd[4216] 0.0.0.0:1000 0.0.0.0:0 CLOSED U root dhclient[4480] 0.0.0.0:68 0.0.0.0:0 CLOSED Status: 12 connections (TCP: 6, UDP: 6, RAW: 0), 81 processes... # http://zim.iq.pl/code/sockstat.c
Usługi systemu 10 Wyświetlanie listy pakietów: # dpkg -l lub # rpm -qa Informacje na temat pakietu: # dpkg -s <nazwa pakietu> lub # rpm -qi <nazwa pakietu> Usuwanie pakietu: # dpkg -P <nazwa pakietu> lub # rpm -e <nazwa pakietu>
Usługi systemu 11 Uruchamianie / zatrzymywanie usług w systemie: /etc/rc2.d lrwxrwxrwx 1 root root 17 Feb 9 20:32 S18portmap ->../init.d/portmap lrwxrwxrwx 1 root root 15 Jan 24 09:01 S20acpid ->../init.d/acpid lrwxrwxrwx 1 root root 14 Dec 6 21:06 S20dbus ->../init.d/dbus /etc/rc6.d lrwxrwxrwx 1 root root 17 Feb 9 14:31 K20postfix ->../init.d/postfix lrwxrwxrwx 1 root root 15 Dec 6 21:06 K20rsync ->../init.d/rsync lrwxrwxrwx 1 root root 14 Dec 6 21:06 K11cron ->../init.d/cron Jak? - Ręcznie (edycja linków w /etc/rcx.d) - update-rc.d usluga start 20 2 3 4 5. stop 20 1 6. - chkconfig - http://www.fastcoder.net/software/chkconfig/
Usługi systemu 12 Inetd: /etc/inetd.conf pop3 stream tcp nowait root.mail /usr/sbin/tcpd /usr/sbin/solid pop3d Xinetd: /etc/xinetd.d/telnetd { disable = yes socket_type = stream wait = no nice = 10 user = root server = /usr/etc/in.telnetd rlimit_as = 8M rlimit_cpu = 20 }
Usługi systemu 13 Inetd: /etc/inetd.conf pop3 stream tcp nowait.40 root.mail /usr/sbin/tcpd /usr/sbin/solid pop3d Xinetd: /etc/xinetd.d/telnetd { } disable = yes socket_type = stream wait = no nice = 10 user = root server = /usr/etc/in.telnetd rlimit_as = 8M rlimit_cpu = 20 per_source = 3 cps = 50 10 only_from = 10.10.1.1/24
Spis Treści 14 Dlaczego? Podstawowe zasady bezpieczeństwa Usługi systemu Jądro systemu Ograniczanie dostępu do systemu System plików Limity zasobów
Jądro systemu 15 Ochrona systemu z poziomu jądra 2.6.X VA. Zaawansowane metody ochrony systemu: - Openwall - PaX / grsecurity - LIDS - SELinux - RSBAC
Jądro systemu 16 Openwall: Stworzony przez Solar Designera (Alexander Peslyak) w 1998 roku (jądro 2.0). - uniemożliwia wykonanie kodu na stosie procesu (ochrona przed exploitami). - randomizuje adresy funkcji bibliotecznych (uniemożliwia return-into-libc). - ochrona hard links, named pipes, ochrona /proc, ochrona deskryptorów 0 1 2. PaX i grsecurity: - PaX rozwijany od roku 2000 do 2005 przez zespół PaX. Od 2005 przez Bradleya Spenglera (Spender), autora grsec. - ochrona stosu oraz randomizacja pamięci. - zaawansowana ochrona chroot(); - ochrona /dev/mem, /dev/kmem, /dev/port - /proc/pid/ipaddr, - bogate rejestrowanie zdarzeń w systemie - UDEREF / MEMORY_SANTINIZE - RBAC
Jądro systemu 17 LIDS (Linux Intrusion Detection System): - umożliwia nadawanie praw dostępu do zasobów systemowych (pliki, katalogi, funkcje sieciowe itp.) - SELinux (Security Enhanced Linux): - stworzony w roku 2000 przez NSA. Pierwotnie dodatek do jądra, ale od wersji 2.5 został z nim zintegrowany. - oparty o techniki FLASK każdy podmiot (proces) obiekt (plik, urządzenie) w systemie ma przypisant kontekst (zbiór atrybutów bezpieczeństwa) i nie może wykraczać poza ten zbiór. - RSBAC (Rule Set Base Access Control) - bardzo rozbudowany projekt, stabilna wersja istnieje od 2000r. - informacje o użytkownikach (passwd / shadow) trzymane są w jądrze a nie w plikach (wymaga to wymiany modułów PAM i części bibliotek systemowych). - nakłada ograniczenia na funkcję setuid() - wymaga autoryzacji - listy kontroli dostępu oraz role - ochrona pamięci procesów (PaX), ochrona chroot(), ochrona zasobów, ochrona /proc oraz wiele innych.
Spis Treści 18 Dlaczego? Podstawowe zasady bezpieczeństwa Usługi systemu Jądro systemu Ograniczanie dostępu do systemu System plików Limity zasobów
Ograniczanie dostępu do systemu 19 Firewall (iptables) iptables A INPUT P DROP iptables A INPUT s 192.168.1.2 j ACCEPT iptables A p tcp INPUT s 192.168.1.3 dport 25 j ACCEPT iptables I INPUT i lo j ACCEPT TCP Wrappers: /etc/hosts.allow: ALL: 192.168.1.2 portmap: 192.168.1.4 192.168.1.5 sshd: ALL : spawn echo "Login from %c to %s" mail s "Login Info for %s" root@loghost /etc/hosts.deny: ALL:ALL
Ograniczanie dostępu do systemu 20 sshd: PermitRootLogin no UsePrivilegedSeparation yes Protocol 2 IgnoreRhosts yes HostbasedAuthentication no RhostsRSAAuthentication no StrictModes yes
Spis Treści 21 Dlaczego? Podstawowe zasady bezpieczeństwa Usługi systemu Jądro systemu Ograniczanie dostępu do systemu System plików Limity zasobów
System plików 22 Umask: $ umask 000 $ touch plik1 $ ls l plik1 rw rw rw 1 zim zim 0 2007 05 24 15:36 plik1 $ umask 002 $ touch plik2 $ ls l plik2 rw rw r 1 zim zim 0 2007 05 24 15:36 plik2 $ umask 022 $ touch plik3 $ ls l plik3 rw r r 1 zim zim 0 2007 05 24 15:36 plik3 $
System plików 23 Pliki SUID/SGID: find / path /proc prune o type f perm +6000 ls Pliki dostępne do zapisu dla wszystkich użytkowników: find / path /proc prune o perm 2 type f ls $ ls lad /tmp/ drwxrwxrwt 31 root root 4768 2007 05 24 15:36 /tmp/ $ Pliki niczyje: find / path /proc prune o nouser o nogroup
Spis Treści 24 Dlaczego? Podstawowe zasady bezpieczeństwa Usługi systemu Jądro systemu Ograniczanie dostępu do systemu System plików Limity zasobów
Limity zasobów 25 $ ulimit a core file size (blocks, c) 0 data seg size (kbytes, d) unlimited max nice ( e) 0 file size (blocks, f) unlimited pending signals ( i) unlimited max locked memory (kbytes, l) unlimited max memory size (kbytes, m) unlimited open files ( n) 1024 pipe size (512 bytes, p) 8 POSIX message queues (bytes, q) unlimited max rt priority ( r) 0 stack size (kbytes, s) 8192 cpu time (seconds, t) unlimited max user processes ( u) unlimited virtual memory (kbytes, v) unlimited file locks ( x) unlimited $
Limity zasobów 26 $ ulimit c 1000 m 512000 n 512 u 128 $ ulimit a core file size (blocks, c) 1000 data seg size (kbytes, d) unlimited max nice ( e) 0 file size (blocks, f) unlimited pending signals ( i) unlimited max locked memory (kbytes, l) unlimited max memory size (kbytes, m) 512000 open files ( n) 512 pipe size (512 bytes, p) 8 POSIX message queues (bytes, q) unlimited max rt priority ( r) 0 stack size (kbytes, s) 8192 cpu time (seconds, t) unlimited max user processes ( u) 128 virtual memory (kbytes, v) unlimited file locks ( x) unlimited $
Koniec 27 Dziękuję za uwagę. Pytania? Prezentacja będzie dostępna pod adresem: http://www.linux.gda.pl/spotkania