Caso de uso: cómo mejorar la eficiencia de los equipos de ciberseguridad mediante la IA
Introducción
La ciberseguridad es un campo que requiere una actualización y adaptación constantes a las nuevas amenazas y vulnerabilidades que surgen en el mundo digital. Los equipos de ciberseguridad se enfrentan a desafíos cada vez más complejos y variados, que exigen una alta capacidad de análisis, respuesta y prevención. En este contexto, la inteligencia artificial (IA) se presenta como una herramienta clave para mejorar la eficiencia y la eficacia de los equipos de ciberseguridad.
En particular, nos centraremos en los grandes modelos lingüísticos (LLM). Sistemas de inteligencia artificial que pueden procesar y generar lenguaje natural de forma automática y precisa. Estos modelos tienen múltiples aplicaciones en el campo de la ciberseguridad, tales como:
- La detección de ciberataques mediante el análisis de datos y su contexto en tiempo real, como textos, correos electrónicos, redes sociales, etc.
- La generación de informes, alertas y recomendaciones sobre las medidas de seguridad a tomar.
- La automatización de tareas repetitivas o rutinarias, como la clasificación de incidentes, la sobrecarga de alertas, los falsos positivos y algunos análisis manuales.
Además de reducir las tareas operativas de ciberseguridad, el uso de la inteligencia artificial resuelve uno de los mayores problemas a los que se enfrentan las organizaciones de seguridad en la actualidad: reclutar y retener a profesionales de seguridad calificados durante una escasez crónica de talento en el sector, lo que permite mantener equipos más pequeños, pero altamente calificados y dedicados a tareas de mayor valor agregado, algo bueno tanto para el profesional como para las empresas.
Este artículo no pretende entrar en temas complejos sobre cómo funciona la IA a bajo nivel y se pueden cometer imprecisiones técnicas, pero el objetivo es que el lector pueda hacerse una idea real de cómo la aplicación de la IA puede ayudar con integraciones sencillas a los equipos de SOC, DFIR o Threat Hunting en las tareas del día a día.
Conceptos básicos
Para comprender mejor los casos de uso y los diagramas de flujo, revisemos primero los conceptos esenciales de la inteligencia artificial, explicados de la manera más simple y quizás inexacta:
· LLM (modelo de lenguaje grande): Los LLM son algoritmos de aprendizaje automático entrenados con grandes conjuntos de datos no estructurados con el objetivo de comprender, interpretar y generar texto en lenguaje natural. Algunos de estos modelos los tenemos en el mercado desde hace tiempo, como GPT4 (OpenAI), Claude2 (Anthropic), Llama2 (Meta) o BARD (Google).
· Símbolo: En inteligencia artificial, un token es una unidad básica de texto (palabras o partes de palabras) que se utiliza para entrenar y consultar modelos de lenguaje natural, como los LLM. El tamaño del contexto (que es limitado, como veremos más adelante) se mide en estas unidades, las fichas.
· Incrustaciones: Las incrustaciones son una forma de representar palabras o frases como vectores numéricos en un espacio de baja dimensión. En términos sencillos, las incrustaciones son una forma de hacer que las computadoras entiendan el significado de las palabras y frases en el lenguaje humano. Por ejemplo, una incrustación podría representar la palabra «perro» como un vector numérico específico, que luego se puede usar para entrenar a un modelo de lenguaje natural para que reconozca la palabra «perro» en diferentes contextos.
Uno de los usos prácticos más interesantes de las incrustaciones, y que abordaremos en otros artículos, es el hecho de que si utilizamos las incrustaciones para «indexar» nuestros propios textos y bases de conocimiento, podemos realizar búsquedas con lenguaje natural. Por ejemplo, en los sistemas de indexación convencionales, las búsquedas se realizan haciendo coincidir un término, por ejemplo, buscando «suplantación de identidad» dará como resultado todos los párrafos y documentos en los que se encuentre esa palabra. Sin embargo, si tenemos nuestros datos «indexados» en una base de datos vectorial (incrustaciones) como ChromaDB o FAISS, podemos realizar la búsqueda haciendo preguntas como: ¿Cuáles son los incidentes relacionados con la suplantación de identidad en los que se ha producido una exfiltración?
· Contexto: Podríamos definir el contexto como la «memoria a corto plazo» de los LLM, el contexto es todo lo que rodea la pregunta que queremos hacer y le da suficiente significado para que el modelo la responda con la mayor precisión posible. Usamos el contexto de forma natural cuando utilizamos ChatGPT o BingChat, simplemente notamos cómo las herramientas pueden seguir el hilo de la conversación y ser más precisas a medida que avanzamos.
El tamaño del contexto es algo que varía según el tipo de modelo que seleccionemos y es vital que su elección se adapte a nuestras necesidades. Algunos ejemplos de tamaño son:
- Llama 2: 4 k
- GPT4: 32 k
- Cláusula 2: 100 mil
- Turbo GPT4: 128 k
- Delfín Yi 34b: 200 mil
· Rápido: En inteligencia artificial, un mensaje es una frase o conjunto de palabras que se utiliza para guiar un modelo de lenguaje natural, como los LLM, para generar una respuesta específica. Las indicaciones son útiles para proporcionar contexto y orientación a los modelos de aprendizaje automático. En términos sencillos, las indicaciones son como preguntas o instrucciones que se dan a un modelo de lenguaje natural para generar una respuesta específica. Cada mensaje que ejecutemos se añadirá al contexto hasta que agotemos el tamaño del contexto o cerremos la sesión con el LLM.
Caso de uso: libros de jugadas inteligentes generados automáticamente
En próximos artículos veremos diferentes casos de uso de la IA en entornos de ciberseguridad. En este caso, queremos resolver uno de los problemas clásicos de las estrategias de ciberseguridad: la rapidez con la que se quedan obsoletas y lo difícil que resulta a veces encontrar el manual de estrategias adecuado cuando no se entiende bien la investigación/incidente/alerta (utilizaré alerta para simplificar) a la que te enfrentas.
Ahora, imaginemos que queremos que cada vez que se genere una alerta en nuestro sistema, nuestro sistema de IA comprenda el contexto de la alerta, busque toda la información de alertas similares, cómo se resolvieron y genere un manual de estrategias personalizado en el que explique de qué trata la alerta y cómo debe abordarse para lograr una resolución óptima. (Obviamente, el manual de estrategias debe personalizarse para cada área de la ciberseguridad, pero más adelante veremos cómo se puede personalizar este manual forzando un poco la pregunta).
Bueno, en principio parece algo sencillo de abordar si no fuera porque seguramente el LLM que vamos a utilizar no tiene ni idea de nuestra base de conocimientos acumulada en nuestra empresa, ya sea en documentos o herramientas de gestión. Para resolver este problema en la IA tenemos dos enfoques que podemos hacer: Ajuste fino de modelos y RAG. Con lo que tenemos que volver a repasar algún concepto:
· Ajuste fino del modelo: El concepto es simple: elegir un modelo existente, ya sea de código abierto o privado, y volver a entrenarlo con nuestros datos. Para ello, necesitaremos generar lo que se conoce como «conjunto de datos», que no es más que una colección de preguntas y respuestas en un formato específico que permita a nuestro modelo aprender más «de forma nativa» sobre nuestro entorno.
Para estos trabajos de ajuste contamos con servicios privados como Azure OpenAI Studio o podemos optar por volver a entrenar modelos de código abierto como llama2 y sus derivados.
Como ventaja de esta solución, es que, si contamos con un buen equipo técnico capaz de generar un conjunto de datos de calidad (y en caso de optar por la opción de código abierto, de un equipo de procesamiento adecuado), la precisión y rapidez en las respuestas del modelo serán notables.
Pero como desventaja tenemos que el ajuste es un proceso caro y lento, lo que hará que los datos con los que se entrenó el modelo queden pronto desactualizados, y más en el campo de la ciberseguridad.
· RAG (generación aumentada de recuperación): RAG es el marco más de moda en la actualidad, ya que nos permite trabajar con fuentes de datos actualizadas, ya sean públicas o privadas, sin necesidad de volver a entrenar el modelo.
Podríamos usar muchas palabras técnicas para explicar qué es RAG, pero podemos simplificarlo diciendo que RAG es un método que aprovecha las ventanas de contexto de los LLM para «dopar» el modelo con información adicional con la que queremos que nos dé la respuesta.
Por ejemplo, imaginemos que abrimos una sesión con GPT4-Turbo desde OpenAI y preguntamos «¿Puede darme un resumen del incidente de DOGO del mes pasado?», obviamente el modelo responderá que no sabe de qué estás hablando, pero, si antes de hacer la pregunta, pegamos el texto de todo el informe (teniendo en cuenta que GPT4-Turbo admite 128 000 fichas, cabrían casi 250 páginas de informe...) y al final formulamos la misma pregunta, el modelo podrá responder no solo a esta pregunta, sino también a todas las que preguntes relacionadas con el informe.
Y aquí radica el «truco» de RAG, enriquecer el contexto de manera óptima para obtener respuestas precisas y personalizadas con mi alcance.
Como nota de seguridad, al tratarse de datos muy sensibles, debemos tener cuidado con los servicios de LLM a utilizar:
- Modo seguro: Utilice servicios privados como Azure OpenAI u OpenAI Enterprise, que no utilizan los datos, ni para volver a entrenar sus modelos, ni terceros ni nada que esté fuera del alcance del cliente.
- Modo paranoia: Utilice un modelo de código abierto como Llama2 (o sus variantes) en equipos locales.
Diseño de casos de uso
Para este caso de uso, utilizaremos RAG, ya que es el enfoque más simple, rápido y económico para configurar nuestro sistema de manual de jugadas automático.
Para este caso de uso necesitaremos los siguientes elementos:
- Un sistema de venta de entradas en el que hemos registrado las alertas o incidentes con sus correspondientes seguimientos y soluciones.
- Es muy importante para la IA poder generar buenos libros de jugadas, que nuestros técnicos hayan detallado de forma precisa y profesional esos tickets al cerrarlos, es decir, que las alertas no vayan con el típico «Resuelto», sino que traten de explicar, aunque sea brevemente, cómo se ha resuelto el ticket.
- Ten una base mínima de entradas con la que trabajar.
El flujo sería el siguiente:
Detallamos estos 6 sencillos pasos para nuestro manual de estrategias automático:
- Paso 1: El sistema de venta de entradas recibe una nueva alerta de nuestros sistemas de ciberseguridad.
- Paso 2: El sistema de IA recopila los datos de la nueva alerta para empezar a generar un contexto.
- Paso 3: El sistema de IA basado en el nombre de la alerta, el usuario, la máquina, los comandos utilizados... o lo que cada empresa considere relevante, genera datos de tickets relacionados con esa alerta para agregarlos como contexto.
- Paso 4: El sistema de IA utiliza todo ese contexto anterior y genera un mensaje con las preguntas adecuadas para forzar la estructura del manual de jugadas deseado y ejecutarlo en el LLM.
- Paso 5: El sistema de inteligencia artificial genera el manual de jugadas y lo adjunta al ticket.
- Paso 6: El usuario ahora puede usar el nuevo manual para llevar a cabo su investigación de manera más eficiente
Este flujo podría hacerse en unas pocas líneas con marcos como Langchain. Un ejemplo de código sería:
importar sistema operativo desde dotenv importar load_dotenv desde langchain.chains importar LLMchain desde langchain.indicaciones importar plantilla de aviso desde langchain.chat_models importar Azure Chat OpenAI desde libs.libticketing importar ticket_login, get_ticket, desde libs.libticketing importar get_related_text, post_playbookload_dotenv () # Cargar variable de entorno ticketite d = «107545" # ID del incidente (para este ejemplo) model = «gpt-35-turbo» # Nombre del modelo = ticket_login () # Inicie sesión en el sistema de venta de entradas alert = get_ticket (token, ticketid) # Obtenga información sobre las entradas relacionadas = get_related_text (token, related) # Obtenga entradas relacionadas# Context Templatetemplate = «" "Pregunta: Actuando como Morgoth, una IA avanzada en ciberseguridad evalúa la información paso a paso antes de responder a las preguntas del final del texto: {alert} {related} Responda lo siguiente de forma estructurada: - En la primera, ¿podría explicar en un breve currículum lo que ocurre en esta alerta? .- Haga una lista de todas las entradas relacionadas, siga las siguientes reglas: - Usa el formato de viñetas. - Elige un máximo de las cinco entradas relacionadas más relevantes. No más de cinco. - Lee atentamente los seguimientos y las soluciones de las entradas anteriores y haz un breve resumen. - Cada viñeta solo tiene el identificador del billete, el tipo de positivo y una breve descripción de la solución. - Y lo más importante, ¿podrías recomendarme cómo solucionar esta alerta? Respuesta: «" "prompt = promptTemplate (template=template, input_variables= ['alert', 'related']) llm = AzureChatOpenAI (deployment_name=model, temperature=1, verbose=true, max_tokens=2048) llm_chain = llmChain (llm=llm, prompt=prompt) answer = llm_chain.run (alert=alert, related=related) print (answer) post_playbook (token, answer)
Este pequeño código de ejemplo que se puede implementar rápidamente en cualquier flujo de trabajo de un equipo de ciberseguridad que utilice herramientas de gestión como ServiceNow, Jira, GLPI... y generaría un pequeño manual de estrategias de este tipo para cada ticket abierto:
En esta alerta, se informa de que un usuario llamado john.doe ha iniciado sesión correctamente en Inet frente a hosts mediante un ataque de suplantación de identidad. MDATP identificó esta actividad como un ataque de acceso inicial de alta gravedad utilizando la táctica del TA0001.
Lista de entradas relacionadas:
- TicketID: #12345, tipo de positivo: actividad sospechosa, descripción: el mismo día se generó una alerta similar que destacaba la actividad sospechosa en un dispositivo corporativo. En este incidente, se identificó que el dispositivo había sido puesto en peligro debido a un ataque de suplantación de identidad. Se tomaron medidas correctivas de inmediato desconectando el dispositivo de la red y realizando una investigación exhaustiva.
- TicketID: #23456, tipo de positivo: malware, descripción: Otra alerta generada unos días antes de este incidente puso de manifiesto la actividad de malware en el sistema. El malware se identificó como un RAT y se usó para obtener acceso no autorizado al sistema desde un servidor remoto. El dispositivo se aisló inmediatamente de la red y se restablecieron todas las credenciales.
- TicketID: #34567, tipo de positivo: cuenta comprometida, descripción: esta alerta identificó que una cuenta que pertenecía a un empleado sénior estaba comprometida y se utilizaba para acceder a archivos confidenciales. La investigación descubrió que el vector de ataque era un correo electrónico de suplantación de identidad, y las medidas correctivas consistieron en restablecer la cuenta de usuario comprometida y recomendar a todos los usuarios que estuvieran atentos a los correos electrónicos sospechosos.
- TicketID: #45678, tipo de positivo: robo de credenciales, descripción: esta alerta destacaba que las credenciales de un usuario habían sido robadas y utilizadas para iniciar sesión en un dispositivo corporativo. La investigación descubrió que el usuario había sido víctima de un correo electrónico de suplantación de identidad y que sus credenciales se habían utilizado para obtener acceso no autorizado al sistema. El dispositivo se aisló inmediatamente de la red y se aconsejó al usuario que cambiara su contraseña y habilitara la autenticación multifactor.
- TicketID: #56789, tipo de positivo: amenaza interna, descripción: Esta alerta puso de manifiesto la actividad sospechosa en un dispositivo corporativo que pertenecía a un empleado que había renunciado recientemente. Se identificó que el empleado había accedido a archivos confidenciales e intentado transferirlos a una unidad externa. El dispositivo se desconectó inmediatamente de la red y se revocó el acceso del empleado a los archivos confidenciales.
En función de los tickets relacionados, se recomienda tomar medidas correctivas inmediatas, incluida la desconexión del dispositivo de la red y la realización de una investigación exhaustiva para identificar el alcance del daño. Se deben restablecer todas las credenciales del usuario afectado y se debe habilitar la autenticación multifactor. Además, se debe advertir a todos los usuarios que estén atentos a los correos electrónicos sospechosos y se les debe impartir formación periódica en materia de seguridad. Además, se recomienda realizar un ejercicio de búsqueda de amenazas para identificar incidentes similares en el entorno.
En futuros artículos agregaremos bases de datos vectoriales e incrustadas para mejorar la precisión en la búsqueda de soluciones relacionadas.
Conclusión
Podemos concluir que estamos ante una nueva etapa en el mundo de la ciberseguridad donde la IA tendrá un papel fundamental no solo en términos de amenazas (que también), sino para ayudar a los equipos de ciberseguridad a ser mucho más eficientes y rápidos en la respuesta. Como hemos visto en este caso de uso y en los que vendrán en próximos artículos, no se trata de algo difícil, por lo que no hay excusa para no empezar a utilizar estas tecnologías que están a nuestra disposición.