T1611: ESCAPE TO HOST
Зловмисники виходять за межі ізольованого контейнера (Docker, Kubernetes) або віртуальної машини (VMware, VirtualBox), щоб отримати доступ до основної операційної системи хоста. Це дозволяє хакеру керувати всіма іншими контейнерами на цьому сервері, викрадати дані з фізичних дисків або перехоплювати мережевий трафік усього вузла. Успішна «втеча» фактично нівелює весь сенс ізоляції додатків.
ТЕХНІЧНИЙ ОПИС
Зловмисники можуть вирватися з контейнера або віртуалізованого середовища, щоб отримати доступ до базового хоста. Це може надати зловмиснику доступ до інших контейнеризованих або віртуалізованих ресурсів з рівня хоста або до самого хоста. У принципі, такі ресурси мають забезпечувати чіткий поділ функціональності додатків і бути ізольованими від середовища хоста.
Існує кілька способів, за допомогою яких зловмисник може втекти з контейнера в середовище хоста. Приклади включають:
- Створення контейнера, налаштованого на монтування файлової системи хоста за допомогою параметра bind, що дозволяє зловмиснику розміщувати навантаження та запускати утиліти керування (наприклад, cron) на хості.
- Використання привілейованого контейнера для запуску команд або завантаження шкідливою модуля ядра на базовому хості.
- Зловживання системними викликами, такими як unshare та keyctl, для підвищення привілеїв і викрадення секретів.
Крім того, зловмисник може експлуатувати скомпрометований контейнер із змонтованим сокетом керування контейнерами, таким як docker.sock, щоб вирватися з контейнера через команду адміністрування контейнерів. Зловмисники також можуть втекти через експлуатацію вразливостей для підвищення привілеїв, наприклад, використовуючи вразливості в глобальних символічних посиланнях для доступу до кореневого каталогу хост-машини.
У середовищах ESXi зловмисник може експлуатувати вразливість, щоб утекти з віртуальної машини в гіпервізор.
Отримання доступу до хоста може надати зловмиснику можливість досягти подальших цілей, таких як встановлення стійкості, горизонтальне переміщення в середовищі, доступ до інших контейнерів або віртуальних машин, що працюють на хості, або налаштування каналу командного управління на хості.
Найпоширеніші методи:
- Зловживання Docker Socket (T1611): Якщо всередині контейнера змонтовано /var/run/docker.sock, зловмисник може просто надіслати команду Docker-демону на хості, щоб той створити новий контейнер із повним доступом до диска хоста.
- Привілейовані контейнери: Запуск з прапорцем —privileged дає контейнеру майже всі права, що є у хоста. Зловмисник може використовувати fdisk для перегляду дисків хоста, змонтувати їх і змінити файл /etc/shadow або додати свій SSH-ключ.
- Експлуатація ядра (Kernel Exploits): Оскільки контейнери ділять одне ядро з хостом, будь-яка вразливість ядра (наприклад, Dirty Pipe) дозволяє коду в контейнері отримати права root безпосередньо на хості.
- VM Escape: У віртуальних машинах (VMware/KVM) це відбувається через помилки в коді, який відповідає за віртуалізацію заліза (відеокарти, мережевої карти або USB-контролера).
Чому це критично?
- Масштаб: Один зламаний мікросервіс може призвести до компрометації всього фізичного сервера, на якому працюють десятки інших сервісів компанії.
- Доступ до мережі: Хост зазвичай має ширші мережеві права, ніж ізольований контейнер, що полегшує атаку на сусідні сервери.
Як захиститися?
- No Privileged Containers: Ніколи не запускайте контейнери з прапорцем —privileged, якщо це не є критично необхідним.
- User Namespaces: Використовуйте userns-remap, щоб користувач root у контейнері не мав прав root на хості.
- Обмеження сокетів: Не монтуйте docker.sock всередину контейнерів. Використовуйте API з автентифікацією, якщо потрібне керування.
- Оновлення ядра: Регулярно оновлюйте ОС хоста, щоб закривати дірки в безпеці системних викликів.
- AppArmor / SELinux: Використовуйте профілі безпеки, які обмежують доступ контейнера до чутливих частин файлової системи хоста (наприклад, /proc або /sys).