Привілейовані контейнери
Root у контейнері — це root для ядра хоста.
Що таке Привілейовані контейнери?
Контейнер типово не є межею безпеки. Процес, що працює всередині нього від імені root, — це root для ядра хоста, а прапорець privileged разом із монтуванням хоста (bind mount) прибирає те небагато, що ще їх розділяє. Ви здійсните втечу: прочитаєте наданий набір capabilities, виведете список файлової системи хоста через монтування, викрадете приватний ключ SSH користувача root і додасте власний для закріплення. Виправлення охоплює два файли. Спершу ви додасте в Dockerfile користувача без прав root (USER), а потім у Compose приберете прапорець privileged і всі capabilities.
Що ви дізнаєтесь у Привілейовані контейнери
- Поясніть, чому ізоляція контейнера — це набір функцій ядра, а не межа, тож root усередині — це root для ядра хоста
- Визначте, що надає --privileged, прочитавши набір capabilities самого контейнера з файлу стану його процесу
- Простежте втечу на хост через bind mount: від виведення списку файлової системи хоста до викрадення ключа SSH користувача root і підкидання власного
- Додайте до Dockerfile директиву USER з користувачем без прав root, щоб прогалина в межі давала запущеному процесу набагато менше.
- Приберіть у Compose прапорець privileged і монтування хоста, застосуйте cap_drop ALL і rootfs лише для читання, а потім повторіть втечу на staging
Привілейовані контейнери — Кроки навчання
-
Оболонка в контейнері
Боб націлився на компанію Vosswark — логістичну платформу, чий медіасервіс змінює розмір і перекодовує файли, завантажені клієнтами. Через невстановлене оновлення безпеки в бібліотеці обробки графіки цього сервісу він отримав віддалене виконання коду й тепер має оболонку, що працює всередині нього. Як він потрапив усередину — не найцікавіше. Цікаво інше: що контейнер дозволяє йому робити далі.
-
Хто я і що можу робити
Два запитання вирішують, чим є цей плацдарм — глухим кутом чи входом: від імені якого користувача працює процес і що ядро дозволяє цьому користувачеві. На обидва відповідає один файл.
-
Що насправді дав режим privileged
Режим privileged означає, що звичайні обмеження не застосовуються. Боб перевіряє найцінніше, що з цього може випливати: чи було контейнерові напряму передано щось із хоста.
-
Заберіть ключ хоста
Контейнер був лише засобом досягнення мети. Те, чого хоче Боб, лежить на машині під ним — в єдиному каталозі, що перетворює один зламаний хост на плацдарм для всіх серверів компанії.
-
Що зробило втечу можливою
-
Залиште собі шлях назад
Читання ключа — це крадіжка. Запис на хост — це закріплення. Оскільки каталог змонтовано не лише для читання, Боб може дописати власний публічний ключ у authorized_keys хоста, і відтоді викрадений ключ йому взагалі не потрібен. Дописування нічого не виводить — так само, як у справжній оболонці. Ця тиша і є суттю: ніщо в цьому не схоже на атаку.
-
Підрахуйте, до чого дістався один контейнер
Тепер у Боба є власний ключ хоста, а поруч із ним він підкинув свій. Медіаворкер був малоцінним сервісом, що обробляє файли, завантажені клієнтами. Але в такому налаштуванні він був ще й шляхом до кожної машини, яка довіряє цьому ключу, і дверима, які Боб може відчинити знову, коли захоче.
-
Хост повідомляє про читання файлу
У компанії Vosswark на хостах працює моніторинг цілісності файлів. Йому байдуже, який контейнер щось зробив; він повідомляє, що було прочитано власний ключовий матеріал хоста.
-
Подивіться, як його запустили
Dockerfile описує, що міститься в образі. Про прапорці, з якими запустили контейнер, він нічого не каже, а саме в цих прапорцях і криється причина інциденту. Відповісти на це може лише хост.
-
Відкрийте Dockerfile
Виправити треба дві половини, і вони містяться в різних файлах. Образ визначає, від імені кого працює процес; розгортання визначає, до чого цьому процесу дозволено торкатися. Почніть з образу.
Охоплення стандартів безпеки
CWE
- CWE-250 Execution with Unnecessary Privileges
- CWE-269 Improper Privilege Management
MITRE ATT&CK
- T1611 Escape to Host
CIS Controls
- CIS 4 Secure Configuration of Enterprise Assets and Software
- CIS 6 Access Control Management
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security
- PR.AA Identity Management, Authentication, and Access Control