Відкритий Docker-демон

Відкритий Docker-демон

Демон Docker, який відповідає в мережі, є віддаленим адміністратором.

Що таке Відкритий Docker-демон?

API Docker є кореневим еквівалентом і не має власної автентифікації. Демон, прив’язаний до простого TCP-порту, дозволяє будь-кому, хто може до нього дістатися, запускати контейнери, монтувати файлову систему хоста та читати машину. Ніякої вразливості немає. Ви дослідите порт 2375 без автентифікації ззовні, перерахуєте робочі контейнери та прив’яжете корінь хоста, щоб прочитати його файл середовища. Потім ви видалите прив’язку tcp://0.0.0.0:2375, вимагатимете сертифікати клієнта TLS і побачите, що той самий тест відхилено. Вправа також охоплює монтування /var/run/docker.sock у контейнер.

Що ви дізнаєтесь у Відкритий Docker-демон

Відкритий Docker-демон — Кроки навчання

  1. Читання публічної сторінки статусу

    Bob нікуди не проникав. Він сидить за власним ноутбуком і читає публічну сторінку операційного стану Palliston. Вона покликана запевнити клієнтів, що платформа працює справно, і при цьому називає продакшн-ноди, їхні публічні IP-адреси та Docker-рушій, який працює на кожній з них. Погляньте, що саме вона розкриває, перш ніж Bob скористається цим.

  2. Рядок, який каже забагато

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

  3. Постукати в демон

    Docker-демону можна вказати слухати мережевий порт замість лише локального сокета. Коли це зроблено, а TLS вимкнено, він відповідає будь-кому. Bob спрямовує власний Docker CLI на порт 2375 цієї ноди і ставить найнешкідливіше з можливих питань: яка твоя версія. Якщо демон відповідає, гру вже програно.

  4. Прочитати продакшн-флот

    Docker API — це далеко не вузька річ. Він перелічує, запускає, зупиняє та збирає контейнери, і робить усе це від імені root. Перший крок Bob із ним — просто подивитися: що насправді працює на цьому хості.

  5. Змонтувати хост, забрати секрети

    Bob не потрібно зламувати контейнери, що вже працюють. Демон запустить для нього абсолютно новий, і змонтує все, що той попросить. Він просить змонтувати всю кореневу файлову систему хоста у /host, а потім читає продакшн-файл оточення прямо через це монтування. Контейнер належить йому. Хост — під ним. Стіни між ними не було ніколи.

  6. Що зробило це можливим

    Один момент на механізм, перш ніж почнеться реагування.

  7. Демон фіксує в логах незнайомця

    Palliston надсилає логи Docker-демона в центральний колектор. Щоб помітити те, що там з'явилося, не потрібна навіть система виявлення вторгнень: виклики API до демона на ops-node-01 з IP-адреси, яка нікому в Palliston не належить.

  8. Підтвердити, що двері відкриті

    Перш ніж щось змінювати, Alice відтворює те, що описують логи. Якщо неавтентифікований запит версії з її власної машини отримує відповідь, демон відкритий саме так, як і побоювалася Priya.

  9. Відкрити конфігурацію демона

    Поведінка демона задається в одному файлі — /etc/docker/daemon.json. Те, що змусило його слухати мережу без TLS, — це рядок саме тут.

  10. Знайти, що відкрило порт

    Два налаштування, поруч одне з одним, і є всією причиною відкритості. Одне виставляє API в мережу; інше каже йому не перевіряти, хто дзвонить.

Охоплення стандартів безпеки

CWE

  • CWE-306 Missing Authentication for Critical Function
  • CWE-284 Improper Access Control

MITRE ATT&CK

  • T1610 Deploy Container
  • T1133 External Remote Services

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