[29 / 1] Linux biztonsági lehetőségeinek áttekintése Linux biztonsági lehetőségeinek áttekintése. <zambo.marcell@andrews.hu>
[29 / 2] Linux biztonsági lehetőségeinek áttekintése Mi az a Linux? A Linux egy operációs rendszer, a szabad szoftverek és a nyílt forráskódú programok egyik legismertebb példája. A Linux elnevezés szigorú értelemben véve a Linuxrendszermagot jelenti, amelyet Linus Torvalds kezdett el fejleszteni 1991-ben. A köznyelvben mégis gyakran a teljes Unix-szerű operációs rendszerre utalnak vele, amely a Linux-rendszermagra és az 1983-ban, Richard Matthew Stallman vezetésével indult GNU projekt keretében született alapprogramokra épül. A Linux pontosabb neve ebben az értelemben GNU/Linux. a la Wikipedia
[29 / 3] Linux biztonsági lehetőségeinek áttekintése Miért van szükség biztonsági eszközökre? Mert az alkalmazások hibásak Tervezési és implementációs hibák, interpreterek hibái Rosszindulatú kódok Mert a felhasználók sem tökéletesek Tudatlanságból, kíváncsiságból vagy szándékos eredő károkozás Biztonsági eszközök feladata: A 0-nál nagyobb valószínűséggel bekövetkező problémák hatásainak csökkentése.
[29 / 4] Linux biztonsági lehetőségeinek áttekintése Néhány egyszerű szabály Minden rendszerelem maximum annyi jogosultsággal, rendelkezzen, amennyi a működéshez minimálisan szükséges! Törekedni kell arra, hogy az általunk használt rendszer csak olyan képességekkel rendelkezzen, melyekre szükségünk is van. Minden rendelkezésre álló eszközt fel kell használni a támadó dolgának megnehezítésére, a védelmi megoldásoktól a naplózási megoldásokig.
[29 / 5] Linux biztonsági lehetőségeinek áttekintése A tartalomból Nagyon sok témát érint az előadás, célom az egyes témák részletes ismertetése helyett az áttekintő kép, a lehető legtöbb lehetőség megmutatása Hitelesítés - PAM: pam_cracklib, jelszó lejárati idők stb. Fájlrendszer ACL-ek, mount opciók Titkosított fájlrendszerek, file titkosítás. Exec logging, audit lehetőségek Apparmor, Grsecurity, SELinux (csak nagyon röviden :)) Hálózati biztonsági funkciók: Netfilter, IPSec Virtualizáció, mint szeparációs eszköz. PIE/ stack-protector / format-security / _FORTIFY_SOURCE / Seccomp
[29 / 6] Linux biztonsági lehetőségeinek áttekintése Jelmagyarázat: Mi ez a bigyó ott balra lent?! K P 1 Komplexitás? (1,2,3) Natív v. Patchelni kell? User v. Kernel? Mindkettő. K P 1
[29 / 7] Linux biztonsági lehetőségeinek áttekintése Jelszavak biztonsága Rendszeres jelszóváltás kikényszerítése: passwd -x <MAX_D> \ -w <WARN_D> \ -i <INACTIVE_D> \ felhasználónév ubuntu login: oracle Password: You are required to change your \ password immediately (root enforced) Changing password for oracle. (current) UNIX password: /etc/login.defs - man login.defs PASS_MAX_DAYS, PASS_MIN_DAYS és PASS_WARN_AGE értékei, csak létrehozáskor számítanak, későbbi módosításokkor már nem! Jelszó azonnali lejártra állítása: passwd -e felhasználónév További hasznos parancsok: chage, usermod U N 1
[29 / 8] Linux biztonsági lehetőségeinek áttekintése Kellően erős jelszavak kikényszerítése pam_(cracklib unix).so /etc/security/opasswd Palindroma (pl: anyabanya) Csak kis/nagy betű különbség Azonos karakter az új és a régi jelszóban? (difok, difignore) Túl rövid-egyszerű: minlen, karakterosztályok: [d u l o]credit Az új jelszó valamelyik megőrzött régebbivel azonos? egymást követő azonos karakter, usernév a jelszóban* Korábbi jelszavakat tárolja el a shadow-hoz hasonlóan, a pam_unix, pam_cracklib és pam_pwhistory használhatja /etc/pam.d/passwd példa: password required pam_cracklib.so \ difok=3 minlen=15 dcredit=2 \ ocredit=2 password required pam_unix.so sha512 \ remember=5 use_authtok \ obscure U N 2
[29 / 9] Linux biztonsági lehetőségeinek áttekintése További érdekes PAM modulok pam_faildelay Sikertelen azonosítás esetén várakoztat az adott kapcsolaton belül auth optional pam_faildelay.so \ Delay=10000000 # 10s pam_tally[2] Mint fent, csak tetszőleges kapcsolatban képes erre pam_time auth required pam_tally2.so \ deny=4 even_deny_root \ unlock_time=1200 Idő alapú hozzáférés szabályozást valósít meg U N 1
[29 / 10] Linux biztonsági lehetőségeinek áttekintése Posix ACL-ek Állományrendszer szintű Posix ACL-ek Állomány rendszer függetlenek, de fs specifikus támogatás szükséges! Az alap r/w/x jogokat terjeszti ki tetszőleges* u/g/o-okra. Parancsok: man acl, chacl, getfacl, setfacl Kizáró felhasználók és csoportok fogalma Nem összekeverendő az attr paranccsal # su - oracle -c '/bin/id -u' 1002 # setfacl -m u:oracle:- /bin/id # su - oracle -c '/bin/id -u' -su: /bin/id: Permission denied Mentés problémája, star U N 2
[29 / 11] Linux biztonsági lehetőségeinek áttekintése Ext2/3/4 attribútumok Fontosabb attribútumok Immunitable: az fájl nem módosítható, törölhető, átnevezhető és linkelhető, kivéve akinek CAP_LINUX_IMMUTABLE-je van. Append-only: csak a hozzáfűzéssel írható a fájl, törölni sem lehet, kivéve Parancsok: man chattr chattr [+-][ia] lsattr mentés? # echo 1 > file # chattr +a file # echo 2 > file bash: file: Operation not permitted # echo 2 >> file ; rm file rm: cannot remove `file': Operation not... # cat file 1 2 M N 1
[29 / 12] Linux biztonsági lehetőségeinek áttekintése Mount opciók Mount opciók nodev a device fájlok normál állományként működnek nosuid a setuid/setgid tulajdonságokat figyelmen kívül hagyja noexec a futtathatóságot figyelmen kívül hagyja ro csak olvashatóvá teszi az adott partíciót Mire jó ez? Ahonnan parancs futhat, oda ne lehessen írni Ahova lehet írni, onnan ne lehessen parancsot futtatni (scriptekkel mi a helyzet?) # mount -o remount,noexec /boot # grep boot /proc/mounts /dev/sda1 /boot ext2 noexec 0 0 K N 1+
[29 / 13] Linux biztonsági lehetőségeinek áttekintése Titkosított fájlrendszerek, fájl titkosítás I. Mik ezek és mire (nem) jók? (crypto)loop Dm-crypt + LUKS EncFS ecryptfs TrueCrypt Titkosítás helye: Blokk szintű Blokk szintű FUSE Kernel* Blokk szintű Titkosítás mértéke: Teljes Teljes Részleges Részleges Teljes Előnye: A legrégebbi De facto szabvány Nem kell 0 uid hozzá Gyorsabb mint az EncFS Multiplatform Csilli-villi HW gyorsítás: - - - + + Átméretezhető - + - [ Nem értelmezhető ] Multiplatform: Igen Igen (FreeOTFE) Igen(BSD, OsX) Nem Igen Licence: GPL Kereskedelmi M N 2
[29 / 14] Linux biztonsági lehetőségeinek áttekintése Titkosított fájlrendszerek, fájl titkosítás II. Mire kell vigyázni, figyelni?! Ne hagyjuk magára a rendszerünket még kikapcsolt állapotban sem! (Fizikai hozzáférés veszélyei: hardver mailware-ek, boot partíción történő machináció ) Lehetőleg teljes titkosítást válasszunk és mindent titkosítsunk, ha szükséges (A swap-et is és ne suspendeljünk, hibernáljunk!) Töltsük fel szeméttel az újonnan létrehozott titkosított területeket, ezzel megnehezítjük a támadó dolgát az elemzésben. M N 2
[29 / 15] Linux biztonsági lehetőségeinek áttekintése Exec logging, audit lehetőségek Helye: Kernel Grsec execlog Auditd Kernel + User Linux kernel audit alrendszere Hangolhatóság: Fix* Rugalmas* alkalmazás Naplózás: Átláthatóbb, de bizonyos hossz felett levág Előnye: Sima syslog elég neki Telepítése: Patchelni kell Teljes körű, de szabad szemmel csúf (ausearch) Előre definiált naplózási profilok: capp, lspp, stig apt yum install audit.rules auditctl kernel auditd.conf audit.log audispd auditd autrace audit M? 2+
[29 / 16] Linux biztonsági lehetőségeinek áttekintése Chroot Rendszerhívás ill. a rá épülő segéd alkalmazás (csak) fájlrendszer szintű szeparációt valósít meg a hívó process és leszármazottai számára Ha nem megfelelően hívjuk akkor még fs szinten sem biztonságos Karbantarthatóság? / /var /lib /etc /var/www/.../www/cgi chdir(/var/www) chroot(.).../www/html K N 2
[29 / 17] Linux biztonsági lehetőségeinek áttekintése Capability-k A monolitikus root jog szétvált capability -kre Ezek eldobhatóvá váltak, csak azt tartjuk meg ami valóban kell a programunk számára Nem 0 uid is birtokolhatja Parancsok: capsh, man 7 capabilities Fontosabb capability-k: cap_audit_(write control) cap_(mac net sys)_admin cap_kill cap_linux_immutable cap_set_* cap_sys_(chroot module) 3.6.9-es kernelben 37 van K N 2
[29 / 18] Linux biztonsági lehetőségeinek áttekintése Namespace-ek Chroot jellegű szeparáció az egyes namespace-ek között. Parancsok: unshare, newns, pam_namespaces Chroot-tal és capabilitikkel kombinálva gyakorlatilag független* userspace-ek futtathatók azonos rendszeren Mi ellen nem véd? Namespace-ek: UTS (hostname) IPC PID (PID 1, signals, ptrace) USER* Network (veth; ip netns) /sys/class/net/*/new_ns_pid Mount (+ bind mountok) /etc/mtab becsapós lehet... /proc/<pid>/ns K N 2+
[29 / 19] Linux biztonsági lehetőségeinek áttekintése C(ontrol)groups Erőforrás limitáció Processz priorizálás Accounting: az egyes erőforrások használatának mérésére Kontroll: az egyes cgroupok leállítása, és újraindítása Parancsok: man cgcreate Szabályozható erőforrások: CPU Memória Block device-ok elérési sebessége Freezer alrendszer* Hálózati sávszélessére nem nyújt megoldást, arra marad a tc K N 1+
[29 / 20] Linux biztonsági lehetőségeinek áttekintése A DAC-ot kiterjesztő MAC/RBAC-ok... Tulajdonság: SELinux (LSM) AppArmor (LSM) Grsecurity Patchelni kell? Nem Nem Igen Öntanuló? Nem (De: audit2allow) Igen (Yast wizard) Igen (gradm -L) Karbantarthatóság Körülményes Egyszerű Egyszerű Melyik disztribúció tartalmazza? CentOS / RedHat / Debian Suse / OpenSuse / Ubuntu Hardened Gentoo Ker. támogatás? Igen (Redhat) Igen (Novell) Nem (Közösségi) Szükséges tudásszint? Egyéb tulajdonságaik: Kifejezetten nagy Mindenre címkét akaszt: állományokra, processzekre, objektumokra. Címkékre figyelni kell másoláskor! NSA / CC EAL 4+ Attól függ, de jóval kisebb Elérési út alapú működés, nincs szükség állomány rendszer szintű címkézésre. Legkisebb Path alapú ACL-eket használ. PaX!. Egyéb kiegészítések. Microsoft is ezt használja a Skype szerverein. Nagyon jó és részletes sorozat a témában nice tollából: http://hup.hu/node/108217 + RSBAC M? 3
[29 / 21] Linux biztonsági lehetőségeinek áttekintése És a többiek... TOMOYO (LSM) - SElinux-szerű Apparmor SMACK (LSM) - Simplified Mandatory Access Control Kernel RSBAC (nem LSM, pachelni kell) - Leginkább a GRSEC és a SElinux keverékének nevezhető. CC EAL 4+ LIDS (LSM, patchelni kell)- Linux Intrusion Detection System Yama (LSM) - Gyakorlatilag a ptrace() használatát próbálja biztonságosabbá tenni. Summa: 8(N)+3(P) MAC közül választhatunk (3.6.9 kernelen) K? 3
[29 / 22] Linux biztonsági lehetőségeinek áttekintése PaX Host Intrusion Prevention System (HIPS) Memória ASLR kernel és userspace szintjén egyaránt Non-exec memory/read-only memory, MPROTECT. Kernel hardening patchek és gcc plugin*-ek segítségével a kernel forrás patchelése nélkül, fordítási időben javít számos sebezhetőséget. Bizonyos format string bugok és tervezési hibák ellen nem véd :) Fejlesztője: pipacs/pax Team, munkájáért a Pwnie életmű díját nyerte 2011-ben! K P 2+
[29 / 23] Linux biztonsági lehetőségeinek áttekintése Hálózati biztonsági funkciók: Netfilter, IPSec Netfilter Állapottartó csomagszűrő, extrákkal Bejövő,átmenő és kimenő forgalom szűrésére és limitációjára alkalmas IPSEC, SSL VPN-ek, SSH Titkosított és hitelesített hálózati kapcsolatokat tesz lehetővé. # iptables -I OUTPUT \ -m state --state ESTABLISHED,RELATED \ -m owner --uid-owner www-data -j ACCEPT # iptables -A OUTPUT \ -m owner --uid-owner www-data -j DROP Bár mindenre igaz, de az iptablesre különösen: előbb értsük meg és csak utána használjuk! M N 1+
[29 / 24] Linux biztonsági lehetőségeinek áttekintése Virtualizáció, mint szeparációs eszköz. Biztonsági szempontból a szeparáció a lényeges, nem az erőforrás kihasználás maximalizálása! Virtualizáció módjai: teljes vagy para, konténer alapú Korántsem teljes lista: KVM, L4Linux, lguest, Linux-Vserver, Lxc, OpenVZ, Qemu, UML, Virtualbox, VMware, Xen Alapvetően nem biztonsági megoldás, a virtualizációs réteg (és működéshez szükséges környezet) is tartalmazhat sebezhetőségeket Előnye: kényelmesen megvalósítható a szeparáció (kényelmesebben, mint a chroot segítségével) M? 2+
[29 / 25] Linux biztonsági lehetőségeinek áttekintése Fordítási idejű biztonsági megoldások: gcc -fpic/-fpic/-fpie/-fpie önmagában nem sokat ér, de ASLR csak az így fordított kódok esetén hatékony -fstack-protector[-all] őrt állít a függvényhívások mellé, amit azok visszatérésekor ellenőriz -Werror=format-security, gcc - format string hibákat hivatott kiszűrni _FORTIFY_SOURCE (kód megerősítés) s[n]printf/str[n]cpy, a %n jellegű format string jellegű hibák kiszűrése, visszatérési értékek ellenőrzésének megkövetelése, explicit umask megadása fájl létrehozásakor, hosszellenőrzések kikényszerítése... U N 2+
[29 / 26] Linux biztonsági lehetőségeinek áttekintése Seccomp Története (mod 1, 2 [kernel v3.5 óta]) Az adott program forráskódját kell módosítani vagy előtét programot (wrappert) kell futtatni. A program a prtcl(pr_set_seccomp,...) fgv hívással mondja meg milyen syscall-okat fog használni, és secure computing mode-ba vált. Ha olyan syscall-t hív amit nem engedélyezett, akkor a kernel kilövi a processzt. Programok: minijail0 M P 3
[29 / 27] Linux biztonsági lehetőségeinek áttekintése A nyílt forrás adta egyéb lehetőségek És mindez együtt: felesleges dolgoktól mentessé tett - Grsec/PaX-os kernelen, külön namespaceben, cgroups által behatárolva, normál userként futó, chrootolt, capability mentesen, megfelelő gcc kapcsolókkal fordított Grsec/Seccomp által behatárolt syscall-okat használó processek futnak auditd pedig írja a logokat Ami nem kell azt ne használd, telepítsd, fordítsd, konfiguráld bele a programodba! dpkg -p nemkellcsomag vi main.c./configure without-... make menuconfig vi /etc/akarmi.cfg Mindezt ingyen és szabadon!
[29 / 28] Linux biztonsági lehetőségeinek áttekintése Itt a vége? Nem, jöjjön egy kis gyakorlat...
[29 / 29] Linux biztonsági lehetőségeinek áttekintése Itt a vége? Igen! Köszönöm a figyelmet! <zambo.marcell@andrews.hu>