
Una plataforma de experimentación e investigación para investigar la interacción de agentes automatizados en entornos de red simulados abstractos.
8 de abril de 2021: Consulte el anuncio en el blog de seguridad de Microsoft.
CyberBattleSim es una plataforma de investigación experimental para investigar la interacción de agentes automatizados que operan en un entorno de red empresarial abstracto simulado. La simulación proporciona una abstracción de alto nivel de las redes informáticas y los conceptos de ciberseguridad. Su interfaz Python basada en OpenAI Gym permite el entrenamiento de agentes automatizados utilizando algoritmos de aprendizaje por refuerzo.
El entorno de simulación está parametrizado por una topología de red fija y un conjunto de vulnerabilidades que los agentes pueden utilizar para moverse lateralmente en la red. El objetivo del atacante es tomar el control de una parte de la red explotando vulnerabilidades que están plantadas en los nodos informáticos. Mientras el atacante intenta propagarse por la red, un agente defensor observa la actividad de la red e intenta detectar cualquier ataque en curso y mitigar el impacto en el sistema expulsando al atacante. Proporcionamos un defensor estocástico básico que detecta y mitiga los ataques en curso basándose en probabilidades predefinidas de éxito. Implementamos la mitigación mediante la reimagen de los nodos infectados, un proceso modelado abstractamente como una operación que abarca múltiples pasos de simulación.
Para comparar el rendimiento de los agentes, observamos dos métricas: la cantidad de pasos de simulación necesarios para alcanzar su objetivo y las recompensas acumuladas a lo largo de los pasos de simulación en las épocas de entrenamiento.
Consideramos este proyecto como una plataforma de experimentación para realizar investigaciones sobre la interacción de agentes automatizados en entornos de red abstractos simulados. Al abrirlo como código abierto, esperamos alentar a la comunidad de investigación a investigar cómo los ciberagentes interactúan y evolucionan en dichos entornos de red.
La simulación que proporcionamos es, sin duda, simplista, pero esto tiene ventajas. Su naturaleza altamente abstracta prohíbe la aplicación directa a sistemas del mundo real, lo que proporciona una salvaguardia contra el posible uso malintencionado de agentes automatizados entrenados con ella. Al mismo tiempo, su simplicidad nos permite centrarnos en aspectos de seguridad específicos que pretendemos estudiar y experimentar rápidamente con algoritmos recientes de aprendizaje automático e IA.
Por ejemplo, la implementación actual se centra en las técnicas de ciberataques de movimiento lateral, con la esperanza de comprender cómo la topología y la configuración de la red los afectan. Con este objetivo en mente, consideramos que no era necesario modelar el tráfico de red real. Este es solo un ejemplo de una limitación significativa en nuestro sistema que las contribuciones futuras podrían querer abordar.
En el aspecto algorítmico, proporcionamos algunos agentes básicos como puntos de partida, pero nos gustaría saber cómo se comparan con ellos los algoritmos de aprendizaje por refuerzo de última generación. Descubrimos que el gran espacio de acción intrínseco a cualquier sistema informático es un desafío particular para el aprendizaje por refuerzo, en contraste con otras aplicaciones como los videojuegos o el control de robots. Entrenar agentes que puedan almacenar y recuperar credenciales es otro desafío que se enfrenta al aplicar técnicas de RL donde los agentes típicamente no tienen memoria interna. Estas son otras áreas de investigación donde la simulación podría usarse con fines de evaluación comparativa.
Otras áreas de interés incluyen el uso responsable y ético de los sistemas autónomos de ciberseguridad: ¿Cómo diseñar una red empresarial que brinde una ventaja intrínseca a los agentes defensores? ¿Cómo realizar una investigación segura destinada a defender las empresas contra ciberataques autónomos y al mismo tiempo prevenir el uso malintencionado de dicha tecnología?
Lea la Introducción rápida al proyecto.
| Tipo | Rama | Estado |
|---|---|---|
| CI | master | |
| Imagen Docker | master |
Consulte la Documentación de evaluación comparativa. Los cuadernos Jupyter con las últimas ejecuciones están verificados en una etiqueta dedicada en /notebooks/benchmarks (latest_benchmark).
Se recomienda encarecidamente trabajar en un entorno Linux, ya sea directamente o mediante WSL en Windows. Ejecutar Python directamente en Windows debería funcionar, pero ya no es compatible.
Comience clonando el repositorio:
git clone https://github.com/microsoft/CyberBattleSim.git
Si obtiene el siguiente error al ejecutar papermill en los cuadernos (o alternativamente al ejecutar 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
u otras bibliotecas compartidas como libgdk_pixbuf-2.0.so.0,
entonces ejecute el siguiente comando:
sudo apt install libnss3-dev libgtk-3-0 libxss1 libasound2-dev libgtk2.0-0 libgconf-2-4
Las instrucciones se probaron en una distribución de Linux Ubuntu (tanto nativa como a través de WSL).
Si conda no está instalado, debe instalarlo ejecutando el script install_conda.sh.
bash install-conda.sh
Una vez hecho esto, abra una nueva terminal y ejecute el script de inicialización:
bash init.sh
Esto creará un entorno conda llamado cybersim con todas las dependencias de SO y python requeridas.
Para activar el entorno ejecute:
conda activate cybersim
El entorno de desarrollo compatible en Windows es a través de WSL. Primero debe instalar una distribución de Ubuntu WSL en su máquina Windows, y luego continúe con las instrucciones de Linux (sección siguiente).
Para autenticarse con Git, puede usar la autenticación basada en SSH o alternativamente use el truco de credential-helper para generar automáticamente un token PAT. Esto último se puede hacer ejecutando el siguiente comando en WSL (más información aquí):
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-manager.exe"
Para ejecutar su entorno dentro de un contenedor Docker, recomendamos ejecutar docker a través del Subsistema de Windows para Linux (WSL) usando las siguientes instrucciones:
Instalación de Docker en Windows bajo WSL).
Este método ya no se mantiene; en su lugar, prefiera ejecutarlo en
un entorno Linux de subsistema WSL.
Pero si insiste, comience instalando Python 3.10 y luego, en un símbolo del sistema de Powershell, ejecute el script ./init.ps1.
El método más rápido para ponerse en marcha es a través del contenedor Docker.