Docker --privileged

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Як це впливає

Коли ви запускаєте контейнер з привілейованими правами, ви вимикаєте наступні заходи захисту:

Монтування /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

Ви можете маніпулювати можливостями, доступними для контейнера, не запускаючи його в режимі --privileged, використовуючи прапорці --cap-add та --cap-drop.

Seccomp

Seccomp корисний для обмеження системних викликів (syscalls), які може викликати контейнер. За замовчуванням профіль seccomp увімкнено при запуску контейнерів Docker, але в привілейованому режимі він вимкнений. Дізнайтеся більше про Seccomp тут:

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

Також слід зауважити, що коли Docker (або інші CRIs) використовуються в кластері Kubernetes, фільтр seccomp вимкнений за замовчуванням

AppArmor

AppArmor - це покращення ядра для обмеження контейнерів до обмеженого набору ресурсів з профілями для кожної програми. Коли ви запускаєте з прапорцем --privileged, цей захист вимкнений.

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

SELinux

Запуск контейнера з флагом --privileged вимикає мітки SELinux, що призводить до успадкування мітки контейнерним двигуном, зазвичай unconfined, надаючи повний доступ, схожий на контейнерний двигун. У режимі без кореня використовується container_runtime_t, тоді як у режимі кореня застосовується spc_t.

pageSELinux
# 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. Простори користувачів, які є невід'ємними для безкореневих контейнерів, не можуть бути вимкнені і значно підвищують безпеку, обмежуючи привілеї.

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Last updated