
Laboratoire local de test d'intrusion utilisant docker-compose.
Je ne développe plus activement ce projet, mais je corrigerai les bugs et examinerai les issues et les pull requests. Toute aide est appréciée :)
Ce laboratoire de pentest local utilise Docker Compose pour déployer plusieurs services victimes et un service d'attaque exécutant Kali Linux. Si vous lancez ce labo pour la première fois, le téléchargement des différentes images Docker prendra du temps.
Commandes exécutées :
./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 --downLe laboratoire devrait fonctionner sans configuration supplémentaire si toutes les dépendances nécessaires sont installées. Au démarrage, le labo effectuera une vérification des dépendances.
git clone https://github.com/oliverwiegers/pentest_lab
cd pentest_lab
./lab.sh -u
Par défaut, le labo démarre tous les services victimes et un service red team. D'autres services peuvent être démarrés et ajoutés. Plus d'informations à ce sujet ci-dessous.
Pour plus d'informations sur l'utilisation, consultez le message d'aide affiché par ./lab.sh -h | --help.
Le labo intègre une vérification des dépendances qui s'exécute au démarrage. Elle peut aussi être lancée manuellement avec ./lab.sh -C.
Pour faciliter l'utilisation, une interface Heimdall a été ajoutée et exposée sur localhost:7000. Tous les services exposés à votre machine locale et accessibles via un navigateur y sont listés. Les modifications apportées à l'interface sont automatiquement sauvegardées dans ./etc/heimheimdall. Ce répertoire est ensuite transformé en ./etc/heimdall.tar lors de l'arrêt du labo. Cette archive tar sera extraite au démarrage. Les deux ./etc/heimdall.tar et ./etc/heimdall sont ignorés par git par défaut.
Le fond d'écran utilisé peut être trouvé ici.
Ce laboratoire connaît les quatre types de services suivants.
Le service red team par défaut – le service Kali – est une instance Kali assez basique. Néanmoins, le métapackage kali-tools-web est installé. Pour un laboratoire de test d'applications web, les outils de test web de base semblent utiles. Cela peut être modifié en éditant le Dockerfile à partir duquel l'image est construite, situé dans ./dockerfiles/kali. Le service Kali installe par défaut ces dotfiles. Cela est également modifiable en ajustant le Dockerfile.
Bien que les services de monitoring soient également des services blue_team, ils sont classés dans une catégorie distincte.
Cette pile fournit des fonctionnalités d'observation des logs et des performances.
Pour plus d'informations sur chaque instance, voir ci-dessous.
Actuellement, la configuration de monitoring est composée des services suivants :
L'instance Grafana fournit deux tableaux de bord : un pour les logs et un pour les métriques.
Ce sont des tableaux assez basiques. On peut en ajouter d'autres via l'interface Grafana. Ces tableaux de bord seront perdus lorsque le volume Grafana sera supprimé. Pour ajouter des tableaux de bord de manière permanente, consultez la documentation de provisionnement de Grafana. Les répertoires utilisés pour le provisionnement se trouvent dans ./etc/grafana/.
Pour modifier les paramètres via l'interface Grafana, il faut se connecter en tant que admin. Les identifiants sont ceux par défaut : admin:admin. #hacktheplanet
Pour que Loki puisse collecter les logs Docker, ce laboratoire installe le Loki Docker Driver comme plugin Docker.
Pour que Prometheus puisse accéder aux métriques de performance des conteneurs s'exécutant dans le cluster, cAdvisor est utilisé.
Pour ajouter des services supplémentaires, une petite connaissance des fichiers docker-compose.yml est nécessaire. Le fichier docker-compose.yml à la racine de ce dépôt est généré automatiquement au démarrage du labo. Ce processus utilise les fichiers yaml situés dans ./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
Les services qui seront démarrés sont contrôlés en invoquant ./lab.sh avec les options correspondantes. Pour désactiver définitivement un service, supprimez l'extension .yml du fichier.
Un exemple de service victime serait :
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
Note : Si un service nécessite une installation lors de la première utilisation, utilisez docker inspect <image_name> pour trouver où l'image Docker stocke les données et ajoutez un volume pointant vers ce répertoire. Dans l'exemple ci-dessus, cela donne :
volumes:
- bwapp-data:/var/lib/mysql
Cela garantit que vous n'avez pas à configurer le service à nouveau à chaque redémarrage du labo. Mais si vous souhaitez réinitialiser le labo et repartir de zéro, vous pouvez utiliser ./lab.sh -p | --prune. Cela supprimera toutes les ressources appartenant au labo.
La raison pour laquelle nous avons utilisé des adresses IP statiques est que la box Kali a besoin d'une adresse IP qui ne change pas pour simplifier la connexion SSH. Plus d'informations dans la section Astuces/Trucs ci-dessous.
Si vous ajoutez des services et qu'il y a des informations supplémentaires utiles pour quiconque utilise ce labo, vous pouvez ajouter ces informations dans ./etc/services_info. Le contenu de ce fichier sera affiché tel quel, ligne par ligne, en exécutant ./lab.sh -i.
Pour une connexion facile au service Kali, on peut ajouter ce qui suit à $HOME/.ssh/cofig :
Host kali
User root
Hostname 10.5.0.5
UserKnownHostsFile /dev/null
StrictHostKeyChecking accept-new
Ainsi, au lieu de ssh [email protected] -o "UserKnownHostsFile /dev/null", on peut exécuter ssh kali.
Pour les utilisateurs de tmux, ce qui suit se connectera automatiquement à une session 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