Análisis de Registros de Seguridad con Splunk
Cuándo Usarlo
- Investigar un incidente de seguridad que requiera correlación entre múltiples fuentes de registro.
- Buscar actividad de adversarios utilizando TTPs e IOCs conocidos.
- Construir reglas de detección para patrones de ataque específicos.
- Reconstruir la línea de tiempo de un incidente a partir de fuentes de registro dispares.
- Analizar anomalías de autenticación, movimiento lateral o patrones de exfiltración de datos.
No usar para análisis de paquetes en tiempo real; use Wireshark o Zeek para el análisis completo de captura de paquetes.
Prerrequisitos
- Splunk Enterprise o Splunk Cloud con la aplicación Enterprise Security (ES) instalada.
- Fuentes de registro ingeridas: Windows Event Logs (mediante Splunk Universal Forwarder o WEF), firewall, proxy, DNS, EDR, gateway de correo electrónico.
- Modelos de datos CIM (Common Information Model) de Splunk configurados para nombres de campo normalizados.
- Competencia en SPL a nivel intermedio o superior.
- Acceso basado en roles con capacidades
searchyaccelerate_searchen Splunk.
Flujo de Trabajo
Paso 1: Definir el Alcance de la Investigación en Splunk
Definir los parámetros de búsqueda basados en los datos de triage del incidente:
| Establecer el alcance inicial de la investigación
index=windows OR index=firewall OR index=proxy
earliest="2025-11-14T00:00:00" latest="2025-11-16T00:00:00"
(host="WKSTN-042" OR src_ip="10.1.5.42" OR user="jsmith")
| stats count by index, sourcetype, host
| sort -count
Esta consulta establece qué fuentes de registro contienen datos relevantes para el período de investigación y los activos afectados.
Paso 2: Analizar Eventos de Autenticación
Investigar patrones de autenticación sospechosos utilizando los registros de eventos de seguridad de Windows:
| Detectar fuerza bruta y relleno de credenciales
index=windows sourcetype="WinEventLog:Security" EventCode=4625
earliest=-24h
| stats count as failed_attempts, values(src_ip) as source_ips,
dc(src_ip) as unique_sources by TargetUserName
| where failed_attempts > 10
| sort -failed_attempts
| Detectar pass-the-hash (Tipo de inicio de sesión 9 - NewCredentials)
index=windows sourcetype="WinEventLog:Security" EventCode=4624
Logon_Type=9
| table _time, host, TargetUserName, src_ip, LogonProcessName
| Detectar movimiento lateral vía RDP
index=windows sourcetype="WinEventLog:Security" EventCode=4624
Logon_Type=10
| stats count, values(host) as targets by TargetUserName, src_ip
| where count > 3
| sort -count
Paso 3: Rastrear Ejecución de Procesos
Utilizar registros de Sysmon para reconstruir cadenas de ejecución de procesos:
| Creación de procesos con cadena padre (Sysmon Event ID 1)
index=sysmon EventCode=1 host="WKSTN-042"
earliest="2025-11-15T14:00:00" latest="2025-11-15T15:00:00"
| table _time, ParentImage, ParentCommandLine, Image, CommandLine, User, Hashes
| sort _time
| Detectar ejecución sospechosa de PowerShell
index=sysmon EventCode=1 Image="*\\powershell.exe"
(CommandLine="*-enc*" OR CommandLine="*-encodedcommand*"
OR CommandLine="*downloadstring*" OR CommandLine="*iex*")
| table _time, host, User, ParentImage, CommandLine
| sort _time
| Detectar volcado de credenciales LSASS
index=sysmon EventCode=10 TargetImage="*\\lsass.exe"
GrantedAccess=0x1010
| table _time, host, SourceImage, SourceUser, GrantedAccess
Paso 4: Analizar Actividad de Red
Correlacionar registros de red con eventos de punto final:
| Detectar patrón de balizamiento C2
index=proxy OR index=firewall dest_ip="185.220.101.42"
| timechart span=1m count by src_ip
| where count > 0
| Detectar túnel DNS (alto volumen de consultas a un solo dominio)
index=dns
| rex field=query "(?<subdomain>[^\.]+)\.(?<domain>[^\.]+\.[^\.]+)$"
| stats count, avg(len(query)) as avg_query_len by domain, src_ip
| where count > 500 AND avg_query_len > 40
| sort -count
| Detectar transferencias grandes de datos (potencial exfiltración)
index=proxy action=allowed
| stats sum(bytes_out) as total_bytes by src_ip, dest_ip, dest_host
| eval total_MB=round(total_bytes/1024/1024,2)
| where total_MB > 100
| sort -total_MB
Paso 5: Construir la Línea de Tiempo del Incidente
Reconstruir una línea de tiempo unificada a través de todas las fuentes de registro:
| Línea de tiempo unificada del incidente
index=windows OR index=sysmon OR index=proxy OR index=firewall
(host="WKSTN-042" OR src_ip="10.1.5.42" OR user="jsmith")
earliest="2025-11-15T14:00:00" latest="2025-11-15T16:00:00"
| eval event_summary=case(
sourcetype=="WinEventLog:Security" AND EventCode==4624, "Inicio de sesión: ".TargetUserName." desde ".src_ip,
sourcetype=="WinEventLog:Security" AND EventCode==4625, "Inicio de sesión fallido: ".TargetUserName,
sourcetype=="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" AND EventCode==1,
"Proceso: ".Image." por ".User,
sourcetype=="proxy", "Web: ".http_method." ".url,
1==1, sourcetype.": ".EventCode)
| table _time, sourcetype, host, event_summary
| sort _time
Paso 6: Crear Reglas de Detección
Convertir los hallazgos de la investigación en búsquedas de correlación persistentes en Splunk:
| Búsqueda de correlación: PowerShell generado por aplicaciones de Office
index=sysmon EventCode=1
Image="*\\powershell.exe"
(ParentImage="*\\winword.exe" OR ParentImage="*\\excel.exe"
OR ParentImage="*\\outlook.exe")
| eval severity="high"
| eval mitre_technique="T1059.001"
| collect index=notable_events
Conceptos Clave
| Término | Definición |
|---|---|
| SPL (Search Processing Language) | El lenguaje de consulta de Splunk para buscar, filtrar, transformar y visualizar datos de máquina |
| CIM (Common Information Model) | Estándar de normalización de campos de Splunk que asigna nombres de campo específicos de proveedores a nombres comunes para consultas entre fuentes |
| Evento Notable | Un evento en Splunk Enterprise Security marcado para revisión del analista basado en una coincidencia de búsqueda de correlación |
| Modelo de Datos | Representación estructurada de datos indexados en Splunk que permite búsquedas aceleradas y análisis basado en pivotes |
| Sourcetype | Etiqueta de clasificación en Splunk que define el formato y las reglas de análisis para un tipo de registro específico |
| Búsqueda de Correlación | Búsqueda programada en Splunk que se ejecuta de forma continua y genera eventos notables cuando se cumplen las condiciones |
| Timechart | Comando SPL que crea visualizaciones de series temporales para identificar patrones, anomalías y tendencias |
Herramientas y Sistemas
- Splunk Enterprise Security (ES): Aplicación SIEM premium que proporciona búsquedas de correlación, alertas basadas en riesgo y un banco de trabajo de investigación.
- Splunk SOAR: Plataforma de orquestación integrada con Splunk ES para playbooks de respuesta automatizada.
- Sysmon: Herramienta de monitoreo del sistema de Microsoft que proporciona telemetría detallada de procesos, redes y cambios en archivos, ingerida en Splunk.
- Splunk Attack Analyzer: Análisis automatizado de amenazas que detona archivos y URLs sospechosos, alimentando los resultados en Splunk.
- BOSS of the SOC (BOTS): Conjunto de datos de entrenamiento de SANS/Splunk para practicar consultas SPL de investigación de incidentes.
Escenarios Comunes
Escenario: Investigación de Relleno de Credenciales que Conduce a la Toma de Control de una Cuenta
Contexto: Las operaciones de seguridad reciben una alerta por múltiples inicios de sesión exitosos en una sola cuenta desde direcciones IP geográficamente dispersas en un período de 30 minutos.
Enfoque:
- Consultar el Event ID 4624 para la cuenta afectada y mapear todas las fuentes y horas de inicio de sesión.
- Correlacionar las IPs de inicio de sesión con fuentes de inteligencia de amenazas utilizando una tabla de búsqueda de Splunk.
- Revisar los registros de proxy en busca de actividad sospechosa desde las sesiones autenticadas.
- Buscar movimiento lateral desde la cuenta comprometida (Event ID 4624 Type 3 hacia otros hosts).
- Construir una línea de tiempo que muestre los intentos de relleno de credenciales, el inicio de sesión exitoso y la actividad posterior al compromiso.
- Crear una búsqueda de correlación para detectar patrones similares en otras cuentas.
Errores Comunes:
- Buscar solo las últimas 24 horas cuando el relleno de credenciales pudo haber ocurrido durante semanas.
- No verificar los registros de VPN que podrían mostrar la misma cuenta autenticándose desde distancias de viaje imposibles.
- No normalizar las marcas de tiempo entre fuentes de registro en diferentes zonas horarias.
Formato de Salida
INFORME DE INVESTIGACIÓN SPLUNK
============================
Incidente: INC-2025-1547
Analista: [Nombre]
Período de Investigación: 2025-11-14 00:00 UTC - 2025-11-16 00:00 UTC
ALCANCE DE BÚSQUEDA
Índices: windows, sysmon, proxy, firewall, dns
Hosts: WKSTN-042, SRV-FILE01
Usuarios: jsmith, svc-backup
IPs de Origen: 10.1.5.42, 10.1.10.15
HALLAZGOS CLAVE
1. [marca de tiempo] - Compromiso inicial vía phishing (Sysmon Event 1)
2. [marca de tiempo] - C2 establecido (registros de proxy, patrón de balizamiento detectado)
3. [marca de tiempo] - Robo de credenciales (Sysmon Event 10, acceso a LSASS)
4. [marca de tiempo] - Movimiento lateral a SRV-FILE01 (Event 4624 Type 3)
5. [marca de tiempo] - Preparación y exfiltración de datos (anomalía en bytes_out del proxy)
CONSULTAS SPL UTILIZADAS
[Lista numerada de consultas clave con descripciones]
BRECHAS DE DETECCIÓN IDENTIFICADAS
- Sysmon no implementado en SRV-FILE01 (punto ciego)
- Registros de proxy sin inspección SSL para el dominio C2
- Registro de ScriptBlock de PowerShell no habilitado
DETECCIONES RECOMENDADAS
1. Búsqueda de correlación para PowerShell generado por Office
2. Alerta de umbral para patrones de acceso a LSASS
3. Regla de comportamiento para tráfico de red con intervalo de balizamiento