ТЕХНІЧНИЙ ОПИС

Зловмисники можуть вирватися з контейнера або віртуалізованого середовища, щоб отримати доступ до базового хоста. Це може надати зловмиснику доступ до інших контейнеризованих або віртуалізованих ресурсів з рівня хоста або до самого хоста. У принципі, такі ресурси мають забезпечувати чіткий поділ функціональності додатків і бути ізольованими від середовища хоста.

Існує кілька способів, за допомогою яких зловмисник може втекти з контейнера в середовище хоста. Приклади включають:

  • Створення контейнера, налаштованого на монтування файлової системи хоста за допомогою параметра 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).