Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CyberBattleSim — Une plateforme d'expérimentation et de recherche pour étudier l'interaction d'agents automatisés dans des environnements réseau simulés abstraits. | Kitploit
Outils/GitHubGitHub/microsoft/cyberbattlesim
Mouvement LatéralTests d'IntrusionApprentissage AutomatiqueArticles et RechercheApprentissage et ÉducationRed Teaming
GitHubmicrosoft/cyberbattlesim

CyberBattleSim

Une plateforme d'expérimentation et de recherche pour étudier l'interaction d'agents automatisés dans des environnements réseau simulés abstraits.

Voir le dépôt
1.8k2851il y a 7 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CyberBattleSim

8 avril 2021 : Consultez l'annonce sur le blog de sécurité Microsoft.

CyberBattleSim est une plateforme de recherche expérimentale pour étudier l'interaction d'agents automatisés opérant dans un environnement réseau d'entreprise abstrait simulé. La simulation fournit une abstraction de haut niveau des réseaux informatiques et des concepts de cybersécurité. Son interface OpenAI Gym basée sur Python permet l'entraînement d'agents automatisés utilisant des algorithmes d'apprentissage par renforcement.

L'environnement de simulation est paramétré par une topologie de réseau fixe et un ensemble de vulnérabilités que les agents peuvent utiliser pour se déplacer latéralement dans le réseau. Le but de l'attaquant est de prendre possession d'une partie du réseau en exploitant des vulnérabilités implantées dans les nœuds informatiques. Pendant que l'attaquant tente de se propager dans le réseau, un agent défenseur surveille l'activité du réseau et tente de détecter toute attaque en cours et d'atténuer l'impact sur le système en expulsant l'attaquant. Nous fournissons un défenseur stochastique de base qui détecte et atténue les attaques en cours sur la base de probabilités de succès prédéfinies. Nous implémentons l'atténuation en ré-imagerie des nœuds infectés, un processus modélisé de manière abstraite comme une opération s'étendant sur plusieurs étapes de simulation.

Pour comparer les performances des agents, nous examinons deux métriques : le nombre d'étapes de simulation nécessaires pour atteindre leur objectif et les récompenses cumulées au fil des étapes de simulation à travers les époques d'entraînement.

Objectifs du projet

Nous considérons ce projet comme une plateforme d'expérimentation pour mener des recherches sur l'interaction d'agents automatisés dans des environnements réseau simulés abstraits. En le rendant open-source, nous espérons encourager la communauté de recherche à étudier comment les cyber-agents interagissent et évoluent dans de tels environnements réseau.

La simulation que nous fournissons est certes simpliste, mais cela présente des avantages. Sa nature hautement abstraite empêche une application directe aux systèmes réels, offrant ainsi une protection contre une éventuelle utilisation malveillante d'agents automatisés entraînés avec elle. En même temps, sa simplicité nous permet de nous concentrer sur des aspects de sécurité spécifiques que nous souhaitons étudier et d'expérimenter rapidement avec des algorithmes récents d'apprentissage automatique et d'IA.

Par exemple, l'implémentation actuelle se concentre sur les techniques de cyberattaques de mouvement latéral, dans l'espoir de comprendre comment la topologie et la configuration du réseau les affectent. Avec cet objectif en tête, nous avons estimé que la modélisation du trafic réseau réel n'était pas nécessaire. Ce n'est qu'un exemple de limitation significative de notre système que les futures contributions pourraient souhaiter aborder.

Côté algorithmique, nous fournissons quelques agents de base comme points de départ, mais nous serions curieux de savoir comment les algorithmes d'apprentissage par renforcement de pointe se comparent à eux. Nous avons constaté que le grand espace d'actions intrinsèque à tout système informatique constitue un défi particulier pour l'apprentissage par renforcement, contrairement à d'autres applications comme les jeux vidéo ou le contrôle de robots. L'entraînement d'agents capables de stocker et de récupérer des identifiants est un autre défi rencontré lors de l'application des techniques d'RL où les agents n'ont généralement pas de mémoire interne. Ce sont d'autres domaines de recherche pour lesquels la simulation pourrait être utilisée à des fins de benchmarking.

D'autres domaines d'intérêt incluent l'utilisation responsable et éthique des systèmes de cybersécurité autonomes : Comment concevoir un réseau d'entreprise qui donne un avantage intrinsèque aux agents défenseurs ? Comment mener des recherches sûres visant à défendre les entreprises contre les cyberattaques autonomes tout en empêchant l'utilisation malveillante d'une telle technologie ?

Documentation

Lisez la Introduction rapide au projet.

Statut de construction

TypeBrancheStatut
CImaster.github/workflows/ci.yml
Image Dockermaster.github/workflows/build-container.yml

Benchmark

Voir la Documentation du benchmark. Les notebooks Jupyter avec les dernières exécutions sont enregistrés sous une balise dédiée à /notebooks/benchmarks (latest_benchmark).

Configuration d'un environnement de développement

Il est fortement recommandé de travailler dans un environnement Linux, soit directement, soit via WSL sous Windows. L'exécution de Python directement sous Windows devrait fonctionner mais n'est plus prise en charge.

Commencez par cloner le dépôt :

root@kitploit:~
git clone https://github.com/microsoft/CyberBattleSim.git

Composants OS

Si vous obtenez l'erreur suivante lors de l'exécution de papermill sur les notebooks (ou alternativement lors de l'exécution de orca --help)

root@kitploit:~
/home/wiblum/miniconda3/envs/cybersim/lib/orca_app/orca: error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory

ou d'autres bibliothèques partagées comme libgdk_pixbuf-2.0.so.0, Exécutez alors la commande suivante :

root@kitploit:~
sudo apt install libnss3-dev libgtk-3-0 libxss1 libasound2-dev libgtk2.0-0 libgconf-2-4

Sous Linux ou WSL

Les instructions ont été testées sur une distribution Linux Ubuntu (native et via WSL).

Si conda n'est pas déjà installé, vous devez l'installer en exécutant le script install_conda.sh.

root@kitploit:~
bash install-conda.sh

Une fois cela fait, ouvrez un nouveau terminal et exécutez le script d'initialisation :

root@kitploit:~
bash init.sh

Cela créera un environnement conda nommé cybersim avec toutes les dépendances OS et Python nécessaires.

Pour activer l'environnement, exécutez :

root@kitploit:~
conda activate cybersim

Sous-système Windows pour Linux (WSL)

L'environnement de développement pris en charge sous Windows se fait via WSL. Vous devez d'abord installer une distribution WSL Ubuntu sur votre machine Windows, puis procéder aux instructions Linux (section suivante).

Authentification Git depuis WSL

Pour vous authentifier avec Git, vous pouvez soit utiliser l'authentification basée sur SSH, soit utiliser l'astuce du gestionnaire d'identifiants pour générer automatiquement un jeton PAT. Cette dernière peut être faite en exécutant la commande suivante sous WSL (plus d'infos ici) :

root@kitploit:~
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-manager.exe"

Docker sur WSL

Pour exécuter votre environnement dans un conteneur Docker, nous recommandons d'exécuter docker via le Sous-système Windows pour Linux (WSL) en suivant les instructions suivantes : Installation de Docker sur Windows sous WSL.

Windows (non pris en charge)

Cette méthode n'est plus maintenue, veuillez plutôt exécuter sous un environnement Linux WSL. Mais si vous insistez, commencez par installer Python 3.10 puis, dans une invite Powershell, exécutez le script ./init.ps1.

Démarrage rapide avec Docker

La méthode la plus rapide pour être opérationnel est via le conteneur Docker.

REMARQUE : Pour des raisons de licence, nous ne redistribuons pas publiquement d'artefact de construction. En particulier, le registre Docker spinshot.azurecr.io mentionné dans les commandes ci-dessous est conservé privé pour les mainteneurs du projet uniquement.

En solution de contournement, vous pouvez recréer l'image Docker vous-même en utilisant le Dockerfile fourni, publier l'image résultante dans votre propre registre Docker et remplacer le nom du registre dans les commandes ci-dessous.

Exécution depuis le registre Docker

root@kitploit:~
commit=7c1f8c80bc53353937e3c69b0f5f799ebb2b03ee
docker login spinshot.azurecr.io
docker pull spinshot.azurecr.io/cyberbattle:$commit
docker run -it spinshot.azurecr.io/cyberbattle:$commit python -m cyberbattle.agents.baseline.run

Recréation de l'image Docker

root@kitploit:~
docker build -t cyberbattle:1.1 .
docker run -it -v "$(pwd)":/source --rm cyberbattle:1.1 python -m cyberbattle.agents.baseline.run

Vérifiez votre environnement

Exécutez les commandes suivantes pour lancer une simulation avec un agent RL de base :

root@kitploit:~
python -m cyberbattle.agents.baseline.run --training_episode_count 5 --eval_episode_count 3 --iteration_count 100 --rewardplot_width 80  --chain_size=4 --ownership_goal 0.2

python -m cyberbattle.agents.baseline.run --training_episode_count 5 --eval_episode_count 3 --iteration_count 100 --rewardplot_width 80  --chain_size=4 --reward_goal 50 --ownership_goal 0

Si tout est correctement configuré, vous devriez obtenir une sortie qui ressemble à ceci :

root@kitploit:~
torch cuda available=True
###### DQL
Learning with: episode_count=1,iteration_count=10,ϵ=0.9,ϵ_min=0.1, ϵ_expdecay=5000,γ=0.015, lr=0.01, replaymemory=10000,
batch=512, target_update=10
  ## Episode: 1/1 'DQL' ϵ=0.9000, γ=0.015, lr=0.01, replaymemory=10000,
batch=512, target_update=10
Episode 1|Iteration 10|reward:  139.0|Elapsed Time: 0:00:00|###################################################################|
###### Random search
Learning with: episode_count=1,iteration_count=10,ϵ=1.0,ϵ_min=0.0,
  ## Episode: 1/1 'Random search' ϵ=1.0000,
Episode 1|Iteration 10|reward:  194.0|Elapsed Time: 0:00:00|###################################################################|
simulation ended
Episode duration -- DQN=Red, Random=Green
   10.00  ┼
Cumulative rewards -- DQN=Red, Random=Green
  194.00  ┼      ╭──╴
  174.60  ┤      │
  155.20  ┤╭─────╯
  135.80  ┤│     ╭──╴
  116.40  ┤│     │
   97.00  ┤│    ╭╯
   77.60  ┤│    │
   58.20  ┤╯ ╭──╯
   38.80  ┤  │
   19.40  ┤  │
    0.00  ┼──╯

Notebooks Jupyter

Pour vous familiariser rapidement avec le projet, vous pouvez ouvrir l'un des notebooks Jupyter fournis pour jouer de manière interactive avec les environnements gymnasium.

Remarques sur les notebooks .py :

  • Nos notebooks sont enregistrés dans Git sous forme de fichiers .py. Ceux-ci peuvent être ouverts et exécutés directement dans VSCode ou dans Jupyter en utilisant l'extension Jupytext.
  • Les fichiers .ipynb de sortie peuvent également être automatiquement régénérés en utilisant papermill en exécutant le script bash run_benchmark.sh.
  • Nous publions également un instantané des notebooks .ipynb correspondants avec toute la sortie et les graphiques dans une balise git séparée. Le dernier instantané de la sortie des notebooks Jupyter, y compris les benchmarks, est accessible depuis la balise git suivante : /notebooks/benchmarks (latest_benchmark).

Quelques notebooks pour commencer :

  • Notebooks d'environnement jouet 'Capture The Flag' :

    • Agent aléatoire
    • Session interactive pour un joueur humain
    • Session interactive - entièrement résolue
  • Notebooks d'environnement en chaîne :

    • Agent aléatoire
  • Autres environnements :

    • Session interactive avec un environnement généré aléatoirement
    • Agent aléatoire jouant sur des réseaux générés aléatoirement
  • Benchmarks : Les notebooks suivants montrent l'évaluation comparative des agents de base sur divers environnements.

    • Benchmark sur un environnement donné
    • Benchmark sur des environnements en chaîne avec un défenseur basique
    • Évaluation du transfert d'apprentissage DQL
    • Epsilon glouton avec recherches d'identifiants
    • Apprentissage Q tabulaire

Le dernier instantané de la sortie des notebooks Jupyter, y compris les benchmarks, est accessible depuis la balise git suivante : /notebooks/benchmarks (latest_benchmark).

Comment instancier les environnements Gym ?

Le code suivant montre comment créer une instance de l'environnement OpenAI Gym CyberBattleChain-v0, un environnement basé sur une structure de réseau en forme de chaîne, avec 10 nœuds (size=10) où l'objectif de l'agent est soit d'obtenir la pleine propriété du réseau (own_atleast_percent=1.0) ou de maintenir le SLA de disponibilité du réseau à 80% (maintain_sla=0.80), tandis que le réseau est surveillé et protégé par le défenseur basique modélisé de manière probabiliste (defender_agent=ScanAndReimageCompromisedMachines) :

root@kitploit:~
import cyberbattle._env.cyberbattle_env

cyberbattlechain_defender =
  gym.make('CyberBattleChain-v0',
      size=10,
      attacker_goal=AttackerGoal(
          own_atleast=0,
          own_atleast_percent=1.0
      ),
      defender_constraint=DefenderConstraint(
          maintain_sla=0.80
      ),
      defender_agent=ScanAndReimageCompromisedMachines(
          probability=0.6,
          scan_capacity=2,
          scan_frequency=5))

Pour essayer d'autres topologies de réseau, inspirez-vous de chainpattern.py pour définir votre propre ensemble de machines et de vulnérabilités, puis ajoutez une entrée dans l'initialiseur du module pour déclarer et enregistrer l'environnement Gym.

Contribuer

Ce projet accueille les contributions et les suggestions. La plupart des contributions nécessitent que vous acceptiez un Contrat de Licence de Contributeur (CLA) déclarant que vous avez le droit de nous accorder, et que vous nous accordez effectivement, les droits d'utiliser votre contribution. Pour plus de détails, visitez https://cla.opensource.microsoft.com.

Lorsque vous soumettez une demande de tirage (pull request), un bot CLA déterminera automatiquement si vous devez fournir un CLA et décorera la PR de manière appropriée (par exemple, vérification du statut, commentaire). Suivez simplement les instructions fournies par le bot. Vous n'aurez besoin de le faire qu'une seule fois pour tous les dépôts utilisant notre CLA.

Ce projet a adopté le Code de conduite open source de Microsoft. Pour plus d'informations, consultez la FAQ sur le Code de conduite ou contactez [email protected] pour toute question ou commentaire supplémentaire.

Idées de contributions

Voici quelques idées pour contribuer : améliorer la simulation (basée sur les événements, affiner la simulation, …), entraîner un algorithme RL sur la simulation existante, implémenter un benchmark pour évaluer et comparer la nouveauté des agents, ajouter plus de modes de génération de réseau pour entraîner les agents RL sur, contribuer à la documentation, corriger des bugs.

Voir aussi le wiki pour plus d'idées.

Citer ce projet

root@kitploit:~
@misc{msft:cyberbattlesim,
  Author = {Microsoft Defender Research Team.}
  Note = {Created by Christian Seifert, Michael Betser, William Blum, James Bono, Kate Farris, Emily Goren, Justin Grana, Kristian Holsheimer, Brandon Marken, Joshua Neil, Nicole Nichols, Jugal Parikh, Haoran Wei.},
  Publisher = {GitHub},
  Howpublished = {\url{https://github.com/microsoft/cyberbattlesim}},
  Title = {CyberBattleSim},
  Year = {2021}
}

Note sur la confidentialité

Ce projet ne contient aucune donnée client. Les modèles et topologies de réseau fournis sont purement fictifs. Les utilisateurs du code fourni fournissent toutes les entrées à la simulation et doivent disposer des autorisations nécessaires pour utiliser les données fournies.

Marques déposées

Ce projet peut contenir des marques commerciales ou des logos pour des projets, produits ou services. L'utilisation autorisée des marques commerciales ou logos de Microsoft est soumise aux et doit suivre les Directives sur les marques et les marques de commerce de Microsoft. L'utilisation de marques commerciales ou logos de Microsoft dans des versions modifiées de ce projet ne doit pas créer de confusion ni suggérer un parrainage de Microsoft. Toute utilisation de marques commerciales ou logos de tiers est soumise aux politiques de ces tiers.

Télécharger l’outil