Da li radite u cybersecurity kompaniji? Želite li da vidite svoju kompaniju reklamiranu na HackTricks-u? Ili želite da imate pristup najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu? Proverite SUBSCRIPTION PLANS!
Kada pokrenete kontejner sa privilegijama, onemogućavate sledeće zaštite:
Montiranje /dev
U privilegovanom kontejneru, svi uređaji mogu biti pristupljeni u /dev/. Stoga možete izbeći tako što ćete montirati disk domaćina.
# docker run --rm -it alpine shls/devconsolefdmqueueptmxrandomstderrstdouturandomcorefullnullptsshmstdinttyzero
# docker run --rm --privileged -it alpine shls/devcachefilesmapperportshmtty24tty44tty7consolemempsauxstderrtty25tty45tty8coremqueueptmxstdintty26tty46tty9cpunbd0ptsstdouttty27tty47ttyS0[...]
Kernel fajl sistemi samo za čitanje
Kernel fajl sistemi pružaju mehanizam za proces da izmeni ponašanje kernela. Međutim, kada je reč o procesima kontejnera, želimo da sprečimo da izvrše bilo kakve promene na kernelu. Zato montiramo kernel fajl sisteme kao samo za čitanje unutar kontejnera, čime osiguravamo da procesi kontejnera ne mogu da menjaju kernel.
# docker run --rm --privileged -it alpine shmount|grep'(ro'
Maskiranje preko kernel fajl sistema
Fajl sistem /proc je selektivno upisiv, ali iz bezbednosnih razloga, određeni delovi su zaštićeni od upisa i čitanja preko preklapanja sa tmpfs, čime se osigurava da procesi kontejnera ne mogu pristupiti osetljivim područjima.
tmpfs je fajl sistem koji čuva sve fajlove u virtuelnoj memoriji. tmpfs ne kreira fajlove na tvrdom disku. Dakle, ako demontirate tmpfs fajl sistem, svi fajlovi koji se u njemu nalaze su zauvek izgubljeni.
# docker run --rm -it alpine shmount|grep/proc.*tmpfstmpfson/proc/acpitypetmpfs (ro,relatime)tmpfson/proc/kcoretypetmpfs (rw,nosuid,size=65536k,mode=755)tmpfson/proc/keystypetmpfs (rw,nosuid,size=65536k,mode=755)
# docker run --rm --privileged -it alpine shmount|grep/proc.*tmpfs
Linux sposobnosti
Pokretači kontejnera pokreću kontejnere sa ograničenim brojem sposobnosti kako bi kontrolisali šta se dešava unutar kontejnera prema podrazumevanim postavkama. Privilegovani kontejneri imaju svesposobnosti dostupne. Da biste saznali više o sposobnostima, pročitajte:
# docker run --rm -it alpine shapkadd-Ulibcap; capsh--print[...]Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=eip
Bounding set =cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
[...]
# docker run --rm --privileged -it alpine shapkadd-Ulibcap; capsh--print[...]Current:=eipcap_perfmon,cap_bpf,cap_checkpoint_restore-eipBounding set =cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read
[...]
Možete manipulisati sposobnostima dostupnim kontejneru bez pokretanja u --privileged režimu koristeći opcije --cap-add i --cap-drop.
Seccomp
Seccomp je koristan za ograničavanjesistemskih poziva koje kontejner može izvršiti. Podrazumevani seccomp profil je omogućen podrazumevano prilikom pokretanja Docker kontejnera, ali je onemogućen u privilegovanom režimu. Saznajte više o Seccomp-u ovde:
# docker run --rm -it alpine shgrepSeccomp/proc/1/statusSeccomp:2Seccomp_filters:1
# docker run --rm --privileged -it alpine shgrepSeccomp/proc/1/statusSeccomp:0Seccomp_filters:0
# You can manually disable seccomp in docker with--security-optseccomp=unconfined
Takođe, napomena da kada se Docker (ili drugi CRIs) koristi u Kubernetes klasteru, seccomp filter je podrazumevano onemogućen.
AppArmor
AppArmor je unapređenje jezgra za ograničavanje kontejnera na ograničen skup resursa sa profilima po programu. Kada pokrenete sa --privileged zastavicom, ova zaštita je onemogućena.
# You can manually disable seccomp in docker with--security-optapparmor=unconfined
SELinux
Pokretanje kontejnera sa --privileged zastavicom onemogućava SELinux oznake, što rezultira nasleđivanjem oznake kontejner motora, obično unconfined, što omogućava potpuni pristup sličan kontejner motoru. U režimu bez root prava, koristi se container_runtime_t, dok se u root režimu primenjuje spc_t.
# You can manually disable selinux in docker with--security-optlabel:disable
Šta ne utiče
Namespaces
Namespaces NISU pogođeni--privileged zastavicom. Iako nemaju omogućene sigurnosne restrikcije, ne vide sve procese na sistemu ili mrežu domaćina, na primer. Korisnici mogu onemogućiti pojedinačne namespaces koristeći --pid=host, --net=host, --ipc=host, --uts=host zastavice kontejnerskog motora.
# docker run --rm --privileged -it alpine shps-efPIDUSERTIMECOMMAND1root0:00sh18root0:00ps-ef
По подразумеваном, контјенерски мотори не користе простор имена корисника, осим за контјенере без корена, који их захтевају за монтирање фајл система и коришћење више УИД-ова. Простори имена корисника, који су неопходни за контјенере без корена, не могу бити онемогућени и значајно повећавају безбедност ограничавањем привилегија.
Да ли радите у компанији за кибер безбедност? Желите ли да видите вашу компанију рекламирану на HackTricks? Или желите да имате приступ најновијој верзији PEASS или преузмете HackTricks у PDF-у? Проверите ПЛАНОВЕ ПРЕТПЛАТЕ!