Docker --privileged

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Wat Affekteer Dit

Wanneer jy 'n houer as bevoorreg uitvoer, word hierdie beskermings gedeaktiveer:

Monteer /dev

In 'n bevoorregte houer kan alle toestelle in /dev/ benader word. Jy kan dus ontsnap deur die skandering van die bediener se skyf te monteer.

# docker run --rm -it alpine sh
ls /dev
console  fd       mqueue   ptmx     random   stderr   stdout   urandom
core     full     null     pts      shm      stdin    tty      zero

Lees-slegs kernel-lêerstelsels

Kernel-lêerstelsels bied 'n meganisme vir 'n proses om die gedrag van die kernel te wysig. Tog wil ons voorkom dat houerprosesse enige veranderinge aan die kernel maak. Daarom monteer ons kernel-lêerstelsels as lees-slegs binne die houer, om te verseker dat die houerprosesse die kernel nie kan wysig nie.

# docker run --rm -it alpine sh
mount | grep '(ro'
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime)
cpuset on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,cpuset)
cpu on /sys/fs/cgroup/cpu type cgroup (ro,nosuid,nodev,noexec,relatime,cpu)
cpuacct on /sys/fs/cgroup/cpuacct type cgroup (ro,nosuid,nodev,noexec,relatime,cpuacct)

Maskering oor kernel-lêersisteme

Die /proc-lêersisteem is selektief skryfbaar, maar vir sekuriteit is sekere dele beskerm teen skryf- en leestoegang deur dit met tmpfs te oorlê, wat verseker dat houerprosesse nie toegang tot sensitiewe areas kan verkry nie.

tmpfs is 'n lêersisteem wat al die lêers in virtuele geheue stoor. tmpfs skep geen lêers op jou harde skyf nie. As jy 'n tmpfs-lêersisteem ontlaai, gaan al die lêers wat daarin woon, vir ewig verlore.

# docker run --rm -it alpine sh
mount  | grep /proc.*tmpfs
tmpfs on /proc/acpi type tmpfs (ro,relatime)
tmpfs on /proc/kcore type tmpfs (rw,nosuid,size=65536k,mode=755)
tmpfs on /proc/keys type tmpfs (rw,nosuid,size=65536k,mode=755)

Linux-vermoëns

Houer-enjins begin die houers met 'n beperkte aantal vermoëns om te beheer wat binne die houer gebeur. Bevoorregte eenhede het alle die vermoëns toeganklik. Om meer te leer oor vermoëns, lees:

pageLinux Capabilities
# docker run --rm -it alpine sh
apk add -U libcap; 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
[...]

Jy kan die vermoëns wat beskikbaar is vir 'n houer manipuleer sonder om in --privileged-modus te loop deur die --cap-add en --cap-drop vlae te gebruik.

Seccomp

Seccomp is nuttig om die syscalls wat 'n houer kan aanroep, te beperk. 'n Standaard seccomp-profiel is standaard geaktiveer wanneer docker-houers uitgevoer word, maar in bevoorregte modus is dit gedeaktiveer. Lees meer oor Seccomp hier:

pageSeccomp
# docker run --rm -it alpine sh
grep Seccomp /proc/1/status
Seccomp:	2
Seccomp_filters:	1
# You can manually disable seccomp in docker with
--security-opt seccomp=unconfined

Verder moet daarop gelet word dat wanneer Docker (of ander CRIs) in 'n Kubernetes-groep gebruik word, die seccomp-filter standaard gedeaktiveer is.

AppArmor

AppArmor is 'n kernel-verbetering om houers tot 'n beperkte stel hulpbronne met per-program profiele te beperk. Wanneer jy met die --privileged vlag hardloop, word hierdie beskerming gedeaktiveer.

pageAppArmor
# You can manually disable seccomp in docker with
--security-opt apparmor=unconfined

SELinux

Die uitvoer van 'n houer met die --privileged vlag deaktiveer SELinux-etikette, wat veroorsaak dat dit die etiket van die houermotor erf, tipies unconfined, wat volle toegang gee soortgelyk aan die houermotor. In rootless-modus gebruik dit container_runtime_t, terwyl in root-modus spc_t toegepas word.

pageSELinux
# You can manually disable selinux in docker with
--security-opt label:disable

Wat nie beïnvloed word nie

Namespaces

Namespaces word NIET beïnvloed deur die --privileged vlag. Alhoewel hulle nie die sekuriteitsbeperkings geaktiveer het nie, sien hulle nie al die prosesse op die stelsel of die gasheer-netwerk nie, byvoorbeeld. Gebruikers kan individuele namespaces deaktiveer deur die --pid=host, --net=host, --ipc=host, --uts=host kontainer-enjin vlae te gebruik.

# docker run --rm --privileged -it alpine sh
ps -ef
PID   USER     TIME  COMMAND
1 root      0:00 sh
18 root      0:00 ps -ef

Gebruikersnaamruimte

Standaard maak container-engines geen gebruik van gebruikersnaamruimtes, behalve voor rootless containers, die ze nodig hebben voor het koppelen van bestandssystemen en het gebruik van meerdere UID's. Gebruikersnaamruimtes, die essentieel zijn voor rootless containers, kunnen niet worden uitgeschakeld en verbeteren de beveiliging aanzienlijk door privileges te beperken.

Verwysings

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Last updated