Caso de uso: Como mejorar la eficiencia de los equipos de ciberseguridad mediante IA

Alpine Security
11 min readNov 29, 2023

--

27 Nov 2023 — Miguel Quero

Cybersecurity AI

Introducción

La ciberseguridad es un campo que requiere una constante actualización y adaptación ante las nuevas amenazas y vulnerabilidades que surgen en el mundo digital. Los equipos de ciberseguridad se enfrentan a retos cada vez más complejos y variados, que exigen una gran 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 efectividad de los equipos de ciberseguridad.

En particular nos centraremos en los grandes modelos lingüísticos (LLM). Sistemas de IA que pueden procesar y generar lenguaje natural de forma automática y precisa. Estos modelos tienen múltiples aplicaciones en el ámbito de la ciberseguridad, tales como:

  • La detección de ataques cibernéticos mediante el análisis de datos y su contexto en tiempo real, tal 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, sobrecarga de alertas, falsos positivos y algunos análisis manuales.

Además de la reducción de las tareas de operación de ciberseguridad, el uso de inteligencia artificial soluciona uno de los mayores problemas que enfrentan las organizaciones de seguridad hoy en día: reclutar y retener profesionales de seguridad cualificados durante una escasez crónica de talento en el sector, permitiendo mantener equipos más reducidos, pero altamente cualificados dedicados a tareas de mayor valor añadido, algo bueno tanto para el profesional como para las compañías.

Este articulo no pretende entrar en temas complejos del funcionamiento de la IA a bajo nivel y seguramente se cometan imprecisiones técnicas, pero el objetivo es que el lector pueda hacerse una idea real de como la aplicación de IA puede ayudar con sencillas integraciones 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, repasemos primero los conceptos esenciales de la inteligencia artificial, explicados de la manera más simple y quizás inexacta:

· LLM (Large Language Model): 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. Tenemos con nosotros en el mercado desde hace tiempo algunos de estos modelos como GPT4 (OpenAI), Claude2 (Anthropic), Llama2 (Meta) o BARD (Google).

· Token: Un token en inteligencia artificial es una unidad básica de texto (palabras o partes de palabras) que se utiliza para entrenar y consultar a modelos de lenguaje natural, como los LLM. El tamaño del contexto (que es limitado como veremos mas adelante) se mide en estas unidades, tokens.

· Embeddings: Los embeddings son una forma de representar palabras o frases como vectores numéricos en un espacio de baja dimensión. En términos simples, los embeddings son una forma de hacer que las computadoras comprendan el significado de las palabras y frases en el lenguaje humano. Por ejemplo, un embedding podría representar la palabra “perro” como un vector numérico específico, que luego se puede utilizar para entrenar un modelo de lenguaje natural para reconocer la palabra “perro” en diferentes contextos.

Uno de los usos prácticos mas interesantes de los embedding y que tocaremos otros artículos, es el hecho de que si usamos los embeddings para “indexar” nuestros propios textos y bases de conocimiento las búsquedas las podremos realizar con lenguaje natural. Por ejemplo, en los sistemas de indexación convencional, las búsquedas se realizan a través de hacer “match” de un término, por ejemplo, buscar “phishing” dará como resultado todos los párrafos y documentos donde se encuentra esa palabra. Sin embargo, si tenemos nuestros datos “indexados” en una base de datos de vectores (embeddings) tipo ChromaDB o FAISS, la búsqueda la podemos realizar haciendo preguntas tipo ¿Cuáles son los incidentes relacionados con phishing donde se haya producido exfiltración?.

· Contexto: El contexto lo podríamos definir como la “memoria” a corto plazo de los LLMs, el contexto es todo aquello que rodea a la pregunta que queremos formular y le da el suficiente sentido para que el modelo pueda responder de la forma más precisa. El contexto lo utilizamos de forma natural cuando usamos ChatGPT o BingChat, simplemente notando como las herramientas son capaces de seguir el hilo de la conversación y siendo cada vez más precisos conforme avanzamos.

El tamaño del contexto es algo que varía dependiendo del tipo de modelo que seleccionemos y es de vital importancia que su elección se adapte a nuestras necesidades. Algunos ejemplos de tamaño son:

  • Llama2: 4k (Hay variantes de hasta 32k)
  • GPT4: 32k
  • Claude2: 100k
  • GPT4-Turbo: 128k
  • Dolphin Yi 34b: 200k

· Prompt: Un prompt en inteligencia artificial es una frase o conjunto de palabras que se utiliza para guiar a un modelo de lenguaje natural, como los LLM, a generar una respuesta específica. Los prompts son útiles para proporcionar contexto y orientación a los modelos de aprendizaje automático. En términos simples, los prompts son como preguntas o instrucciones que se le dan a un modelo de lenguaje natural para que genere una respuesta específica. Cada prompt que ejecutemos se ira añadiendo al contexto hasta que agotemos el tamaño del contexto o cerremos la sesión con el LLM.

Caso de uso: Smart Autogenerated Playbooks

AI Playbooks

En próximos artículos iremos viendo diferentes casos de uso de la IA en entornos de ciberseguridad. En este caso queremos solventar uno de los problemas clásicos de los playbooks de ciberseguridad, lo rápido que se quedan desactualizados y lo complicado que es a veces encontrar el playbook correcto cuando no entiendes bien el/la investigación/incidente/alerta (usare 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 entienda el contexto de la alerta, busque toda la información de alertas similares, como fueron resueltas y genere un playbook personalizado en el que nos explique de que trata dicha alerta y como debería de ser abordada para su resolución optima. (Evidentemente el playbook ha de ser personalizado para cada ámbito de la ciberseguridad, pero posteriormente veremos como dicho playbook puede ser personalizado forzando un poco el prompt de la pregunta).

Pues bien, en principio parece algo sencillo de abordar si no fuera porque seguramente el LLM que vayamos a usar no tiene ni idea de nuestra base de datos de conocimientos acumulados en nuestra compañía, ya sea en documentos o herramientas de gestión. Para solventar este problema en IA tenemos dos aproximaciones que podemos hacer: RAG y Model Fine-tuning. Con lo que tenemos que volver repasar algunos concepto:

· Model Fine-tuning: El concepto es simple, elegir un modelo existente, ya sea opensource o privado y reentrenarlo con nuestros datos. Para esto necesitaremos generar lo que se conoce como un “dataset”, que no es más que una colección de preguntas y respuestas en un formato concreto que hace que nuestro modelo sea capaz de aprender de forma “nativa” más sobre nuestro entorno.

Para estos trabajos de fine-tuning disponemos de servicios privados como Azure OpenAI Studio o podemos optar por reentrenar modelos opensource como llama2 y sus derivados.

Como ventaja de esta solución, es que, si disponemos de un buen equipo técnico capaz de generar un dataset de calidad (y en caso de ir por la opción opensource, de un equipamiento de procesamiento adecuado), la precisión y la velocidad en las respuestas del modelo serán notables.

Pero como desventaja tenemos que el fine-tuning es un proceso caro y lento, lo que tendrá como consecuencia, que los datos con los que se entrenó el modelo, pronto quedaran desactualizados, y más en el ámbito de la ciberseguridad.

· RAG (Retrieval-Augmented Generation): El RAG es el framework más de moda actualmente, ya que nos permite trabajar con fuentes de datos actualizadas ya sean públicas o privadas sin necesidad de reentrenar el modelo.

Podríamos usar muchas palabras técnicas para explicar lo que es el RAG pero lo podemos simplificar diciendo que el RAG es un método que se aprovecha de las ventanas de contexto de los LLM para “dopar” al modelo con información extra con la que queremos que nos de la respuesta.

Por ejemplo, imaginemos que abrimos una sesión con GPT4-Turbo de OpenAI y le preguntamos “¿Me puedes hacer un resumen del incidente DOGO del mes pasado?”, evidentemente el modelo te contestara que no sabe de lo que le hablas, pero, si antes de realizarle la pregunta, le pegamos el texto de todo el informe (Teniendo en cuenta que GPT4-Turbo soporta 128k token, le entrarían casi 250 páginas de informe…) y al final formulamos la misma pregunta, el modelo será capaz no solo de responder a esta pregunta, sino a todas las que hagas relacionadas con el informe.

Y aquí radica el “truco” del RAG, enriquecer de forma óptima el contexto para obtener respuestas precisas y personalizadas con mi ámbito.

Como nota de seguridad, al ser datos muy sensibles, debemos tener cuidado con los servicios de LLM a utilizar:

  • Modo Seguro: Usar servicios privados como Azure OpenAI o OpenAI Enterprise, los cuales no utilizan los datos, ni para reentrenar sus modelos, ni terceros ni nada que no fuera del ámbito del cliente.
  • Modo Paranoia: Usar un modelo opensource tipo Llama2 (o sus variantes) en equipamiento On-Premise.

Diseño del caso de uso

Para este caso de uso usaremos RAG por ser la aproximación más sencilla, rápida y económica para montar nuestro sistema de playbook automático.

Para este caso de uso necesitaremos de los siguientes elementos:

  • Un sistema de ticketing donde tengamos registradas las alertas o incidentes con sus correspondientes seguimientos y soluciones.
  • Es muy importante para que la IA pueda generar buenos playbooks, que nuestros técnicos hayan detallado de forma precisa y profesional dichos tickets al cerrarlos, es decir, que las alertas no vayan con el típico “Resuelto”, sino que se intente explicar, aunque sea de forma breve, el cómo se ha resuelto el ticket.
  • Tener una mínima base de tickets en la que trabajar.

El flujo sería el siguiente:

Smart Autogenerated Playbooks Flow

Detallamos estos 6 sencillos pasos para nuestro playbook automático:

  • Paso 1: El sistema de tickets 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 en base al 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 dicha alerta para añadirlos como contexto.
  • Paso 4: El sistema de IA usa todo ese contexto anterior y genera un prompt con las preguntas adecuadas para forzar la estructura del playbook deseado y lo ejecuta en el LLM.
  • Paso 5: El sistema de IA genera el playbook y lo adjunta al ticket.
  • Paso 6: El usuario ahora puede usar el nuevo playbook para llevar a cabo su investigación de manera más eficiente.

Este flujo se podría realizar en pocas líneas con frameworks como Langchain. Un código de ejemplo seria:

import os
from dotenv import load_dotenv

from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.chat_models import AzureChatOpenAI

from libs.libticketing import ticket_login, get_ticket,
from libs.libticketing import get_related_text, post_playbook

load_dotenv() # Load environment variables
ticketid = "107545" # Incident ID (For this example)
model = "gpt-35-turbo" # Model name
token = ticket_login () # Login to Ticketing System
alert = get_ticket (token, ticketid) # Get ticket information
related = get_related_text(token, related) # Get related tickets

# Context Template
template = """Question:
Acting as Morgoth, a cybersecurity Advanced AI evaluate the information
step by step before answering the questions at the end of the text:

{alert}

{related}

Answer the following in a structured way:
- In the first one, could you explain in a short resume what is happening
in this alert?.
- Make a list of all related tickets, follows the following rules:
- Use bullet point format.
- Choose a maximum of five most relevant related tickets.
No more than five.
- Read carefully the follow-ups and solutions of the previous tickets
and make a brief summary.
- Every bullet only with Ticket ID, Type of Positive, and a
short description of the solution.

- And the most important part, could you recommend
how this alert should be solved?.

Answer: """

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 cyberseguridad que use herramientas de gestion tales como ServiceNow, Jira, GLPI… y generaría un pequeño playbook de este tipo por cada ticket abierto:

In this alert, it is reported that a user named john.doe has successfully logged in to inet facing hosts through a phishing attack. MDATP has identified this activity as high severity initial access attack using the tactic of TA0001.

List of Related tickets:

- TicketID: #12345, Type of Positive: Suspicious Activity, Description: A similar alert was generated on the same day, which highlighted suspicious activity on a corporate device. In this incident, it was identified that the device was compromised through a phishing attack. Immediate remediation steps were taken by disconnecting the device from the network and conducting a thorough investigation.

- TicketID: #23456, Type of Positive: Malware, Description: Another alert generated a few days before this incident highlighted malware activity on the system. The malware was identified as a RAT and was used to gain unauthorized access to the system from a remote server. The device was immediately isolated from the network and all credentials were reset.

- TicketID: #34567, Type of Positive: Account Compromise, Description: This alert identified that an account belonging to a senior employee was compromised and used to access sensitive files. The investigation found that the attack vector was a phishing email, and the remediation steps involved resetting the compromised user account and advising all users to be vigilant against suspicious emails.

- TicketID: #45678, Type of Positive: Credential Theft, Description: This alert highlighted that a user’s credentials were stolen and used to log in to a corporate device. The investigation found that the user had fallen victim to a phishing email, and their credentials were used to gain unauthorized access to the system. The device was immediately isolated from the network, and the user was advised to change their password and enable multi-factor authentication.

- TicketID: #56789, Type of Positive: Insider Threat, Description: This alert highlighted suspicious activity on a corporate device belonging to an employee who had recently resigned. It was identified that the employee had accessed sensitive files and attempted to transfer them to an external drive. The device was immediately disconnected from the network, and the employee’s access to sensitive files was revoked.

Based on the related tickets, it is recommended that immediate remediation steps are taken, including disconnecting the device from the network and conducting a thorough investigation to identify the extent of the damage. All credentials for the affected user should be reset, and multi-factor authentication should be enabled. Additionally, all users should be advised to be vigilant against suspicious emails, and regular security awareness training should be provided. Further, it is recommended to conduct a threat hunting exercise to identify similar incidents in the environment.

En próximos artículos añadiremos embeddings y bases de datos vectoriales 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 solamente en lo que a las amenazas se refiere (que también), sino a ayudar a los equipos de ciberseguridad a ser mucho mas 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 es algo difícil, con lo que no hay excusa para no empezar ya a hacer uso de estas tecnologías que están a nuestra disposición.

Miguel Quero | LinkedIn | GitHub

Alpine Security | LinkedIn | GitHub

--

--