Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CyberBattleSim — Una piattaforma di sperimentazione e ricerca per investigare l'interazione di agenti automatizzati in ambienti di rete simulati astratti. | Kitploit
Strumenti/GitHubGitHub/microsoft/cyberbattlesim
Movimento LateralePenetration TestingMachine LearningPaper e RicercaApprendimento e FormazioneRed Teaming
GitHubmicrosoft/cyberbattlesim

CyberBattleSim

Una piattaforma di sperimentazione e ricerca per investigare l'interazione di agenti automatizzati in ambienti di rete simulati astratti.

Vedi Repository
1.8k28517 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CyberBattleSim

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.

Obiettivi del progetto

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?

Documentazione

Leggi la Breve introduzione al progetto.

Stato della build

TipoBranchStato
CImaster.github/workflows/ci.yml
Docker imagemaster.github/workflows/build-container.yml

Benchmark

Vedi la Documentazione del benchmark. I Jupyter notebook con le ultime esecuzioni sono stati inseriti sotto un tag dedicato in /notebooks/benchmarks (latest_benchmark).

Configurazione di un ambiente di sviluppo

È 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:

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

Componenti del sistema operativo

Se ottieni il seguente errore eseguendo papermill sui notebook (o in alternativa eseguendo 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

o altre librerie condivise come libgdk_pixbuf-2.0.so.0, Esegui quindi il seguente comando:

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

Su Linux o WSL

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.

root@kitploit:~
bash install-conda.sh

Una volta fatto, apri un nuovo terminale ed esegui lo script di inizializzazione:

root@kitploit:~
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:

root@kitploit:~
conda activate cybersim

Sottosistema Windows per Linux (WSL)

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).

Autenticazione Git da WSL

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):

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

Docker su WSL

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).

Windows (non supportato)

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.

Iniziare rapidamente con Docker

Il metodo più rapido per iniziare è tramite il contenitore Docker.

NOTA: Per motivi di licenza, non ridistribuiamo pubblicamente alcun artefatto di build. In particolare, il registro docker spinshot.azurecr.io menzionato nei comandi seguenti è mantenuto privato solo per i manutentori del progetto.

Come soluzione alternativa, puoi ricreare l'immagine docker da solo usando il Dockerfile fornito, pubblicare l'immagine risultante nel tuo registro docker e sostituire il nome del registro nei comandi seguenti.

Esecuzione dal registro 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

Ricreazione dell'immagine 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

Verifica del tuo ambiente

Esegui i seguenti comandi per eseguire una simulazione con un agente RL di 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

Se tutto è configurato correttamente, dovresti ottenere un output simile a questo:

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  ┼──╯

Jupyter notebook

Per familiarizzare rapidamente con il progetto, puoi aprire uno dei Jupyter notebook forniti per interagire in modo interattivo con gli ambienti gymnasium.

Note sui notebook .py:

  • I nostri notebook vengono inseriti in Git come file .py. Possono essere aperti ed eseguiti direttamente in VSCode o in Jupyter utilizzando l'estensione Jupytext.
  • I file .ipynb di output possono anche essere rigenerati automaticamente usando papermill eseguendo lo script bash run_benchmark.sh.
  • Pubblichiamo anche un'istantanea dei corrispondenti notebook .ipynb con l'intero output e i grafici in un tag git separato. L'ultima istantanea dell'output dei Jupyter notebook, inclusi i benchmark, è accessibile dal seguente tag git: /notebooks/benchmarks (latest_benchmark).

Alcuni notebook per iniziare:

  • Notebook dell'ambiente giocattolo 'Capture The Flag':

    • Agente casuale
    • Sessione interattiva per un giocatore umano
    • Sessione interattiva - completamente risolta
  • Notebook dell'ambiente Chain:

    • Agente casuale
  • Altri ambienti:

    • Sessione interattiva con un ambiente generato casualmente
    • Agente casuale che gioca su reti generate casualmente
  • Benchmark: I seguenti notebook mostrano la valutazione di benchmark degli agenti di base su vari ambienti.

    • Benchmark su un ambiente dato
    • Benchmark su ambienti chain con un difensore di base
    • Valutazione del transfer learning DQL
    • Epsilon greedy con ricerche di credenziali
    • Apprendimento Q tabellare

L'ultima istantanea dell'output dei Jupyter notebook, inclusi i benchmark, è accessibile dal seguente tag git: /notebooks/benchmarks (latest_benchmark).

Come istanziare gli ambienti Gym?

Il codice seguente mostra come creare un'istanza dell'ambiente OpenAI Gym CyberBattleChain-v0, un ambiente basato su una struttura di rete a catena, con 10 nodi (size=10) dove l'obiettivo dell'agente è ottenere la piena proprietà della rete (own_atleast_percent=1.0) o superare l'80% di disponibilità del servizio SLA (maintain_sla=0.80), mentre la rete viene monitorata e protetta dal difensore di base modellato probabilisticamente (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))

Per provare altre topologie di rete, prendi esempio su chainpattern.py per definire il tuo insieme di macchine e vulnerabilità, poi aggiungi una voce in l'inizializzatore del modulo per dichiarare e registrare l'ambiente Gym.

Contribuire

Questo progetto accoglie contributi e suggerimenti. La maggior parte dei contributi richiede che tu accetti un Accordo di Licenza per Contributori (CLA) che dichiari che hai il diritto di concederci i diritti di utilizzare il tuo contributo. Per i dettagli, visita https://cla.opensource.microsoft.com.

Quando invii una pull request, un bot CLA determinerà automaticamente se devi fornire un CLA e decorerà la PR in modo appropriato (ad esempio, controllo dello stato, commento). Segui semplicemente le istruzioni fornite dal bot. Dovrai farlo solo una volta in tutti i repository che utilizzano il nostro CLA.

Questo progetto ha adottato il Codice di Condotta Open Source di Microsoft. Per maggiori informazioni, consulta le Domande frequenti sul Codice di Condotta o contatta [email protected] per qualsiasi altra domanda o commento.

Idee per contributi

Ecco alcune idee su come contribuire: migliorare la simulazione (basata su eventi, raffinare la simulazione, …), addestrare un algoritmo RL sulla simulazione esistente, implementare benchmark per valutare e confrontare la novità degli agenti, aggiungere più modalità generative di rete per addestrare l'agente RL, contribuire alla documentazione, correggere bug.

Vedi anche il wiki per altre idee.

Citare questo progetto

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}
}

Nota sulla privacy

Questo progetto non include alcun dato dei clienti. I modelli e le topologie di rete forniti sono puramente fittizi. Gli utenti del codice fornito forniscono tutto l'input alla simulazione e devono disporre delle autorizzazioni necessarie per utilizzare qualsiasi dato fornito.

Marchi

Questo progetto può contenere marchi o loghi per progetti, prodotti o servizi. L'uso autorizzato dei marchi o dei loghi Microsoft è soggetto e deve seguire le Linee guida per marchi e marchi commerciali di Microsoft. L'uso di marchi o loghi Microsoft in versioni modificate di questo progetto non deve creare confusione o implicare una sponsorizzazione da parte di Microsoft. Qualsiasi uso di marchi o loghi di terze parti è soggetto alle politiche di tali terze parti.

Scarica lo strumento