Docker --privileged
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Коли ви запускаєте контейнер з привілеями, ви вимикаєте такі захисти:
У контейнері з привілеями всі пристрої можуть бути доступні в /dev/
. Тому ви можете втекти, монтувавши диск хоста.
Файлові системи ядра забезпечують механізм для процесу, щоб змінити поведінку ядра. Однак, коли мова йде про процеси контейнера, ми хочемо запобігти їх внесенню будь-яких змін до ядра. Тому ми монтуємо файлові системи ядра як тільки для читання всередині контейнера, що забезпечує неможливість модифікації ядра процесами контейнера.
Файлова система /proc вибірково записувана, але для безпеки певні частини захищені від запису та читання, накладаючи на них tmpfs, що забезпечує недоступність чутливих областей для процесів контейнера.
tmpfs — це файлова система, яка зберігає всі файли у віртуальній пам'яті. tmpfs не створює жодних файлів на вашому жорсткому диску. Тому, якщо ви демонтуєте файлову систему tmpfs, всі файли, що в ній знаходяться, втрачаються назавжди.
Контейнерні движки запускають контейнери з обмеженою кількістю можливостей, щоб контролювати, що відбувається всередині контейнера за замовчуванням. Привілейовані контейнери мають всі можливості доступні. Щоб дізнатися про можливості, прочитайте:
Linux CapabilitiesВи можете маніпулювати можливостями, доступними контейнеру, не запускаючи в режимі --privileged
, використовуючи прапори --cap-add
та --cap-drop
.
Seccomp корисний для обмеження syscalls, які контейнер може викликати. За замовчуванням профіль seccomp увімкнено при запуску контейнерів docker, але в режимі привілейованого доступу він вимкнений. Дізнайтеся більше про Seccomp тут:
SeccompТакож зверніть увагу, що коли Docker (або інші CRI) використовуються в кластері Kubernetes, seccomp фільтр за замовчуванням вимкнений.
AppArmor - це покращення ядра для обмеження контейнерів до обмеженого набору ресурсів з профілями для кожної програми. Коли ви запускаєте з прапором --privileged
, ця захист вимкнена.
Запуск контейнера з прапором --privileged
вимикає мітки SELinux, що призводить до успадкування мітки двигуна контейнера, зазвичай unconfined
, що надає повний доступ, подібний до двигуна контейнера. У безкореневому режимі використовується container_runtime_t
, тоді як у кореневому режимі застосовується spc_t
.
Простори імен НЕ підлягають впливу прапора --privileged
. Навіть якщо у них не ввімкнені обмеження безпеки, вони не бачать усіх процесів на системі або хост-мережі, наприклад. Користувачі можуть вимкнути окремі простори імен, використовуючи прапори контейнерних движків --pid=host
, --net=host
, --ipc=host
, --uts=host
.
За замовчуванням, контейнерні движки не використовують простори користувачів, за винятком контейнерів без кореня, які потребують їх для монтування файлової системи та використання кількох UID. Простори користувачів, які є невід'ємною частиною контейнерів без кореня, не можуть бути вимкнені і значно підвищують безпеку, обмежуючи привілеї.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)