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_sourcetypesQue 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 sourcetypesQue 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_hostsQue ves: Numero de hosts unicos.
Variante - ver la lista:
index=botsv3 | stats values(host) as hostsPregunta: ?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 sourcetypeQue 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 - countQue 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 - countQue 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 - countQue 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, hostQue 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, hourQue 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 queryQue 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_portQue 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 - countQue 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 countQue 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_ipQue 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 20Que 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_nameQue 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 hostQue 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 20Que 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 nameQue 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, hostQue 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, nameQue 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 countQue 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 5Mini-Challenge 2: El ataque Memcached
Responde:
- ?Que IP atacante aparece?
- ?Que IP victima?
- ?Cuantos datos se exfiltraron en total?
- ?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 - countMini-Challenge 4: Reporte de hallazgos
Escribe un mini-reporte (3-4 parrafos) respondiendo:
- ?Que encontro el SOC?
- ?Cual fue el vector de ataque?
- ?Que servidores estuvieron involucrados?
- ?Que recomendaciones darias?
REFERENCIA RAPIDA DE COMANDOS SPL
| Comando | Que hace | Ejemplo |
|---|---|---|
| stats count | Cuenta eventos | stats count by src_ip |
| stats dc() | Cuenta valores unicos | stats dc(host) |
| stats values() | Lista valores unicos | stats values(sourcetype) |
| stats sum() | Suma valores numericos | stats sum(bytes) |
| op | Top N ordenado | op limit=10 sourcetype |
| imechart | Grafico temporal | imechart span=1h count |
| eval | Crea campo calculado | eval ratio=out/in |
| where | Filtro condicional | where count > 10 |
| search | Filtro de texto | search “Failed password” |
| able | Tabla personalizada | able _time, src_ip, dest_ip |
| sort | Ordenar | sort - count |
| ename | Renombrar campo | |
| ename count as total |
Documento creado el 06/06/2026 - Practicas SPL progresivas con BOTSv3