Apuntes de Splunk
🧠 La lógica de Splunk: El pipe "|"
El concepto más importante de Splunk es el "pipe" o tubería |, el mismo concepto que ya conoceréis de Linux.
🔍 Estructura de una búsqueda básica
Una búsqueda siempre empieza especificando de dónde sacar los datos y luego filtrando por palabras clave.
Filtrado por campos (La forma correcta)
Los más comunes en un SOC son:
index=*: Busca en todos los índices.index=windows.sourctype="wineventlog": Especifica el tipo de log.source="WinEventLog:Security": El log exacto de donde vienen los datos.EventCode=4625: Busca un campo específico dentro del log.
Ejemplo completo: index=windows sourcetype="wineventlog" source="WinEventLog:Security" EventCode=4625
Búsqueda por términos
Busca una palabra clave en todo el contenido del log, es menos eficiente pero útil para exploraciones rápidas y generales, por ejemplo: "failed password" o "Lazaro" (Si Lazaro fuera un usuario, para encontrar todo lo relativo).
Operadores booleanos
Deberíamos saber lo que es,NOT-OR-AND-XOR deben estar en **MAYÚSCULAS**.
- Ejemplo:
index=windows NOT user="admin".
📊 Comandos más comunes (Después del pipe)
Estos comandos se usan después de un | para transformar los datos que tu búsqueda inicial ha encontrado.
-
| table <campo1> <campo2> ...Muestra los resultados en una tabla, mostrando solo las columnas (campos) que especifiques. Ej:
| table _time, user, EventCode -
| stats count by <campo>Sirve para contar y hacer estadísticas.
countes la función más común. Ej:| stats count by user(cuenta cuántos eventos hay por cada usuario).Otras funciones:
dc(campo)odistinct_count(campo)para contar valores únicos, yvalues(campo)para listar los valores. -
| top <campo>Muestra los 10 valores más frecuentes de un campo, con su cuenta y porcentaje. Ej:
| top user -
| rare <campo>Lo contrario a
top. Muestra los 10 valores menos frecuentes, ideal para detectar anomalías. Ej:| rare process_name -
| sort -<campo>Ordena los resultados, el signo
-indica orden descendente Ej:| sort -count
⭐ Ejemplo práctico: Búsqueda de logins fallidos por Usuario
Vamos a unir todo para hacer una búsqueda útil: encontrar qué usuarios han tenido más intentos de login fallidos en las últimas 24 horas.
index=windows EventCode=4625 | stats count by user | sort -count | table user, count
🚀 Comandos utiles para copipaste
Lista de consultas listas para usar.
1. Logins fallidos de la cuenta "Administrator"
Busca intentos de inicio de sesión fallidos específicamente para la cuenta de Administrador local o de dominio.
index=windows sourcetype="wineventlog" EventCode=4625 user="Administrator" | table _time, user, dest_host
2. Usuario añadido a un grupo de Administradores
Detecta cuándo una cuenta de usuario es añadida a un grupo de seguridad privilegiado (EventID 4728 para Admins. Globales, 4732 para Admins. Locales).
index=windows sourcetype="wineventlog" (EventCode=4728 OR EventCode=4732) | table _time, user, dest_host, group_name
3. Borrado de logs de seguridad de Windows
Una de las acciones más sospechosas que puede realizar un atacante para cubrir sus huellas (EventID 1102).
index=windows sourcetype="wineventlog" EventCode=1102 | table _time, user, dest_host
4. Ejecución de comandos sospechosos de PowerShell
Busca comandos de PowerShell que a menudo se usan para ofuscar código malicioso, como -enc (encoded command) o -nop (NoProfile).
index=windows sourcetype="wineventlog" EventCode=4688 process_name="powershell.exe" (process_command_line="*-enc*" OR process_command_line="*-nop*") | table _time, user, dest_host, process_command_line
5. Un usuario logueado desde múltiples IPs
Detecta si una misma cuenta de usuario tiene inicios de sesión exitosos (EventID 4624) desde más de 3 IPs distintas en la última hora. Puede indicar una cuenta comprometida.
index=windows sourcetype="wineventlog" EventCode=4624 | stats dc(src_ip) as IP_Count, values(src_ip) as IPs by user | where IP_Count > 3 | sort -IP_Count
📋 Event codes de Windows imprescindibles
Estos son algunos de los IDs de eventos de Windows más importantes.
Actividad de Logon/Logoff
- 4624: Logon exitoso. Esencial para rastrear accesos.
- 4625: Logon fallido. Clave para detectar ataques de fuerza bruta.
- 4634: Logoff de una cuenta. Ayuda a saber cuándo termina una sesión.
- 4648: Logon explícito (Ej: "Ejecutar como otro usuario"). Puede indicar escalada de privilegios.
- 4672: Asignación de privilegios especiales a un logon. Muy ruidoso, pero útil para saber cuándo un admin inicia sesión.
Gestión de cuentas
- 4720: Creación de una cuenta de usuario.
- 4726: Eliminación de una cuenta de usuario.
- 4728: Miembro añadido a un grupo de seguridad global.
- 4732: Miembro añadido a un grupo de seguridad local.
- 4725: Cuenta de usuario deshabilitada.
Actividad de procesos y servicios
- 4688: Creación de un proceso. (Necesita auditoría avanzada activada).
- 4697: Instalación de un nuevo servicio en el sistema, para persistencia.
Actividad sospechosa
- 1102: Se ha borrado el log de auditoría de seguridad. Un claro indicador de que alguien está cubriendo sus huellas.
- 4698: Creación de una tarea programada. Un método de persistencia muy común.
- 4104: Ejecución de un bloque de script de PowerShell, clave para el análisis de ataques "fileless". (Requiere logging de PowerShell activado).