Avoir son lab, perso ou au travail est la promesse de la progression. De pouvoir casser et recommencer, s’entraîner, développer, tester des attaques et des outils.
Pourtant, la mise en place d’un lab peut être longue et fastidieuse, il faut parfois plusieurs mois pour atteindre un résultat satisfaisant qui sera dans tous les cas difficile à reproduire. Ludus permet de pallier ce problème : en effet cet outil basé sur Ansible permet de déployer relativement facilement des labs complexes sur des hyperviseurs.

Ci-dessus la promesse de Ludus, transformer un “simple” fichier de configuration en un lab démarré et exploitable.
Ici j’explique quelques rudiments du fonctionnement de Ludus et vous montre comment déployer votre propre lab. Pour cela, je vous propose de partir sur un environnement avec Proxmox.
A la fin de cet article, nous aurons compris comment fonctionne Ludus et déployé notre premier range qui sera ainsi :

Prérequis
Hardware
Au niveau hardware je dispose d’une tour dédiée et hébergée chez un copain avec le setup suivant :
- AMD Ryzen 7 3700X 8-Core Processor
- NVIDIA Corporation TU104 [GeForce RTX 2070 SUPER] ( pour faire un peu de ML )
- 94 Gi de RAM
- 2 To de disque
La tour susnommée a déjà servi pour des projets plus ou moins foireux ces dernières années mais reste un compagnon fidèle. On espère qu’elle suffira dans cette aventure. Notez que pour la plupart des labs, un setup plus restreint peut également être suffisant. On pourra déployer notre range de trois machines à partir de 16go de RAM.
Mise en place de l’OS
Un rappel rapide sur les deux grandes familles d’hyperviseurs :
- Le Type 2 (Hosted) : C’est un logiciel qui s’installe sur votre OS habituel (comme VirtualBox sur Windows). C’est pratique pour tester, mais vous perdez en performance car l’OS hôte consomme déjà beaucoup de ressources.
- Le Type 1 (Bare Metal) : C’est un système d’exploitation à part entière qui s’installe directement sur le matériel (ex: Proxmox, ESXi). C’est la solution “pro” : il n’y a aucune couche inutile entre vos VMs et votre processeur.
Pour ce projet, nous avons opté pour Proxmox, un Type 1 basé sur Debian. Il s’agit d’un hyperviseur assez fiable et open source qui bénéficie d’une bonne communauté. Il est tout à fait suffisant pour des projets comme celui-ci.
Afin d’installer Proxmox, le guide suivant est assez détaillé sur le sujet : https://pve.Proxmox.com/wiki/Installation. En somme cela ressemble à n’importe quelle installation de système d’exploitation sauf que cette fois il s’agit d’installer notre hyperviseur de type 1.

Exemple d’un promox installé
- Pour plus de sécurité, j’accède à mon range grâce à wireguard, qui se connecte à la box derrière laquelle est hébergée la tour. De manière générale il est peu souhaitable d’exposer son interface de gestion de Proxmox sur Internet.
Ludus (Le “Game Changer”)
La mise en place d’un environnement Active Directory complet avec des clients, un contrôleur de domaine, des outils de monitoring et des configurations réseau cohérentes peut prendre des jours ( et être très chiant). C’est là que Ludus va nous aider.
Ludus est un outil de déploiement d’infrastructure (Infrastructure-as-Code) spécialement conçu pour créer des lab. Ludus va commander à Proxmox de créer, configurer et lier vos machines entre elles en fonction d’architectures que nous aurons préconfigurées.
Ses points forts :
- Rapidité : On passe de plusieurs jours de configuration manuelle à quelques minutes (le temps de la construction et du déploiement des images).
- Reproductibilité : Si vous cassez tout (ce qui peut régulièrement arriver), vous pouvez raser le lab et le reconstruire à l’identique d’une seule commande.
- Prêt pour les tests : Il facilite l’intégration d’outils comme Ghostwriter, la suite Elastic pour le monitoring, ou des environnements AD déjà durcis ou vulnérables selon vos besoins
Architecture de Ludus
De manière schématique voici comment est fait un range ludus :

Les template sont des VM-types précontruits par Ludus quand on fait ludus template build . Les VM sont des clones liés à leur template d’origine. Clone lié signifie que le disque de la VM ne stocke que la différence avec le template d’origine ce qui sauvegarde beaucoup d’espace.
Le réseau
Enfin on peut remarquer la VM Network en rouge, celle-ci est chargée de faire communiquer toutes les VM entre elles. Par défaut aucune segmentation réseau n’est appliquée. Cependant dans la configuration, on choisira pour chaque machine un VLAN et chaque machine de même VLAN sera sur la même interface réseau virtuelle. Voici un schéma simplifié du fonctionnement du réseau dans ludus :

Ainsi les VM sur le même VLAN peuvent communiquer entre elles sans passer par la VM network ( appelée router dans ludus ) mais pour aller du VLAN 1 au VLAN 2, on passera nécessairement par la VM Network.
- A noter que l’ID de VLAN est une abstraction qui concerne uniquement l’hyperviseur pour pouvoir segmenter les réseaux de mêmes adresses. Pour les machines virtuelles cela est complètement transparent.
Déploiement des rôles
Pour finir sur l’architecture de ludus il nous faut parler des rôles Ansible. En Ansible, un rôle est une tâche reproductible et paramétrable via ses variables pour atteindre un état. Ex : un serveur web avec apache déployé. En utilisant un ensemble de rôles, ludus va faire des tâches de configuration sur notre hyperviseur :
- déploiement des VM
- démarrage des VM
- installation et configuration du réseau
Une fois cela fait on peut utiliser les rôles prédéfinis dans ludus ou ajouter les nôtres pour configurer notre range.
Installation de Ludus : La simplicité avant tout
Voici comment installer Ludus sur notre noeud Proxmox :
Le Script magique
L’installation se fait via une simple ligne de commande fournie par la documentation officielle :
curl -sS https://install.ludus.cloud | sudo bash . L’installation se fera dans /opt/ludus et régulièrement vous pourrez lancer la commande ludus-install-status pour vérifier où en est l’installation.
Création d’un utilisateur
Afin d’utiliser Proxmox, vous devrez créer au moins un utilisateur. Si vous voulez mettre en place votre installation pour plusieurs personnes vous pourrez également en ajouter de nouveaux par la suite.
Récupérez la clef d’API ainsi :
| |
Ainsi que l’indique la documentation vous pouvez créer votre premier utilisateur ainsi :
| |
Notez bien votre nouvelle clef d’API renvoyée par la commande. Vous pouvez même la sauvegarder dans votre bashrc pour l’utiliser plus tard :
| |
Ainsi, votre nouvelle clef d’API vient remplacer la clef d’API root qui ne permet pas à l’utilisateur courant de créer des template, VM, etc…
Construction des templates
Les template sont les modèles qui vont servir à construire vos VM, vous pouvez les lister ainsi :
| |
Au niveau de Proxmox, chaque VM se comportera comme un clone lié à un template, c’est à dire qu’elle sera commune en tout point avec la VM template jusqu’à ce qu’on la modifie pour la personnaliser à nos besoins.
Maintenant on peut lancer :
| |
Vous pouvez maintenant aller prendre un café, puis regarder Titanic et reprendre un autre café.
Mise en place d’un premier range
Chaque utilisateur a son propre range, nommé en fonction de l’id de l’utilisateur. De cette manière, si vous voulez gérer plusieurs range, créer plusieurs utilisateurs est la façon la plus ludus-friendly.
A tout moment vous pouvez faire :
| |
Ci-dessus, vous pouvez voir que je viens de tester un nouvel environnement puis que je l’ai détruit.
Maintenant créons notre premier environnement :
| |
Maintenant copiez-collez la configuration suivante :
| |
Ci-dessus nous créons un range extrêmement basique avec un AD, une workstation et une machine virtuelle kali. Nous définissons également un domaine : ludus.network qui sera joint par notre workstation.
Pour les habitués d’Ansible vous pourrez remarquer que le format est très proche et de fait, ludus est basé sur Ansible. Sinon je vous suggère de faire un tour sur la très bonne formation de Stéphane Robert sur le sujet : https://blog.stephane-robert.info/docs/infra-as-code/gestion-de-configuration/Ansible
Au fur et à mesure, nous pourrons utiliser nos propres rôles dans la configuration de notre range.
On peut désormais appliquer notre configuration :
| |
Puis lancer le déploiement :
| |
Enfin vous pourrez suivre le déploiement de votre lab au fur et à mesure :
| |
- En cas de besoin vous pourrez toujours supprimer le lab actuel avec la commande :
ludus range destroy
Utilisation de notre lab
Maintenant que notre lab est déployé on peut désormais y accéder sur notre hôte Proxmox :
Ex en double-clickant sur la vm ...-ad-win11-22h2-enterprise-x64-1 qui est notre contrôleur de domaine :

Remarquez que grâce à ludus, vous êtes automatiquement connecté à la VM.
Maintenant si on essaye de se connecter à la workstation :

Cette fois, la magie n’opère pas. En effet, dans les paramètres de la VM nous avions définit :
| |
Cependant, cet utilisateur n’existe pas au niveau du domaine, il faut maintenant modifier les paramètres de notre range pour ajouter cet utilisateur automatiquement.
Utiliser un rôle prédéfini
Dans la doc ludus vous trouverez [https://docs.ludus.cloud/docs/roles](tous les rôles prédéfinis dans ludus) . Ici on va utiliser https://github.com/Cyblex-Consulting/ludus-ad-content pour ajouter automatiquement notre utilisateur au démarrage du lab.
On commence par installer le rôle nécessaire :
| |
Désormais, en suivant la documentation du rôle on peut modifier la VM AD ainsi :
| |
On ajoute donc plusieurs OU, groupes et notre fameux utilisateur.
On applique notre nouvelle conf :
| |
Afin de ne pas relancer tout le déploiement de notre range, on peut lancer la commande suivante pour déployer uniquement ce rôle :
| |
Cette fois on peut se logger avec notre nouvel utilisateur sur la machine de travail :

Ajouter des template à ludus
On pourrait avoir besoin d’ajouter des templates supplémentaires à notre range. On peut utiliser tous les templates disponibles ici : https://gitlab.com/badsectorlabs/ludus/-/tree/main/templates?ref_type=heads
Pour en installer de nouveaux ( ex ubuntu ), on peut faire :
| |
On peut vérifier avec la commande ludus template list
Enfin, on peut construire notre nouveau template avec la commande :
| |
Limites
Une des grandes limites de Ludus est son système de routage. En effet, bien que très simple pour commencer il pose un problème : on ne peut pas utiliser son propre firewall ni son propre router pour simuler son réseau. Or les équipements réseau sont des cibles de choix pour les attaquants et pour les défenseurs dans un réseau car tout passe par eux mais nous ne pouvons pourtant pas personnaliser cet aspect. Si cet article vous plaît je vous montrerai par la suite comment tordre le bras à Ludus avec Ansible pour résoudre ce problème.
Mot de la fin
C’est tout pour ce blog en espérant qu’il vous sera utile ! Rendez-vous bientôt pour la suite du contenu ;)