Learn & practice AWS Hacking:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Learn & practice GCP Hacking: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
Docker є **передовою платформою** в **індустрії контейнеризації**, що очолює **безперервні інновації**. Він полегшує безперешкодне створення та розповсюдження додатків, від **традиційних до футуристичних**, і забезпечує їх **безпечне розгортання** в різних середовищах.
* [**containerd**](http://containerd.io): Це **основний виконуваний модуль** для контейнерів, відповідальний за всебічне **управління життєвим циклом контейнера**. Це включає в себе обробку **переносу та зберігання образів**, а також нагляд за **виконанням, моніторингом та мережевими з'єднаннями** контейнерів. **Більш детальна інформація** про containerd **досліджується далі**.
* **container-shim** відіграє критичну роль як **посередник** в обробці **безголових контейнерів**, безперешкодно беручи на себе функції від **runc** після ініціалізації контейнерів.
* [**runc**](http://runc.io): Відомий своїми **легкими та універсальними можливостями виконуваного модуля** контейнерів, runc відповідає **стандарту OCI**. Він використовується containerd для **запуску та управління контейнерами** відповідно до **вказівок OCI**, еволюціонуючи з оригінального **libcontainer**.
* [**OCI**](https://www.opencontainers.org) є ключовим у підтримці **специфікацій OCI** для виконуваних модулів та образів, при цьому останні версії Docker є **сумісними з обома стандартами OCI для образів та виконуваних модулів**.
**Containerd** був спеціально розроблений для задоволення потреб контейнерних платформ, таких як **Docker і Kubernetes**, серед інших. Він має на меті **спростити виконання контейнерів** на різних операційних системах, включаючи Linux, Windows, Solaris та інші, абстрагуючи функціональність, специфічну для операційної системи, та системні виклики. Мета Containerd полягає в тому, щоб включити лише основні функції, необхідні його користувачам, прагнучи уникнути непотрібних компонентів. Однак повністю досягти цієї мети визнано складним.
Ключовим дизайнерським рішенням є те, що **Containerd не обробляє мережеві з'єднання**. Мережа вважається критично важливим елементом у розподілених системах, з такими складнощами, як програмно визначена мережа (SDN) та виявлення сервісів, які значно відрізняються від однієї платформи до іншої. Тому Containerd залишає аспекти мережі для управління платформами, які він підтримує.
Хоча **Docker використовує Containerd** для запуску контейнерів, важливо зазначити, що Containerd підтримує лише підмнож функціональності Docker. Зокрема, Containerd не має можливостей управління мережею, присутніх у Docker, і не підтримує створення Docker swarms безпосередньо. Це відмінність підкреслює зосереджену роль Containerd як середовища виконання контейнерів, делегуючи більш спеціалізовані функції платформам, з якими він інтегрується.
**Podman** - це відкритий контейнерний движок, який відповідає стандартам [Open Container Initiative (OCI)](https://github.com/opencontainers), розроблений і підтримуваний компанією Red Hat. Він відрізняється від Docker кількома особливими функціями, зокрема **архітектурою без демонів** та підтримкою **контейнерів без прав root**, що дозволяє користувачам запускати контейнери без привілеїв root.
Podman розроблений для сумісності з API Docker, що дозволяє використовувати команди Docker CLI. Ця сумісність поширюється на його екосистему, яка включає інструменти, такі як **Buildah** для створення образів контейнерів і**Skopeo** для операцій з образами, таких як push, pull і inspect. Більше деталей про ці інструменти можна знайти на їхній [сторінці GitHub](https://github.com/containers/buildah/tree/master/docs/containertools).
* **Архітектура**: На відміну від клієнт-серверної моделі Docker з фоновим демоном, Podman працює без демона. Цей дизайн означає, що контейнери працюють з привілеями користувача, який їх запускає, підвищуючи безпеку шляхом усунення необхідності в доступі root.
* **Інтеграція з Systemd**: Podman інтегрується з **systemd** для управління контейнерами, що дозволяє керувати контейнерами через одиниці systemd. Це контрастує з використанням Docker, який в основному використовує systemd для управління процесом демона Docker.
* **Контейнери без прав root**: Ключовою особливістю Podman є його здатність запускати контейнери під привілеями ініціюючого користувача. Цей підхід мінімізує ризики, пов'язані з порушеннями безпеки контейнерів, забезпечуючи, що зловмисники отримують лише привілеї скомпрометованого користувача, а не доступ root.
Підхід Podman пропонує безпечну та гнучку альтернативу Docker, підкреслюючи управління привілеями користувачів і сумісність з існуючими робочими процесами Docker.
Зверніть увагу, що оскільки podman прагне підтримувати той же API, що й docker, ви можете використовувати ті ж команди з podman, що й з docker, такі як:
Remote API за замовчуванням працює на порту 2375, коли він увімкнений. Сервіс за замовчуванням не вимагатиме аутентифікації, що дозволяє зловмиснику запустити привілейований контейнер docker. Використовуючи Remote API, можна підключити хости / (кореневий каталог) до контейнера та читати/записувати файли середовища хоста.
Якщо ви можете **зв'язатися з віддаленим docker API за допомогою команди `docker`**, ви можете **виконати** будь-які з **docker** [**команд, які були раніше** прокоментовані](2375-pentesting-docker.md#basic-commands) для взаємодії з сервісом.
Іноді ви побачите **2376** для **TLS** кінцевої точки. Мені не вдалося підключитися до неї за допомогою клієнта docker, але це можливо зробити за допомогою curl.
Якщо ви хочете більше інформації про це, більше інформації доступно там, звідки я скопіював команди: [https://securityboulevard.com/2019/02/abusing-docker-api-socket/](https://securityboulevard.com/2019/02/abusing-docker-api-socket/)
Якщо ви знаходитесь всередині хоста, який використовує docker, ви можете [**прочитати цю інформацію, щоб спробувати підвищити привілеї**](../linux-hardening/privilege-escalation/#writable-docker-socket).
* Ви можете використовувати інструмент [https://github.com/docker/docker-bench-security](https://github.com/docker/docker-bench-security) для перевірки вашої поточної установки docker.
* Ви можете використовувати інструмент [https://github.com/kost/dockscan](https://github.com/kost/dockscan) для перевірки вашої поточної установки docker.
* Ви можете використовувати інструмент [https://github.com/genuinetools/amicontained](https://github.com/genuinetools/amicontained) для перевірки привілеїв, які контейнер матиме при запуску з різними параметрами безпеки. Це корисно для розуміння наслідків використання деяких параметрів безпеки для запуску контейнера:
* Ви можете використовувати образ docker з [https://github.com/quay/clair](https://github.com/quay/clair), щоб сканувати ваші інші образи docker і знаходити вразливості.
* Ви можете використовувати інструмент [https://github.com/buddy-works/dockerfile-linter](https://github.com/buddy-works/dockerfile-linter) для **перевірки вашого Dockerfile**і знаходження всіх видів неправильних налаштувань. Кожне неправильне налаштування отримає ID, ви можете знайти тут [https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md](https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md) як виправити кожне з них.
* Ви можете використовувати інструмент [https://github.com/replicatedhq/dockerfilelint](https://github.com/replicatedhq/dockerfilelint) для **перевірки вашого Dockerfile**і знаходження всіх видів неправильних налаштувань.
* Ви можете використовувати інструмент [https://github.com/RedCoolBeans/dockerlint](https://github.com/RedCoolBeans/dockerlint) для **перевірки вашого Dockerfile**і знаходження всіх видів неправильних налаштувань.
* Ви можете використовувати інструмент [https://github.com/hadolint/hadolint](https://github.com/hadolint/hadolint) для **перевірки вашого Dockerfile**і знаходження всіх видів неправильних налаштувань.
* Ви можете використовувати інструмент [https://github.com/falcosecurity/falco](https://github.com/falcosecurity/falco) для виявлення **підозрілої поведінки в запущених контейнерах**.
* Зверніть увагу в наступному фрагменті, як **Falco компілює модуль ядра та вставляє його**. Після цього він завантажує правила та **починає реєструвати підозрілі дії**. У цьому випадку він виявив 2 привілейовані контейнери, один з яких мав чутливе монтування, і через кілька секунд виявив, як у одному з контейнерів було відкрито оболонку.
mkdir: cannot create directory '/lib/modules/5.0.0-20-generic/kernel/extra': Read-only file system
cp: cannot create regular file '/lib/modules/5.0.0-20-generic/kernel/extra/falco-probe.ko': No such file or directory
depmod...
DKMS: install completed.
* Trying to load a dkms falco-probe, if present
falco-probe found and loaded in dkms
2021-01-04T12:03:20+0000: Falco initialized with configuration file /etc/falco/falco.yaml
2021-01-04T12:03:20+0000: Loading rules from file /etc/falco/falco_rules.yaml:
2021-01-04T12:03:22+0000: Loading rules from file /etc/falco/falco_rules.local.yaml:
2021-01-04T12:03:22+0000: Loading rules from file /etc/falco/k8s_audit_rules.yaml:
2021-01-04T12:03:24+0000: Starting internal webserver, listening on port 8765
2021-01-04T12:03:24.646959000+0000: Notice Privileged container started (user=<NA> command=container:db5dfd1b6a32 laughing_kowalevski (id=db5dfd1b6a32) image=ubuntu:18.04)
2021-01-04T12:03:24.664354000+0000: Notice Container with sensitive mount started (user=<NA> command=container:4822e8378c00 xenodochial_kepler (id=4822e8378c00) image=ubuntu:modified mounts=/:/host::true:rslave)
2021-01-04T12:03:24.664354000+0000: Notice Privileged container started (user=root command=container:4443a8daceb8 focused_brahmagupta (id=4443a8daceb8) image=falco:latest)
2021-01-04T12:04:56.270553320+0000: Notice A shell was spawned in a container with an attached terminal (user=root xenodochial_kepler (id=4822e8378c00) shell=bash parent=runc cmdline=bash terminal=34816 container_id=4822e8378c00 image=ubuntu)
Вивчайте та практикуйте AWS Hacking:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Вивчайте та практикуйте GCP Hacking: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)