Відкритий доступ до демона Docker
Демон Docker, доступний у мережі, — це віддалений root.
Що таке Відкритий доступ до демона Docker?
Docker API еквівалентний root і не має власної автентифікації. Демон, прив'язаний до звичайного TCP-порту, дає будь-кому, хто може до нього дістатися, змогу запускати контейнери, монтувати файлову систему хоста й читати машину. Жодна вразливість тут не задіяна. Ви надішлете на порт 2375 ззовні пробний запит без автентифікації, виведете список контейнерів продакшну й змонтуєте корінь хоста, щоб прочитати його файл середовища. Потім приберете прив'язку tcp://0.0.0.0:2375, увімкнете вимогу клієнтських сертифікатів TLS і побачите, що той самий пробний запит відхилено. У вправі також розглянуто монтування /var/run/docker.sock у контейнер.
Що ви дізнаєтесь у Відкритий доступ до демона Docker
- Розпізнавайте, що Docker API еквівалентний root і не має власної автентифікації
- Визначайте демон, прив'язаний до tcp://0.0.0.0:2375, як віддалений root без автентифікації, якому не потрібні ні вразливість, ні попередній плацдарм
- Простежуйте, як зловмисник монтує корінь хоста в контейнер і читає через нього продакшн-файл середовища
- Налаштуйте демон: приберіть звичайну прив'язку TCP і вимагайте клієнтські сертифікати для взаємної TLS-автентифікації, а потім переконайтеся, що той самий пробний запит відхилено
- Поясніть, чому монтування /var/run/docker.sock у контейнер дає цьому контейнеру той самий API, еквівалентний root
Відкритий доступ до демона Docker — Кроки навчання
-
Читання публічної сторінки статусу
Боб ще нікуди не проник. Він сидить за власним ноутбуком і читає публічну сторінку операцій компанії Palliston. Вона має показувати клієнтам, що з платформою все гаразд, але заодно називає продакшн-вузли, їхні публічні IP-адреси та версію Docker Engine на кожному з них. Погляньте, що саме вона розкриває, поки Боб не скористався цим.
-
Рядок, що видає забагато
Вистачить і одного рядка. Публічна IP-адреса продакшн-вузла і те, що на ньому працює Docker, — усе, що Бобу потрібно для найдешевшої з усіх можливих атак.
-
Постукайте до демона
Демону Docker можна вказати слухати мережевий порт, а не лише локальний сокет. Коли він так налаштований, а TLS вимкнено, він відповідає будь-кому. Боб спрямовує власний Docker CLI на порт 2375 цього вузла й ставить найневинніше з усіх запитань: яка версія працює. Якщо демон відповість, Боб уже фактично переміг.
-
Подивіться, що працює в продакшні
Docker API — не вузький інструмент. Він показує список контейнерів, запускає й зупиняє їх, збирає образи, і все це робить від імені root. Перший хід Боба — просто подивитися, що насправді працює на цьому хості.
-
Змонтуйте хост, заберіть секрети
Бобу не треба вдиратися в запущені контейнери. Демон сам запустить для нього новий і змонтує все, що Боб попросить. Боб просить змонтувати всю кореневу файлову систему хоста в /host, а потім читає продакшн-файл середовища просто через це монтування. Контейнер тепер його. Хост — під цим контейнером. Між ними ніколи не було стіни.
-
Що зробило це можливим
-
Журнал демона фіксує стороннього
Компанія Palliston надсилає журнали свого демона Docker до центрального збирача. Щоб помітити, що з'явилося, не потрібен жоден продукт для виявлення вторгнень: це виклики API до демона на ops-node-01 з IP-адреси, яка не належить нікому в компанії Palliston.
-
Підтвердьте, що двері відчинені
Перш ніж щось змінювати, Аліса відтворює те, що описують журнали. Якщо пробний запит версії без автентифікації з її власної машини отримує відповідь, демон відкритий саме так, як боїться Прія.
-
Відкрийте конфігурацію демона
Поведінка демона задається в одному файлі — /etc/docker/daemon.json. Те, що наказало йому слухати мережу без TLS, — це рядок саме тут.
-
Знайдіть, що відкрило порт
Два налаштування поруч — це весь відкритий доступ. Одне виставляє 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