Pentest Docker

Розглянемо за допомогою цього посібника, як проводити тестування безпеки систем, розвернутих на докері.

TOOLS FOR FIND VULNERABILITY

Логин Свят

10/14/20234 min read

Pentest docker

Docker використовує архітектуру клієнт-сервер, основними компонентами докера є docker-daemon, docker-CLI та API.

Docker-daemon використовує об’єкт докера для керування, наприклад мережу, том, зображення докера та контейнер.

Docker CLI: інтерфейс командного рядка, який використовується для виконання команди для отримання, запуску та створення докера зображення.

Docker API: це свого роду інтерфейс, який використовується між Daemon і CLI для спілкування один з одним через сокет Unix або TCP.

Як ми знаємо, використання служб докерів у будь-якій організації перебуває на бумі, тому що воно скоротило зусилля розробника в налаштуванні хоста в додатку в межах своєї інфраструктури. Коли ви встановлюєте docker на головній машині, Daemon і CLI спілкуються один з одним через Unix Socket який представляє петлеву адресу. Якщо ви хочете отримати зовнішній доступ до докер-програми, прив’яжіть API через порт TCP. Коли ви дозволяєте доступ до API докерів через TCP-з’єднання через такі порти, як 2375, 2376, 2377 це означає, що докер CLI, який працює поза хост-машиною, матиме доступ до Daemon докерів віддалено.

Зловмисник завжди перевіряє такий тип порту за допомогою Shodan, вони намагаються підключитися до докера віддалено, щоб використовувати Daemon докер. Докери прослуховують порт 2375 для віддаленого підключення.

Docker API

Доступний докер API для віддаленного підключення

Ви можете помітити, що цільовий хост має відкритий порт для служби докерів, щоб це дізнатися можна використати сканування порту Nmap для прикладу такого хоста 192.168.0.156, який є і IP-адресою хост-машини, де докер програма запущена.

На хост-машині ми намагаємося визначити процес для докера, як ми вже згадували вище, за замовчуванням працює через сокети Unix.

ps -ef | grep docker

Тепер змініть конфігурацію REST API, щоб отримати зовнішній доступ до демона докерів.

Зробіть зміни як виділенно на зображенні за допомогою наступних команд.

nano /lib/systemd/system/docker.service

-H=tcp://0.0.0.0:2375

systemctl daemon-reload

service docker restart

Тепер, якщо ви дослідите процес докерів, ви помітите зміни.

Зловживання Docker API

Тепер зловмисник завжди шукає такий мережевий IP, де докер доступний через API через 2375/TCP порт для встановлення віддаленого з’єднання з докерною програмою. Як бачите, ми стараємось проскануйте хост-машину, щоб визначити відкритий порт для API за допомогою сканування портів Nmap.

nmap -p- 192.168.0.156

Коли порт відкритий і доступний, ви можете спробувати підключитися до демона докерів на цільовому пристрої машина. Але для цього вам також потрібно встановити докер на вашій локальній машині. Тепер, щоб переконатися, що ви можете отримати віддалений доступ до демона докерів, ми виконуємо таку команду, щоб ідентифікувати встановлену версію докера. Синтаксис: docker -H <IP-адреса віддаленого вузла> :<порт> <команда-докера>

docker -H 192.168.0.156:2375 version

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

docker -H 192.168.0.156:2375

Таким чином слабко налаштований API, відкритий для зовнішнього підключення. Це може призвести до викрадення контейнера або зловмисник може приховати загрозу, для повторного підключення. Крім того, якщо встановлену версію докера можна використовувати проти виходу з контейнера атака, тоді атака може легко скомпрометувати всю хост-машину та спробувати отримати root доступ до головної машини (хосту).

Оцінка вразливості зображення

Clair

CoreOS створила чудовий інструмент сканування контейнерів під назвою Clair. Clair — це проект із відкритим кодом для статичного аналізу вразливостей у програмах і контейнерах Docker. Ви можете клонувати пакет за допомогою git, використовуючи наступну команду

git clone https://github.com/arminc/clair-scanner.git

Сканер працює на мові програмування GO, тому треба встановити її, якщо ще не встановлено.

apt install golang

Створіть бібліотеку для встановлення всіх залежностей Clair.

cd clair-scanner

make build

make cross

Як бачите, у списку сегментів є наступний файл.

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

docker pull ubuntu:16.04

Тепер запустіть образ докера Clair, який слухатиме локальний порт 5432.

docker run -d -p 5432:5432 --name db arminc/clair-db:latest

Також запустіть образ докера для Postgres, щоб зв’язати Clair scan за допомогою такої команди.

docker run -p 6060:6060 --link db:postgres -d --name clair arminc/clair-local-scan:latest

Тепер давайте використаємо Clair для сканування вразливості контейнера або образу докера за допомогою наступної команди. Синтаксис: ./clair-scanner -ip <ip докера> -r output.jason <докер-зображення>

./clair-scanner --ip 172.17.0.1 -r report.json ubuntu:16.04

Бум!!!! І ми отримали результати сканування, які показують 50 незатверджених уразливостей.

Bench-Security: Загартування контейнера

Docker Bench for Security — це сценарій, який перевіряє десятки поширених передових практик розгортання контейнерів Docker у виробництві. Усі тести автоматизовані та створені за мотивами СНД Docker Benchmark v1.2.0. Отже, як бачите, у нас є кілька зображень докерів на нашому хості.

Давайте почнемо аудит докерів, виконавши набір команд, як показано тут.

docker run -it --net host --pid host --userns host --

cap-add audit_control

-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST

-v /etc:/etc:ro

-v /usr/bin/containerd:/usr/bin/containerd:ro

-v /usr/bin/runc:/usr/bin/runc:ro

-v /usr/lib/systemd:/usr/lib/systemd:ro

-v /var/lib:/var/lib:ro

-v /var/run/docker.sock:/var/run/docker.sock:ro

--label docker_bench_security

docker/docker-bench-security

Для кожної з рекомендацій конфігурації результати виводяться як інформація, попередження і примітки як зазначено нижче:

1. Конфігурація хоста

2. Конфігурація Docker Daemon

3. Файли конфігурації Docker Daemon

4. Зображення контейнерів і файли збірки

5. Час роботи контейнера

6. Операції безпеки Docker

Тобто у виділеному сеансі ви можете спостерігати, що зʼявилося сповіщення про привілеї root для запуску образу докера.

Щоб виправити такий тип неправильної конфігурації, зупиніть запущений процес для докера, а потім знову запустіть образ докера з низьким доступом користувача, як показано нижче.

docker stop $(docker ps -aq)

docker rm $(docker ps -aq)

docker run -itd --user 1001:1001 ubuntu

docker exec -it <container-id>

/bin/bash

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

Інструменти для проведення pentest

WPScan

Тепер давайте продовжимо, один з інструментів для pentest, який використовується для сканування WordPress CMS веб-сайт, відомий як WPScan. Відкрийте термінал на локальній машині та виконайте наступне як суперкористувач, він завантажує та створює пакет докерів.

docker pull wpscanteam/wpscan

Отже, ви можете створити власну WordPress pentestlab і дізнаватися більше звідси. https://www.hackingarticles.in/penetration-testing-lab-setup-wordpress/

Щоб використовувати образ докера WPScan, вам просто потрібно виконати наступну команду та розпочати пентестування WordPress.

docker run -it --rm wpscanteam/wpscan --url http://192.168.1.105/wordpress/

SQLmap

SQLMAP можна використовувати для тестування SQL баз на нашому веб-сайті. Запусти наступну команду, яка отримує образ докера SQLMAP.

docker pull googlesky/sqlmap

Припустимо, що testpphp.vulnweb.com є цільовим веб-сайтом, протестимо його sqlmap для перевірки SQL-ін’єкції.

Щоб використовувати образ докера SQLMAP, вам потрібно виконати наведену нижче команду та розпочати SQL тестування.

docker run -it googlesky/sqlmap -u http://testphp.vulnweb.com/artists.php?artist=1 --dbs --batch

Dirbuster

Перейдіть до нашого наступного інструменту пентесту «Dirbuster», який шукає веб-каталоги та сторінки, щоб виявити конфіденційні дані, що зберігаються у веб-додатку. Тому виконайте таку команду, щоб встановити зображення докера Dirbuster.

docker pull hypnza/dirbuster

Щоб використовувати образ докера Dirbuster, потрібно запустити наступну команду та розпочати тестування на перелік веб-каталогів.

docker run -it hypnza/dirbuster -u http://testphp.vulnweb.com/

Nmap

Найефективніший інструмент сканування мережі, проводимо тест на проникнення NMAP інструментом. Отже, запустіть наведену нижче команду, не витрачаючи час, і виконайте наведені нижче дії.

docker pull instrumentisto/nmap

Запускаємо тепер перевірку

docker run --rm -it instrumentisto/nmap -sV 192.168.1.108

HTTP Python Server

Передача файлів є ще однією важливою частиною тестування на проникнення, і ми не повинні ігнорувати це, тому ось зображення докера HTTP Python Server.

docker pull trinitronx/python-simplehttpserver

Запускаємо інструмент командою через порт 5555

docker run -d -v /tmp/:/var/www:ro -p 5555:8080 trinitronx/python-simplehttpserver

John the Ripper

Без інструменту злому паролів платформа тестування на проникнення не вважалася закінченою, тому, виконавши наступну команду, витягуємо файл докера Johntheripper.

docker pull obscuritylabs/johntheripper

Тепер, якщо у вас є хеш-файл на вашій машині, виконайте наступне, щоб використовувати образ докера для john ripper, щоб зламати пароль із хеш-файлу.

docker run --rm -it -v ${PWD}:/root obscuritylabs/johntheripper --format=NT /root/hash

Metasploit

Metasploit є найбільш відповідним і делегованим інструментом для тестування на проникнення. Ручні установки Metasploit часто створює проблеми для пентестера. Виконайте таку команду, щоб перетягнути Metasploit образ докера на локальну машину.

docker pull metasploitframework/metasploit-framework

Щоб запустити файл докера Metasploit, виконайте надану команду та продовжуйте використовувати консоль Metasploit.

docker run --rm -it -p 443:443 -v ${PWD}:/root/.msf4 metasploitframework/metasploi t-framework

PowerShell Empire

І перед останій, але не менш важливий, інструменти тестування на проникнення — це PowerShell Empire, щоб отримати образ докера виконайте команду.

docker pull bcsecurity/empire

Щоб запустити встановлений докер, запустіть команду

docker run --rm -it -p 443:443 -v ${PWD}:/root/empire bcsecurity/empire

Impacket Toolkit

Найважливішим інструментом для наших Red Teamers є Impacket, і як ми можемо знехтувати цим інструментом. Тому просто виконайте наступне, щоб витягнути імпакет зображення докера.

docker pull rflathers/impacket

Як ви знаєте, у пакеті impacket так багато бібліотек python, і тут ми використовуємо образ докера щоб проілюструвати одну з цих бібліотек.

docker run --rm -it -p 445:445 rflathers/impacket psexec.py ignite/administrator:Ignite@987@192.168.1.106