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

PracticaTemaComando 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()
DLinea temporalimechart

PRACTICA A1 - Top sourcetypes

Objetivo: Conocer que tipos de logs hay en el dataset y cuales son los mas abundantes.

Busqueda:

index=botsv3 | top sourcetype

Que hace:

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

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

  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/despues)
  • OR -> cualquiera de las condiciones
  • Tambien funciona AND, NOT

Ejemplos de sourcetypes de seguridad esperados:

SourcetypeDescripcion
cisco:asaFirewall Cisco ASA
linux_secureAutenticacion Linux (SSH, sudo, login)
ws:cloudtrailAPI calls de AWS
ms:aad:signinInicios de sesion Azure AD
ms:aad:auditAuditoria 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_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

PRACTICA 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 - 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 mas activos:

index=botsv3 | top limit=10 host

PRACTICA 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_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:

CampoDescripcion
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

PRACTICA 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_bytes

Que hace:

  1. Filtra trafico 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 mas usadas:

FuncionDescripcion
countNumero 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 - ratio

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

Que hace:

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

Challenge 4 - Linea temporal general

  • En que hora hubo mas actividad global?
  • Coincide con el ataque Memcached?

FLUJO DE TRABAJO RECOMENDADO

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

HOJA DE REFERENCIA RAPIDA

Quiero…Busqueda
Ver campos disponiblesindex=botsv3 | fields
Ver valores de un campoindex=botsv3 | stats values(sourcetype)
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 | table _time, src_ip, dest_ip, sourcetype
Exportar resultadosBoton Export (arriba a la derecha en resultados)
Ver eventos por minutoindex=botsv3 | timechart span=1m count
Filtrar por IP externaindex=botsv3 src_ip=13.125.33.130

Prácticas guiadas con Splunk + BOTSv3