
Table des matières
Pourquoi monter son lab ?
Apprendre la cybersécurité, que ce soit par son côté défensif ou offensif, c’est avant tout explorer un domaine vaste et faire des expériences. Il est important d’avoir à disposition un environnement sécurisé, facile à maintenir et isolé de ses outils communs, pour éviter toute catastrophe… ou d’avoir à être trop prudent.
Faire des erreurs c’est très important, et aujourd’hui nous te proposons de monter l’environnement idéal pour se planter en toute tranquillité !
Plan du lab en 3 mots
Pour te permettre de découvrir un maximum de choses, le choix a été fait de proposer plusieurs options, autant au niveau des machines offensives que des machines cibles.
Machines offensives
- Kali Linux : un grand classique, qui est une distribution Linux spécialisée pour les activités offensives et embarque énormément d’outils très communs dans le domaine
- Ubuntu avec Exegol : une philosophie différente, basée sur des containers jetables, beaucoup d’outils offensifs préconfigurés et une communauté active
Machines cibles
- Juice Shop : le grand classique des systèmes vulnérables pour apprendre les attaques Web progressivement, avec un système de gamification et beaucoup de challenges
- Metasploitable3 : le terrain d’entrainement idéal pour apprendre à utiliser des exploits connus via le framework Metasploit, divisé en deux machines vulnérables, une Ubuntu et un Windows Server
Quelques notions
Avant de se lancer tête baissé dans la procédure de déploiement, nous conseillons fortement de lire (même rapidement) le petit résumé des notions utilisées dans ce guide.
Même si ce n’est pas un cours à part entière, survoler les grands principes qui serviront de base à ce lab permettra de mieux comprendre les choix qui ont été faits et de diagnostiquer plus rapidement en cas de problème.
Virtualisation imbriquée
Certaines architectures proposées dans ce guide utiliseront la virtualisation imbriquée ou « nested virtualization » en anglais.
La virtualisation imbriquée est une fonctionnalité qui permet à un hyperviseur (VirtualBox, VMWare Workstation, Hyper-V, Proxmox, etc…) d’exécuter des machines virtuelles à l’intérieur d’autres machines virtuelles.
Source : https://learn.microsoft.com/fr-fr/virtualization/hyper-v-on-windows/user-guide/nested-virtualization

Il est possible de l’activer lors de la configuration d’une machine virtuelle, en choisissant de virtualiser… les fonctionnalités de virtualisation du processeur (ici, Intel VT-x/EPT ou AMD-V/RVI).

Sans cette fonctionnalité, une machine virtuelle ne pourra pas fournir la couche de virtualisation matérielle nécessaire à l’exécution d’un hyperviseur, et un message d’erreur sera produit par celui-ci.

Infrastructure-As-Code
Certains outils utilisés dans ce guide se basent sur le principe d’Infrastructure-as-Code ou IaC.
L’idée de l’IaC est de permettre de déployer et/ou de configurer des éléments d’infrastructure uniquement à travers des fichiers de configuration standardisés.
Ces fichiers de configuration sont ensuite utilisé pour déployer et configurer les ressources sans qu’aucune autre interaction ne soit nécessaire.
Source : https://en.wikipedia.org/wiki/Infrastructure_as_code
Dans le cas de ce lab, l’IaC permet de télécharger et déployer des machines virtuelles d’entrainement préconfigurées en une seule commande, plutôt que d’avoir à configurer et adapter les images à chaque environnement.
Source : https://www.cbtnuggets.com/blog/technology/programming/infrastructure-as-code-iac

Containers
Certaines architectures utiliseront des containers via Docker, notamment pour utiliser l’environnement de pentest appelé Exegol.
La technologie des containers est un dérivé de la virtualisation permettant d’exécuter chaque ensemble d’application (appelé une image) dans un espace isolé et dédié.
Là ou la virtualisation classique demande de dédier un système d’exploitation entier par environnement isolé, les containers partagent le même noyau système et l’isolation est assurée par le moteur de conteneurisation lui-même (Docker Engine pour Docker).
Source : https://www.docker.com/resources/what-container/

Concrètement, l’utilisation correcte d’une image Docker permet de s’assurer que l’ensemble des applications voulues seront configurées exactement de la même façon à chaque nouveau déploiement, que le système hôte soit protégé d’une mauvaise utilisation dans le container, et que les données présentes dans le container soient isolées du reste.
Bien entendu, aucun de ces principes n’est correct si les containers sont mal configurés ou mal utilisés… attention aux bonnes pratiques de sécurité !
Source : https://docs.docker.com/engine/security/
LVM chiffré
Lors de l’installation des systèmes Linux offensifs, nous proposons de gérer le stockage (partitionnement et gestion des disques) via LVM (Logical Volume Manager) en activant le chiffrement, plutôt que de conserver les options par défaut.
L’utilisation de LVM permettra de gérer des volumes logiques, ce qui facilite largement les opérations courantes, comme l’ajout d’espace une fois l’installation terminée.

Source : https://www.jjworld.fr/lvm-logical-volume-manager/
Un autre grand avantage est de pouvoir chiffrer tout un ensemble de partitions (donc un disque entier) avec un seul mot de passe, ce que nous allons faire.
Chiffrer le disque d’un système Linux est une mesure de sécurité supplémentaire qui empêche l’accès aux données sans posséder la clé de déchiffrement.
Sans cette clé, il est impossible de monter le disque sur un autre système pour y accéder.
Dans le cas d’une machine virtuelle, le disque est stocké sous forme de fichier sur le système hôte… et ce fichier sera donc chiffré, ce qui empêche ce dernier d’interférer avec la machine virtuelle.
Bien entendu, chiffrer également le disque de votre système hôte est conseillé (via LVM/LUKS ou Bitlocker) pour compléter la chaine.
Source : https://en.wikipedia.org/wiki/Linux_Unified_Key_Setup
Source : https://learn.microsoft.com/en-us/windows/security/operating-system-security/data-protection/bitlocker/
Choix d’architecture
Prérequis
CPU : 4 Coeurs
RAM : 16 GB minimum
Stockage : 150 GB minimum
Data/Téléchargement : Environ 100 GB
Privilèges : Administrateur local / Root et accès au BIOS
Architecture sous Linux
La procédure de déploiement de lab ci-dessous est conçue pour fonctionner sur n’importe quel OS dérivé de Debian (Ubuntu, Kali, etc…).
Aucun paramétrage supplémentaire n’est requis pour activer la virtualisation imbriquée au contraire des OS Windows.
Les machines cibles pourront être déployées au choix sur le système Linux hôte, ou en virtualisation imbriquée à l’intérieur des machines offensive.
Ci-dessous, tu trouveras un exemple d’architecture Linux sans virtualisation imbriquée

Ci-dessous, tu trouveras un exemple d’architecture Linux avec virtualisation imbriquée

Installation d’un hyperviseur
Activer la virtualisation dans le BIOS
Avant de commencer, accède au BIOS de ta machine et vérifie que les options de virtualisations sont activées (appelées SVM pour les processeurs AMD ou VT-x pour les processeurs Intel).
Pour obtenir la procédure exacte d’activation de la virtualisation, fait une recherche spécifique en fonction de la carte mère utilisée ou de la marque du laptop.
Pour accéder au BIOS sur n’importe quel système, il faudra redémarrer la machine et appuyer sur la touche indiquée.

Installer VirtualBox
Lance l’installation de VirtualBox en utilisant le gestionnaire de paquet de votre OS, ici apt pour Ubuntu.
sudo apt update && sudo apt install virtualbox virtualbox-ext-pack

Source : https://www.virtualbox.org/wiki/Downloads
Installer VmWare Workstation (optionnel)
La gestion des machines offensives peut également se faire via VMWare Workstation, plutôt que VirtualBox.
Note que toutes les VM cibles seront installée via VirtualBox (Windows ou Linux) et que ce guide ne permet pas de construire un lab entièrement via VMWare Workstation.
Rends-toi à l’adresse ci-dessous et sélectionne « Download fusion or workstation ».
Source : https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion

Crée un compte Broadcom et connecte-toi sur le site.

Sélectionne « VmWare Workstation Pro » sur la page 2 et choisi la dernière version disponible, ici « VmWare Workstation Pro 17.0 for Linux ».
Source : https://support.broadcom.com/group/ecx/downloads

Ouvre un terminal et donne les droits d’exécution au script d’installation, puis lance le script pour installer VMWare Workstation.
chmod +x VMware-Workstation-Full-17.6.2-24409262.x86_64.bundle
sudo ./VMware-Workstation-Full-17.6.2-24409262.x86_64.bundle

Lance Workstation avec la commande vmware pour confirmer que l’installation a bien été réalisée.

Installation des machines offensives
Kali Linux
Télécharge la dernière version de l’ISO Kali à l’adresse suivante en choisissant « Installer Images ».
Source : https://www.kali.org/get-kali/#kali-platforms

Crée une nouvelle machine virtuelle en sélectionnant l’ISO Kali comme média d’installation.

Clique sur « Hardware » puis augmenter la mémoire à 4 GB et attribuer 4 cœurs au minimum.

Clique sur « Hard Disk » puis attribue 40 GB de stockage minimum.

Valide la configuration en cliquant sur « Finish », puis clique sur « Démarrer » et sélectionne « Graphical Install ».

Sélectionne les options de langage et de clavier souhaitées, puis nomme la nouvelle machine.

Nomme le nouvel utilisateur et choisi son mot de passe.

Choisi de partitionner le disque en utilisant LVM en mode chiffré (encrypted LVM).
Le chiffrement du disque permet d’ajouter un niveau de sécurité/cloisonnement supplémentaire entre les données de la machine hôte et celles de la machine virtuelle.
Le mot de passe permettant de déchiffrer le disque sera demandé à la prochaine étape, et devra être saisi à chaque démarrage de la machine virtuelle.

Laisse les autres options par défaut et valide les changements lors de la dernière étape en cochant « Yes ».

Une fois les changements appliqués, valide une dernière fois la configuration des partitions en sélectionnant « Yes ».

Choisi l‘environnement de bureau souhaité et valide la sélection d’outils.

Sélectionne la partition /dev/sda disponible pour l’installation du GRUB boot loader et valide.

Termine l’installation en sélectionnant « Continue ».

Ubuntu
Télécharge la dernière version de l’ISO Ubuntu LTS à l’adresse suivante.
Source : https://ubuntu.com/download/desktop

Crée une nouvelle machine virtuelle en sélectionnant l’ISO correspondant comme média d’installation.

Modifie les paramètres Hardware pour attribuer au minimum 4 GB de mémoire, un processeur avec 4 cœurs et 80 GB de stockage.

Démarre la machine virtuelle et clique sur « Install Ubuntu ».

Suit les mêmes étapes que pour l’installation de Kali Linux ci-dessus et laisse les options par défaut à l’exception du chiffrement du disque, puis sélectionne « Advanced features » et enfin « Use LVM and encryption ».

Renseigne les informations de base du système et de l’utilisateur, puis termine l’installation.

Docker sous Ubuntu
Une fois l’installation d’Ubuntu terminée, démarre la machine et lance un terminal.
Ouvre le fichier sources.list et commente la ligne se trouvant à l’intérieur.
sudo nano /etc/apt/sources.list

Sauvegarde les modifications avec [CTRL + x], [Y] et [Enter], puis met à jour la liste des paquets et vérifie qu’il n’y a pas d’erreur.
sudo apt update

Puis, télécharge les derniers outils nécessaires avant d’installer Docker et de configurer l’environnement.
# Installer l'outil Curl
sudo apt install curl
# Lancer l'installation de Docker via le script d'installation
curl -fsSL "https://get.docker.com/" | sh
# Ajouter l'utilisateur actuel au groupe Docker
sudo usermod -aG docker $(id -u -n)
# Recharger les groupes pour l'utilisateur
newgrp docker
# Tester le bon fonctionnement de Docker
docker run hello-world

Source : https://docs.docker.com/engine/install/
Exegol sous Ubuntu
Installe les prérequis pour Exegol, puis lance l’installation d’une image.
# Installer pipx
sudo apt install pipx
# Cloner et installer Exegol
pipx install exegol
pipx ensurepath
# Configurer l'alias pour lancer Exegol en tant que root
echo "alias exegol='sudo -E $(which exegol)'" >> ~/.bash_aliases source ~/.bashrc
# Installation d'une image Exegol
exegol install
Si l’erreur suivante est obtenue pour les modules docker ou git…

…installe manuellement les paquets manquants.
python3 -m pip install docker --break-system-packages
python3 -m pip install --upgrade -r requirements.txt --break-system-packages

Accepte l’installation de l’image par défaut (nightly).

Source : https://exegol.readthedocs.io/en/latest/getting-started/install.html
Installation des machines cibles
Pour cette section, nous aurons besoin d’installer une instance de Juice Shop et une instance de Metasploitable3.
Si le choix est fait de déployer les machines cibles sur Linux, l’utilisateur aura le choix entre un déploiement via Docker ou via VirtualBox (Vagrant).
Juice Shop via Docker
Source : https://docs.docker.com/engine/install/
Source : https://github.com/juice-shop/juice-shop
Télécharge les outils nécessaires avant d’installer Docker et de configurer l’environnement.
# Installer l'outil Curl
sudo apt install curl
# Lancer l'installation de Docker via le script d'installation
curl -fsSL "https://get.docker.com/" | sh
# Ajouter l'utilisateur actuel au groupe Docker
sudo usermod -aG docker $(id -u -n)
# Recharger les groupes pour l'utilisateur
newgrp docker
# Tester le bon fonctionnement de Docker
docker run hello-world

Télécharge l’image Juice Shop et lance le container.
sudo docker pull bkimminich/juice-shop
sudo docker run --rm -p 127.0.0.1:3000:3000 bkimminich/juice-shop
L’instance Docker est accessible à l’URL http://127.0.0.1:3000.

Juice Shop via VirtualBox
Source : https://developer.hashicorp.com/vagrant/docs/installation
Pour déployer les VMs VirtualBox de façon standardisée, nous allons utiliser l’Infrastructure as Code à travers Vagrant.
Commence par installer Vagrant.
# Récupérer la clé PGP Hashicorp
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
# Mettre à jour les sources.list pour préparer l'installation
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
# Et installer vagrant via le packet manager
sudo apt update && sudo apt install vagrant
Puis télécharge le fichier de configuration pour Juice Shop.
git clone https://github.com/juice-shop/juice-shop.git
Pour finir, déplace-toi dans le répertoire juice-shop/vagrant et lance le déploiement de Juice Shop.
vagrant up

Une fois la machine démarrée, Juice Shop sera accessible à l’IP 192.168.56.110.

Metasploitable3
Source : https://github.com/rapid7/metasploitable3
Source : https://developer.hashicorp.com/vagrant/docs/installation
Télécharge le fichier de configuration Vagrant puis lance vagrant pour télécharger et déployer les deux VM sur VirtualBox.
mkdir metasploitable3-workspace
cd metasploitable3-workspace
curl -O https://raw.githubusercontent.com/rapid7/metasploitable3/master/Vagrantfile && vagrant up

Si un message d’erreur indique un problème d’adresse IP, modifie le fichier de configuration Vagrantfile et active le DHCP pour le système concerné.

Remplace l’IP par type: « dhcp » et enregistre les modifications.

Puis relance Vagrant pour appliquer la configuration.
vagrant up
Ouvre VirtualBox et vérifie que les VM ont bien été ajoutées.
virtualbox

Pour obtenir l’IP cible de la VM Windows, connecte-toi avec les identifiants vagrant::vagrant et ouvre un PowerShell.
ipconfig

Pour obtenir l’IP cible de la VM Ubuntu, connecte-toi avec les identifiants vagrant::vagrant et utilise le terminal.
ifconfig eth0
