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ácticaTemaComando clave
A1Reconocer sourcetypesop
A2Sourcetypes de seguridadop + search
A3Todos los sourcetypes disponiblesstats values / stats dc
A4Eventos por sourcetype y hoststats count by sourcetype, host
BFiltrar por puerto (Memcached)stats count by src_ip
CSumar bytes por IPstats sum()
DLínea temporalimechart

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 sourcetype

Que hace:

  1. Filtra todos los eventos del índice botsv3
  2. Los agrupa por sourcetype
  3. Los ordena de mayor a menor cantidad
  4. 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 porcentaje

Salida 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:

  1. Calcula el top de sourcetypes
  2. 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:

SourcetypeDescripción
cisco:asaFirewall Cisco ASA
linux_secureAutenticación Linux (SSH, sudo, login)
ws:cloudtrailAPI calls de AWS
ms:aad:signinInicios de sesión Azure AD
ms:aad:auditAuditorí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_sourcetypes

Para ver la lista completa:

index=botsv3 | stats values(sourcetype) as sourcetypes

Que 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 - count

Prá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 - count

Que hace:

  1. Agrupa eventos por combinación de sourcetype + host
  2. Cuenta cuantos eventos tiene cada combinación
  3. 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 host

Prá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_ip

Que hace:

  1. Filtra solo eventos donde dest_port = 11211 (puerto de Memcached)
  2. Agrupa por IP origen
  3. Cuenta eventos por cada IP

Campos de red importantes:

CampoDescripción
src_ipIP origen
dest_ipIP destino
src_portPuerto origen
dest_portPuerto destino
ytesTotal bytes
ytes_inBytes entrantes
ytes_outBytes salientes
protocolProtocolo (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 IPs

Prá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_bytes

Que hace:

  1. Filtra tráfico a puerto 11211
  2. Suma ytes totales por IP (renombrado como otal_bytes)
  3. Suma ytes_out (bytes de respuesta del servidor)
  4. Agrupa por src_ip
  5. Ordena de mayor volumen a menor

Funciones de stats más usadas:

FunciónDescripción
countNú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 - ratio

Prá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 count

Que hace:

  1. Toma los eventos filtrados (tráfico a 11211)
  2. Los agrupa en intervalos de tiempo
  3. Cuenta eventos por intervalo
  4. 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 series

MINI-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

  1. A3 para ver todos los sourcetypes disponibles
  2. A4 para asociar sourcetypes con hosts
  3. A2 para filtrar solo los de seguridad
  4. B, C, D para profundizar en un ataque concreto (Memcached)

HOJA DE Referencia Rápida

Quiero…Busqueda
Ver campos disponiblesindex=botsv3
Ver valores de un campoindex=botsv3
Buscar texto libreindex=botsv3 “Failed password”
Rango de tiempoindex=botsv3 earliest=08/20/2018:00:00:00 latest=08/21/2018:00:00:00
Tabla personalizadaindex=botsv3
Exportar resultadosBotón Export (arriba a la derecha en resultados)
Ver eventos por minutoindex=botsv3
Filtrar por IP externaindex=botsv3 src_ip=13.125.33.130

Prácticas guiadas con Splunk + BOTSv3