Splunk - Prácticas con BOTSv3
Dataset: BOTSv3 (Boss of the SOC v3) Índice: index=botsv3 Período: Agosto-Septiembre 2018 Total eventos: ~1.3M
Sintaxis SPL básica
index=botsv3 | comando1 argumentos | comando2 argumentos
- index=botsv3 → filtro por índice (obligatorio)
- | → pipe: pasa resultados al siguiente comando
- campo=valor → filtro por campo
Índice de prácticas
| Práctica | 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 | Línea temporal | imechart |
Práctica A1 - Top sourcetypes
Objetivo: Conocer que tipos de logs hay en el dataset y cuales son los más abundantes.
Busqueda:
index=botsv3 | top sourcetypeQue hace:
- Filtra todos los eventos del índice botsv3
- Los agrupa por sourcetype
- Los ordena de mayor a menor cantidad
- Anyade columna percent (porcentaje sobre el total)
Variantes útiles:
index=botsv3 | top limit=5 sourcetype -- solo top 5
index=botsv3 | top sourcetype showperc=f -- ocultar porcentajeSalida esperada: Tabla con columnas sourcetype, count, percent
Práctica 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/después)
- OR → cualquiera de las condiciones
- También funciona AND, NOT
Ejemplos de sourcetypes de seguridad esperados:
| Sourcetype | Descripción |
|---|---|
| cisco:asa | Firewall Cisco ASA |
| linux_secure | Autenticación Linux (SSH, sudo, login) |
| ws:cloudtrail | API calls de AWS |
| ms:aad:signin | Inicios de sesión Azure AD |
| ms:aad:audit | Auditoría Azure AD |
| symantec:ep:agent:* | Antivirus Symantec |
Práctica A3 - Listar todos los sourcetypes únicos
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 - countPráctica A4 - Eventos por sourcetype y host
Objetivo: Ver qué 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 más activos:
index=botsv3 | top limit=10 hostPráctica B - Filtrar por puerto (Memcached)
Objetivo: Aislar tráfico sospechoso al puerto 11211 (Memcached) y ver qué IPs están 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 | Descripción |
|---|---|
| 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 IPsPráctica C - Sumar bytes por IP
Objetivo: Calcular el volumen de datos transferidos por cada IP en el tráfico a Memcached - clave para identificar amplificación.
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 tráfico 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 más usadas:
| Función | Descripción |
|---|---|
| count | Número de eventos |
| dc(campo) | Valores únicos (distinct count) |
| sum(campo) | Suma de valores numericos |
| vg(campo) | Promedio |
| max(campo) | Valor máximo |
| min(campo) | Valor mínimo |
| alues(campo) | Lista de valores únicos (texto) |
Variante - ratio de amplificación:
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 - ratioPráctica D - Línea temporal del ataque
Objetivo: Visualizar la actividad en el tiempo para ver cuándo ocurrio el ataque.
Busqueda básica:
index=botsv3 dest_port=11211 | timechart countQue hace:
- Toma los eventos filtrados (tráfico a 11211)
- Los agrupa en intervalos de tiempo
- Cuenta eventos por intervalo
- Genera gráfica de línea
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 más eventos?
Challenge 4 - Línea temporal general
- En que hora hubo más actividad global?
- Coincide con el ataque Memcached?
FLUJO DE TRABAJO RECOMENDADO
1. 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 Rápida
| Quiero… | Busqueda |
|---|---|
| Ver campos disponibles | index=botsv3 |
| Ver valores de un campo | index=botsv3 |
| 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 |
| Exportar resultados | Botón Export (arriba a la derecha en resultados) |
| Ver eventos por minuto | index=botsv3 |
| Filtrar por IP externa | index=botsv3 src_ip=13.125.33.130 |
Prácticas guiadas con Splunk + BOTSv3