Soluciones — Parte 8: Blue Team, detección y SOC
Estas son claves de referencia para el instructor y para autoevaluación. Intenta resolver cada reto y ejercicio por tu cuenta antes de mirar aquí: el valor está en el proceso, no en la respuesta. Puede haber más de una solución correcta; lo que sigue es una guía técnicamente válida.
Volver al índice de la parte: ../classes/parte-8-blue-team-deteccion-y-soc/README.md
Todo laboratorio se realiza en un entorno aislado y autorizado (VMs/contenedores propios). Las técnicas ofensivas se ejecutan solo para generar telemetría de detección; nunca contra sistemas de terceros.
Clase 181 — El SOC moderno: roles, niveles y procesos
Solución del reto verificable
Entregable: documento de 1–2 páginas con organigrama, ciclo de vida de alerta, matriz RACI y 4 métricas.
Pasos concretos:
- Organigrama. Dibuja L1 (triaje), L2 (investigación), L3 (hunting/ingeniería de detección), IR y responsable de SOC. Cada caja lista 1–2 responsabilidades.
- Ciclo de vida de la alerta. Flujo con nodos:
Generación (EDR/SIEM) → Triaje L1 → [¿escala?] → Investigación L2 → [¿incidente?] → Respuesta IR/L3 → Erradicación → Cierre documentado → Lecciones aprendidas. Marca explícitamente un punto de escalado (L1→L2, condición objetiva) y un punto de cierre con campo de documentación obligatorio.
- Matriz RACI. Tabla actividad × rol para triaje, hunting, creación de reglas, IR y reporte a dirección. Cada actividad tiene exactamente un A y cada rol es R en al menos una actividad.
| Actividad |
L1 |
L2 |
L3/Hunter |
IR |
Jefe SOC |
| Triaje |
R |
C |
I |
I |
A |
| Threat hunting |
I |
C |
R |
C |
A |
| Creación de reglas |
I |
C |
R |
I |
A |
| Respuesta a incidentes |
I |
R |
C |
R |
A |
| Reporte a dirección |
I |
I |
C |
C |
R/A |
- 4 métricas con fórmula.
- MTTD = Σ(t_detección − t_compromiso) / n_incidentes.
- MTTR = Σ(t_contención − t_detección) / n_incidentes.
- % falsos positivos = alertas_FP / alertas_totales × 100.
- Cobertura ATT&CK = técnicas_detectadas / técnicas_relevantes × 100.
Evidencia que cumple el criterio: el diagrama muestra al menos un punto de escalado y un cierre documentado, y en la RACI cada rol del organigrama aparece como "R" de al menos una actividad.
Claves de los ejercicios
- L1: monitorear colas de alertas, clasificar/descartar FP evidentes, escalar según criterios. Ingeniero de detección: diseñar y afinar reglas, mapearlas a ATT&CK, gestionar el ciclo de vida de la detección.
- Runbook "login imposible": (1) confirmar los dos logins y su geolocalización, (2) calcular velocidad viaje vs tiempo, (3) verificar VPN/proxy corporativo que explique el salto, (4) revisar MFA y sesiones activas, (5) contactar/forzar reset si es real, (6) documentar y cerrar o escalar.
- MTTD mide desde compromiso hasta detección; dwell time es hasta que se detecta/expulsa por completo. Ej.: compromiso día 0, detección día 8 (MTTD=8), erradicación día 11 → dwell time = 11.
- Escalado L1→L2 si: (a) coincide con IOC de threat intel de alta confianza, (b) afecta a un activo crítico del inventario, o (c) hay evidencia de ejecución/persistencia (no solo un scan).
- MSSP es mala idea cuando la organización maneja datos muy sensibles/regulados que no puede externalizar, necesita contexto de negocio profundo para triaje, o el coste de integración supera al de un equipo interno pequeño.
- Métrica manipulable: "alertas cerradas/hora" (incentiva cerrar sin investigar). Contrapeso: tasa de reapertura/reincidencia y auditoría de muestreo de cierres.
Clase 182 — Logging y fuentes de telemetría
Solución del reto verificable
Entregable: plan de logging de una página + demostración de reenvío sincronizado.
Pasos:
- Matriz activo×fuente con prioridad y retención:
| Fuente |
Prioridad |
Valor de detección |
Retención |
| Sysmon (proc/net/DNS) |
Alta |
Ejecución, linaje, C2 |
90 días |
| Security.evtx (4624/4625/4688) |
Alta |
Auth, fuerza bruta |
90 días |
| PowerShell 4104 |
Alta |
Script ofuscado |
90 días |
| Zeek conn/dns |
Alta |
Beaconing, tunneling |
30–90 días |
| Proxy/firewall |
Media |
C2, exfil |
30 días |
| PCAP completo |
Baja |
Forense puntual |
3–7 días |
- 3 puntos ciegos + remediación: sin logging de PowerShell → habilitar ScriptBlock por GPO; sin DNS → Sysmon 22 o Zeek dns.log; nube sin auditar → activar CloudTrail/M365 Unified Audit Log.
- Demostración de sincronización. Configura NTP en todos los hosts (UTC), genera un evento (
whoami /all) y compara la marca de tiempo local con la del colector.
# Colector rsyslog (Linux)
module(load="imudp")
input(type="imudp" port="514")
w32tm /query /status # Windows: confirmar sincronización
Evidencia que cumple el criterio: el evento generado en el endpoint aparece en el colector con la misma marca de tiempo (±2 s) que la vista local, demostrando reenvío + NTP correctos.
Claves de los ejercicios
- Taxonomía NSM: Sysmon=endpoint/contenido; Zeek conn=sesión; Suricata=alerta; NetFlow=sesión; top-talkers=estadístico; PCAP=contenido completo; proxy=transacción; 4624=endpoint/identidad.
- PCAP 100 Mbps al 20% = 20 Mbps ≈ 2,5 MB/s → ~216 GB/día → ~6,5 TB para 30 días (por eso solo se retiene en segmentos críticos y poco tiempo).
- Retención por tipo: flow/sesión 90 días, alerta 90 días, endpoint 90 días, PCAP 3–7 días (coste alto).
- Puntos ciegos pyme: sin DNS logging, sin auditoría de creación de procesos con CommandLine, sin logs de M365/IdP. Se cierran con Sysmon+GPO+auditoría de nube.
- PowerShell ScriptBlock (4104) registra el script tras des-ofuscar, revelando la intención real de ataques living-off-the-land: máxima señal por byte.
- De M365/Azure AD: Unified Audit Log (accesos, cambios de permisos), sign-in logs (login imposible, MFA), y cambios de reglas de reenvío (indicio de BEC).
Clase 183 — SIEM: arquitectura y componentes
Solución del reto verificable
Entregable: recorrido de un evento (crudo → parseado → enriquecido → alerta correlacionada).
Pasos:
- Captura del dato crudo (línea de texto de Sysmon/4625 sin estructura).
- Captura del dato parseado con campos extraídos (
process.command_line, Account_Name, EventCode).
- Captura del enriquecimiento (GeoIP sobre la IP pública, propietario del activo vía lookup).
- Regla de correlación de fuerza bruta (múltiples 4625 seguidos de un 4624):
index=win (EventCode=4625 OR EventCode=4624)
| stats count(eval(EventCode=4625)) as fails count(eval(EventCode=4624)) as success
min(_time) as t0 max(_time) as t1 by Account_Name
| where fails>=5 AND success>0 AND (t1-t0)<=300
Evidencia que cumple el criterio: la regla dispara una alerta (notable), y puedes indicar en qué índice quedó el evento y su política de retención (ILM/fase hot→cold a los 7 días).
Claves de los ejercicios
- Pipeline:
Forwarder/colector → parsing/normalización → enriquecimiento → indexación → correlación → alertas/notables.
- 2.000 EPS × 800 B × 86.400 s = 1,38×10¹¹ B/día ≈ ~128 GB/día (≈ 3,8 TB/mes).
- Parser de firewall (regex): extrae
src_ip, dst_ip, dst_port, action con named groups o rex en Splunk / grok en Logstash.
- On-prem: control total, coste capex, mantenimiento propio; cloud-native: escalado elástico, opex, menos control/soberanía. Criterios: coste, escalado, control, mantenimiento.
- Enriquecimiento con 3 fuentes: GeoIP (ubicación), threat intel (reputación de IP/dominio), CMDB (criticidad/propietario del activo).
- Hot (7 d, SSD, consulta frecuente) / warm (30 d) / cold (90 d, barato, histórico) equilibra velocidad de investigación reciente con coste del histórico.
Clase 184 — Splunk para detección
Solución del reto verificable
Entregable: tres búsquedas SPL de detección + una convertida en alerta con throttling.
Búsqueda 1 — Office lanza intérprete (T1059):
index=main sourcetype=XmlWinEventLog EventCode=1
ParentImage="*\\WINWORD.EXE" (Image="*\\powershell.exe" OR Image="*\\cmd.exe")
| table _time, Computer, ParentImage, Image, CommandLine
Búsqueda 2 — Fuerza bruta de autenticación:
index=main (EventCode=4625 OR EventCode=4624)
| stats count(eval(EventCode=4625)) as fails count(eval(EventCode=4624)) as success by Account_Name
| where fails>10 AND success>0
Búsqueda 3 — LOLBins con red saliente (regsvr32/mshta):
index=main sourcetype=XmlWinEventLog EventCode=3
(Image="*\\regsvr32.exe" OR Image="*\\mshta.exe")
| table _time, Computer, Image, DestinationIp, DestinationPort
Alerta con throttling: guarda la Búsqueda 1 como alerta cada 5 min, con supresión (throttle) por campo Computer durante 30 min.
Evidencia que cumple el criterio: la Búsqueda 1 detecta la simulación Office→PowerShell sin disparar con la línea base benigna, y la saved search aparece ejecutándose en el listado de alertas.
Claves de los ejercicios
... EventCode=22 | stats dc(QueryName) count by Computer, QueryName | sort - count | head 10 (top dominios por host).
... EventCode=3 (Image="*\\regsvr32.exe" OR Image="*\\mshta.exe") | table _time Computer Image DestinationIp.
- Línea base de horas de login:
... EventCode=4624 | eval h=strftime(_time,"%H") | stats values(h) as horas_normales by Account_Name y marca logins fuera del rango habitual.
| eval sev=case(EventCode=4104 AND match(CommandLine,"-enc"),"alta", ..., 1==1,"baja").
- Reescribe con
tstats sobre un data model CIM acelerado (| tstats count from datamodel=Endpoint.Processes ...): pasa de escanear eventos crudos a índices tstats, órdenes de magnitud más rápido.
- Lookup de cuentas de servicio (
svc_*.csv) + ... | lookup svc_accounts.csv Account_Name OUTPUT es_servicio | where isnull(es_servicio) para suprimir sus FP.
Clase 185 — Elastic Stack y Wazuh
Solución del reto verificable
Entregable: una detección EQL en Elastic (secuencia proceso→red) + una alerta Wazuh con técnica ATT&CK.
Regla EQL (Elastic) — proceso PowerShell seguido de conexión:
sequence by host.id with maxspan=1m
[ process where process.name == "powershell.exe" ]
[ network where destination.port == 443 ]
Consulta KQL de apoyo:
event.code:"1" and process.parent.name:"WINWORD.EXE" and process.name:("powershell.exe" or "cmd.exe")
Alerta Wazuh: modifica un archivo bajo FIM (/etc/passwd) y observa la alerta con su nivel y la técnica ATT&CK asociada (ej. T1565/T1098 según regla).
Evidencia que cumple el criterio: ambas alertas disparan con la actividad simulada; muestras en Kibana/Wazuh el evento, la regla que lo detectó y la técnica ATT&CK asociada.
Claves de los ejercicios
- KQL PowerShell ofuscado:
process.command_line:*FromBase64String*, process.command_line:*-enc*, process.command_line:*IEX*.
- La SPL Office→PowerShell se traduce al EQL
sequence de arriba (o un process where process.parent.name=="WINWORD.EXE" and process.name=="powershell.exe").
- Decoder = extrae campos del log crudo (paso previo); regla = evalúa esos campos y asigna nivel/alerta. Ej.: decoder de sshd parsea el usuario; la regla dispara si hay N fallos.
- FIM:
<directories check_all="yes" realtime="yes">/ruta</directories> en ossec.conf; documenta la alerta (regla 550/554, archivo, usuario).
- Elastic: flexible (EQL), curva media, gratis con licencia básica. Wazuh: reglas+agente+ATT&CK listos, arranque rápido. Splunk: potente pero de pago por ingesta.
- Regla local Wazuh en
local_rules.xml con <if_sid> heredando de la base y <level>12</level> para elevar la severidad de un patrón concreto.
Clase 186 — Escritura de reglas de detección con Sigma
Solución del reto verificable
Entregable: dos reglas Sigma propias (ejecución + persistencia) con tags ATT&CK, falsos positivos y conversiones.
Regla de ejecución (Office→PowerShell, T1059.001):
title: Office lanza PowerShell
logsource:
product: windows
category: process_creation
detection:
selection:
ParentImage|endswith:
- '\WINWORD.EXE'
- '\EXCEL.EXE'
Image|endswith: '\powershell.exe'
condition: selection
level: high
tags:
- attack.execution
- attack.t1059.001
falsepositives:
- Plantillas corporativas con macros firmadas
Regla de persistencia (Run key, T1547.001):
title: Persistencia en clave Run
logsource:
product: windows
category: registry_set
detection:
selection:
TargetObject|contains:
- '\CurrentVersion\Run\'
- '\CurrentVersion\RunOnce\'
filter:
Image|endswith: '\msiexec.exe'
condition: selection and not filter
level: medium
tags:
- attack.persistence
- attack.t1547.001
falsepositives:
- Instaladores legítimos
Conversión: sigma convert -t splunk -p splunk_windows regla.yml y sigma convert -t esql -p ecs_windows regla.yml.
Evidencia que cumple el criterio: la regla de ejecución convertida dispara sobre la simulación y NO con la línea base; la CLI convierte ambas sin errores de sintaxis.
Claves de los ejercicios
- Regla rundll32:
Image|endswith: '\rundll32.exe' + CommandLine|contains de argumentos sospechosos (javascript:, ,#1) con filtro de usos legítimos.
CommandLine|contains: ['-enc','FromBase64String'] y CommandLine|re: '(?i)i.?e.?x' para variantes ofuscadas.
- Convierte a Splunk y a ES|QL/EQL: el mismo YAML genera distinta sintaxis nativa según backend/pipeline — demuestra la portabilidad.
- FP plausibles: software de despliegue, herramientas de administración firmadas, scripts de logon corporativos → al campo
falsepositives.
- Mapeo: T1059.001 (PowerShell), T1547.001 (Run key), T1053.005 (Scheduled Task), T1218.010 (regsvr32), T1071.001 (Web C2).
- Umbral: en Sigma la agregación se expresa con
condition: selection | count() by Computer > 5 (correlación en pySigma).
Clase 187 — Detección basada en MITRE ATT&CK
Solución del reto verificable
Entregable: capa de ATT&CK Navigator con la cobertura del laboratorio + plan priorizado de 5 huecos.
Pasos:
- Inventaria tus reglas Sigma/SIEM y anota su
attack.tXXXX.
- En Navigator, crea una capa; colorea verde las técnicas cubiertas, rojo las críticas sin cobertura.
- Para 5 técnicas rojas, revisa su data source en ATT&CK y verifica si ya recolectas esa telemetría.
- Plan de huecos (tabla): técnica | data source faltante | detección propuesta | prioridad (justificada con pirámide del dolor y/o grupo relevante).
| Técnica |
Data source |
Detección propuesta |
Prioridad |
| T1053.005 |
Process/Scheduled Job |
4698 + Sysmon 1 schtasks |
Alta (persistencia común) |
| T1003.001 |
Process Access a lsass |
Sysmon 10 sobre lsass.exe |
Alta (grupo usa credential dumping) |
Evidencia que cumple el criterio: la capa distingue claramente cubierto/no cubierto y cada hueco justifica su prioridad con la pirámide del dolor o la relevancia de un grupo de amenaza.
Claves de los ejercicios
- Pirámide (fácil→difícil de cambiar): hash MD5 (trivial), IP (fácil), dominio (medio), artefacto de red/host (molesto), herramienta (difícil), TTP (muy difícil).
- T1053 Scheduled Task: data source = Scheduled Job / Process creation; detección = 4698 o Sysmon 1 de
schtasks.exe.
- Se genera exportando la capa JSON con las técnicas coloreadas según reglas reales.
- Detectar por hash es frágil porque recompilar/repackar cambia el hash en segundos sin cambiar el comportamiento; base de la pirámide.
- Ej.: phishing (T1566) → macro ejecuta PowerShell (T1059.001) → tarea programada (T1053.005) → C2 HTTPS (T1071.001) → exfil (T1041).
- De IP a TTP: en vez de bloquear la IP del C2, detecta el comportamiento de beaconing (periodicidad + proceso responsable), que persiste aunque cambie la infraestructura.
Clase 188 — Threat hunting: metodología
Solución del reto verificable
Entregable: una cacería completa documentada sobre una técnica ATT&CK, con detección resultante.
Ejemplo T1053.005 (Scheduled Task):
- Hipótesis: "un adversario ha creado tareas programadas para persistir en algún host".
- Datos/ámbito: Sysmon 1 (
schtasks.exe), Security 4698, últimos 7 días.
- Baseline: tareas y creadores legítimos (SCCM, admins conocidos, cuentas de servicio).
- Búsqueda de outliers (Splunk):
index=main (EventCode=4698 OR (EventCode=1 Image="*\\schtasks.exe" CommandLine="*/create*"))
| stats count values(CommandLine) as cmd by Computer, SubjectUserName, TaskName
| search NOT [| inputlookup tareas_legitimas.csv | fields TaskName ]
| sort - count
- Control con Atomic Red Team: ejecuta el test de T1053.005 y confirma que la búsqueda lo captura, distinguible de la baseline.
- Capitaliza: convierte el hallazgo en regla Sigma/saved search.
Evidencia que cumple el criterio: la actividad de control de Atomic aparece en los resultados (separada de la baseline) y entregas una detección nueva derivada del hallazgo.
Claves de los ejercicios
- Ej.: (a) "hay PowerShell descargando payloads (T1105)", (b) "hay tareas programadas maliciosas (T1053.005)", (c) "hay WMI para ejecución remota (T1047)".
- HMM: sitúa tu SOC (HM0 solo alertas → HM1 IOCs → HM2 análisis de datos → HM3 procedimientos → HM4 automatizado); paso siguiente = automatizar la búsqueda repetible previa.
- Baseline de conexiones salientes:
... EventCode=3 | stats dc(DestinationIp) values(DestinationPort) by Image para conocer qué procesos hacen red normalmente.
- Caza LOLBins: busca ejecución de
certutil, bitsadmin, mshta, regsvr32 con argumentos de red/descarga y correlaciona con Event 3.
- Se convierte el SPL del hallazgo en una regla Sigma con su
logsource/detection/tags ATT&CK.
- Métricas de caza: nº de detecciones nuevas creadas, nº de puntos ciegos hallados, tiempo medio por cacería.
Clase 189 — Análisis de endpoints con EDR
Solución del reto verificable
Entregable: árbol de procesos, línea de tiempo, evidencia recolectada y acción de contención.
Pasos:
- Genera la cadena benigna-anómala:
cmd.exe → powershell -enc <base64 inofensivo>.
- Reconstruye el árbol con Velociraptor o Sysmon (padre→hijo→nieto por
ProcessGuid/ParentProcessGuid).
- osquery para procesos y conexiones:
SELECT p.name, p.path, p.parent, s.remote_address, s.remote_port
FROM processes p LEFT JOIN process_open_sockets s ON p.pid = s.pid
WHERE p.name = 'powershell.exe';
- Línea de tiempo ordenada por
_time: creación de proceso → archivo escrito (Sysmon 11) → conexión de red (Sysmon 3).
- Contén: flujo de aislamiento de host en Velociraptor; verifica que solo el agente conserva conectividad.
- Recolecta antes de remediar (procesos, autoruns, prefetch).
Evidencia que cumple el criterio: reconstruyes la cadena padre→hijo hasta el proceso sospechoso, muestras al menos una conexión de red asociada y demuestras que tras el aislamiento el host solo mantiene el canal del agente.
Claves de los ejercicios
- osquery hunting: procesos sin firma (
SELECT ... FROM processes JOIN signature ...), autoruns (SELECT * FROM startup_items;), usuarios (SELECT * FROM users;).
- Matar proceso detiene la ejecución pero destruye evidencia volátil; aislar el host contiene la propagación conservando el estado para forense. Usa aislar por defecto; matar solo si hay daño activo en curso.
- Se ordenan los eventos Sysmon 1 por
ProcessGuid/ParentProcessGuid para dibujar padre→hijo→nieto.
- AV firma-based no ve un binario nuevo/empaquetado ni un ataque fileless (PowerShell en memoria); el EDR lo detecta por comportamiento (proceso→red→persistencia).
- Artefacto Velociraptor con VQL sobre
Artifact: Windows.System.TaskScheduler o consulta wmi/registro de tareas.
- Tamper de EDR: matar el servicio (mitigar con protección de proceso/tamper protection), desinstalar el agente (permisos + alerta de agente offline), unhooking de userland (mitigar con telemetría kernel/ETW).
Clase 190 — Análisis de logs de Windows: Event Logs y Sysmon
Solución del reto verificable
Entregable: tres detecciones (autenticación, ejecución, persistencia) con Event ID, lógica y técnica ATT&CK.
- Autenticación (fuerza bruta, T1110): ráfaga de 4625 seguida de 4624 por la misma cuenta.
index=win (EventCode=4625 OR EventCode=4624)
| stats count(eval(EventCode=4625)) as fails count(eval(EventCode=4624)) as ok by Account_Name, Logon_Type
| where fails>=10 AND ok>0
- Ejecución (Office→intérprete, T1059): Sysmon Event 1 con
ParentImage de Office; correlaciona con Event 3 del mismo ProcessGuid.
- Persistencia (T1053.005 / T1547.001): alerta ante 4698 (tarea) o Sysmon 13 (Run key) fuera de la ventana de mantenimiento.
Evidencia que cumple el criterio: las tres disparan con la actividad generada y no con la línea base; demuestras que capturas la CommandLine completa (no truncada) y la relación padre-hijo.
Claves de los ejercicios
- Mapeo: 4624/4625→T1110/T1078, 4688/Sysmon1→T1059, 4104→T1059.001, 4698→T1053.005, 4720→T1136, 7045→T1543.003, Sysmon13→T1547.001, Sysmon3→T1071.
- Logon Type 2 (interactivo local), 3 (red/SMB — PtH), 9 (NewCredentials — runas/overpass), 10 (RemoteInteractive/RDP — movimiento lateral interactivo).
- Config Sysmon: añade
<Image condition="end with">proceso_ruidoso.exe</Image> en un <ProcessCreate onmatch="exclude"> para la línea base legítima.
- IEX + Net.WebClient: detecta
4104 con New-Object Net.WebClient, DownloadString, IEX (T1059.001 + T1105).
- 4688 es nativo (requiere GPO para CommandLine); Sysmon 1 añade hash,
ProcessGuid, integridad de linaje y OriginalFileName. Se complementan.
- Cuenta local sospechosa:
EventCode=4720 fuera de proceso de provisión, especialmente añadida a Administradores (4732).
Clase 191 — Análisis de logs de red y proxy
Solución del reto verificable
Entregable: detección de tunneling DNS o exfiltración HTTP con Zeek/proxy, correlacionada con el endpoint origen.
Pasos:
- DNS tunneling en
dns.log: dominios de alta entropía y muchos subdominios únicos por dominio padre.
index=zeek sourcetype=dns
| eval sub=mvindex(split(query,"."),0)
| stats dc(query) as subdominios avg(len(query)) as long_media by parent_domain
| where subdominios>50 AND long_media>30
- Justificación basada en datos: entropía alta, volumen de subconsultas, longitud, o fingerprint JA3.
- Correlación red↔endpoint: enlaza la conexión saliente (Zeek/proxy) con el proceso responsable vía Sysmon Event 3 (
ProcessGuid + mismo host/momento).
Evidencia que cumple el criterio: identificas el dominio/destino anómalo con justificación por datos (entropía/volumen/periodicidad/fingerprint) y lo enlazas con el proceso concreto del host.
Claves de los ejercicios
... dns.log | stats dc(query) as subs by parent_domain | sort - subs | head 10 (posible tunneling).
- Descarga de ejecutable desde IP sin dominio:
http.log con resp_mime_types de ejecutable y host que sea una IP literal (sin DNS previo).
- JA3 hashea el handshake TLS del cliente (versión, cipher suites, extensiones): identifica la herramienta aunque el contenido esté cifrado, porque el fingerprint del implante difiere de un navegador.
- User-agent anómalo: alertar sobre UAs vacíos,
python-requests, curl, o cadenas no vistas en tu baseline de navegadores corporativos.
- Se une la alerta de red (IP/puerto/hora) con Sysmon Event 3 del mismo host y ventana temporal para atribuir el proceso.
- RITA beaconing: score alto + intervalo regular + bajo volumen sostenido → escalar; si el destino es un servicio de update legítimo (allowlist) → descartar.
Clase 192 — Detección de movimiento lateral
Solución del reto verificable
Entregable: generar y detectar ≥3 técnicas de movimiento lateral, cada una con telemetría, detección y técnica ATT&CK.
- PsExec (T1021.002): Event 7045 (servicio
PSEXESVC), 4624 tipo 3, acceso a \\B\ADMIN$.
index=win EventCode=7045 Service_File_Name="*PSEXESVC*"
| table _time, Computer, Service_Name, Account_Name
- WMI (T1047): Sysmon Event 1 con
ParentImage="*\\WmiPrvSE.exe" lanzando cmd/powershell.
- WinRM (T1021.006): procesos hijos de
wsmprovhost.exe.
- Pass-the-Hash (T1550.002): 4624 NTLM tipo 3 + 4648 sin actividad Kerberos coherente, workstation→workstation.
Evidencia que cumple el criterio: cada detección dispara con su técnica y no con la administración legítima de la baseline; distingues PsExec (servicio 7045) de WMI (hijo de WmiPrvSE) de WinRM (hijo de wsmprovhost).
Claves de los ejercicios
- Mapeo: PsExec→7045+4624t3; WMI→Sysmon1 hijo WmiPrvSE; WinRM→hijo wsmprovhost; RDP→4624t10; PtH→4624 NTLM t3 + 4648.
- Workstation→workstation SMB admin$:
4624 Logon_Type=3 donde origen y destino son estaciones (no servidores) y la cuenta no es de administración conocida.
- Tabla de artefactos: PsExec = servicio + ADMIN$; WMI = WmiPrvSE, sin servicio; WinRM = wsmprovhost, puerto 5985/5986.
- PtH: correlaciona logon NTLM tipo 3 (4624) con 4648 (credenciales explícitas) en contextos donde se esperaría Kerberos; es detección por anomalía, no hay "evento PtH".
- Baseline de admin legítima: cuentas admin conocidas, hosts de salto (jump hosts), ventanas horarias y tickets de cambio → allowlist.
- Grafo de logons origen→destino: un pivote anómalo es un nodo que de pronto inicia sesión hacia muchos hosts o hacia hosts que nunca tocó.
Clase 193 — Detección de C2 y beaconing
Solución del reto verificable
Entregable: detectar un beacon combinando análisis temporal y correlación con el proceso de endpoint.
Pasos:
- Genera un beacon benigno (intervalo 60 s, jitter 20%) a un servidor propio.
- Acumula tráfico en Zeek
conn.log varios minutos.
- Detección estadística por baja varianza de los deltas de tiempo:
index=zeek sourcetype=conn
| sort 0 id.orig_h id.resp_h _time
| streamstats current=f last(_time) as prev by id.orig_h, id.resp_h
| eval delta=_time-prev
| stats count avg(delta) as intervalo stdev(delta) as jitter avg(orig_bytes) as vol by id.orig_h, id.resp_h
| where count>20 AND intervalo>0 AND (jitter/intervalo)<0.25 AND vol<2000
- RITA confirma el score de beaconing e intervalo estimado.
- Correlación: enlaza el par origen-destino con el proceso responsable (Sysmon Event 3,
ProcessGuid).
Evidencia que cumple el criterio: identificas el par origen-destino con su intervalo y jitter aproximados, justificas con baja varianza estadística, y enlazas la conexión con el proceso concreto del host.
Claves de los ejercicios
- El jitter dispersa el intervalo pero, sobre suficientes muestras, un beacon sigue siendo mucho más regular que la navegación humana → el análisis estadístico lo revela.
- Varianza: calcula desviación estándar de los deltas; baja stdev/media (< ~0,25) = beacon; alta = tráfico humano irregular.
- C2 DNS: alta cadencia de subdominios únicos, entropía elevada, respuestas TXT largas → detección por volumen + entropía.
- JA3 identifica el framework por el fingerprint del handshake TLS aunque el contenido esté cifrado (el implante negocia distinto que un navegador).
- Domain fronting: el SNI muestra un dominio de CDN benigno pero el Host header apunta al destino real; discrepancia SNI≠Host lo delata.
- Se enlaza el beacon (par IP/puerto periódico) con Sysmon Event 3 del proceso que origina la conexión.
Clase 194 — Deception: honeypots y honeytokens
Solución del reto verificable
Entregable: ≥2 mecanismos de deception (honeypot + honeytoken/cuenta trampa) integrados al SIEM con alertas de máxima prioridad.
Pasos:
- Honeypot SSH (Cowrie) en VLAN aislada con salida controlada (no puede pivotar).
- Canary token (documento con nombre atractivo, ej.
nóminas_2026.xlsx) que avisa al abrirse.
- Cuenta trampa en AD (
svc_backup_admin) con auditoría de logon y sin uso legítimo.
- Regla SIEM de máxima prioridad: cualquier evento de estos señuelos = incidente.
index=deception (source="cowrie" OR TokenName="canary_nominas" OR Account_Name="svc_backup_admin")
| eval severity="critical"
| table _time, origen, señuelo, severity
Evidencia que cumple el criterio: cada interacción simulada dispara una alerta de máxima prioridad identificando origen y señuelo, y el honeypot está segmentado de modo que no sirva de pivote.
Claves de los ejercicios
- Baja interacción: emula servicios, seguro, datos limitados; alta interacción: SO real, datos ricos, mayor riesgo de abuso.
- 3 honeytokens: documento cebo en fileshare de RRHH, credencial falsa en un script/config, fila trampa en la base de datos de clientes.
- Cuenta trampa + regla: cualquier 4624/4625 con esa cuenta → alerta crítica inmediata.
- Deception tiene pocos FP porque el señuelo no tiene uso legítimo: por definición, cualquier interacción es sospechosa.
- Riesgos de honeypot mal segmentado: pivote a la red real, uso como trampolín de ataque saliente, consumo por el atacante como C2 → mitigar con VLAN aislada y salida controlada.
- Canary token para repositorio: clave AWS falsa o webhook en un README/CI que avise al ser usada por quien clone/escanee el repo.
Clase 195 — Threat intelligence operacional
Solución del reto verificable
Entregable: operacionalizar indicadores desde el TIP hasta una detección funcional, con scoring y caducidad.
Pasos:
- Levanta MISP/OpenCTI en Docker; ingesta 2–3 feeds abiertos (abuse.ch, listas OSINT).
- Crea el IOC (ej. el dominio del beacon de la clase 193) con contexto, TLP y campaña/ATT&CK.
- Asigna score y fecha de expiración; verifica la degradación de indicadores viejos.
- Conecta STIX/TAXII al SIEM y configura un lookup de threat match sobre DNS/red.
index=zeek sourcetype=dns
| lookup threat_intel_domains domain AS query OUTPUT ti_source, ti_tlp, ti_campaign
| where isnotnull(ti_source)
| table _time, id.orig_h, query, ti_source, ti_tlp, ti_campaign
Evidencia que cumple el criterio: un evento que coincide con un indicador dispara una alerta enriquecida (fuente, TLP, campaña/ATT&CK), y demuestras que un indicador caducado deja de generar ruido.
Claves de los ejercicios
- Estratégica (tendencias del sector para dirección), operacional (campaña de un actor), táctica (IOCs: hash, IP, dominio).
- Los IOCs caducan porque el atacante rota infraestructura en segundos; se gestiona con scoring de fiabilidad + fecha de expiración que los degrada automáticamente.
- Ciclo: dirección (qué necesito) → recolección (feeds) → análisis/enriquecimiento → difusión (al SIEM/EDR) → feedback.
- Lookup de threat match: cruza campo de evento (dominio/IP/hash) con la tabla de IOCs y alerta ante coincidencia (hit).
- MISP: colaborativo, orientado a IOCs/eventos y compartición comunitaria; OpenCTI: modelo de conocimiento con relaciones (actores↔TTPs↔campañas), grafo.
- TLP: RED (solo destinatarios nombrados), AMBER (organización/need-to-know), GREEN (comunidad), CLEAR (público). Respetarlo condiciona con quién compartes.
Clase 196 — Automatización con SOAR
Solución del reto verificable
Entregable: playbook funcional que enriquece una alerta, decide severidad y propone contención con aprobación humana.
Flujo (Shuffle/Tines/n8n):
- Trigger: alerta de "posible phishing" vía webhook/API.
- Enriquecimiento automático: extrae URLs/adjuntos → reputación (MISP/Cortex), WHOIS del dominio, hash del adjunto.
- Decisión: dominio/hash malicioso conocido → severidad alta; dudoso → caso para revisión humana.
- Contención con human-in-the-loop: propón bloquear dominio en proxy; ejecuta solo tras aprobación explícita del analista.
- Alcance: consulta al SIEM quién más recibió/hizo clic; añade al caso en TheHive.
- Notifica y documenta.
Evidencia que cumple el criterio: ante una alerta de prueba, el playbook enriquece automáticamente, clasifica correctamente y NO ejecuta ninguna acción destructiva sin pasar por el punto de aprobación humana; el caso queda documentado.
Claves de los ejercicios
- Playbook "host comprometido": trigger EDR → enriquecer (proceso, hash, red) → decidir → [aprobación] aislar host → recolectar evidencia → notificar.
- Automatizables: enriquecimiento de IOCs, deduplicación de alertas, apertura de casos, geolocalización, sandbox de adjuntos. NO: aislar producción, deshabilitar cuenta de directivo, borrar datos.
- Enriquecimiento de IP: llamada API a VirusTotal/AbuseIPDB/MISP → añade score de reputación al caso.
- Salvaguardas "deshabilitar cuenta": lista de exclusión (cuentas VIP/servicio), aprobación humana obligatoria, acción reversible/con log de auditoría, ventana de reversión.
- Ahorro MTTR: si el triaje manual de phishing tarda 30 min y el automatizado 3 min → 27 min ahorrados por caso × volumen diario.
- Riesgo de aislar sin control: cortar un servidor de producción crítico; mitigar con allowlist de activos críticos + human-in-the-loop.
Clase 197 — Métricas y madurez del SOC
Solución del reto verificable
Entregable: cuadro de mando con ≥6 métricas (fórmula, fuente, valor), contrapesos anti-gaming y evaluación de madurez con 3 mejoras.
| Métrica |
Fórmula |
Fuente |
Contrapeso anti-gaming |
| MTTD |
Σ(t_det−t_comp)/n |
tickets/SIEM |
— |
| MTTR |
Σ(t_cont−t_det)/n |
tickets |
Tasa de reincidencia |
| Dwell time |
t_erradicación−t_compromiso |
forense |
— |
| % FP |
FP/total×100 |
SIEM |
— |
| Cobertura ATT&CK |
detectadas/relevantes |
Navigator |
Profundidad (eficacia real) |
| % con causa raíz |
con_RCA/total×100 |
tickets |
Auditoría de muestreo |
Pasos: define fórmula+fuente por métrica, calcula con datos de laboratorio (o CSV simulado), añade el contrapeso, completa una autoevaluación SOC-CMM en 2–3 dominios y prioriza 3 mejoras justificadas con los valores medidos.
Evidencia que cumple el criterio: cada métrica tiene fórmula y origen verificable, al menos una detecta explícitamente un intento de manipulación (p. ej. MTTR bajo + reincidencia alta), y las mejoras se justifican con los valores, no con opiniones.
Claves de los ejercicios
- Ej.: MTTD, MTTR, dwell time, %FP, cobertura ATT&CK — cada una con su fórmula y log/ticket de origen (ver tabla).
- Vanidosas → útil: "alertas procesadas" → % detecciones verdaderas; "reglas creadas" → precisión de detección; "horas trabajadas" → dwell time.
- MTTD/MTTR de 10 incidentes: suma los tiempos individuales y divide entre 10; muestra el cálculo por caso.
- Contrapeso de MTTR: parear con tasa de reincidencia/reapertura, para que cerrar rápido sin erradicar penalice.
- Autoevaluación SOC-CMM en un dominio (p. ej. "Detección"): puntúa personas/proceso/tecnología en la escala del modelo.
- KPI de calidad: precisión de detección = TP/(TP+FP), mide calidad no cantidad.
Clase 198 — Casos de estudio de detección
Solución del reto verificable
Entregable: caso completo con timeline+ATT&CK por fase, puntos de detección perdidos y ≥3 detecciones nuevas.
Pasos:
- Carga el dataset (Splunk BOTS o EVTX-ATTACK-SAMPLES) en el SIEM.
- Fija T0 en el acceso inicial (phishing/adjunto/primer proceso anómalo).
- Pivota fase a fase: ejecución (Sysmon 1 + CommandLine), persistencia (4698/Sysmon13/7045), movimiento lateral (4624 t3/t10), C2 (beaconing), exfiltración.
- Construye la timeline en una tabla con la técnica ATT&CK de cada evento (tiempos en UTC, ordenados).
| Hora (UTC) |
Evento |
Fase |
ATT&CK |
| T0 |
Adjunto abierto |
Acceso inicial |
T1566.001 |
| T0+2m |
WINWORD→powershell |
Ejecución |
T1059.001 |
| T0+5m |
Tarea programada |
Persistencia |
T1053.005 |
| T0+30m |
PsExec a host B |
Lateral |
T1021.002 |
| T0+2h |
Beacon HTTPS |
C2 |
T1071.001 |
| T0+4h |
POST voluminoso |
Exfiltración |
T1041 |
- Marca los puntos de detección perdidos (por qué no disparó: falta de telemetría/regla ausente/FN) y propón ≥3 detecciones nuevas.
Evidencia que cumple el criterio: la timeline cubre desde acceso inicial hasta exfiltración de forma coherente y ordenada, cada fase mapeada a su técnica correcta, y las detecciones propuestas son verificables (Sigma/SIEM concretas).
Claves de los ejercicios
- Acceso inicial: correo de phishing (T1566) → adjunto → primer proceso hijo anómalo de Office.
- 6 fases → T1566 (acceso), T1059 (ejecución), T1053/T1547 (persistencia), T1021 (lateral), T1071 (C2), T1041 (exfil).
- Punto de detección más temprano: la ejecución Office→PowerShell (T1059.001), regla de la clase 184/186.
- Lecciones: habilitar ScriptBlock logging, cerrar hueco de DNS, crear regla de PsExec, afinar baseline de tareas, añadir threat match.
- Detección nueva del hueco: p. ej. Sysmon 1 de
certutil con -urlcache/-f (T1105).
- Todos los eventos ordenados por timestamp UTC en una única tabla con columna ATT&CK.
Clase 199 — Ingeniería de detección como disciplina
Solución del reto verificable
Entregable: mini repo de detection-as-code con ≥3 reglas documentadas, pipeline de validación/conversión y evidencia de validación con Atomic.
Estructura y pipeline:
detections/
office_powershell.yml
scheduled_task.yml
certutil_download.yml
metadata_template.yml
# .github/workflows/detections.yml
name: detections-ci
on: [push, pull_request]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pip install sigma-cli
- run: sigma check detections/ # falla si hay sintaxis inválida
- run: sigma convert -t splunk -p splunk_windows detections/*.yml
Pasos: cada regla incluye metadatos (autor, ATT&CK, data source, falsos positivos, respuesta esperada). Valida con Atomic Red Team (ej. T1105 certutil) y confirma que la regla dispara en el SIEM. Marca una regla vieja/ruidosa para retiro con registro en Git.
Evidencia que cumple el criterio: el pipeline falla ante una regla con sintaxis inválida y pasa con las correctas; cada detección incluye metadatos y respuesta; la técnica ejecutada con Atomic dispara su regla.
Claves de los ejercicios
- Plantilla de metadatos: título, autor, fecha,
attack.tXXXX, data source, lógica, falsos positivos, nivel, respuesta esperada, estado (dev/prod/retirada).
- Pipeline CI: pasos
sigma check (sintaxis) → sigma convert (compilación) → fail si alguno rompe; opcional test de despliegue.
- Validar con el test Atomic de la técnica (p. ej.
Invoke-AtomicTest T1105) y confirmar el hit en el SIEM.
- Criterios de retiro: FP insostenibles, técnica ya no aplica, otra regla la cubre mejor → documentar la decisión.
- Precisión = TP/(TP+FP); ej. 18 TP y 2 FP → 18/20 = 90%.
- El versionado (Git) da historial, revisión por pares, blame y reversión: se audita quién cambió qué detección y cuándo, evitando degradación silenciosa.
Clase 200 — Purple team desde el lado defensivo
Solución del reto verificable
Entregable: ciclo purple completo sobre ≥8 técnicas con scorecard antes/después y cierre de huecos.
Pasos:
- Planifica: elige un grupo ATT&CK relevante y selecciona 8–10 técnicas suyas.
- Scorecard inicial: capa de Navigator con esas técnicas en estado "por probar".
- Ejecuta pruebas atómicas (Atomic Red Team): ej. T1059.001, T1053.005, T1105, T1003.001, T1021.002, T1547.001, T1071.001, T1041.
- Observa por técnica: prevenida / detectada / solo registrada / no vista.
- Encadena con Caldera una operación que combine varias técnicas y comprueba si detectas la cadena.
- Puntúa: verde=detectado, amarillo=solo registrado, rojo=no visto.
- Cierra huecos: por cada rojo/amarillo crea o afina una detección (Sigma) y re-ejecuta hasta que dispare.
- Documenta con antes/después y define la cadencia del próximo ejercicio.
Evidencia que cumple el criterio: la scorecard antes/después muestra mejora medible de cobertura, cada técnica inicialmente "no vista" acaba con una detección que dispara al re-ejecutarla, y todo está documentado con su alcance y ejecutado en entorno autorizado.
Claves de los ejercicios
- Selección de grupo: elige uno cuyas víctimas/sector coincidan con tu organización (relevancia por intel), y emula sus TTPs documentados.
- 3 pruebas atómicas clasificadas: p. ej. T1059.001 detectado, T1105 solo registrado, T1003.001 no visto.
- Operación Caldera de 4 técnicas encadenadas (acceso→ejecución→persistencia→C2) con agentes.
- Scorecard en Navigator coloreando cada técnica según su resultado observado.
- Cierre de hueco: técnica no vista → nueva regla Sigma → re-ejecutar Atomic → confirmar disparo.
- Programa purple: alcance por ciclo, cadencia (mensual/trimestral), métrica de cobertura antes/después como indicador de mejora sostenida.