
Una piattaforma di sperimentazione e ricerca per investigare l'interazione di agenti automatizzati in ambienti di rete simulati astratti.
8 aprile 2021: Vedi l'annuncio sul blog Microsoft Security.
CyberBattleSim è una piattaforma di ricerca sperimentale per studiare l'interazione di agenti automatizzati che operano in un ambiente di rete aziendale simulato e astratto. La simulazione fornisce un'astrazione di alto livello delle reti informatiche e dei concetti di sicurezza informatica. La sua interfaccia OpenAI Gym basata su Python consente l'addestramento di agenti automatizzati utilizzando algoritmi di apprendimento per rinforzo.
L'ambiente di simulazione è parametrizzato da una topologia di rete fissa e da un insieme di vulnerabilità che gli agenti possono sfruttare per muoversi lateralmente nella rete. L'obiettivo dell'attaccante è impossessarsi di una porzione della rete sfruttando le vulnerabilità presenti nei nodi del computer. Mentre l'attaccante tenta di diffondersi attraverso la rete, un agente difensore osserva l'attività di rete e cerca di rilevare eventuali attacchi in corso e mitigarne l'impatto sul sistema, espellendo l'attaccante. Forniamo un difensore stocastico di base che rileva e mitiga gli attacchi in corso basandosi su probabilità di successo predefinite. Implementiamo la mitigazione reimmaginando i nodi infetti, un processo astrattamente modellato come un'operazione che si svolge in più passi di simulazione.
Per confrontare le prestazioni degli agenti, consideriamo due metriche: il numero di passi di simulazione necessari per raggiungere il loro obiettivo e le ricompense cumulative nel corso dei passi di simulazione durante le epoche di addestramento.
Consideriamo questo progetto come una piattaforma di sperimentazione per condurre ricerche sull'interazione di agenti automatizzati in ambienti di rete simulati e astratti. Rendendolo open-source, speriamo di incoraggiare la comunità di ricerca a studiare come gli agenti informatici interagiscono ed evolvono in tali ambienti di rete.
La simulazione che forniamo è, ammettiamolo, semplicistica, ma ciò presenta dei vantaggi. La sua natura altamente astratta impedisce l'applicazione diretta a sistemi reali, fornendo così una salvaguardia contro un potenziale uso malevolo di agenti automatizzati addestrati con essa. Allo stesso tempo, la sua semplicità ci consente di concentrarci su aspetti di sicurezza specifici che intendiamo studiare e di sperimentare rapidamente con recenti algoritmi di apprendimento automatico e IA.
Ad esempio, l'implementazione attuale si concentra sulle tecniche di attacco informatico di movimento laterale, con la speranza di comprendere come la topologia e la configurazione della rete le influenzino. Con questo obiettivo in mente, abbiamo ritenuto che non fosse necessario modellare il traffico di rete effettivo. Questo è solo un esempio di un limite significativo del nostro sistema che contributi futuri potrebbero voler affrontare.
Sul versante algoritmico, forniamo alcuni agenti di base come punti di partenza, ma saremmo curiosi di scoprire come gli algoritmi di apprendimento per rinforzo più moderni si confrontano con essi. Abbiamo scoperto che il grande spazio delle azioni intrinseco a qualsiasi sistema informatico rappresenta una sfida particolare per l'apprendimento per rinforzo, a differenza di altre applicazioni come i videogiochi o il controllo di robot. Addestrare agenti in grado di memorizzare e recuperare credenziali è un'altra sfida affrontata quando si applicano tecniche di RL in cui gli agenti tipicamente non dispongono di memoria interna. Queste sono altre aree di ricerca in cui la simulazione potrebbe essere utilizzata per scopi di benchmarking.
Altre aree di interesse includono l'uso responsabile ed etico dei sistemi autonomi di cybersicurezza: Come progettare una rete aziendale che dia un vantaggio intrinseco agli agenti difensori? Come condurre una ricerca sicura volta a difendere le aziende dagli attacchi informatici autonomi, prevenendo al contempo un uso malevolo di tale tecnologia?
Leggi la Breve introduzione al progetto.
| Tipo | Branch | Stato |
|---|---|---|
| CI | master | |
| Docker image | master |
Vedi la Documentazione del benchmark. I Jupyter notebook con le ultime esecuzioni sono stati inseriti sotto un tag dedicato in /notebooks/benchmarks (latest_benchmark).
È fortemente consigliato lavorare in un ambiente Linux, direttamente o tramite WSL su Windows. Eseguire Python direttamente su Windows dovrebbe funzionare ma non è più supportato.
Inizia clonando il repository:
git clone https://github.com/microsoft/CyberBattleSim.git
Se ottieni il seguente errore eseguendo papermill sui notebook (o in alternativa eseguendo 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
o altre librerie condivise come libgdk_pixbuf-2.0.so.0,
Esegui quindi il seguente comando:
sudo apt install libnss3-dev libgtk-3-0 libxss1 libasound2-dev libgtk2.0-0 libgconf-2-4
Le istruzioni sono state testate su una distribuzione Linux Ubuntu (sia nativa che tramite WSL).
Se conda non è già installato, devi installarlo eseguendo lo script install_conda.sh.
bash install-conda.sh
Una volta fatto, apri un nuovo terminale ed esegui lo script di inizializzazione:
bash init.sh
Questo creerà un ambiente conda chiamato cybersim con tutte le dipendenze del sistema operativo e Python richieste.
Per attivare l'ambiente esegui:
conda activate cybersim
L'ambiente di sviluppo supportato su Windows è tramite WSL. Devi prima installare una distribuzione Ubuntu WSL sulla tua macchina Windows, e poi procedere con le istruzioni per Linux (sezione successiva).
Per autenticarti con Git, puoi utilizzare l'autenticazione basata su SSH o in alternativa utilizzare il trucco del credential-helper per generare automaticamente un token PAT. Quest'ultimo può essere eseguito con il seguente comando in WSL (maggiori informazioni qui):
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-manager.exe"
Per eseguire il tuo ambiente all'interno di un contenitore Docker, consigliamo di eseguire docker tramite il Sottosistema Windows per Linux (WSL) seguendo queste istruzioni:
Installazione di Docker su Windows tramite WSL).
Questo metodo non viene più mantenuto; preferisci invece l'esecuzione in un
ambiente Linux tramite WSL.
Ma se insisti, puoi iniziare installando Python 3.10 poi in un prompt di PowerShell esegui lo script ./init.ps1.
Il metodo più rapido per iniziare è tramite il contenitore Docker.