
Lokales Penetrationstest-Labor mit docker-compose.
Ich entwickle nicht mehr aktiv daran, werde aber Fehler beheben und Issues und Pull Requests bearbeiten. Hilfe wird geschätzt :)
Dieses lokale Pentest-Labor nutzt Docker Compose, um mehrere Opfer-Dienste und einen Angreifer-Dienst mit Kali Linux zu starten. Wenn du dieses Labor zum ersten Mal ausführst, wird es einige Zeit dauern, alle verschiedenen Docker-Images herunterzuladen.
Ausgeführte Befehle:
./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 --downDas Labor sollte sofort funktionieren, wenn alle benötigten Abhängigkeiten installiert sind. Beim Start führt das Labor eine Abhängigkeitsprüfung durch.
git clone https://github.com/oliverwiegers/pentest_lab
cd pentest_lab
./lab.sh -u
Standardmäßig startet das Labor alle Opfer-Dienste und einen Red-Team-Dienst. Weitere Dienste können gestartet und hinzugefügt werden. Weitere Informationen dazu weiter unten.
Für weitere Nutzungsinformationen lies die Hilfsmeldung, die mit ./lab.sh -h | --help angezeigt wird.
Das Labor hat eine eingebaute Abhängigkeitsprüfung, die beim Start läuft. Diese kann auch manuell mit ./lab.sh -C ausgeführt werden.
Zur Vereinfachung wurde eine Heimdall-Oberfläche hinzugefügt, die unter localhost:7000 erreichbar ist. Alle Dienste, die auf Ihrem lokalen Rechner verfügbar und über den Browser zugänglich sind, werden dort aufgelistet. Änderungen an der Oberfläche werden automatisch in ./etc/heimheimdall gespeichert. Dieses Verzeichnis wird dann beim Stoppen des Labors in ./etc/heimdall.tar umgewandelt. Dieses Tar-Archiv wird beim Start extrahiert. Sowohl ./etc/heimdall.tar als auch ./etc/heimdall werden standardmäßig von git ignoriert.
Das verwendete Hintergrundbild findest du hier.
Dieses Labor kennt die folgenden vier Diensttypen.
Der standardmäßige Red-Team-Dienst – der Kali-Dienst – ist eine ziemlich einfache Kali-Instanz. Trotzdem ist das Metapaket kali-tools-web installiert. Für ein Webanwendungstest-Labor scheinen die grundlegenden Web-Test-Werkzeuge nützlich zu sein. Dies kann durch Bearbeiten der Dockerfile geändert werden, aus der das Image erstellt wird. Diese befindet sich unter ./dockerfiles/kali. Der Kali-Dienst installiert standardmäßig diese dotfiles. Dies kann ebenfalls durch Anpassen der Dockerfile geändert werden.
Auch wenn Überwachungsdienste ebenfalls Blue-Team-Dienste sind, werden sie in einer eigenen Kategorie aufgeführt.
Dieser Stack bietet Protokoll- und Leistungsbeobachtungsfunktionen.
Weitere Informationen zu einzelnen Instanzen findest du unten.
Derzeit besteht das Überwachungs-Setup aus den folgenden Diensten:
Die Grafana-Instanz bietet zwei Dashboards: eines für Protokolle und eines für Metriken.
Diese sind recht einfach. Man kann weitere hinzufügen, indem man über die Grafana-Oberfläche Dashboards hinzufügt. Diese Dashboards gehen verloren, wenn das Grafana-Volume gelöscht wird. Um dauerhaft Dashboards hinzuzufügen, konsultiere die Provisioning-Dokumentation von Grafana. Die verwendeten Verzeichnisse für die Bereitstellung befinden sich unter ./etc/grafana/.
Um Einstellungen über die Grafana-Oberfläche zu ändern, muss man sich als admin anmelden. Die Anmeldedaten sind die Standardeinstellungen: admin:admin. #hacktheplanet
Damit Loki Docker-Protokolle sammeln kann, installiert dieses Labor den Loki Docker Driver als Docker-Plugin.
Damit Prometheus auf Leistungsmetriken der im Cluster laufenden Container zugreifen kann, wird cAdvisor verwendet.
Um zusätzliche Dienste hinzuzufügen, sind einige Kenntnisse über docker-compose.yml-Dateien erforderlich. Die docker-compose.yml im Root dieses Repositorys wird automatisch generiert, wenn das Labor startet. Dieser Vorgang verwendet die YAML-Dateien, die sich unter ./etc/services befinden.
➜ 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
Welche Dienste gestartet werden, wird durch Aufruf von ./lab.sh mit den entsprechenden Optionen gesteuert. Um einen Dienst dauerhaft zu deaktivieren, entferne die Dateierweiterung .yml.
Ein Beispiel für einen Opfer-Dienst wäre:
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
Hinweis: Wenn ein Dienst bei der ersten Nutzung eine Installation erfordert, verwende docker inspect <image_name>, um herauszufinden, wo das Docker-Image die Daten speichert, und füge ein Volume hinzu, das auf dieses Verzeichnis zeigt. Im obigen Beispiel ist dies:
volumes:
- bwapp-data:/var/lib/mysql
Dies stellt sicher, dass du den Dienst nicht jedes Mal neu einrichten musst, wenn du das Labor neu startest. Wenn du das Labor zurücksetzen und komplett von vorne beginnen möchtest, kannst du ./lab.sh -p | --prune verwenden. Dies löscht alle Ressourcen, die dem Labor gehören.
Der Grund für die Verwendung statischer IP-Adressen ist, dass die Kali-Box eine IP-Adresse benötigt, die sich nicht ändert, um den SSH-Login zu vereinfachen. Weitere Informationen im Abschnitt Tipps/Tricks weiter unten.
Wenn du Dienste hinzufügst und es zusätzliche Informationen gibt, die für jeden, der dieses Labor nutzt, nützlich sind, kannst du diese Informationen zu ./etc/services_info hinzufügen. Der Inhalt dieser Datei wird zeilenweise wie er ist ausgegeben, wenn ./lab.sh -i ausgeführt wird.
Für eine einfache Verbindung zum Kali-Dienst könnte man Folgendes zu $HOME/.ssh/cofig hinzufügen:
Host kali
User root
Hostname 10.5.0.5
UserKnownHostsFile /dev/null
StrictHostKeyChecking accept-new
Anstatt ssh [email protected] -o "UserKnownHostsFile /dev/null" könnte man ssh kali ausführen.
Für tmux-Benutzer wird folgendes automatisch eine tmux-Sitzung anhängen:
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