
Локальная лаборатория для тестирования на проникновение с использованием docker-compose.
Я больше не занимаюсь активной разработкой этого проекта, но буду исправлять ошибки и рассматривать issues и pull requests. Помощь приветствуется :)
Эта локальная лаборатория для пентеста использует docker compose для запуска нескольких сервисов-жертв и атакующего сервиса с Kali Linux. При первом запуске лаборатории потребуется время для скачивания всех образов Docker.
Выполненные команды:
./lab.sh --help./lab.sh --check-dependencies./lab.sh --up --all-services./lab.sh --info./lab.sh --overview allssh root@kali -o "UserKnownHostsFile /dev/null"./lab.sh --downЛаборатория должна работать «из коробки», если установлены все необходимые зависимости. При запуске выполняется проверка зависимостей.
git clone https://github.com/oliverwiegers/pentest_lab
cd pentest_lab
./lab.sh -u
По умолчанию лаборатория запускает все сервисы-жертвы и один сервис для красной команды. Другие сервисы можно добавлять и запускать. Подробнее об этом ниже.
Дополнительную информацию по использованию можно найти в справке, выводимой командой ./lab.sh -h | --help.
В лабораторию встроена проверка зависимостей, которая выполняется при запуске. Её также можно запустить вручную: ./lab.sh -C.
Для удобства добавлен интерфейс Heimdall, доступный по адресу localhost:7000.
На нём перечислены все сервисы, которые доступны с вашей локальной машины и могут быть открыты в браузере.
Изменения, внесённые в интерфейс, автоматически сохраняются в ./etc/heimheimdall. После остановки лаборатории этот каталог преобразуется в ./etc/heimdall.tar. Этот tar-архив извлекается при запуске. Файлы ./etc/heimdall.tar и ./etc/heimdall игнорируются git по умолчанию.
Используемые обои можно найти здесь.
Лаборатория поддерживает четыре типа сервисов:
Сервис красной команды по умолчанию — это экземпляр Kali, достаточно базовый. Тем не менее, установлен метапакет kali-tools-web. Для лаборатории тестирования веб-приложений базовые инструменты веб-тестирования кажутся полезными. Это можно изменить, отредактировав Dockerfile, из которого собирается образ. Он находится в ./dockerfiles/kali. Сервис Kali по умолчанию устанавливает эти dotfiles. Это также можно изменить, настроив Dockerfile.
Несмотря на то, что сервисы мониторинга также являются сервисами синей команды, они выделены в отдельную категорию.
Этот стек предоставляет возможности наблюдения за журналами и производительностью.
Подробнее об отдельных экземплярах см. ниже.
В настоящее время комплект мониторинга состоит из следующих сервисов:
Экземпляр Grafana предоставляет две панели мониторинга: одну для журналов и одну для метрик.
Они довольно простые. Можно добавить новые панели через интерфейс Grafana. Эти панели будут потеряны при удалении тома grafana. Чтобы добавить панели навсегда, обратитесь к документации по Provisioning от Grafana. Используемые каталоги для provisioning находятся в ./etc/grafana/.
Для изменения настроек через интерфейс Grafana необходимо войти как admin. Учётные данные по умолчанию: admin:admin. #hacktheplanet
Чтобы Loki мог собирать журналы Docker, в этой лаборатории устанавливается Драйвер Docker для Loki как плагин Docker.
Чтобы Prometheus мог получать метрики производительности контейнеров, работающих в кластере, используется cAdvisor.
Для добавления дополнительных сервисов потребуется небольшое знание файлов docker-compose.yml. Файл docker-compose.yml в корне этого репозитория автоматически генерируется при запуске лаборатории. В этом процессе используются yaml-файлы, расположенные в ./etc/services.
➜ pentest_lab tree ./etc/services
./etc/services
├── blue_team
│ └── endlessh.yml
├── default.yml
├── monitoring
│ ├── cadvisor.yml
│ ├── grafana.yml
│ ├── loki.yml
│ └── prometheus.yml
├── red_team
└── victim
├── beginner
│ ├── bwapp.yml
│ ├── dvwa.yml
│ ├── hackazon.yml
│ ├── tiredful.yml
│ ├── webgoat.yml
│ └── xvwa.yml
├── expert
│ └── juice-shop.yml
└── intermediate
└── ninjas.yml
Какие сервисы будут запущены, определяется вызовом ./lab.sh с соответствующими опциями. Чтобы навсегда отключить сервис, удалите расширение .yml у его файла.
Пример сервиса-жертвы:
bwapp:
labels:
class: 'victim'
cluster: 'pentest_lab'
level: 'beginner'
image: raesene/bwapp
ports:
- '8080:80'
networks:
pentest_lab:
ipv4_address: 10.5.0.100
hostname: bwapp
volumes:
- bwapp-data:/var/lib/mysql
Примечание: если сервис требует какой-либо установки при первом использовании, используйте docker inspect <image_name>, чтобы узнать, где образ Docker хранит данные, и добавьте том, указывающий на этот каталог. В примере выше это:
volumes:
- bwapp-data:/var/lib/mysql
Это гарантирует, что вам не придётся настраивать сервис заново при каждом перезапуске лаборатории. Но если вы хотите сбросить лабораторию и начать с нуля, используйте ./lab.sh -p | --prune. Это удалит все ресурсы, принадлежащие лаборатории.
Причина использования статических IP-адресов в том, что Kali box должен иметь неизменный IP-адрес для упрощения входа по SSH. Подробнее в разделе «Советы и хитрости» ниже.
Если вы добавляете сервисы, и есть дополнительная информация, полезная для тех, кто запускает эту лабораторию, вы можете добавить её в ./etc/services_info. Содержимое этого файла будет выводиться построчно при выполнении ./lab.sh -i.
Чтобы легко подключаться к сервису Kali, можно добавить следующее в $HOME/.ssh/config:
Host kali
User root
Hostname 10.5.0.5
UserKnownHostsFile /dev/null
StrictHostKeyChecking accept-new
Тогда вместо ssh [email protected] -o "UserKnownHostsFile /dev/null" можно выполнять ssh kali.
Для пользователей tmux следующая конфигурация будет автоматически подключаться к сессии tmux:
Host kali
User root
Hostname 10.5.0.5
UserKnownHostsFile /dev/null
StrictHostKeyChecking accept-new
RequestTTY yes
RemoteCommand tmux -L tmux new-session -As hacktheplanet