Pentest Docker
Розглянемо за допомогою цього посібника, як проводити тестування безпеки систем, розвернутих на докері.
TOOLS FOR FIND VULNERABILITY
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