
Laboratorio di penetration testing locale usando docker-compose.
Non sto più sviluppando attivamente questo progetto, ma correggerò bug e controllerò issues e pull request. Ogni aiuto è gradito :)
Questo laboratorio di pentest locale utilizza docker compose per avviare più servizi vittima e un servizio attaccante che esegue Kali Linux. Se esegui questo laboratorio per la prima volta, ci vorrà del tempo per scaricare tutte le diverse immagini docker.
Comandi eseguiti:
./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 --downIl laboratorio dovrebbe funzionare immediatamente se tutte le dipendenze necessarie sono installate. All'avvio, il laboratorio eseguirà un controllo delle dipendenze.
git clone https://github.com/oliverwiegers/pentest_lab
cd pentest_lab
./lab.sh -u
Per impostazione predefinita, il laboratorio avvierà tutti i servizi vittima e un servizio red team. Altri servizi possono essere avviati e aggiunti. Maggiori informazioni sono riportate più avanti.
Per ulteriori informazioni sull'utilizzo, si consiglia di leggere il messaggio di aiuto mostrato da ./lab.sh -h | --help.
Il laboratorio ha un controllo delle dipendenze integrato che viene eseguito all'avvio. Può anche essere eseguito manualmente con ./lab.sh -C.
Per facilità d'uso è stata aggiunta un'interfaccia Heimdall accessibile su localhost:7000. Lì sono elencati tutti i servizi esposti sulla tua macchina locale e accessibili tramite browser. Le modifiche apportate all'interfaccia vengono automaticamente salvate in ./etc/heimheimdall. Questa directory viene poi trasformata in ./etc/heimdall.tar durante l'arresto del laboratorio. Questo archivio tar verrà estratto all'avvio. Sia ./etc/heimdall.tar che ./etc/heimdall sono ignorati da git per impostazione predefinita.
Lo sfondo utilizzato può essere trovato qui.
Questo laboratorio conosce i seguenti quattro tipi di servizi.
Il servizio red team predefinito - il servizio Kali - è un'istanza Kali piuttosto base. Tuttavia, il metapacchetto kali-tools-web è installato. Per un laboratorio di test di applicazioni web, gli strumenti di base per il test web sembrano utili. Questo può essere modificato modificando il Dockerfile da cui viene creata l'immagine. Si trova in ./dockerfiles/kali. Il servizio kali installa questi dotfiles per impostazione predefinita. Anche questo è modificabile intervenendo sul Dockerfile.
Anche se i servizi di monitoraggio sono anche servizi blue team, sono separati in una categoria diversa.
Questo stack fornisce funzionalità di osservazione dei log e delle prestazioni.
Per maggiori informazioni sulle singole istanze, vedere sotto.
Attualmente la configurazione di monitoraggio è composta dai seguenti servizi:
L'istanza Grafana fornisce due dashboard: una per i log e una per le metriche.
Sono piuttosto basiche. Se ne possono aggiungere altre tramite l'interfaccia di Grafana. Queste dashboard andranno perse quando il volume grafana viene eliminato. Per aggiungere dashboard permanentemente, consultare la Documentazione sul Provisioning di Grafana. Le directory utilizzate per il provisioning si trovano in ./etc/grafana/.
Per modificare le impostazioni tramite l'interfaccia di Grafana è necessario accedere come admin. Le credenziali sono quelle predefinite: admin:admin. #hacktheplanet
Per consentire a Loki di raccogliere i log di docker, questo laboratorio installa il Loki Docker Driver come plugin Docker.
Per consentire a Prometheus di accedere alle metriche delle prestazioni dei container in esecuzione nel cluster, viene utilizzato cAdvisor.
Per aggiungere servizi aggiuntivi è necessaria una certa conoscenza dei file docker-compose.yml. Il file docker-compose.yml nella radice di questo repository viene generato automaticamente all'avvio del laboratorio. Questo processo utilizza i file yaml situati in ./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
Quali servizi verranno avviati è controllato invocando ./lab.sh con le opzioni corrispondenti. Per disabilitare permanentemente un servizio, rimuovi l'estensione del file .yml.
Un esempio di servizio vittima potrebbe essere:
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
Nota: Se un servizio richiede un qualche tipo di installazione al primo utilizzo, usa docker inspect <image_name> per scoprire dove l'immagine docker memorizza i dati e aggiungi un volume che punti a questa directory. Nell'esempio sopra è:
volumes:
- bwapp-data:/var/lib/mysql
Questo garantisce che tu non debba configurare di nuovo il servizio ogni volta che riavvii il laboratorio. Ma se vuoi resettare il laboratorio e ricominciare da capo, puoi usare ./lab.sh -p | --prune. Questo eliminerà tutte le risorse di proprietà del laboratorio.
Il motivo per cui abbiamo utilizzato indirizzi IP statici è che la macchina Kali deve avere un indirizzo IP che non cambi per semplificare l'accesso SSH. Ulteriori informazioni nella sezione Suggerimenti/Trucchi più avanti.
Se aggiungi servizi e ci sono informazioni aggiuntive utili per chiunque esegua questo laboratorio, puoi aggiungere queste informazioni a ./etc/services_info. Il contenuto di questo file verrà stampato così com'è riga per riga eseguendo ./lab.sh -i.
Per una connessione facile al servizio Kali, si potrebbe aggiungere quanto segue a $HOME/.ssh/cofig:
Host kali
User root
Hostname 10.5.0.5
UserKnownHostsFile /dev/null
StrictHostKeyChecking accept-new
Quindi invece di ssh [email protected] -o "UserKnownHostsFile /dev/null" si potrebbe eseguire ssh kali.
Per gli utenti di tmux, quanto segue si collegherà automaticamente a una sessione 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