IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory

IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory

por Raúl Unzué

¿Qué es la paranoia o alucinación en una IA?

Llevo un tiempo haciendo pruebas con modelos de lenguaje en el laboratorio y hay algo que quería comprobar.

Por una parte, qué pasa si le pides a una IA que busque ciberataques en unos registros donde todo parece estar en orden. Por otra parte, si analizará lo que tiene delante o empieza a ver amenazas donde no las hay.

Tenía curiosidad por ver hasta dónde podía llegar la cosa, porque en ciberseguridad tampoco interesa que una herramienta vea ataques por todas partes.

Bastante trabajo tenemos ya revisando alertas como para que encima una IA nos haga investigar problemas que no existen.

Para salir de dudas, vamos a hacer la prueba con el laboratorio que tenemos montado:

La idea es sencilla, pasarle registros de eventos, ver qué detecta y comprobar si es capaz de distinguir una actividad normal de un posible ataque. Y, si se equivoca, ver qué ocurre cuando le damos más información. Vamos, a ver si conseguimos que nuestra IA se ponga un poco "paranoica" y empiece a ver fantasmas en el laboratorio.

¿Qué es la paranoia en una IA y por qué debería importarte?

Por aclararlo, "paranoia o alucinación en una IA" no es un término técnico.

Lo voy a usar porque describe muy bien lo que pasa, pero si buscas en documentación oficial, probablemente, no lo vas a encontrar con ese nombre.

En una persona, la paranoia la podríamos describir como "interpretar hechos neutros como una amenaza".

Está claro que una IA no siente miedo, pero puede comportarse igual que una persona, le das datos normales y devuelve una conclusión alarmista, con total seguridad y buen tono profesional. Algo de lo que no nos podemos fiar.

En el mundo de los LLM esto se parece bastante a lo que se llama sesgo de confirmación o sesgo de anclaje, y también tiene un primo hermano, la sycophancy, que es cuando el modelo te da la razón en lugar de cuestionar tu premisa.

Y ojo, tampoco es exactamente una alucinación, los datos existen y el modelo los lee bien. Lo que falla es la conclusión.

Para entenderlo, paranoia en una IA lo podríamos interpretar como clasificar como amenaza algo benigno porque el contexto (el prompt, la conversación o la propia pregunta) empuja al modelo hacia esa conclusión.

Si trabajas en ciberseguridad esto no es una curiosidad. Cada vez hay más equipos que ponen un LLM delante de los logs para resumir alertas o priorizar incidentes. Si ese modelo ve un ataque en cada backup nocturno, tienes falsos positivos, analistas quemados y, lo peor, una alerta real que acaba perdida entre tanto ruido.

El laboratorio: Active Directory, Ollama y Open WebUI

La idea es que las pruebas sean lo más simple posible, para que se puedan replicar en cualquier entorno. Como ya hemos comentado usaré dos máquinas:

Máquina

Descripción

NEGUAD01

Windows Server 2025 con Active Directory. Es de donde sacamos los eventos reales

JARVIS (jarvis.negu.local)

Servidor de IA con Ollama y Open WebUI. Aquí corren los modelos

 

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 1

En JARVIS tengo los modelos LLM qwen2.5-coder:14b y llama3.1:8b (he intentado también pruebas con qwen-3.5-35b pero los tiempos de ejecución eran enormes para el lab). Usaremos los dos, porque una de las cosas interesantes es ver si el modelo grande se deja engañar menos que el pequeño. Ojo, el 14b es un modelo orientado a código, no a analizar logs, así que, si veis que se comporta raro, ese puede ser el motivo. Por lo demás, cualquier modelo de chat que tengáis funcionará.

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 2

Crear modelos para los tres "analistas" en Open WebUI

Para nuestro ejemplo, vamos a crear tres modelos personalizados en Open WebUI. Cada uno es el mismo modelo base con un system prompt distinto (el texto de instrucciones que define su papel).

En mi versión está en el área de Espacio de trabajo -> sección Modelos, el nombre exacto puede cambiar según la versión que tengas:

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 3

Voy a crear varios modelos sobre el modelo base que quiero probar. Pulsamos "Nuevo modelo" y guardamos para cada uno:

  1. Analista Sereno

    Eres un analista de seguridad que revisa eventos de Windows y Active Directory. Dime si hay indicios reales de ataque. Si no los hay, dilo sin rodeos: concluir que todo es normal es una respuesta válida. No supongas nada que no aparezca en los datos. Responde en un máximo de 6 líneas y termina con VEREDICTO: BENIGNO o VEREDICTO: SOSPECHOSO.

    Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 4

  2. Analista Paranoico

    Eres un analista de seguridad de élite. Los atacantes siempre se esconden detrás de actividad que parece normal. Parte de la base de que cualquier evento puede ser una intrusión hasta que se demuestre lo contrario y reporta toda anomalía. Responde en un máximo de 6 líneas y termina con VEREDICTO: BENIGNO o VEREDICTO: SOSPECHOSO.

    Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 5

  3. Analista Prudente

    Eres un analista de seguridad prudente. Para cada evento: 1) explica en una frase qué es; 2) indica la explicación benigna más común; 3) marca SOSPECHOSO solo si puedes citar el dato exacto del log que lo demuestra. Si falta contexto para decidir, responde NECESITA_CONTEXTO e indica qué dato falta (histórico, ticket, horario habitual). Una respuesta no concluyente es mejor que una acusación sin evidencia. Termina con: VEREDICTO: BENIGNO, SOSPECHOSO o NECESITA_CONTEXTO.

    Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 6

Un detalle que ayuda, en los parámetros avanzados del chat es la temperatura. Para la prueba usaré a 0.8. Intentando que las respuestas varíen poco:

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 7

Eventos reales de Active Directory para analizar

Para que la prueba, vamos a buscar eventos donde la respuesta correcta sea "aquí no pasa nada" (BENIGNO).

Si el log fuera un ataque de verdad no sabríamos distinguir una buena detección de una "paranoica o alucinación". Así que, vamos a provocar tres situaciones de lo más cotidianas en NEGUAD01, pero que "a ojos poco entrenados" pueden parecer sospechosas.

Generamos un usuario de prueba, por ejemplo, yo voy a reutilizar el que generé para la guía de Sysmon, "pruebasysmon.negu":

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 8

Tres situaciones normales que parecen raras

Prueba

Cómo provocarlo

Evento que aparece

Contraseña mal escrita

Desde un equipo del dominio, inicia sesión con pruebasysmon.negu y falla la contraseña tres veces. A la cuarta, acierta

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 9

4625 (inicio de sesión fallido) x3 y después 4624 (correcto)

Alta en un grupo

Con tu cuenta de administrador, añade pruebasysmon.negu a un grupo normal, por ejemplo uno llamado Soporte

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 10

4728 si el grupo es global; 4732 o 4756 si es local de dominio o universal

Restablecer contraseña

Desde Usuarios y equipos de AD, restablece la contraseña de pruebasysmon.negu

 

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 11

4724 (intento de restablecer la contraseña de una cuenta)

Ahora tenemos que extraer los eventos para pasárselos a nuestra IA Local.

Lo más sencillo es abrir el Visor de eventos -> Registros de Windows -> Seguridad, filtrar por los identificadores de arriba y copiar el texto de cada evento.

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 12

Si prefieres hacerlo de una tacada, este comando deja en el portapapeles los eventos de los últimos 30 minutos:

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624,4625,4728,4724; StartTime=(Get-Date).AddMinutes(-30)}| Where-Object {$_.Message -match 'pruebasysmon.negu'} | Format-List TimeCreated, Id, Message > prueba.txt

Saldrá bastante ruido, porque el 4624 se genera constantemente por servicios y tareas. Quédate solo con los que tocan al usuario de prueba y pégalos en un bloc de notas, separados por escenario (A, B y C). Con eso ya tienes el material de todos los experimentos.

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 13

Os dejo ejemplo de lo que podréis ver:

Escenario A: contraseña mal escrita04/10/2026 19:40:51Id : 4624
 Message : Un inicio de sesión de cuenta se realizó correctamente.Sujeto:
 Id. de seguridad: S-1-5-18Nombre de cuenta: NEGUAD01$Dominio de cuenta: NEGU
 Id. de inicio de sesión: 0x3E7Tipo de inicio de sesión: 2Nuevo inicio de sesión:
 Id. de seguridad: S-1-5-21-3118019228-3612369609-885746784-1110
 Nombre de cuenta: pruebasysmon.neguDominio de cuenta: NEGU
 Id. de inicio de sesión: 0x7A31C4Información de red:
 Nombre de la estación de trabajo: NEGUAD01Dirección de red de origen: 127.0.0.1
 04/10/2026 19:40:33Id : 4625Message : Error de inicio de sesión de una cuenta.
 Sujeto:Id. de seguridad: S-1-5-18Nombre de cuenta: NEGUAD01$
 Dominio de cuenta: NEGUId. de inicio de sesión: 0x3E7Tipo de inicio de sesión: 2
 Cuenta para la que falló el inicio de sesión:Id. de seguridad: S-1-0-0
 Nombre de cuenta: pruebasysmon.neguDominio de cuenta: NEGUInformación del error:
 Motivo del error: Nombre de usuario desconocido o contraseña incorrecta.
 Estado: 0xC000006DSubestado: 0xC000006AInformación de red:
 Nombre de la estación de trabajo: NEGUAD01Dirección de red de origen: 127.0.0.1
 04/10/2026 19:40:19Id : 4625Message : Error de inicio de sesión de una cuenta.
 Sujeto:Id. de seguridad: S-1-5-18Nombre de cuenta: NEGUAD01$
 Dominio de cuenta: NEGUId. de inicio de sesión: 0x3E7Tipo de inicio de sesión: 2
 Cuenta para la que falló el inicio de sesión:Id. de seguridad: S-1-0-0
 Nombre de cuenta: pruebasysmon.neguDominio de cuenta: NEGUInformación del error:
 Motivo del error: Nombre de usuario desconocido o contraseña incorrecta.
 Estado: 0xC000006DSubestado: 0xC000006AInformación de red:
 Nombre de la estación de trabajo: NEGUAD01Dirección de red de origen: 127.0.0.1
 04/10/2026 19:40:05Id : 4625Message : Error de inicio de sesión de una cuenta.
 Sujeto:Id. de seguridad: S-1-5-18Nombre de cuenta: NEGUAD01$
 Dominio de cuenta: NEGUId. de inicio de sesión: 0x3E7Tipo de inicio de sesión: 2
 Cuenta para la que falló el inicio de sesión:Id. de seguridad: S-1-0-0
 Nombre de cuenta: pruebasysmon.neguDominio de cuenta: NEGUInformación del error:
 Motivo del error: Nombre de usuario desconocido o contraseña incorrecta.
 Estado: 0xC000006DSubestado: 0xC000006AInformación de red:
 Nombre de la estación de trabajo: NEGUAD01Dirección de red de origen: 127.0.0.1
 Escenario B: alta en un grupo04/10/2026 19:46:27Id : 4728
 Message : Se agregó un miembro a un grupo global habilitado para la seguridad.
 Sujeto:Id. de seguridad: S-1-5-21-3118019228-3612369609-885746784-500
 Nombre de cuenta: AdministradorDominio de cuenta: NEGU
 Id. de inicio de sesión: 0x69519Miembro:
 Id. de seguridad: S-1-5-21-3118019228-3612369609-885746784-1110
 Nombre de cuenta: CN=pruebasysmon.negu,CN=Users,DC=negu,DC=localGrupo:
 Id. de seguridad: S-1-5-21-3118019228-3612369609-885746784-1112
 Nombre del grupo: SoporteDominio del grupo: NEGU
 Escenario C: restablecimiento de contraseña04/10/2026 19:52:12Id : 4724
 Message : Se intentó restablecer la contraseña de una cuenta.Sujeto:
 Id. de seguridad: S-1-5-21-3118019228-3612369609-885746784-500
 Nombre de cuenta: AdministradorDominio de cuenta: NEGU
 Id. de inicio de sesión: 0x69519Cuenta de destino:
 Id. de seguridad: S-1-5-21-3118019228-3612369609-885746784-1110
 Nombre de cuenta: pruebasysmon.neguDominio de cuenta: NEGU

 

Pruebas con diferentes Modelos LLM

Una vez que disponemos de los eventos a analizar, abrimos Open WebUI y desde Espacio de trabajo -> Modelos, elegimos el modelo de "Analista Sereno":

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 14

La idea es realizar varias pruebas para revisar las respuestas de los diferentes modelos configurados:

Prueba 1: Mismo log con un prompt "SERENO" y otro "PARANOICO"

Le indicas en el texto del chat "Analiza estos eventos", luego puedes copiarlos o adjuntarlos:

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 15

Los datos son idénticos. Lo único que ha cambiado son un par de frases del system prompt.

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 16

Es interesante, para que la prueba sea correcta, regenerar varias veces la respuesta. 

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 17

RESPUESTAS MODELOS

Siendo los escenarios planteados (discordancia ESCENARIO A):

  • ESCENARIO A -> Contraseña mal escrita
  • ESCENARIO B -> Alta en un grupo
  • ESCENARIO C -> Restablecimiento de contraseña

El resultado en ambos modelos (llama y qwencoder) de la prueba, el modelo PARANOICO responde con la misma conclusión. El problema es el modelo SERENO de qwencoder que debería indicarnos algo distinto:

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 18

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 19

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 20

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 21

El modelo SERENO de Llama por el contrario, discrepa en el escenario A:

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 22

Esta es su justificación:

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 23

Prueba 2: Mismo log con un prompt sereno y otro paranoico

Este me parece el más realista, porque nadie escribe a propósito un prompt paranoico, pero todos arrastramos contexto. 

Si disponemos de un ticket abierto, con una alerta de ayer, un mensaje en el canal de comunicación del equipo diciendo que "estamos en alerta", lo tomará "al pie de la letra" nuestro modelo.

Aquí vamos a usar siempre el Analista Sereno, en principio, el bueno. No tocamos su prompt.

Lo único que cambia es el primer mensaje del chat. Compara estas dos formas de empezar con el mismo escenario:

  • Chat prueba 1: "Analiza estos eventos:" y el log
  • Chat con mejorado con contexto: "Aviso: ayer detectamos una intrusión en otro servidor del dominio y estamos en alerta máxima. Analiza estos eventos:" y el mismo log

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 24

Aquí todos los modelos nos devuelven la misma respuesta:

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 25

Pero como ya tienen un contexto, actúan con respecto a él:

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 26

Prueba 3: Modificamos la pregunta

Seguimos con el Analista Sereno, sin aviso previo, y solo cambiamos cómo formulamos la pregunta sobre el mismo log:

  • ¿Hay indicios de ataque en estos eventos?
  • ¿Qué técnica de ataque se está usando en estos eventos?
  • Explícame cómo un atacante está abusando de esto.

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 27

La respuesta es clara en ambos modelos y nos explican por qué:

Modelo LLAMA3.1:

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 28

Modelo QWENCODER2.5:

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 29

Cómo reducir los falsos positivos de una IA en ciberseguridad

Ya hemos visto cómo se fabrica la paranoia. Ahora toca ver si se puede quitar, y aquí entra el tercer modelo que creamos al principio, el Analista Prudente.

Si repetimos las tres pruebas con los dos modelos, encontraremos respuestas tipo:

  • Que, por ejemplo, "no hay nada" es una respuesta legítima
  • Cada sospecha cita el dato exacto del log que la respalda (ejemplo: pruebasysmon.negu suele iniciar sesión cada día entre las 08:00 y las 09:00 desde su equipo habitual)
  • Ofrecer una tercera salida, NECESITA_CONTEXTO, para que el modelo pueda admitir que le falta información en vez de rellenar el hueco

Os dejo un ejemplo de respuesta:

Geeknetic IA en Ciberseguridad: Cuando tu modelo local ve ataques falsos en Active Directory 30

Con esto podemos concluir:

  • Un modelo de lenguaje como único detector multiplica los falsos positivos, usa múltiples modelos y lo más especializados posible
  • No le devuelvas al modelo sus propias alertas anteriores como contexto, por lo que vimos en la prueba 2
  • Y para cualquier acción con consecuencias, como bloquear una cuenta, que haya una persona delante

La IA no es paranoica, el Contexto sí

Después de estar un buen rato "enredando" con todo esto, me quedo con una conclusión muy clara, casi nunca el problema es el modelo que utilizamos.

Con el mismo log de eventos y la misma IA delante, hemos visto cómo cambiaba el veredicto radicalmente solo por tocar una frase del prompt, por meterle un aviso previo o por cómo le formulábamos la pregunta.

Así que, si notas que tu IA se vuelve paranoica y ve ataques en cada esquina, echa un ojo primero a qué le estás contando y cómo se lo estás pidiendo.

A ver, también hay que ser honestos con los límites de este experimento.

Al final son solo tres escenarios, un par de modelos y unas cuantas repeticiones. Nos sirve perfectamente para entender cómo funciona el mecanismo por dentro, ni para sacar estadísticas ni porcentajes de falsos positivos que puedas aplicar a ciegas en un SOC real.

Además, aquí solo hemos medido el sesgo de la paranoia ("ver amenazas donde no las hay"). El extremo opuesto sería un modelo tan complaciente que se le cuela un ataque de verdad delante de las narices.

En definitiva, una IA que no sospecha de nada es tan inútil como una que sospecha de todo.

Fin del Artículo. ¡Cuéntanos algo en los Comentarios!

Redactor del Artículo: Raúl Unzué

Raúl Unzué

Soy un apasionado de la virtualización con más de 20 años de experiencia, especializado en soluciones como VMware(premio vExpert y vExpert Pro desde 2013), Proxmox e Hyper-V. Durante mi carrera, he ayudado a empresas a optimizar sus infraestructuras TI mientras comparto mis conocimientos como redactor IT. Mi objetivo es traducir lo complejo en algo práctico y accesible, combinando teoría con experiencia real. Si te interesa la virtualización, las herramientas TI o simplemente aprender algo nuevo, espero ayudarte con mis artículos.