Привілейовані контейнери

Привілейовані контейнери

Root у контейнері — це root для ядра хоста.

Що таке Привілейовані контейнери?

Контейнер типово не є межею безпеки. Процес, що працює всередині нього від імені root, — це root для ядра хоста, а прапорець privileged разом із монтуванням хоста (bind mount) прибирає те небагато, що ще їх розділяє. Ви здійсните втечу: прочитаєте наданий набір capabilities, виведете список файлової системи хоста через монтування, викрадете приватний ключ SSH користувача root і додасте власний для закріплення. Виправлення охоплює два файли. Спершу ви додасте в Dockerfile користувача без прав root (USER), а потім у Compose приберете прапорець privileged і всі capabilities.

Що ви дізнаєтесь у Привілейовані контейнери

Привілейовані контейнери — Кроки навчання

  1. Оболонка в контейнері

    Боб націлився на компанію Vosswark — логістичну платформу, чий медіасервіс змінює розмір і перекодовує файли, завантажені клієнтами. Через невстановлене оновлення безпеки в бібліотеці обробки графіки цього сервісу він отримав віддалене виконання коду й тепер має оболонку, що працює всередині нього. Як він потрапив усередину — не найцікавіше. Цікаво інше: що контейнер дозволяє йому робити далі.

  2. Хто я і що можу робити

    Два запитання вирішують, чим є цей плацдарм — глухим кутом чи входом: від імені якого користувача працює процес і що ядро дозволяє цьому користувачеві. На обидва відповідає один файл.

  3. Що насправді дав режим privileged

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

  4. Заберіть ключ хоста

    Контейнер був лише засобом досягнення мети. Те, чого хоче Боб, лежить на машині під ним — в єдиному каталозі, що перетворює один зламаний хост на плацдарм для всіх серверів компанії.

  5. Що зробило втечу можливою

  6. Залиште собі шлях назад

    Читання ключа — це крадіжка. Запис на хост — це закріплення. Оскільки каталог змонтовано не лише для читання, Боб може дописати власний публічний ключ у authorized_keys хоста, і відтоді викрадений ключ йому взагалі не потрібен. Дописування нічого не виводить — так само, як у справжній оболонці. Ця тиша і є суттю: ніщо в цьому не схоже на атаку.

  7. Підрахуйте, до чого дістався один контейнер

    Тепер у Боба є власний ключ хоста, а поруч із ним він підкинув свій. Медіаворкер був малоцінним сервісом, що обробляє файли, завантажені клієнтами. Але в такому налаштуванні він був ще й шляхом до кожної машини, яка довіряє цьому ключу, і дверима, які Боб може відчинити знову, коли захоче.

  8. Хост повідомляє про читання файлу

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

  9. Подивіться, як його запустили

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

  10. Відкрийте 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