Splunk - Practicas con BOTSv3
Dataset: BOTSv3 (Boss of the SOC v3) Indice: index=botsv3 Período: Agosto-Septiembre 2018 Total eventos: ~1.3M
Sintaxis SPL basica
index=botsv3 | comando1 argumentos | comando2 argumentos
- index=botsv3 -> filtro por indice (obligatorio)
- | -> pipe: pasa resultados al siguiente comando
- campo=valor -> filtro por campo
Indice de practicas
| Practica | Tema | Comando clave |
|---|---|---|
| A1 | Reconocer sourcetypes | op |
| A2 | Sourcetypes de seguridad | op + search |
| A3 | Todos los sourcetypes disponibles | stats values / stats dc |
| A4 | Eventos por sourcetype y host | stats count by sourcetype, host |
| B | Filtrar por puerto (Memcached) | stats count by src_ip |
| C | Sumar bytes por IP | stats sum() |
| D | Linea temporal | imechart |
PRACTICA A1 - Top sourcetypes
Objetivo: Conocer que tipos de logs hay en el dataset y cuales son los mas abundantes.
Busqueda:
index=botsv3 | top sourcetypeQue hace:
- Filtra todos los eventos del indice botsv3
- Los agrupa por sourcetype
- Los ordena de mayor a menor cantidad
- Anyade columna percent (porcentaje sobre el total)
Variantes utiles:
index=botsv3 | top limit=5 sourcetype -- solo top 5
index=botsv3 | top sourcetype showperc=f -- ocultar porcentajeSalida esperada: Tabla con columnas sourcetype, count, percent
PRACTICA A2 - Sourcetypes de seguridad
Objetivo: Filtrar el resultado anterior para ver solo sourcetypes relacionados con seguridad.
Busqueda:
index=botsv3 | top sourcetype | search sourcetype=*secure* OR sourcetype=*audit* OR sourcetype=*asa* OR sourcetype=*cloudtrail*Que hace:
- Calcula el top de sourcetypes
- Filtra ese resultado con search para solo los que contengan palabras clave de seguridad
Operadores:
-
- -> comodin (cualquier texto antes/despues)
- OR -> cualquiera de las condiciones
- Tambien funciona AND, NOT
Ejemplos de sourcetypes de seguridad esperados:
| Sourcetype | Descripcion |
|---|---|
| cisco:asa | Firewall Cisco ASA |
| linux_secure | Autenticacion Linux (SSH, sudo, login) |
| ws:cloudtrail | API calls de AWS |
| ms:aad:signin | Inicios de sesion Azure AD |
| ms:aad:audit | Auditoria Azure AD |
| symantec:ep:agent:* | Antivirus Symantec |
PRACTICA A3 - Listar todos los sourcetypes unicos
Objetivo: Ver la lista completa de sourcetypes disponibles sin limitaciones de top.
Busqueda:
index=botsv3 | stats dc(sourcetype) as total_sourcetypesPara ver la lista completa:
index=botsv3 | stats values(sourcetype) as sourcetypesQue hace:
- dc() = distinct count -> cuenta cuantos sourcetypes únicos hay
- alues() -> lista los valores únicos del campo
Variante - contar eventos por cada sourcetype:
index=botsv3 | stats count by sourcetype | sort - countPRACTICA A4 - Eventos por sourcetype y host
Objetivo: Ver que hosts generan cada tipo de log y cuantos eventos.
Busqueda:
index=botsv3 | stats count by sourcetype, host | sort - countQue hace:
- Agrupa eventos por combinación de sourcetype + host
- Cuenta cuantos eventos tiene cada combinación
- Ordena de mayor a menor
Salida esperada: Tabla con columnas sourcetype, host, count
Variante - los 10 hosts mas activos:
index=botsv3 | top limit=10 hostPRACTICA B - Filtrar por puerto (Memcached)
Objetivo: Aislar trafico sospechoso al puerto 11211 (Memcached) y ver que IPs estan involucradas.
Busqueda:
index=botsv3 dest_port=11211 | stats count by src_ipQue hace:
- Filtra solo eventos donde dest_port = 11211 (puerto de Memcached)
- Agrupa por IP origen
- Cuenta eventos por cada IP
Campos de red importantes:
| Campo | Descripcion |
|---|---|
| src_ip | IP origen |
| dest_ip | IP destino |
| src_port | Puerto origen |
| dest_port | Puerto destino |
| ytes | Total bytes |
| ytes_in | Bytes entrantes |
| ytes_out | Bytes salientes |
| protocol | Protocolo (TCP/UDP) |
Variantes:
index=botsv3 dest_port=11211 | stats count by dest_ip -- IPs destino
index=botsv3 dest_port=11211 | stats count by src_ip, dest_ip -- ambas
index=botsv3 dest_port=11211 | top limit=10 src_ip -- top 10 IPsPRACTICA C - Sumar bytes por IP
Objetivo: Calcular el volumen de datos transferidos por cada IP en el trafico a Memcached - clave para identificar amplificacion.
Busqueda:
index=botsv3 dest_port=11211 | stats sum(bytes) as total_bytes, sum(bytes_out) as bytes_out by src_ip | sort - total_bytesQue hace:
- Filtra trafico a puerto 11211
- Suma ytes totales por IP (renombrado como otal_bytes)
- Suma ytes_out (bytes de respuesta del servidor)
- Agrupa por src_ip
- Ordena de mayor volumen a menor
Funciones de stats mas usadas:
| Funcion | Descripcion |
|---|---|
| count | Numero de eventos |
| dc(campo) | Valores unicos (distinct count) |
| sum(campo) | Suma de valores numericos |
| vg(campo) | Promedio |
| max(campo) | Valor maximo |
| min(campo) | Valor minimo |
| alues(campo) | Lista de valores unicos (texto) |
Variante - ratio de amplificacion:
index=botsv3 dest_port=11211 | stats sum(bytes_out) as out, sum(bytes_in) as in by src_ip | eval ratio=round(out/in, 2) | sort - ratioPRACTICA D - Linea temporal del ataque
Objetivo: Visualizar la actividad en el tiempo para ver cuando ocurrio el ataque.
Busqueda básica:
index=botsv3 dest_port=11211 | timechart countQue hace:
- Toma los eventos filtrados (trafico a 11211)
- Los agrupa en intervalos de tiempo
- Cuenta eventos por intervalo
- Genera gráfica de linea
Variantes:
index=botsv3 dest_port=11211 | timechart span=1h count -- cada 1 hora
index=botsv3 dest_port=11211 | timechart span=5m sum(bytes_out) as bytes -- cada 5 min, suma bytes
index=botsv3 | timechart count by sourcetype -- varias seriesMINI-CHALLENGES (para practicar solo)
Una vez domines las prácticas A-D, intenta responder:
Challenge 1 - SSH Brute Force
- Que IPs aparecen en linux_secure con “Failed password”?
- Cuantos intentos hizo cada una?
Challenge 2 - Dominios DNS sospechosos
- Que dominios se consultaron en stream:dns?
- Hay algun dominio con nombre extraño o alta frecuencia?
Challenge 3 - Hosts Windows
- Cuantos hosts Windows diferentes hay en WinHostMon?
- Cual tiene mas eventos?
Challenge 4 - Linea temporal general
- En que hora hubo mas actividad global?
- Coincide con el ataque Memcached?
FLUJO DE TRABAJO RECOMENDADO
- Empieza con A1 para ver el panorama general
- A3 para ver todos los sourcetypes disponibles
- A4 para asociar sourcetypes con hosts
- A2 para filtrar solo los de seguridad
- B, C, D para profundizar en un ataque concreto (Memcached)
HOJA DE REFERENCIA RAPIDA
| Quiero… | Busqueda |
|---|---|
| Ver campos disponibles | index=botsv3 | fields |
| Ver valores de un campo | index=botsv3 | stats values(sourcetype) |
| Buscar texto libre | index=botsv3 “Failed password” |
| Rango de tiempo | index=botsv3 earliest=08/20/2018:00:00:00 latest=08/21/2018:00:00:00 |
| Tabla personalizada | index=botsv3 | table _time, src_ip, dest_ip, sourcetype |
| Exportar resultados | Boton Export (arriba a la derecha en resultados) |
| Ver eventos por minuto | index=botsv3 | timechart span=1m count |
| Filtrar por IP externa | index=botsv3 src_ip=13.125.33.130 |
Prácticas guiadas con Splunk + BOTSv3