
Créer des VM aléatoirement non sécurisées
SecGen crée des machines virtuelles vulnérables, des environnements de laboratoire et des défis de hacking, afin que les étudiants puissent apprendre les techniques de test d'intrusion en sécurité.
Des machines comme Metasploitable2 sont toujours identiques ; ce projet utilise Vagrant, Puppet et Ruby pour créer des machines virtuelles aléatoirement vulnérables qui peuvent être utilisées pour l'apprentissage ou pour héberger des événements CTF.
La dernière version est disponible à l'adresse : http://github.com/cliffe/SecGen/
Merci de répondre à une courte enquête pour nous dire comment vous utilisez SecGen.
Pour une solution hébergée, visitez : https://hacktivity.co.uk/
Les étudiants en sécurité informatique tirent profit de la participation à des défis de hacking. Le travail pratique en laboratoire et les défis de hacking préconfigurés sont une pratique courante tant dans l'enseignement de la sécurité que comme passe-temps pour les individus sensibles à la sécurité. Les défis de hacking compétitifs, tels que les compétitions de capture the flag (CTF), sont devenus incontournables lors des conférences du secteur et sont au cœur de grandes communautés en ligne. Les machines virtuelles (VM) offrent un moyen efficace de partager des cibles pour le hacking, et peuvent être conçues afin de tester les compétences de l'attaquant. Des sites web tels que Vulnhub hébergent des VM de défis de hacking préconfigurées et constituent une ressource précieuse pour ceux qui apprennent et perfectionnent leurs compétences en sécurité informatique. Cependant, développer ces défis de hacking prend du temps et, une fois créés, ils sont essentiellement statiques. C'est-à-dire qu'une fois le défi « résolu », il ne reste plus aucun défi pour l'étudiant, et si le défi est créé pour une compétition ou une évaluation, il ne peut pas être réutilisé sans risquer le plagiat et la collusion.
Security Scenario Generator (SecGen) génère des systèmes vulnérables randomisés. Les VM sont créées à partir d'une spécification de scénario, qui décrit les contraintes et les propriétés des VM à créer. Par exemple, un scénario pourrait spécifier la création d'un système présentant une vulnérabilité exploitable à distance qui entraînerait une compromission au niveau utilisateur, et une faille exploitable localement qui entraînerait une compromission au niveau root. Cela obligerait l'attaquant à découvrir et exploiter les deux vulnérabilités sélectionnées aléatoirement afin d'obtenir un accès root au système. Alternativement, le scénario défini peut être plus spécifique, en précisant certains types de services (tels que FTP ou SMB) ou même des vulnérabilités exactes (par CVE).
SecGen est une application Ruby, avec un langage de configuration XML. SecGen lit sa configuration, y compris les vulnérabilités, services, réseaux, utilisateurs et contenus disponibles, lit la définition du scénario demandé, applique une logique de randomisation du scénario, et s'appuie sur Puppet et Vagrant pour provisionner les VM requises.
SecGen est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la GNU General Public License telle que publiée par la Free Software Foundation, soit la version 3 de la Licence, soit (à votre choix) toute version ultérieure.
SecGen contient des modules, qui installent divers paquets logiciels. Chaque module SecGen peut contenir ou sourcer à distance des logiciels, et chaque module définit sa propre licence dans le fichier secgen_metadata.xml qui l'accompagne.
SecGen est développé et testé sur Ubuntu Linux. En théorie, SecGen devrait fonctionner sur Mac ou Windows, si vous avez tous les logiciels requis installés.
SecGen nécessite :
Il existe deux façons de l'installer. Les deux ont été testées à partir d'une installation Ubuntu fraîche.
Installez Docker et VirtualBox sur l'hôte, puis laissez docker/secgen-docker.sh construire un conteneur avec tout le reste. VirtualBox est toujours nécessaire sur l'hôte pour son pilote noyau. Voir docker/README.md.
git clone https://github.com/cliffe/SecGen.git
cd SecGen
docker/secgen-docker.sh run -s scenarios/default_scenario.xml
Installez VirtualBox depuis le dépôt d'Oracle. Le paquet virtualbox dans Ubuntu 24.04 (7.0.16) ne peut pas compiler son pilote noyau pour les noyaux HWE actuels, et Linux 7.0 nécessite VirtualBox 7.2.8 ou une version ultérieure :
sudo apt-get update
sudo apt-get install -y wget gpg lsb-release
wget -qO- https://www.virtualbox.org/download/oracle_vbox_2016.asc \
| sudo gpg --yes --dearmor -o /usr/share/keyrings/oracle-virtualbox-2016.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/oracle-virtualbox-2016.gpg] https://download.virtualbox.org/virtualbox/debian $(lsb_release -cs) contrib" \
| sudo tee /etc/apt/sources.list.d/virtualbox.list
sudo apt-get update
sudo apt-get install -y virtualbox-7.2
Si KVM est chargé, VirtualBox ne peut pas démarrer de VM tant que KVM détient VT-x (VERR_VMX_IN_VMX_ROOT_MODE). Sur les noyaux 6.12 et ultérieurs, vous pouvez les laisser coexister :
echo "options kvm enable_virt_at_load=0" | sudo tee /etc/modprobe.d/kvm-virtualbox.conf
sudo modprobe -r kvm_intel kvm_amd kvm; sudo modprobe kvm_intel || sudo modprobe kvm_amd
Les scénarios SecGen utilisent des plages réseau host-only en dehors de la plage par défaut de VirtualBox 192.168.56.0/21, donc autorisez n'importe quelle plage :
sudo mkdir -p /etc/vbox
echo '* 0.0.0.0/0 ::/0' | sudo tee /etc/vbox/networks.conf
Installez Vagrant depuis le dépôt de HashiCorp (Ubuntu 26.04 ne le fournit plus dans ses paquets, et les anciennes versions de Vagrant ne peuvent plus télécharger les boxes depuis Vagrant Cloud) :
wget -qO- https://apt.releases.hashicorp.com/gpg | sudo gpg --yes --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [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
sudo apt-get update
sudo apt-get install -y vagrant
Installez Ruby et les autres paquets requis :
sudo apt-get install -y git ruby-full ruby-dev build-essential patch pkg-config zlib1g-dev liblzma-dev \
imagemagick exiftool libpq-dev libcurl4-openssl-dev libxml2-dev libxslt1-dev graphviz libgraphviz-dev \
libpcap-dev libsqlite3-dev libgpgme-dev libyaml-dev libffi-dev libssl-dev
Clonez SecGen et installez les gems. Utilisez bundle install, et non bundle update : Gemfile.lock fixe des versions qui fonctionnent sur toutes les versions de Ruby prises en charge, et bundle update les remplace par les versions les plus récentes, ce qui peut ne pas être le cas.
git clone https://github.com/cliffe/SecGen.git
cd SecGen
sudo gem install bundler -v '~> 2.4'
sudo bundle install
Essayez ensuite le scénario par défaut (il télécharge la box de base depuis hacktivity.co.uk la première fois) :
ruby secgen.rb run
Remarques :