2375, 2376 Pentesting Docker
Основи Docker
Що це
Docker є передовою платформою в індустрії контейнеризації, яка очолює постійну інновацію. Він сприяє легкому створенню та розповсюдженню додатків, які охоплюють традиційні та майбутні, та гарантує їх безпечне розгортання у різних середовищах.
Основна архітектура Docker
containerd: Це основний рантайм для контейнерів, який відповідає за всебічне управління життєвим циклом контейнера. Це включає управління передачею та зберіганням образів, а також контроль за виконанням, моніторингом та мережевими операціями контейнерів. Детальніші відомості про containerd детально розглядаються.
container-shim відіграє важливу роль як посередник у керуванні безголовими контейнерами, безперервно перехоплюючи управління від runc після ініціалізації контейнерів.
runc: Завдяки своїм можливостям легкого та універсального рантайму контейнерів, runc відповідає стандарту OCI. Він використовується containerd для запуску та управління контейнерами відповідно до вказівок OCI, розвиваючись з оригінального libcontainer.
grpc є важливим для забезпечення комунікації між containerd та docker-engine, забезпечуючи ефективну взаємодію.
OCI є ключовим у підтримці специфікацій OCI для рантайму та образів, причому останні версії Docker відповідають як стандартам образу, так і рантайму OCI.
Основні команди
Containerd
Containerd був спеціально розроблений для задоволення потреб контейнерних платформ, таких як Docker та Kubernetes, серед інших. Його мета - спростити виконання контейнерів на різних операційних системах, включаючи Linux, Windows, Solaris та інші, абстрагуючи операційно-системні функції та системні виклики. Метою Containerd є включення лише необхідних функцій, необхідних для його користувачів, намагаючись уникнути зайвих компонентів. Однак досягнення цієї мети повністю визнається як складне завдання.
Ключовим рішенням щодо дизайну є те, що Containerd не обробляє мережу. Мережа вважається критичним елементом у розподілених системах, з складнощами, такими як мережа з визначенням програмного забезпечення (SDN) та виявлення служб, які значно відрізняються від однієї платформи до іншої. Тому Containerd залишає аспекти мережі для управління платформами, які він підтримує.
Хоча Docker використовує Containerd для запуску контейнерів, важливо зауважити, що Containerd підтримує лише підмножину функцій Docker. Зокрема, Containerd не має можливостей управління мережею, присутніх у Docker, і не підтримує створення Docker swarms безпосередньо. Це розмежування підкреслює спрямовану роль Containerd як середовища виконання контейнерів, делегуючи більш спеціалізовані функціональні можливості платформам, з якими він інтегрується.
Podman
Podman - це відкритий контейнерний двигун, який дотримується стандартів Open Container Initiative (OCI), розроблений та підтримуваний компанією Red Hat. Він виділяється серед Docker кількома відмінними функціями, зокрема своєю архітектурою без демона та підтримкою контейнерів без прав root, що дозволяє користувачам запускати контейнери без привілеїв root.
Podman розроблений для сумісності з API Docker, що дозволяє використовувати команди Docker CLI. Ця сумісність поширюється на його екосистему, яка включає такі інструменти, як Buildah для побудови образів контейнерів та Skopeo для операцій з образами, такими як push, pull та inspect. Докладнішу інформацію про ці інструменти можна знайти на їхній сторінці GitHub.
Основні відмінності
Архітектура: На відміну від моделі клієнт-сервер Docker з фоновим демоном, Podman працює без демона. Це означає, що контейнери запускаються з привілеями користувача, який їх запускає, підвищуючи безпеку шляхом усунення потреби в доступі root.
Інтеграція з systemd: Podman інтегрується з systemd для управління контейнерами, що дозволяє управляти контейнерами через одиниці systemd. Це відрізняється від використання Docker systemd в основному для управління процесом демона Docker.
Контейнери без прав root: Ключовою функцією Podman є можливість запуску контейнерів під привілеями користувача, що їх ініціює. Цей підхід мінімізує ризики, пов'язані з порушенням контейнерів, забезпечуючи, що зловмисники отримують лише привілеї компрометованого користувача, а не доступ root.
Підхід Podman пропонує безпечну та гнучку альтернативу Docker, підкреслюючи управління привілеями користувача та сумісність з існуючими робочими процесами Docker.
Зверніть увагу, що оскільки podman спрямований на підтримку того самого API, що й docker, ви можете використовувати ті самі команди з podman, що й з docker, такі як:
Основна інформація
Віддалений API працює за замовчуванням на порту 2375, коли він увімкнений. Сервіс за замовчуванням не потребуватиме аутентифікації, що дозволяє зловмиснику запустити привілейований контейнер Docker. Використовуючи Віддалений API, можна приєднати хости / (кореневий каталог) до контейнера та читати / записувати файли середовища хоста.
Порт за замовчуванням: 2375
Перелік
Ручний
Зверніть увагу, що для переліку API Docker ви можете використовувати команду docker
або curl
, як у наступному прикладі:
Якщо ви можете зв'язатися з віддаленим API Docker за допомогою команди docker
, ви можете виконати будь-яку з команд Docker, які були коментовані раніше для взаємодії з сервісом.
Ви можете export DOCKER_HOST="tcp://localhost:2375"
і уникнути використання параметра -H
з командою docker
Швидке підвищення привілеїв
Curl
Іноді ви побачите 2376 для TLS кінцевої точки. Мені не вдалося підключитися до неї за допомогою клієнта docker, але це можливо зробити за допомогою curl.
Якщо ви хочете отримати більше інформації про це, більше інформації доступно там, де я скопіював команди з: https://securityboulevard.com/2019/02/abusing-docker-api-socket/
Автоматичний
Компрометація
На наступній сторінці ви можете знайти способи виходу з контейнера Docker:
pageDocker SecurityЗловживаючи цим, можливо вийти з контейнера, запустити слабкий контейнер на віддаленій машині, вийти з нього та скомпрометувати машину:
Підвищення привілеїв
Якщо ви знаходитесь всередині хоста, який використовує Docker, ви можете прочитати цю інформацію, щоб спробувати підвищити привілеї.
Виявлення секретів у запущених контейнерах Docker
Перевірте env (розділ змінних середовища) на наявність секретів і ви можете знайти:
Паролі.
IP-адреси.
Порти.
Шляхи.
Інше... .
Якщо ви хочете витягнути файл:
Захист вашого Docker
Захист встановлення та використання Docker
Ви можете використовувати інструмент https://github.com/docker/docker-bench-security, щоб перевірити ваше поточне встановлення Docker.
./docker-bench-security.sh
Ви можете використовувати інструмент https://github.com/kost/dockscan, щоб перевірити ваше поточне встановлення Docker.
dockscan -v unix:///var/run/docker.sock
Ви можете використовувати інструмент https://github.com/genuinetools/amicontained для визначення привілеїв контейнера при запуску з різними параметрами безпеки. Це корисно, щоб знати наслідки використання деяких параметрів безпеки для запуску контейнера:
docker run --rm -it r.j3ss.co/amicontained
docker run --rm -it --pid host r.j3ss.co/amicontained
docker run --rm -it --security-opt "apparmor=unconfined" r.j3ss.co/amicontained
Захист Docker-образів
Ви можете використовувати Docker-образ https://github.com/quay/clair, щоб сканувати ваші інші Docker-образи та знаходити вразливості.
docker run --rm -v /root/clair_config/:/config -p 6060-6061:6060-6061 -d clair -config="/config/config.yaml"
clair-scanner -c http://172.17.0.3:6060 --ip 172.17.0.1 ubuntu-image
Захист Dockerfiles
Ви можете використовувати інструмент https://github.com/buddy-works/dockerfile-linter для перевірки вашого Dockerfile та виявлення всіх видів неправильних конфігурацій. Кожній неправильній конфігурації буде присвоєно ідентифікатор, ви можете знайти тут https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md, як виправити кожну з них.
dockerfilelinter -f Dockerfile
Ви можете використовувати інструмент https://github.com/replicatedhq/dockerfilelint для перевірки вашого Dockerfile та виявлення всіх видів неправильних конфігурацій.
dockerfilelint Dockerfile
Ви можете використовувати інструмент https://github.com/RedCoolBeans/dockerlint для перевірки вашого Dockerfile та виявлення всіх видів неправильних конфігурацій.
dockerlint Dockerfile
Ви можете використовувати інструмент https://github.com/hadolint/hadolint для перевірки вашого Dockerfile та виявлення всіх видів неправильних конфігурацій.
hadolint Dockerfile
Журналювання підозрілої діяльності
Ви можете використовувати інструмент https://github.com/falcosecurity/falco для виявлення підозрілої поведінки в робочих контейнерах.
Зверніть увагу на те, як Falco компілює ядро модуля та вставляє його в наступному фрагменті. Після цього він завантажує правила та починає журналювати підозрілу діяльність. У цьому випадку виявлено 2 привілейованих контейнера, які було запущено, 1 з них з чутливим монтуванням, і через деякий час виявлено, як в одному з контейнерів відкрито оболонку.
Моніторинг Docker
Ви можете використовувати auditd для моніторингу Docker.
Посилання
Last updated