El machine learning es la técnica de IA más madura en seguridad: lleva años integrado en antivirus, filtros de correo y plataformas de EDR. Pero entender cómo funciona por dentro marca la diferencia entre usar una caja negra y saber cuándo confiar en ella. En el libro IA en Ciberseguridad la detección con machine learning tiene su propio capítulo; aquí tienes una guía práctica con código.
Supervisado vs no supervisado
| Supervisado | No supervisado | |
|---|---|---|
| Necesita | Ejemplos etiquetados (malicioso / benigno) | Solo datos, sin etiquetas |
| Detecta | Variantes de lo que ya conoce | Lo que se sale de lo normal, aunque sea nuevo |
| Algoritmos típicos | Random Forest, Gradient Boosting, redes neuronales | Isolation Forest, clustering, autoencoders |
| Punto débil | Ataques que no se parecen a nada visto | Más falsos positivos: “raro” no siempre es “malicioso” |
| Ejemplo | Clasificar binarios como malware | Detectar un acceso anómalo de un usuario |
En la práctica se combinan: un modelo no supervisado propone anomalías, los analistas las revisan y esas revisiones se convierten en etiquetas para entrenar modelos supervisados.
Las features lo son todo
Un modelo no ve “un ataque”: ve números. El trabajo clave es decidir qué números describen bien el comportamiento. Algunos ejemplos según la fuente de datos:
- Autenticación: intentos por hora, porcentaje de fallos, IP distintas, países distintos, hora del día respecto a lo habitual.
- Red: bytes enviados frente a recibidos, número de destinos únicos, regularidad de las conexiones (el beaconing de un malware suele ser muy periódico).
- DNS: longitud y entropía del dominio (los dominios generados por algoritmo parecen aleatorios), proporción de respuestas NXDOMAIN.
- Endpoint: procesos hijos inusuales (Word lanzando PowerShell), longitud y ofuscación de la línea de comandos.
Ejemplo: anomalías de login con Isolation Forest
Isolation Forest parte de una idea simple: los puntos anómalos son pocos y diferentes, así que se “aíslan” con muy pocos cortes aleatorios. Este script agrupa los logins por usuario y hora, calcula features y marca el 1 % más anómalo.
import pandas as pd
from sklearn.ensemble import IsolationForest
# logins.csv: timestamp, usuario, ip, pais, resultado ("ok" / "fallo")
eventos = pd.read_csv("logins.csv", parse_dates=["timestamp"])
# 1. Features por usuario y hora
features = (
eventos
.groupby(["usuario", pd.Grouper(key="timestamp", freq="1h")])
.agg(
intentos=("resultado", "size"),
fallidos=("resultado", lambda s: (s == "fallo").sum()),
ips_distintas=("ip", "nunique"),
paises=("pais", "nunique"),
)
.reset_index()
)
columnas = ["intentos", "fallidos", "ips_distintas", "paises"]
# 2. Entrenar: contamination = proporción esperada de anomalías
modelo = IsolationForest(n_estimators=200, contamination=0.01, random_state=42)
features["anomalia"] = modelo.fit_predict(features[columnas]) # -1 = anómalo
features["score"] = modelo.decision_function(features[columnas]) # más bajo = más raro
# 3. Las ventanas más sospechosas, con sus valores para que el analista entienda por qué
alertas = features[features["anomalia"] == -1].sort_values("score")
print(alertas[["usuario", "timestamp", *columnas, "score"]].head(10))
Fíjate en el último paso: la alerta muestra los valores que la causaron (“40 intentos, 35 fallidos, 6 IP, 3 países”). Una alerta con contexto se investiga en minutos; un “score: -0,21” sin más, no.
contamination no es una verdad: es una suposición tuya sobre cuántas anomalías
hay. Empieza bajo, revisa los resultados con el equipo y ajústalo.
Cómo evaluar un detector
En seguridad las clases están muy desbalanceadas: casi todo es benigno. Por eso el accuracy engaña. Un modelo que dice “todo es benigno” acierta el 99,9 % de las veces y no detecta nada. Usa en su lugar:
- Precisión: de lo que el modelo marcó, ¿cuánto era realmente malicioso? Baja precisión = fatiga de alertas.
- Recall (sensibilidad): de todo lo malicioso, ¿cuánto detectó? Bajo recall = ataques que pasan.
- Alertas por día: la métrica que le importa al SOC. Un modelo excelente que genera 500 alertas diarias no es operable.
Del notebook a producción
- Versiona datos y modelo: debes poder reproducir qué modelo generó cada alerta.
- Reentrena periódicamente y vigila la deriva: si la distribución de las features cambia, el modelo se degrada en silencio.
- Integra con el SIEM: las anomalías deben llegar como alertas normales, con su contexto, a la cola del SOC.
- Cierra el ciclo: el veredicto del analista (verdadero o falso positivo) es la etiqueta que mejora el siguiente modelo.
- Protege el modelo: también se puede atacar, como explicamos en seguridad de modelos de IA.
Errores comunes
- Fuga de datos: mezclar en entrenamiento y prueba eventos del mismo incidente o de fechas posteriores. Separa siempre por tiempo.
- Entrenar con un entorno ya comprometido: el modelo aprende que el ataque es “normal”.
- Olvidar las reglas: el ML complementa las detecciones deterministas, no las sustituye.
Detección con machine learning, de la teoría al laboratorio
El libro IA en Ciberseguridad incluye laboratorios prácticos y scripts para aplicar machine learning y modelos predictivos a la detección de amenazas avanzadas.
Comprar en Amazon