
Uma plataforma de experimentação e pesquisa para investigar a interação de agentes automatizados em ambientes de rede simulados abstratos.
8 de abril de 2021: Veja o anúncio no Blog de Segurança da Microsoft.
O CyberBattleSim é uma plataforma de pesquisa experimental para investigar a interação de agentes automatizados operando em um ambiente de rede empresarial abstrato simulado. A simulação fornece uma abstração de alto nível de redes de computadores e conceitos de segurança cibernética. Sua interface Open AI Gym baseada em Python permite o treinamento de agentes automatizados usando algoritmos de aprendizado por reforço.
O ambiente de simulação é parametrizado por uma topologia de rede fixa e um conjunto de vulnerabilidades que os agentes podem utilizar para se mover lateralmente na rede. O objetivo do atacante é tomar posse de uma parte da rede explorando vulnerabilidades que estão plantadas nos nós de computador. Enquanto o atacante tenta se espalhar pela rede, um agente defensor monitora a atividade da rede e tenta detectar qualquer ataque em andamento e mitigar o impacto no sistema expulsando o atacante. Fornecemos um defensor estocástico básico que detecta e mitiga ataques em andamento com base em probabilidades predefinidas de sucesso. Implementamos a mitigação refazendo a imagem dos nós infectados, um processo modelado abstratamente como uma operação que abrange várias etapas de simulação.
Para comparar o desempenho dos agentes, analisamos duas métricas: o número de etapas de simulação necessárias para atingir seu objetivo e as recompensas acumuladas ao longo das etapas de simulação durante as épocas de treinamento.
Vemos este projeto como uma plataforma de experimentação para conduzir pesquisa sobre a interação de agentes automatizados em ambientes de rede simulados abstratos. Ao abrir seu código-fonte, esperamos encorajar a comunidade de pesquisa a investigar como os ciberagentes interagem e evoluem em tais ambientes de rede.
A simulação que fornecemos é reconhecidamente simplista, mas isso tem vantagens. Sua natureza altamente abstrata proíbe a aplicação direta a sistemas do mundo real, fornecendo assim uma salvaguarda contra o uso nefasto potencial de agentes automatizados treinados com ela. Ao mesmo tempo, sua simplicidade nos permite focar em aspectos específicos de segurança que pretendemos estudar e experimentar rapidamente com algoritmos recentes de aprendizado de máquina e IA.
Por exemplo, a implementação atual se concentra em técnicas de ataque de movimento lateral, na esperança de entender como a topologia e a configuração da rede as afetam. Com esse objetivo em mente, sentimos que modelar o tráfego real de rede não era necessário. Este é apenas um exemplo de uma limitação significativa em nosso sistema que contribuições futuras podem querer abordar.
No lado algorítmico, fornecemos alguns agentes básicos como pontos de partida, mas estaríamos curiosos para descobrir como algoritmos de aprendizado por reforço de ponta se comparam a eles. Descobrimos que o grande espaço de ação intrínseco a qualquer sistema de computador é um desafio particular para o Aprendizado por Reforço, em contraste com outras aplicações, como videogames ou controle de robôs. Treinar agentes que possam armazenar e recuperar credenciais é outro desafio enfrentado ao aplicar técnicas de RL onde os agentes normalmente não possuem memória interna. Essas são outras áreas de pesquisa onde a simulação pode ser usada para fins de benchmarking.
Outras áreas de interesse incluem o uso responsável e ético de sistemas autônomos de segurança cibernética: Como projetar uma rede empresarial que dê uma vantagem intrínseca aos agentes defensores? Como conduzir pesquisa segura com o objetivo de defender empresas contra ataques cibernéticos autônomos, evitando ao mesmo tempo o uso nefasto de tal tecnologia?
Leia a Introdução rápida ao projeto.
| Tipo | Ramo | Status |
|---|---|---|
| CI | master | |
| Imagem Docker | master |
Veja a documentação de Benchmark. Os notebooks Jupyter com as execuções mais recentes estão registrados sob uma tag dedicada em /notebooks/benchmarks (latest_benchmark).
É fortemente recomendado trabalhar em um ambiente Linux, diretamente ou via WSL no Windows. Executar Python diretamente no Windows deve funcionar, mas não é mais suportado.
Comece verificando o repositório:
git clone https://github.com/microsoft/CyberBattleSim.git
Se você obtiver o seguinte erro ao executar o papermill nos notebooks
(ou alternativamente ao executar 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 outras bibliotecas compartilhadas como libgdk_pixbuf-2.0.so.0,
Então execute o seguinte comando:
sudo apt install libnss3-dev libgtk-3-0 libxss1 libasound2-dev libgtk2.0-0 libgconf-2-4
As instruções foram testadas em uma distribuição Ubuntu Linux (tanto nativa quanto via WSL).
Se o conda não estiver instalado, você precisa instalá-lo executando o script install_conda.sh.
bash install-conda.sh
Feito isso, abra um novo terminal e execute o script de inicialização:
bash init.sh
Isso criará um ambiente conda chamado cybersim com todas as dependências necessárias do sistema operacional e Python.
Para ativar o ambiente, execute:
conda activate cybersim
O ambiente de desenvolvimento suportado no Windows é via WSL. Você primeiro precisa instalar uma distribuição Ubuntu WSL em sua máquina Windows, e então prosseguir com as instruções para Linux (próxima seção).
Para autenticar com Git, você pode usar autenticação baseada em SSH ou alternativamente usar o truque de auxiliar de credencial para gerar automaticamente um token PAT. Isso pode ser feito executando o seguinte comando no WSL (mais informações aqui):
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-manager.exe"
Para executar seu ambiente dentro de um contêiner Docker, recomendamos executar docker via Subsistema Windows para Linux (WSL) usando as seguintes instruções:
Instalando Docker no Windows sob WSL).
Este método não é mais mantido; prefira executar em
um ambiente Linux via WSL.
Mas se você insistir, comece instalando Python 3.10 e então, em um prompt do Powershell, execute o script ./init.ps1.
O método mais rápido para começar é através do contêiner Docker.