Docker --privileged

Support HackTricks

What Affects

рдЬрдм рдЖрдк рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпреЗ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдп рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

Mount /dev

рдПрдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрдВрдЯреЗрдирд░ рдореЗрдВ, рд╕рднреА рдбрд┐рд╡рд╛рдЗрд╕ /dev/ рдореЗрдВ рдкрд╣реБрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЖрдк рдорд╛рдЙрдВрдЯрд┐рдВрдЧ рдХрд░рдХреЗ рд╣реЛрд╕реНрдЯ рдХреЗ рдбрд┐рд╕реНрдХ рд╕реЗ рднрд╛рдЧ рд╕рдХрддреЗ рд╣реИрдВред

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

рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдХрд░реНрдиреЗрд▓ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо

рдХрд░реНрдиреЗрд▓ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд░реНрдиреЗрд▓ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдХрдВрдЯреЗрдирд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХрд░реНрдиреЗрд▓ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХрдВрдЯреЗрдирд░ рдХреЗ рднреАрддрд░ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдЙрдВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдХрдВрдЯреЗрдирд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░реНрдиреЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреАрдВред

# 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)

рдХрд░реНрдиреЗрд▓ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдорд╛рд╕реНрдХрд┐рдВрдЧ

/proc рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реА рдЪрдпрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рд▓реЗрдХрд┐рди рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рднрд╛рдЧреЛрдВ рдХреЛ tmpfs рдХреЗ рд╕рд╛рде рдУрд╡рд░рд▓реЗ рдХрд░рдХреЗ рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреА рдкрд╣реБрдВрдЪ рд╕реЗ рдврдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдХрдВрдЯреЗрдирд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдБрдЪ рд╕рдХрддреАрдВред

tmpfs рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдЬреЛ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИред tmpfs рдЖрдкрдХреЗ рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рдкрд░ рдХреЛрдИ рдлрд╝рд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ рдмрдирд╛рддреАред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдПрдХ tmpfs рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдЕрдирдорд╛рдЙрдВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдореЗрдВ рдореМрдЬреВрдж рд╕рднреА рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЦреЛ рдЬрд╛рддреА рд╣реИрдВред

# 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 рдХреНрд╖рдорддрд╛рдПрдБ

рдХрдВрдЯреЗрдирд░ рдЗрдВрдЬрди рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЙрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рд╡рд╛рд▓реЗ рд╕рднреА рдХреНрд╖рдорддрд╛рдУрдВ рддрдХ рдкрд╣реБрдБрдЪ рд░рдЦрддреЗ рд╣реИрдВред рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдкрдврд╝реЗрдВ:

Linux 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
[...]

рдЖрдк --privileged рдореЛрдб рдореЗрдВ рдЪрд▓рд╛рдП рдмрд┐рдирд╛ рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ --cap-add рдФрд░ --cap-drop рдзреНрд╡рдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Seccomp

Seccomp рдПрдХ рдХрдВрдЯреЗрдирд░ рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ syscalls рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдЪрд▓рд╛рддреЗ рд╕рдордп рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдХрдВрдк рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдореЛрдб рдореЗрдВ рдпрд╣ рдЕрдХреНрд╖рдо рд╣реЛрддреА рд╣реИред Seccomp рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВ рдпрд╣рд╛рдБ:

Seccomp
# 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

Also, note that when Docker (or other CRIs) are used in a Kubernetes cluster, the seccomp filter is disabled by default

AppArmor

AppArmor рдПрдХ рдХрд░реНрдиреЗрд▓ рд╕рдВрд╡рд░реНрдзрди рд╣реИ рдЬреЛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд╕реАрдорд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдкреНрд░рддрд┐-рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЖрдк --privileged рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ рдЕрдХреНрд╖рдо рд╣реЛ рдЬрд╛рддреА рд╣реИред

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

SELinux

--privileged рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдиреЗ рд╕реЗ SELinux рд▓реЗрдмрд▓ рдЕрдХреНрд╖рдо рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдХрдВрдЯреЗрдирд░ рдЗрдВрдЬрди рдХрд╛ рд▓реЗрдмрд▓ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ unconfined, рдЬреЛ рдХрдВрдЯреЗрдирд░ рдЗрдВрдЬрди рдХреЗ рд╕рдорд╛рди рдкреВрд░реНрдг рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд░реВрдЯрд▓реЗрд╕ рдореЛрдб рдореЗрдВ, рдпрд╣ container_runtime_t рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд░реВрдЯ рдореЛрдб рдореЗрдВ, spc_t рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред

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

рдХреНрдпрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛

рдирд╛рдорд╕реНрдерд╛рди

Namespaces рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ --privileged рдзреНрд╡рдЬ рджреНрд╡рд╛рд░рд╛ред рднрд▓реЗ рд╣реА рдЙрдирдХреЗ рдкрд╛рд╕ рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рддрд┐рдмрдВрдз рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ, рд╡реЗ рд╕рд┐рд╕реНрдЯрдо рдпрд╛ рд╣реЛрд╕реНрдЯ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрддреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ --pid=host, --net=host, --ipc=host, --uts=host рдХрдВрдЯреЗрдирд░ рдЗрдВрдЬрди рдзреНрд╡рдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдирд╛рдорд╕реНрдерд╛рди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдорд╕реНрдерд╛рди

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХрдВрдЯреЗрдирд░ рдЗрдВрдЬрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдорд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд┐рд╡рд╛рдп рд░реВрдЯрд▓реЗрд╕ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ, рдЬрд┐рдиреНрд╣реЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдорд╛рдЙрдВрдЯрд┐рдВрдЧ рдФрд░ рдХрдИ UID рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдорд╕реНрдерд╛рди, рдЬреЛ рд░реВрдЯрд▓реЗрд╕ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИрдВ, рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдХреЗ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред

рд╕рдВрджрд░реНрдн

Support HackTricks

Last updated