Docker โprivileged
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
What Affects
privileged ์ปจํ ์ด๋๋ฅผ ์คํํ ๋ ๋นํ์ฑํ๋๋ ๋ณดํธ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
Mount /dev
privileged ์ปจํ
์ด๋์์๋ ๋ชจ๋ ์ฅ์น์ /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๋ก ๋ฎ์ด์์์ ธ ์ฐ๊ธฐ ๋ฐ ์ฝ๊ธฐ ์ ๊ทผ์ด ์ฐจ๋จ๋์ด ์ปจํ ์ด๋ ํ๋ก์ธ์ค๊ฐ ๋ฏผ๊ฐํ ์์ญ์ ์ ๊ทผํ ์ ์๋๋ก ํฉ๋๋ค.
[!NOTE] > 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)
๋ฆฌ๋ ์ค ๊ธฐ๋ฅ
์ปจํ ์ด๋ ์์ง์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ปจํ ์ด๋ ๋ด๋ถ์์ ๋ฐ์ํ๋ ๊ฒ์ ์ ์ดํ๊ธฐ ์ํด ์ ํ๋ ์์ ๊ธฐ๋ฅ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์์ํฉ๋๋ค. ํน๊ถ์ด ์๋ ๊ฒฝ์ฐ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๊ธฐ๋ฅ์ ๋ํด ์์๋ณด๋ ค๋ฉด ์ฝ์ด๋ณด์ธ์:
# 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
AppArmor
AppArmor๋ ์ปจํ
์ด๋๋ฅผ ์ ํ๋ ๋ฆฌ์์ค ์งํฉ์ ํ๋ก๊ทธ๋จ๋ณ ํ๋กํ์ผ๋ก ์ ํํ๋ ์ปค๋ ํฅ์ ๊ธฐ๋ฅ์
๋๋ค. --privileged ํ๋๊ทธ๋ก ์คํํ ๋ ์ด ๋ณดํธ ๊ธฐ๋ฅ์ ๋นํ์ฑํ๋ฉ๋๋ค.
# You can manually disable seccomp in docker with
--security-opt apparmor=unconfined
SELinux
--privileged ํ๋๊ทธ๋ก ์ปจํ
์ด๋๋ฅผ ์คํํ๋ฉด SELinux ๋ ์ด๋ธ์ด ๋นํ์ฑํ๋์ด ์ปจํ
์ด๋ ์์ง์ ๋ ์ด๋ธ, ์ผ๋ฐ์ ์ผ๋ก unconfined๋ฅผ ์์๋ฐ์ ์ปจํ
์ด๋ ์์ง๊ณผ ์ ์ฌํ ์ ์ฒด ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค. ๋ฃจํธ๋ฆฌ์ค ๋ชจ๋์์๋ container_runtime_t๋ฅผ ์ฌ์ฉํ๊ณ , ๋ฃจํธ ๋ชจ๋์์๋ spc_t๊ฐ ์ ์ฉ๋ฉ๋๋ค.
# You can manually disable selinux in docker with
--security-opt label:disable
์ํฅ์ ๋ฏธ์น์ง ์๋ ๊ฒ
๋ค์์คํ์ด์ค
๋ค์์คํ์ด์ค๋ --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 ์ฌ์ฉ์ ์ํด ์ฌ์ฉ์ ๋ค์์คํ์ด์ค๊ฐ ํ์ํฉ๋๋ค. ๋ฃจํธ ์๋ ์ปจํ ์ด๋์ ํ์์ ์ธ ์ฌ์ฉ์ ๋ค์์คํ์ด์ค๋ ๋นํ์ฑํํ ์ ์์ผ๋ฉฐ, ๊ถํ์ ์ ํํ์ฌ ๋ณด์์ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
์ฐธ์กฐ
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


