Para ir por delante de los adversarios, que no muestran ningún freno a la hora de adoptar herramientas y técnicas que les ayuden a conseguir sus objetivos, Microsoft sigue aprovechando la IA y el aprendizaje automático para resolver los retos de seguridad. Un área en la que hemos estado experimentando es la de los sistemas autónomos. En una red empresarial simulada, examinamos cómo los agentes autónomos, que son sistemas inteligentes que realizan de forma independiente un conjunto de operaciones utilizando determinados conocimientos o parámetros, interactúan en el entorno y estudiamos cómo pueden aplicarse las técnicas de aprendizaje por refuerzo para mejorar la seguridad.
Hoy nos gustaría compartir algunos resultados de estos experimentos. Estamos abriendo el código fuente de Python de un conjunto de herramientas de investigación que llamamos CyberBattleSim, un proyecto de investigación experimental que investiga cómo operan los agentes autónomos en un entorno empresarial simulado utilizando una abstracción de alto nivel de las redes informáticas y los conceptos de ciberseguridad. El kit de herramientas utiliza la interfaz OpenAI Gym basada en Python para permitir el entrenamiento de agentes automatizados mediante algoritmos de aprendizaje por refuerzo. El código está disponible aquí: https://github.com/microsoft/CyberBattleSim
CyberBattleSim permite construir una simulación muy abstracta de la complejidad de los sistemas informáticos, lo que hace posible enmarcar los retos de la ciberseguridad en el contexto del aprendizaje por refuerzo. Al compartir ampliamente este conjunto de herramientas de investigación, animamos a la comunidad a basarse en nuestro trabajo e investigar cómo interactúan y evolucionan los ciberagentes en entornos simulados, y a investigar cómo las abstracciones de alto nivel de los conceptos de ciberseguridad nos ayudan a entender cómo se comportarían los ciberagentes en las redes empresariales reales.
Esta investigación forma parte de los esfuerzos de Microsoft por aprovechar el aprendizaje automático y la IA para mejorar continuamente la seguridad y automatizar más el trabajo de los defensores. Un estudio reciente encargado por Microsoft descubrió que casi tres cuartas partes de las organizaciones afirman que sus equipos dedican demasiado tiempo a tareas que deberían ser automatizadas. Esperamos que este conjunto de herramientas inspire más investigación para explorar cómo se pueden aprovechar los sistemas autónomos y el aprendizaje de refuerzo para construir tecnologías de detección de amenazas resistentes en el mundo real y estrategias de ciberdefensa robustas.
Aplicación del aprendizaje por refuerzo a la seguridad
El aprendizaje por refuerzo es un tipo de aprendizaje automático con el que los agentes autónomos aprenden a tomar decisiones interactuando con su entorno. Los agentes pueden ejecutar acciones para interactuar con su entorno, y su objetivo es optimizar alguna noción de recompensa. Una aplicación popular y exitosa se encuentra en los videojuegos, donde se dispone de un entorno: el programa informático que implementa el juego. El jugador del juego es el agente, las órdenes que recibe son las acciones y la recompensa final es ganar el juego. Los mejores algoritmos de aprendizaje por refuerzo pueden aprender estrategias eficaces a través de la experiencia repetida, aprendiendo gradualmente qué acciones realizar en cada estado del entorno. Cuanto más jueguen los agentes, más inteligentes serán. Los últimos avances en el campo del aprendizaje por refuerzo han demostrado que podemos entrenar con éxito a agentes autónomos que superan el nivel humano en el juego de videojuegos.
Cómo funciona CyberBattleSim
CyberBattleSim se centra en el modelado de amenazas de la etapa de movimiento lateral posterior a la violación de un ciberataque. El entorno consiste en una red de nodos informáticos. Está parametrizado por una topología de red fija y un conjunto de vulnerabilidades predefinidas que un agente puede explotar para moverse lateralmente por la red. El objetivo del atacante simulado es apoderarse de alguna porción de la red explotando estas vulnerabilidades plantadas. Mientras el atacante simulado se mueve por la red, un agente defensor vigila la actividad de la red para detectar la presencia del atacante y contener el ataque.
Para ilustrarlo, el siguiente gráfico muestra un ejemplo de juguete de una red con máquinas que ejecutan varios sistemas operativos y software. Cada máquina tiene un conjunto de propiedades, un valor y vulnerabilidades preasignadas. Las aristas negras representan el tráfico que circula entre los nodos y están etiquetadas por el protocolo de comunicación.

Supongamos que el agente representa al atacante. La suposición posterior a la violación significa que un nodo está inicialmente infectado con el código del atacante (decimos que el atacante es dueño del nodo). El objetivo del atacante simulado es maximizar la recompensa acumulada descubriendo y tomando posesión de los nodos de la red. El entorno es parcialmente observable: el agente no llega a ver de antemano todos los nodos y aristas del grafo de la red. En su lugar, el atacante realiza acciones para explorar gradualmente la red a partir de los nodos que posee actualmente. Hay tres tipos de acciones, que ofrecen una mezcla de capacidades de explotación y exploración al agente: realizar un ataque local, realizar un ataque remoto y conectarse a otros nodos. Las acciones están parametrizadas por el nodo de origen en el que debe tener lugar la operación subyacente, y sólo están permitidas en los nodos que posee el agente. La recompensa es un flotador que representa el valor intrínseco de un nodo (por ejemplo, un servidor SQL tiene mayor valor que una máquina de pruebas).
En el ejemplo representado, el atacante simulado penetra en la red desde un nodo simulado de Windows 7 (en el lado izquierdo, señalado con una flecha naranja). Procede a un movimiento lateral hacia un nodo Windows 8 explotando una vulnerabilidad en el protocolo de intercambio de archivos SMB, y luego utiliza alguna credencial en caché para iniciar sesión en otra máquina Windows 7. A continuación, explota una vulnerabilidad remota de IIS para adueñarse del servidor IIS y, por último, utiliza cadenas de conexión filtradas para llegar a la base de datos SQL.
Este entorno simula una red informática heterogénea que soporta múltiples plataformas y ayuda a mostrar cómo el uso de los últimos sistemas operativos y el mantenimiento de estos sistemas al día permiten a las organizaciones aprovechar las últimas tecnologías de endurecimiento y protección en plataformas como Windows 10. El entorno de simulación Gym está parametrizado por la definición de la disposición de la red, la lista de vulnerabilidades soportadas y los nodos donde se plantan. La simulación no admite la ejecución de código de máquina, por lo que no se produce ninguna explotación de seguridad en ella. En su lugar, modelamos las vulnerabilidades de forma abstracta con una condición previa que define lo siguiente: los nodos en los que la vulnerabilidad está activa, una probabilidad de éxito de la explotación y una definición de alto nivel del resultado y los efectos secundarios. Los nodos tienen propiedades preasignadas con nombre sobre las que la precondición se expresa como una fórmula booleana.
Modelización de los problemas de seguridad
La naturaleza parametrizable del entorno Gym permite modelar diversos problemas de seguridad. Por ejemplo, el fragmento de código que aparece a continuación se inspira en un desafío de captura de la bandera en el que el objetivo del atacante es hacerse con los nodos y recursos valiosos de una red:

Proporcionamos un cuaderno Jupyter para reproducir interactivamente al atacante en este ejemplo:

Con la interfaz Gym, podemos instanciar fácilmente agentes automatizados y observar cómo evolucionan en estos entornos. La siguiente captura de pantalla muestra el resultado de ejecutar un agente aleatorio en esta simulación, es decir, un agente que selecciona aleatoriamente qué acción realizar en cada paso de la simulación.

El gráfico de arriba en el cuaderno Jupyter muestra cómo crece la función de recompensa acumulada a lo largo de las épocas de simulación (izquierda) y el gráfico de la red explorada (derecha) con los nodos infectados marcados en rojo. El agente tardó unos 500 pasos en alcanzar este estado en esta ejecución. Los registros revelan que muchos intentos de acción fallaron, algunos debido a que el tráfico fue bloqueado por las reglas del cortafuegos, otros porque se utilizaron credenciales incorrectas. En el mundo real, este comportamiento errático debería activar rápidamente las alarmas y un sistema defensivo XDR como Microsoft 365 Defender y un sistema SIEM/SOAR como Azure Sentinel responderían rápidamente y desalojarían al actor malicioso.
Este ejemplo de juguete permite una estrategia óptima para el atacante que sólo necesita unas 20 acciones para hacerse con el control total de la red. Un jugador humano tarda una media de 50 operaciones en ganar este juego en el primer intento. Como la red es estática, después de jugarla repetidamente, un humano puede recordar la secuencia correcta de acciones gratificantes y puede determinar rápidamente la solución óptima.
Para realizar una evaluación comparativa, creamos un entorno de juguete sencillo de tamaño variable y probamos varios algoritmos de refuerzo. El siguiente gráfico resume los resultados, en el que el eje Y es el número de acciones que se llevan a cabo para apropiarse completamente de la red (cuanto más bajo, mejor) a lo largo de múltiples episodios repetidos (eje X). Obsérvese cómo ciertos algoritmos, como el Q-learning, pueden mejorar gradualmente y alcanzar el nivel humano, mientras que otros siguen luchando después de 50 episodios.
Generalizando
Aprender a actuar bien en un entorno fijo no es tan útil si la estrategia aprendida no funciona bien en otros entornos: queremos que la estrategia se generalice bien. Disponer de un entorno parcialmente observable evita el exceso de adaptación a algunos aspectos o dimensiones globales de la red. Sin embargo, no impide que un agente aprenda estrategias no generalizables, como recordar una secuencia fija de acciones que debe realizar en orden. Para evaluar mejor esto, consideramos un conjunto de entornos de diversos tamaños pero con una estructura de red común. Entrenamos a un agente en un entorno de cierto tamaño y lo evaluamos en otros más grandes o más pequeños. Esto también nos da una idea de cómo se desenvolvería el agente en un entorno que crece o se reduce dinámicamente conservando la misma estructura.
Para tener un buen rendimiento, los agentes deben aprender de observaciones que no son específicas de la instancia con la que interactúan. No pueden limitarse a recordar los índices de los nodos o cualquier otro valor relacionado con el tamaño de la red. En cambio, pueden observar características temporales o propiedades de la máquina. Por ejemplo, pueden elegir la mejor operación a ejecutar basándose en el software presente en la máquina. Los dos gráficos de recompensa acumulada que aparecen a continuación ilustran cómo uno de estos agentes, previamente entrenado en una instancia de tamaño 4, puede rendir muy bien en una instancia mayor de tamaño 10 (izquierda), y recíprocamente (derecha).

Esperamos que muy en breve todo eso ayude mucho a los que usamos diferentes metodos para explorar la ciberseguridad.
Mientras el codigo es abierto y esta disponible en GitHub
Fuente: Microsoft