← → navegar · B estático · ESC índice
SOFISTIC × AGENTCON PANAMÁ · 2026
01 / 24
Attack Detected.
Claude Responds.
Autonomous Blue Team Agents · Wazuh + Claude
Julio Espinosa · Sofistic · 30 min
Attack Detected. Claude Responds.
01 / 24
02 / 24 · SOBRE MÍ
FRAMING
QUIÉN HABLA
Julio Espinosa
Julio Espinosa
SOC Team Leader · Sofistic Cybersecurity
6 años en ciberseguridad. Empecé como Cyber Security Analyst en 2020. Hoy lidero un SOC con 25 analistas entre Panamá y Colombia, cubriendo 50+ clientes y 30,000+ alertas/mes en cobertura 24/7.
Off-duty: videojuegos, deportes de alto riesgo, CTFs.
25
Analistas SOC
50+
Clientes enterprise
30K/mes
Alertas gestionadas
10+
DFIR enterprise
CERTS DESTACADAS · TOP 10 DE +50
CrowdStrikeCCSE
CrowdStrikeCCFH
CrowdStrikeCCFA
AWSAI Practitioner
GoogleCloud Digital Leader
CompTIAPenTest+ · CySA+
HTBCDSA · CJCA
EC-CouncilCEH Master · SOC
INEWAPT · eCPPT
MastermindISO 27001 LA
SPECIAL THANKS · Juan José Chavarría — sparring técnico, sin él no hay esta charla.
@ AGENTCON PANAMÁ · 2026
Sobre mí
02 / 24
03 / 24 · EL PROBLEMA
FRAMING
PULL-QUOTE
La mayoría de herramientas de seguridad detectan amenazas.
Esta las piensa.
El problema
03 / 24
04 / 24 · PANORAMA GLOBAL
FRAMING
LA OLA YA EMPEZÓ
IA agéntica en seguridad,
desde afuera mirando.
40%
de aplicaciones enterprise incluirán agentes de IA específicos para fin de 2026.
Pasaron de menos del 5% en 2025. Fuente: Gartner, agosto 2025.
35%
de líderes de seguridad esperan que los agentes de IA reemplacen analistas SOC Tier-1.
Estudio Gartner / McKinsey 2026. Casi el 50% espera IA embebida en todo el cyber-stack.
53%
de empresas con agentes en producción los usan ya en IT y ciberseguridad.
Encuesta enterprise 2026 · OneReach / DigitalApplied.
$11B
mercado global de agentes IA en 2026.
CAGR proyectado: +45% hasta 2030.
Llegará a $450B (≈30% del software enterprise) según Gartner.
→ La ola viene sí o sí. La pregunta es cómo te subes — controlada o caóticamente.
Panorama global
04 / 24
05 / 24 · ESTADO DEL ARTE
SOFISTIC × 480
INFORME TENDENCIAS · SOFISTIC 2026
Lo que vemos
desde el SOC.
34%
de organizaciones tienen usuarios ejecutando interfaces LLM locales.
5.5%
tiene ya agentes de IA funcionando dentro de sus instalaciones. Sin gobernanza, en muchos casos.
AGOSTO 2025
Hack a Salesforce: ciberdelincuentes aprovecharon un fallo en un chatbot de IA integrado vía Salesloft, comprometiendo cientos de empresas cliente.
EN PROFUNDIDAD · INFORME 2026
"Con un SOC agéntico los analistas dejan de invertir horas en falsos positivos evidentes y pueden dedicar su tiempo a los casos donde la intuición humana marca la diferencia."
— JULIO CÉSAR ESPINOSA
MDR TEAM LEADER · SOFISTIC LATAM
"Cuando la IA se convierte en tu mejor analista" — artículo propio en el Informe de Tendencias en Ciberseguridad 2026 de Sofistic. El proyecto que les muestro hoy es la implementación de campo de esa idea.
→ Detalle del proyecto: artículo propio "La IA me echó de mi propio servidor" · publicado por Julio Espinosa tras la Ekko Party.
Estado del arte
05 / 24
06 / 24 · AGENDA
30 MIN
RUTA DE LA CHARLA
ACTO 1 FRAMING · 4' ACTO 2 ARQUITECTURA · 3' ACTO 3 PATRONES · 12' ACTO 4 DEMO · 5' ACTO 5 CIERRE · 6'
Agenda
06 / 24
07 / 24 · DEFINICIÓN
ARQUITECTURA
UN AGENTE NO ES UN CHATBOT
— ESTO NO —
Chatbot
  • ↳ Entrada: pregunta del usuario
  • ↳ Salida: texto
  • ↳ Sin estado entre interacciones
  • ↳ No ejecuta acciones
— ESTO SÍ —
Agente
  • ↳ Entrada: evento del entorno (alerta, webhook, sensor)
  • ↳ Salida: decisión + acción
  • ↳ Estado: percibe → razona → actúa → repite
  • ↳ Ejecuta tools / cambia el mundo
Qué es un agente
07 / 24
08 / 24 · SETUP
WAZUH + CLAUDE + DOCKER
Architecture animation
10 USE CASES · plug-in via use_cases/
Arquitectura
08 / 24
09 / 24 · AGENTE EN ACCIÓN
● LIVE
CICLO DEL AGENTE · 12 SEGUNDOS
Recibe, razona,
ejecuta, registra.
El mismo flujo que viste en la arquitectura, ahora en movimiento.
01 · ALERTA
02 · CLAUDE
03 · ACCIÓN
04 · AUDIT
Agente en acción
09 / 24
10 / 24 · PATRÓN 01
3 PATRONES
00
Prompting para decisión,
no resumen.
— ANTI-PATRÓN —
Prompt típico
"Resume esta alerta de Wazuh
y dime si es importante."
→ Devuelve un párrafo de texto.
→ Tú decides. El agente solo describe.
— EL PATRÓN —
Prompt con decisión
"Eres analista Blue Team.
Alerta: <json>
Acciones a ejecutar:
 1. kill_sessions(src_ip)
 2. change_password(user)
 3. message_and_kill (honeypot)
Analiza 4-6 líneas: secuencia,
impacto, hardening."
→ Acciones ya decididas en el prompt.
→ El LLM analiza sobre un menú cerrado.
P01 · Decisión vs resumen
10 / 24
11 / 24 · PATRÓN 01 · CÓDIGO
agent.py
EN AGENT.PY
Rol fijo, acciones predefinidas, claude -p
# agent.py · on_critical() · router dinámico
def on_critical(alert: dict):
    uc = use_cases.match(alert)   # 1 de 10
    if not uc: return

    prompt = uc.build_prompt(alert) # rol + tools
    raw    = ask_claude(prompt)
    d = json.loads(raw)  # {tool, args, reason}

    log("USECASE",  uc.id,         CYAN)
    log("REASON",   d["reason"],   CYAN)
    log("DECISION", d["tool"],     MAGENTA)

    actions.run(d["tool"], d["args"], ctx)
    # kill_session · rotate_password · block_ip · ...
→ El menú de tools vive en el prompt de cada use case. Claude elige UNA dentro de un marco cerrado. 10 reglas, 1 router.
P01 · Código
11 / 24
12 / 24 · PATRÓN 02
3 PATRONES
00
Action loop con rollback
o auditable.
— ANTI-PATRÓN —
Fire & forget
El agente actúa. No sabes qué hizo, ni cuándo, ni por qué. Si algo rompe en producción, no hay forma de rebobinar.
"Speed without rollback
is just faster damage."
— EL PATRÓN —
Cada acción reversible
o trazable
  • action_kill_sessions · log PIDs terminados
  • action_change_password · log nueva pwd
  • action_message_and_kill · honeypot trazado
  • log(EJECUTADO, ...) · huella obligatoria
P02 · Action loop
12 / 24
13 / 24 · PATRÓN 02 · CÓDIGO
agent.py
ACCIÓN CON HUELLA
Toda acción deja log estructurado
# actions/kill_session.py · 1 archivo · 1 acción
class KillSessionAction(Action):
    name = "kill_session"

    def execute(self, args: dict, ctx: dict) -> dict:
        user, c = args["user"], args.get("container")
        r = subprocess.run(
            ["docker", "exec", c, "pkill", "-KILL", "-u", user],
            capture_output=True, text=True, timeout=10)

        # Audit trail — siempre estructurado
        return {
            "action": "kill_session",
            "ok": r.returncode == 0,    # EJECUTADO?
            "target": f"{user}@{c}",
            "ts": datetime.utcnow().isoformat(),
            "stderr": r.stderr if r.returncode else "",
        }
→ Cada acción es 1 clase con execute() que devuelve dict de audit. Sin huella, la acción no se considera ejecutada. 13 acciones registradas, todas con el mismo contrato.
P02 · Código
13 / 24
14 / 24 · PATRÓN 03
3 PATRONES
00
Explicabilidad
cuando no hay humano.
— ANTI-PATRÓN —
Caja negra
El agente actuó. Punto. Mañana viene el cliente y pregunta por qué se reinició su sesión a las 3am. No tienes respuesta.
Sin explicabilidad, la confianza
se quema una vez.
— EL PATRÓN —
Razonamiento +
acción + log
  • ↳ Imprime la respuesta de Claude siempre
  • ↳ Cada acción con timestamp + tag MAGENTA
  • ↳ Stream coloreado en consola (audit-friendly)
  • ↳ Replay-able: puedes reconstruir el porqué
P03 · Explicabilidad
14 / 24
15 / 24 · PATRÓN 03 · CÓDIGO
agent.py
PRINT + AUDIT
El razonamiento es parte del output
def print_claude_response(response: str):
 print(f"\n{MAGENTA}{'·'*64}{R}", flush=True)
 for line in response.splitlines():
 print(f" {WHITE}{line}{R}", flush=True)
 print(f"{MAGENTA}{'·'*64}{R}\n", flush=True)

# Pipeline · respond_brute_success()
log("CLAUDE", "Consultando analista Blue Team...",
 MAGENTA + B)
response = ask_claude(prompt)
if response:
 print_claude_response(response) # REASON visible
log("ACCION", "Rotando contrasena...", MAGENTA)
action_change_password(agent_name, user) # EJECUCION
→ Cada acción del agente queda replayable. CLAUDE → REASON → ACCION → EJECUTADO, todo en el mismo log stream.
P03 · Código
15 / 24
16 / 24 · RECAP
3 REGLAS
SÍNTESIS · 3 PATRONES
10 USE CASES PLUG-IN
Patrón Anti-patrón Regla
01 · Decisión, no resumen Prompt "resume esto" Diseña el menú de acciones en el prompt. El LLM analiza, no improvisa.
02 · Action loop con audit Fire & forget Toda acción reversible o trazable. El log es parte de la acción.
03 · Explicabilidad Caja negra CLAUDE → REASON → ACCION → EJECUTADO en el mismo stream. Replayable.
Recap
16 / 24
17 / 24 · USE CASES
10 PLUG-IN
CATÁLOGO · 10 CASOS DE USO
Un agente, muchas reglas
01SSH brute5710 · 100010-21kill + rotate
02Sudo escalation5402 · 5403revoke + kill
03New root user5901 · 5902disable + snap
04FIM /etc/passwd550 · 553 · 554snapshot + rollback
05Web exploit31100-31108block + WAF
06C2 outbound100020-24block + kill
07Crypto miner100030 · 100031kill + quarantine
08Ransomware100040 · 100041snap + block
09Sudo no-autorizado5404kill + revoke
10SSH geo anomaly5715 · 100050MFA + alert
Cada caso es un archivo en use_cases/. Agregar uno nuevo = drop un .py + reiniciar agent. Plug-in arquitectura.
Use cases
17 / 24
18 / 24 · DEMO SETUP
● LIVE
QUÉ VAS A VER EN VIVO · 5 MIN
Un ataque real,
una respuesta real.
  1. PASO 01
    test_brute.py · brute-force SSH
  2. PASO 02
    Wazuh dispara → webhook al agent.py
  3. PASO 03
    Claude CLI analiza · decide
  4. PASO 04
    Acción ejecutada · < 30 segundos end-to-end
Demo setup
18 / 24
19 / 24 · DEMO RECAP
< 30 SEG END-TO-END
QUÉ ACABAS DE VER
0s · ATAQUE test_brute.py 8s · ALERTA Wazuh webhook 12s · PROMPT claude -p 22s · DECISIÓN {tool, reason} 25s · ACCIÓN rotate + kill 28s · DONE attacker locked out
Demo recap
19 / 24
20 / 24 · DÓNDE ROMPEN
01 / 03
00
FALLA 01
Over-trust del LLM
El agente confía en el output del modelo como si fuera una decisión humana. Si Claude alucina "deploy_honeypot en 10.0.0.5" contra un host de producción legítimo, el agente lo hace.
→ Mitigación: validar el target contra whitelist antes de actuar. El LLM propone, el código valida.
Rompen · 01
20 / 24
21 / 24 · DÓNDE ROMPEN
02 / 03
00
FALLA 02
Latencia · ventana de daño
Claude CLI tarda 8–15 segundos en pensar. En esos segundos, el atacante ya hizo lo suyo. Para SSH brute-force está bien. Para data exfiltration en burst, llegas tarde.
→ Mitigación: capas. Reglas determinísticas para ventanas < 1s (kill-switch). LLM para análisis post-incident y casos ambiguos.
Rompen · 02
21 / 24
22 / 24 · DÓNDE ROMPEN
03 / 03
00
FALLA 03
Falsos positivos en cascada
Webhook ruidoso → agente actúa sobre alerta falsa → nueva alerta por la acción → agente actúa otra vez. Pesadilla en 30 segundos.
→ Mitigación: cooldown por target (15 min). Rate-limit global. Y un kill-switch grande, rojo, accesible.
Rompen · 03
22 / 24
23 / 24 · QUÉ LLEVARTE
3 REGLAS
QUÉ LLEVARTE
01
Diseña el menú,
el LLM elige.
02
El log es parte
de la acción.
03
Sin replay,
no hay confianza.
Qué llevarte
23 / 24
24 / 24 · GRACIAS
Q&A
Gracias.
Preguntas → ahora
Special thanks · Juan José Chavarría
Julio Espinosa · jespinosa@sofistic.com · sofistic.com
Gracias
24 / 24