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 vous proposons de monter l’environnement idéal pour se planter en toute tranquilité !
Plan du lab en 3 mots
Pour vous 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 configurations 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 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
La procédure de déploiement de lab ci-dessous est conçue pour fonctionner sur n’importe quel OS Windows récent (Windows 10 & 11), et ne nécessite pas de désactiver les fonctionnalités basées sur la virtualisation Windows (Hyper-V, Credentials/Device Guard, Isolation du noyau, etc…).
Ces fonctionnalités peuvent empêcher l’utilisation de virtualisation imbriquée (c.a.d. exécuter une machine virtuelle dans une machine virtuelle) et ne sont plus désactivables (ou difficilement) dans les versions récentes de Windows.
Source : https://learn.microsoft.com/fr-fr/virtualization/hyper-v-on-windows/user-guide/nested-virtualization
Parmi ces fonctionnalités, on retrouve des mesures de sécurité basées sur la virtualisation Hyper-V (aussi appelées VBS), notamment l’isolation du noyau Windows, l’intégrité de la mémoire ou la protection des identifiants (Credential Guard), qui isolent ces composants critiques dans des environnements virtualisés.
Les désactiver présente un risque supplémentaire pour l’utilisateur et nous conseillons de garder les paramètres par défaut dans la mesure du possible.
Source : https://learn.microsoft.com/fr-fr/windows-hardware/design/device-experiences/oem-vbs
Les machines offensives pourront être déployées suivant les préférences sur VirtualBox, VMWare Workstation, ou autre hyperviseur au choix.
Les machines cibles, elles, seront déployées en utilisant l’outil Vagrant (IaC) sur l’hôte Windows via VirtualBox uniquement.
Pour rappel, Vagrant est un outil permettant de déployer rapidement et simplement des machines virtuelles à partir de fichiers de configuration standard, ce qui permet d’automatiser et de simplifier cette étape.
Source : https://developer.hashicorp.com/vagrant/intro
Ci-dessous, vous trouverez un exemple d’architecture Windows sans virtualisation imbriquée
Installation d’un hyperviseur
Activer la virtualisation dans le BIOS
Accéder au BIOS de la machine et vérifier 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, faire 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, redémarrer la machine et appuyer sur la touche indiquée.
Sous Windows, il est aussi possible d’y accéder simplement en maintenant la touche [SHIFT] enfoncée lors d’un redémarrage.
Une fois le système redémarré, choisir l’option « Dépannage ».
Puis choisir l’option « Changer les paramètres du microprogramme UEFI » et valider le choix.
Installer VirtualBox
Télécharger VirtualBox et l’Extension Pack à l’adresse ci-dessous.
Source : https://www.virtualbox.org/wiki/Downloads
Lancer l’installation de VirtualBox en conservant les options par défaut et cliquer sur « Suivant ».
Autoriser l’installation des composants manquants et terminer l’installation.
Lancer l’installation du pack d’extension pour terminer la procédure.
Installer VmWare Workstation (optionnel)
La gestion des machines offensives peut également se faire via VMWare Workstation, plutôt que VirtualBox.
Notez que toutes les VM cibles seront installée via VirtualBox et que ce guide ne permet pas de construire un lab entièrement via VMWare Workstation.
Se rendre à l’adresse ci-dessous et sélectionner « Download fusion or workstation ».
Source : https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion
Créer un compte Broadcom et s’y connecter.
Sélectionner « VmWare Workstation Pro » sur la page 2 et choisir la dernière version disponible.
Source : https://support.broadcom.com/group/ecx/downloads
Cliquer sur l’icone de téléchargement à droite de la page et rentrer les informations demandées pour valider la requête, puis cliquer à nouveau sur l’icone de téléchargement pour obtenir l’installer.
Lancer l’installation et cocher « Install Windows Hypervisor Platform », puis cliquer sur « Suivant » et terminer l’installation.
Installation des machines offensives
Kali Linux
Télécharger la dernière version de l’ISO Kali à l’addresse suivante en choisissant « Installer Images ».
Source : https://www.kali.org/get-kali/#kali-platforms
Créer une nouvelle machine virtuelle en sélectionnant l’ISO Kali comme média d’installation.
Cliquer sur « Hardware » puis augmenter la mémoire à 4 GB et attribuer 4 cœurs au minimum.
Cliquer sur « Hard Disk » puis attribuer 40 GB de stockage minimum.
Valider la configuration en cliquant sur « Finish », puis cliquer sur « Démarrer » et sélectionner « Graphical Install ».
Sélectionner les options de langage et de clavier souhaitées, puis nommer la nouvelle machine.
Nommer le nouvel utilisateur et choisir son mot de passe.
Choisir 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 vous sera demandé à la prochaine étape, et devra être saisi à chaque démarrage de la machine virtuelle.
Laissez les autres options par défaut et valider les changements lors de la dernière étape en cochant « Yes ».
Une fois les changements appliqués, valider une dernière fois la configuration des partitions en sélectionnant « Yes ».
Choisir l’environnement de bureau souhaité et valider la sélection d’outils.
Sélectionner la partition /dev/sda disponible pour l’installation du GRUB boot loader et valider.
Terminer l’installation en sélectionnant « Continue ».
Exegol sous Ubuntu
Télécharger la dernière version de l’ISO Ubuntu LTS à l’addresse suivante.
Source : https://ubuntu.com/download/desktop
Créer une nouvelle machine virtuelle en sélectionnant l’ISO correspondant comme média d’installation.
Modifier 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émarrer la machine virtuelle et cliquer sur « Install Ubuntu ».
Suivre les mêmes étapes que pour l’installation de Kali Linux ci-dessus et laisser les options par défaut à l’exception du chiffrement du disque, puis sélectionner « Advanced features » et enfin « Use LVM and encryption ».
Renseigner les informations de base du système et de l’utilisateur, puis terminer l’installation.
Docker sous Ubuntu
Une fois l’installation d’Ubuntu terminée, démarrer la machine et lancer un terminal.
Ouvrir le fichier sources.list et commenter la ligne se trouvant à l’intérieur.sudo nano /etc/apt/sources.list
Sauvegarder les modifications avec [CTRL + x], [Y] et [Enter], puis mettre à jour la liste des paquets et vérifier qu’il n’y a pas d’erreur.sudo apt update
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
Installer les prérequis pour Exegol.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
…
…installer manuellement les paquets manquantspython3 -m pip install docker --break-system-packages
python3 -m pip install --upgrade -r requirements.txt --break-system-packages
Sinon, le téléchargement de l’image commencera
Accepter 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
Source : https://git-scm.com/downloads/win
Source : https://github.com/juice-shop/juice-shop
Installer Git pour Windows avec les options par défaut puis lancer Git bash et cloner le dépôt Juice Shop.git clone https://github.com/juice-shop/juice-shop.git
Ouvrir un PowerShell, naviguer jusqu’au dossier juice-shop/vagrant et installer la VM.cd D:/Labs/VMs/juice-shop/vagrant
vagrant up
Ouvrir VirtualBox et vérifier que la VM a bien été ajoutée.
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
Ouvrir un PowerShell en administrateur et se déplacer dans le dossier des VMs, puis créer un dossier dédié et se déplacer à l’intérieur.cd C:\Labs\VMs
mkdir metasploitable3-workspace
cd metasploitable3-workspace
Télécharger le fichier de configuration Vagrant puis lancer vagrant pour télécharger et déployer les deux VM sur VirtualBox.Invoke-WebRequest -Uri "https://raw.githubusercontent.com/rapid7/metasploitable3/master/Vagrantfile" -OutFile "Vagrantfile"
vagrant up
Si un message d’erreur indique un problème d’addresse IP, modifier le fichier de configuration Vagrantfile
et activer le DHCP pour le système concerné.
Remplacer l’IP par type: "dhcp"
et enregistrer les modifications.
Ouvrir VirtualBox et vérifier que les VM a bien été ajoutées.
Pour obtenir l’IP cible de la VM Windows, se connecter avec les identifiants vagrant::vagrant
, ouvrir un PowerShell et taper ipconfig
Pour obtenir l’IP cible de la VM Ubuntu, se connecter avec les identifiants vagrant::vagrant
et taper ifconfig eth0