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

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

Корінь у контейнері є коренем у ядрі хоста.

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

За замовчуванням контейнер не є кордоном безпеки. Процес, що виконується як root всередині одного, є root на ядрі хоста, і привілейований прапор плюс монтування прив’язки до хосту видаляють те небагато, що залишилося між ними. Ви виконаєте вихід: прочитаєте наданий набір можливостей, перерахуєте файлову систему хоста через монтування, вкрадете її кореневий ключ SSH і додасте свій власний для збереження. Виправлення стосується двох файлів. Ви додасте некорінного USER у Dockerfile, а потім скинете позначку привілейованого доступу та всі можливості в Compose.

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

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

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

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

  2. Хто я і що я можу

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

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

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

  4. Забрати ключ хоста

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

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

    Момент на розбір механізму, перш ніж підбити підсумки завданої шкоди.

  6. Залишити спосіб повернутися

    Прочитати ключ — це крадіжка. Записати на хост — це закріплення (persistence). Оскільки том підключено не лише для читання, Боб може дописати свій власний публічний ключ до 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