Un día, durante la ejecución de un ejercicio de Red Team, se intentó utilizar ChatGPT con el fin de buscar un exploit que no resultaba fácil de encontrar mediante la búsqueda convencional en Google. El uso de los motores LLMs para ciberataques, como se explica en este artículo de "Cómo usar LLMs en Ciberataques: Cibercrimen, Ciberespionaje, Ciberguerra o Red Team". Pero... ¿lo conseguiriamos?
Como os podéis imaginar, la respuesta obtenida fue la esperada por todos, y para poder conseguir lo que queríamos deberíamos ir a proceso de Jailbreak de LLMs, es decir, primero deberíamos hackear a ChatGPT para luego poder hacer nuestro objetivo de Red Team, que era lo importante.
Fatigado de pasar horas estudiando prompting en un intento por hallar el Prompt Injection más adecuada para mi caso, solicité la colaboración de mi colega Jon, un experto en Inteligencia Artificial. Juntos exploramos la posibilidad de que un modelo WOS (Weights Open Source) pudiera ser la alternativa que estábamos buscando.
Figura 2: Pidiendo a ChatGPT el exploit de Eternalblue
Fatigado de pasar horas estudiando prompting en un intento por hallar el Prompt Injection más adecuada para mi caso, solicité la colaboración de mi colega Jon, un experto en Inteligencia Artificial. Juntos exploramos la posibilidad de que un modelo WOS (Weights Open Source) pudiera ser la alternativa que estábamos buscando.
Figura 3: El Red Team de la empresa de Eduardo Arriols en 0xWord. |
Cabe destacar que, como no lo he mencionado previamente, el ejercicio de Red Team lo llevaba a cabo en Omega AI, una empresa dedicada a la Inteligencia Artificial donde ambos desempeñamos nuestras funciones. Este ejercicio se realizaba en una intranet con centenares de gráficas. Adicionalmente, es relevante señalar que "ChatGPT" iba más allá de ser simplemente unos pesos; se trataba de un servicio con una complejidad inimaginable.
0dAi
En ese momento, surgió la idea de crear 0dAi en primer lugar. Inicialmente, consideramos que su implementación para uso interno sería la opción más acertada; sin embargo, al reconocer el potencial de este proyecto, decidimos establecer un servicio denominado "ChatGPT" destinado a hackers. Este servicio cuenta con una interfaz web, una API proyectada para el futuro, Language Models (LLMs) propios, varios agentes, y una arquitectura de red cuidadosamente diseñada y detallada.
En ese momento, surgió la idea de crear 0dAi en primer lugar. Inicialmente, consideramos que su implementación para uso interno sería la opción más acertada; sin embargo, al reconocer el potencial de este proyecto, decidimos establecer un servicio denominado "ChatGPT" destinado a hackers. Este servicio cuenta con una interfaz web, una API proyectada para el futuro, Language Models (LLMs) propios, varios agentes, y una arquitectura de red cuidadosamente diseñada y detallada.
De esta manera, nació 0dAi, un servicio de inteligencia artificial basado en LLMs, específicamente en "Mixtral". A través de agentes y prompts, puede ejecutar de manera autónoma y semiautónoma herramientas de hacking, generar malware o preparar entornos de prueba para hacer pentesting.
Agentes Dinámicos y Enjambres
A nosotros nos gustan los términos de “Agentes Dinámicos” y “Enjambres” Estos agentes están constituidos exclusivamente por funciones, desde el prompt hasta las herramientas, transitando por la memoria. Se construyen mediante bases de datos vectoriales generadas minuciosamente a partir de un proceso cuidadoso de generación de datos sintéticos, basados en informes, documentos, trabajos académicos y libros, que también son utilizados en la creación del conjunto de datos de entrenamiento.
El concepto de "Enjambres" refleja la capacidad de estos agentes para colaborar entre sí según las necesidades. En esencia, existe un agente principal que, mediante una llamada a funciones, genera agentes que, a su vez, crean otros agentes y realizan llamadas a funciones. Por ejemplo, veamos unas pequeñas pruebas de concepto
En primer lugar tenemos el Agente de Exploits, que en base a distintas APIs y tools intenta reproducir de forma exitosa el código de un exploit.
Como se observa en el esquema y en la prueba de concepto (PoC), el usuario introduce el Prompt. El modelo, encargado de realizar llamadas a funciones según el Prompt inicial del usuario, determina el System Prompt, las herramientas/servicios a ejecutar/consultar, y en función de ello, proporciona un resultado que resuelve la duda inicial del usuario.
Agentes Dinámicos y Enjambres
A nosotros nos gustan los términos de “Agentes Dinámicos” y “Enjambres” Estos agentes están constituidos exclusivamente por funciones, desde el prompt hasta las herramientas, transitando por la memoria. Se construyen mediante bases de datos vectoriales generadas minuciosamente a partir de un proceso cuidadoso de generación de datos sintéticos, basados en informes, documentos, trabajos académicos y libros, que también son utilizados en la creación del conjunto de datos de entrenamiento.
Figura 5: Esquema de 0dAi
El concepto de "Enjambres" refleja la capacidad de estos agentes para colaborar entre sí según las necesidades. En esencia, existe un agente principal que, mediante una llamada a funciones, genera agentes que, a su vez, crean otros agentes y realizan llamadas a funciones. Por ejemplo, veamos unas pequeñas pruebas de concepto
Figura 6: Agente de Exploits
En primer lugar tenemos el Agente de Exploits, que en base a distintas APIs y tools intenta reproducir de forma exitosa el código de un exploit.
Figura 7: El Agente de Exploits generando un exploit para EthernalBlue
Como se observa en el esquema y en la prueba de concepto (PoC), el usuario introduce el Prompt. El modelo, encargado de realizar llamadas a funciones según el Prompt inicial del usuario, determina el System Prompt, las herramientas/servicios a ejecutar/consultar, y en función de ello, proporciona un resultado que resuelve la duda inicial del usuario.
Este esquema puede aplicarse a diversas situaciones, por ejemplo para ejecutar búsqueda de objetivos utilizando un servicio como Shodan, con un Agente Dinámico.
Por ejemplo, consideremos cómo sería el Agente Dinámico para Shodan, con el objetivo de hacer un poco de Hacking con Buscadores buscando SMBs abiertos en Internet.
En este escenario, existe una instancia de 0dAi dedicada exclusivamente a realizar una llamada a funciones para estructurar el dork de Shodan según el Prompt proporcionado.
Figura 10: Agente dinámico ejecutando hacking con buscadores en Shodan
En este escenario, existe una instancia de 0dAi dedicada exclusivamente a realizar una llamada a funciones para estructurar el dork de Shodan según el Prompt proporcionado.
Posteriormente, ejecuta un envoltorio (Wrapper) de la API de Shodan y realiza una recuperación (retrieval) en la ventana de contexto de la inferencia final.
Figura 12: Buscando Identidades
Esta fórmula es adaptable a diversas situaciones. Ahora, consideremos un Agente encargado de descubrir identidades y filtraciones en fuentes abiertas y bases de datos comprometidas, como se ve en la imagen anterior.
Figura 13: Tabla con todas las filtraciones
Este modelo lo aplicamos mad de 50 herramientas de hacking, tales como nuclei, sqlmap, sn1per, wspcan, Censys, Shodan, etcetera, para que el pentester tenga todo lo que necesite en sus investigaciones y ejercicios de Red Team.
Infraestructura
En primera instancia pensamos algo como esto, LLMs dockerizados y spliteados en los distintos servidores, esto era altamente ineficiente para el autoscaling, así que decidimos usar Ray.
Ray es una librería para ejecutar Machine Learning de forma distribuida, que mediante un cluster y un nodo HEAD, puede hacer deployment a decenas de modelos con solo un comando, actuando como autoscaler y load balancer, de esta forma conseguimos tener un sistema de carga de LLMs distribuidos que de forma eficiente es capaz de replicar los modelos en red, para poder tener un servicio estable.
Figura 14: Arquitectura de Infraestructura
Ray es una librería para ejecutar Machine Learning de forma distribuida, que mediante un cluster y un nodo HEAD, puede hacer deployment a decenas de modelos con solo un comando, actuando como autoscaler y load balancer, de esta forma conseguimos tener un sistema de carga de LLMs distribuidos que de forma eficiente es capaz de replicar los modelos en red, para poder tener un servicio estable.
Figura 15: Arquitectura con RAY
Y así nació nuestro 0dAi, que actualmente es un servicio en modo SaaS que puedes utilizar en tus trabajos de pentesting o Red Team y que sólo cuesta 19 Euros al mes. Podéis obtenerla en https://0dai.omegaai.io.
Autor: Luis Javier Navarrete Lozano y Jon Garcia Agramonte
Este comentario ha sido eliminado por el autor.
ResponderEliminar