Nicolas Engel

Idea(ls) on cybersecurity

Prototypage sous Windows et solutions de virtualisation

Une tendance récurrente en matière de sécurité informatique est l’emploi galvaudé de termes à la mode, qui ne recouvrent pas la même réalité pour le client ou son prestataire. Le SecOps (Security Operations) en est ici le parfait exemple. Afin de clarifier les débats dans le monde professionnel, j’ai donc souhaité reprendre mon prototype de laboratoire de pentest (penetration testing) pour l’améliorer de la façon suivante. Les principes initiaux restent inchangés, à savoir:

Les améliorations par rapport à la première version sont les suivantes:

Quel intérêt de reprendre un sujet existant au prétexte unique d’améliorer l’existant me direz-vous ? L’enjeu ici, est moins de parler de la solution finale que de son hébergement et de ses multiples échecs associés que j’ai pu rencontrer.

Un laboratoire de Pentest aux petits oignons

Une fois n’est pas coutume, commençons par la fin.

La solution de laboratoire de pentest en local mise à disposition par Oliver Wiegers sur Github est une oeuvre d’art. Bravo à lui !

J’ai donc installé le lab sur un PC Ubuntu pour savoir si cela était aussi intéressant qu’il y paraissait.

sudo apt install docker docker-compose docker.io jq python3-pip
sudo pip3 install yq
sudo ssh-keygen
$ git clone https://github.com/oliverwiegers/pentest_lab
$ cd pentest_lab
$ ./lab.sh -C
sudo ./lab.sh -u

L’installation prends beaucoup de temps notamment en raison de la mise à jour des outils de Kali Linux. Une fois le processus finalisé, les adresses IPs sont définies de manière statiques pour faciliter la connexion SSH à l’image Kali.

Tout fonctionne à merveille sur une instance Linux non virtualisée. Profitez-en bien !

Une fois cette étape passée, l’idée est de déterminer comme virtualiser ce laboratoire sous Windows. C’est là où les ennuis commencent.

Les options de virtualisation et leurs limites techniques

Le prototype étant fonctionnel, je me suis mis à tester plusieurs méthodes de virtualisation.

Pour rappel, 2 architectures principales existent. Les machines virtuelles (VM) ainsi que les conteneurs tels que la solution Docker permettent de virtualiser des applicatifs sur un système hôte tel que Microsoft Windows, Linux ou MacOS.

Pour compléter ce panorama technique, attardons-nous un instant sur 2 briques techniques de virtualisation sous Windows, WSL2 et Hyper-V:

En résumé, Hyper-V est la brique technique permettant de faire fonctionner des machines virtuelles dans Windows. WSL2 est la brique technique permettant de faire fonctionner des conteneurs Docker. Le fait que WSL2 repose lui-même sur une partie de l’architecture d’Hyper-V pour fonctionner permet d’assaisonner ce plat de spaghetti, que constitue le monde passionnant de la virtualisation.


Les options de virtualisation du prototype d’Oliver Wiegers sont donc les suivantes:

  1. L’installation d’une image Ubuntu directement dans Windows via l’usage de WSL 2
  2. L’installation d’une image Ubuntu via l’éditeur Canonical et sa solution Multipass (qui utilise WSL2)
  3. L’usage de Docker Desktop sous Windows reposant soit sur Hyper-V soit sur WSL2.

Concernant la première option, l’installation de l’image Ubuntu dans Windows via WSL2 s’est bien déroulée. Lancer le script d’installation est possible mais je ne suis jamais parvenu à finaliser son installation. Le script bloque systématiquement dans la mise à jour de Kali Linux sans que je ne parvienne à avoir des logs d’erreurs détaillés du problème.

Concernant la seconde option, l’utilisation de la solution Multipass de Canonical fonctionne de manière similaire à Docker. Ainsi, le lancement de l’outil en ligne de commande via Powershell sous Windows fonctionne bien (cf. l’article de Stephane Robert bien utile sur le sujet). Malheureusement, dès que j’essaye de générer une image avec une taille de disque suffisamment importante pour le prototype, la génération de l’image rentre en conflit avec Hyper-V et il m’est impossible de générer une adresse IP pour l’image.

Ma troisième et dernière option est donc l’usage de Docker Desktop avec WSL 2 pour générer une image Ubuntu comportant elle-même un Docker-compose permettant de builder le prototype. Pour que Docker-compose fonctionne, il est nécessaire de prendre une image avec SystemD installé, ce qui n’est pas le cas dans l’image par défaut d’Ubuntu fournie dans Docker.

$ docker run -d --name systemd-ubuntu --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro jrei/systemd-ubuntu
$ docker exec -it systemd-ubuntu /bin/bash
$ apt update && apt full-upgrade
$ systemctl start docker

Finalement, cette troisième et dernière solution fonctionne et me permet d’utiliser le lab de pentest en local !


En synthèse, ce prototype m’aura permis de creuser les solutions de virtualisation Linux sous Windows afin d’héberger le laboratoire de Pentest créé par Oliver Wiegers. Ces solutions multiples et variées sont intéressantes à explorer pour comprendre la philosophie des outils mais aussi les compromis à réaliser entre légèreté et capacités de configurer les outils. Les échecs rencontrés ont été au final formateurs et instructifs pour comprendre l’état actuel du marché dans le domaine.

« Le succès, c’est l’échec de l’échec. »

Delphine Lamotte

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *