_ ____ ____ ___ ____
/ \ | _ \ / ___|/ _ \/ ___|
/ _ \ | |_) | | _| | | \___ \
/ ___ \| _ <| |_| | |_| |___) |
/_/ \_\_| \_\\____|\___/|____/
Este repositorio contiene la herramienta desarrollada para mi Trabajo de Fin de Máster "Desarrollo de una herramienta para la simulación de rutas de ataque en entornos de conciencia cibersituacional basada en procesos estocásticos".
Attack Route Graph Observation System (ARGOS) permite simular rutas de ataque en entornos de conciencia cibersituacional, apoyando la detección de vulnerabilidades y la toma de decisiones en ciberseguridad. Esta herramienta de línea de comandos permite la generación de secuencias de ataque basadas en técnicas de la matriz MITRE ATT&CK mediante Cadenas de Markov y la visualización de su impacto sobre escenarios de red previamente definidos y completamente configurables sobre la base de datos orientada a grafos Neo4j.
python3 argos.py [comando] [parámetros]
COMANDOS:
prepare: Cargar escenario de red enviado como argumento en Neo4j.
attack: Generar ataque y dirigirlo al escenario creado.
trace: Generar ataque partiendo de una técnica inicial seleccionada por el usuario.
history: Mostrar historial de ataques.
clean: Limpiar base de datos.
PARÁMETROS:
--help|-h: Mostrar ayuda y salir.
- Python 3.7+
- Neo4j 4.0+
- Dependencias de Python:
neo4jrich
Además del propio programa escrito en Python, este repositorio contiene una serie de ficheros y directorios de los que se hace uso para proporcionar las funcionalidades descritas. Estos son los siguientes:
-
scenarios: este directorio contiene ficheros de texto que representan los escenarios de red sobre los que realizar las simulaciones de ataque. Los escenarios están definidos usando Cypher Query Language, el lenguaje de consulta para Neo4j (es similar a SQL pero diseñado específicamente para grafos) y se pueden cargar en la base de datos mediante el comando prepare. -
transitions.csv: proporciona información acerca de las transiciones entre técnicas MITRE ATT&CK. Se utiliza en la implementación de una cadena de Markov para generar una secuencia aleatoria de técnicas, formando así un ataque. -
tecnicas_completo.json: contiene información detallada sobre las técnicas MITRE ATT&CK. -
ttp_cwe_cve.json: permite establecer una relación entre las técnicas de ataque y los CWEs/CVEs que explotan. -
ttp_mitigations.json: contiene información sobre las mitigaciones asociadas a cada técnica.
Una vez instaladas las dependencias y clonado el repositorio, es necesaria la configuración de Neo4j, siguiendo los pasos que se indican a continuación:
- Descargar e instalar Neo4j Desktop desde el sitio oficial.
- Abrir Neo4j Desktop. La primera vez que se ejecute, es posible que se requiera iniciar sesión o crear una cuenta gratuita en su defecto.
Dentro de Neo4j Desktop, es posible organizar las bases de datos en proyectos. En el panel Projects, accesible clicando en el icono de la carpeta de la parte superior izquierda, hacer clic en New > Create Project para crear un nuevo proyecto donde se alojará la base de datos.
Para crear una base de datos y asociarla con ARGOS se han de seguir los siguientes pasos:
- Dentro del proyecto, hacer clic en
Add(situado en la parte superior derecha) y luego seleccionarLocal DBMSpara crear una nueva base de datos local. - Asignar un nombre a la base de datos y elige una contraseña para el usuario neo4j.
- Hacer clic en
Createy luego enStartpara iniciar la base de datos. - Una vez iniciada, el botón
Openabrirá la consola de Neo4j en el navegador, donde se podrán ejecutar consultas Cypher para visualizar los ataques. - En la parte inferior de la consola aparecerá la información asociada a la conexión (usuario y dirección URL). Es necesario introducir esta información (junto a la contraseña establecida dos pasos atrás) dentro de la función
start neo4j()en el ficheroargos.py. Esto permitirá que ARGOS interaccione con la base de datos. - Finalmente, se recomienda configurar en la sección
Favoritesde la consola la queryMATCH (n) RETURN n, que no hace más que devolver todos los nodos y aristas presentes en la base de datos. Este ajuste permitirá ejecutar esta instrucción rápidamente, ya que dicha ejecución será necesaria cada vez que se realice una operación sobre la base de datos.
Teniendo en cuenta el siguiente diagrama de flujo de la herramienta, en esta sección se va presenta un caso de uso a modo de ejemplo.
Una vez configurada la base de datos, es posible cargar en la base de datos los escenarios de red disponibles en el directorio scenariosmediante el comando prepare.
Por ejemplo, para cargar el escenario correspondiente a una pequeña oficina corporativa habría que desplazarse en la terminal hasta el mismo directorio donde se encuentre la herrsamienta y ejecutar lo siguiente:
python3 argos.py prepare scenarios/industrial.cypher
Como resultado, al ejecutar la query MATCH (n) RETURN n en la consola de Neo4j, se visualizaría dicho escenario como un grafo:
Con el escenario cargado en la base de datos, el siguiente paso es la creación de una secuencia de ataque que se insertará también en la base de datos, relacionando las técnicas de ataque con los activos afectados del escenario previamente cargado.
Esta secuencia se puede generar de manera completamente aleatoria mediante el comando attack o eligiendo una técnica inicial de entre las disponibles mediante el comando trace (útil si ya se ha detectado una técnica y se desean estudiar los posibles pasos a seguir por el atacante).
Por ejemplo, para el comando attack el comando sería el siguiente:
python3 argos.py attack
Tras el ataque (en el caso de que haya activos afectados) se mostrará en la terminal un dashboard con estadísticas acerca de su ejecución.
Si se vuelve a ejecutar la query en la consola de Neo4j, se podrá visualizar las relaciones establecidas con el escenario de red.
El comando history permite llevar una trazabilidad de los ataques que se han realizado en cada escenario de red:
python3 argos.py history
La información se muestra en formato de tabla a través de la terminal:
Antes de realizar una nueva ejecución, el comando clean limpia todos los nodos y relaciones presentes en la base de datos de Neo4j.
python3 argos.py clean
Para mayor detalle sobre el funcionamiento y capacidades de la herramienta, consultar la memoria completa, disponible en el archivo TFM-SGS.pdf






