libro / blog / deteccion-amenazas-machine-learning

// machine learning

Detección de amenazas con machine learning: guía práctica con Python

Gustavo Arias10 min de lectura

TL;DR Para detectar lo que ya conoces, entrena un modelo supervisado con ejemplos etiquetados. Para descubrir lo desconocido, usa detección de anomalías. En ambos casos, el éxito depende más de las features que del algoritmo, y cada alerta debe poder explicarse.

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

SupervisadoNo supervisado
NecesitaEjemplos etiquetados (malicioso / benigno)Solo datos, sin etiquetas
DetectaVariantes de lo que ya conoceLo que se sale de lo normal, aunque sea nuevo
Algoritmos típicosRandom Forest, Gradient Boosting, redes neuronalesIsolation Forest, clustering, autoencoders
Punto débilAtaques que no se parecen a nada vistoMás falsos positivos: “raro” no siempre es “malicioso”
EjemploClasificar binarios como malwareDetectar 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:

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.

El parámetro 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:

Del notebook a producción

  1. Versiona datos y modelo: debes poder reproducir qué modelo generó cada alerta.
  2. Reentrena periódicamente y vigila la deriva: si la distribución de las features cambia, el modelo se degrada en silencio.
  3. Integra con el SIEM: las anomalías deben llegar como alertas normales, con su contexto, a la cola del SOC.
  4. Cierra el ciclo: el veredicto del analista (verdadero o falso positivo) es la etiqueta que mejora el siguiente modelo.
  5. Protege el modelo: también se puede atacar, como explicamos en seguridad de modelos de IA.

Errores comunes

Documentación recomendada: detección de anomalías en scikit-learn.

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