
Une plateforme d'expérimentation et de recherche pour étudier l'interaction d'agents automatisés dans des environnements réseau simulés abstraits.
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.
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 ?
Lisez la Introduction rapide au projet.
| Type | Branche | Statut |
|---|---|---|
| CI | master | |
| Image Docker | master |
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).
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 :
git clone https://github.com/microsoft/CyberBattleSim.git
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)
/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 :
sudo apt install libnss3-dev libgtk-3-0 libxss1 libasound2-dev libgtk2.0-0 libgconf-2-4
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.
bash install-conda.sh
Une fois cela fait, ouvrez un nouveau terminal et exécutez le script d'initialisation :
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 :
conda activate cybersim
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).
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) :
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-manager.exe"
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.