🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónContar y calcular — stats, timechart, eval y top
5 tareas · 35 min · Principiante
Treinta y dos notificaciones de segundo factor en una noche se leen fila a fila; treinta y dos mil, no. Aquí conviertes la noche del 21 al 22 de octubre en la pasarela VPN de Delta Aduanas en unas pocas filas que se leen de un vistazo: contar con stats, repartir en el tiempo con timechart y bin, crear campos nuevos con eval, filtrar el resumen con where y ordenar con sort. Y aprendes por qué top no es lo que parece si vienes de KQL.
Objetivo de la sala
Treinta y dos notificaciones de segundo factor en una noche se leen fila a fila; treinta y dos mil, no. Aquí conviertes la noche del 21 al 22 de octubre en la pasarela VPN de Delta Aduanas en unas pocas filas que se leen de un vistazo: contar con stats, repartir en el tiempo con timechart y bin, crear campos nuevos con eval, filtrar el resumen con where y ordenar con sort. Y aprendes por qué top no es lo que parece si vienes de KQL.stats es el summarize de SPL. Toma todos los eventos que le llegan, los agrupa por los campos que pongas detrás de by y calcula algo para cada grupo: count cuenta eventos, dc(campo) cuenta valores distintos, sum, avg, min y max hacen lo que dicen, y values(campo) junta en una celda todos los valores distintos de un campo. El nombre de la columna calculada se pone detrás, con as: stats count as intentos dc(usuario) as cuentas by ip_origen.
Igual que en KQL, después de un stats solo quedan los campos del by y los que acabas de calcular. Y las filas salen ordenadas por el campo del by, alfabéticamente, no por el número que calculaste: para leer lo de arriba hay que ordenar después.
Esta tarea se hace en el laboratorio
Una consola para consultar la base de datos, aquí en la página. No instalas nada y no puedes romper nada.
Responde para continuar
Ejecutas `index=vpn accion=mfa | stats count by resultado`. ¿Qué columnas tiene el resultado?
Ver pista de ayuda
Cada fila del resumen representa a muchas notificaciones con horas y cuentas distintas.
Para ver la forma de una noche hay dos caminos. timechart span=1h count by resultado pone el tiempo en la primera columna y abre una columna por cada valor del by; además rellena con ceros los tramos sin eventos, así que la noche entera aparece, también las horas en que no pasó nada. Es el comando que alimenta las gráficas de los paneles.
bin _time span=10m redondea la hora de cada evento al comienzo de su tramo, y un stats count by _time detrás cuenta por tramo. Ese camino solo devuelve los tramos que tienen algo, y permite agrupar por más cosas a la vez (by _time usuario), que es lo que hará falta para una regla con umbral. Tramo grande para ver la forma de la noche; tramo pequeño, sobre una sola cuenta, para ver su ritmo.
Esta tarea se hace en el laboratorio
Una consola para consultar la base de datos, aquí en la página. No instalas nada y no puedes romper nada.
Responde para continuar
¿Qué te da `timechart span=1h count by resultado` que no te da `stats count by resultado`?
Ver pista de ayuda
Una de las dos tiene el tiempo en la primera columna.
eval añade un campo nuevo a cada evento, calculado a partir de los que ya tiene; es el extend de KQL. eval no_aprobada=if(resultado="aprobado",0,1) escribe un 1 en cada notificación que no se aprobó y un 0 en las demás, y un stats sum(no_aprobada) detrás las cuenta por cuenta, en la misma fila que el total. Otras funciones que vas a usar en el turno: len(campo) mide un texto, lower(campo) lo pasa a minúsculas y coalesce(a, b) se queda con el primero de los dos que exista.
where filtra con una expresión, y su sitio natural es después de un stats, sobre un campo calculado: | where no_aprobadas >= 5. Dentro de where, al contrario que en la búsqueda, la comparación de texto sí distingue mayúsculas. El ataque que buscas tiene nombre en MITRE ATT&CK: generación de solicitudes de segundo factor (T1621). Quien ya tiene la contraseña lanza notificaciones hasta que la persona, cansada o confundida, aprueba una.
Esta tarea se hace en el laboratorio
Una consola para consultar la base de datos, aquí en la página. No instalas nada y no puedes romper nada.
Responde para continuar
¿Qué hace `eval no_aprobada=if(resultado="aprobado",0,1)` en la tubería?
Ver pista de ayuda
eval no agrupa ni borra: trabaja evento por evento.
sort - no_aprobadas ordena de mayor a menor; sin el signo menos, sort ordena de menor a mayor. Es lo contrario de KQL, donde sort by ordena de mayor a menor si no se le dice nada. head 3 detrás se queda con las tres primeras filas de ese orden.
top tiene el mismo nombre que en KQL y hace otra cosa. En SPL, top usuario cuenta cuántas veces aparece cada valor del campo y devuelve los más frecuentes, con su número y su porcentaje sobre el total, diez como mucho si no se le pide otro límite. Sirve para preguntar «qué valores se repiten más»; no sirve para ordenar por una columna calculada, como un total de bytes. Para eso está sort.
Esta tarea se hace en el laboratorio
Una consola para consultar la base de datos, aquí en la página. No instalas nada y no puedes romper nada.
Responde para continuar
En SPL, ¿qué devuelve `index=vpn accion=mfa | top usuario`?
Ver pista de ayuda
Ejecútala en la consola y mira las tres columnas que devuelve.
En la consola está la noche entera de notificaciones. Crea con eval un campo que marque las que no se aprobaron, súmalo por cuenta junto al total de notificaciones de cada una, y quédate con la cuenta que se aparta de las demás.
Esta tarea se hace en el laboratorio
Una consola para consultar la base de datos, aquí en la página. No instalas nada y no puedes romper nada.
Responde para continuar
Escribe cuántas notificaciones quedaron sin aprobar, entre rechazadas y sin respuesta, en la cuenta que recibió el bombardeo.
Ver pista de ayuda
Ejecuta `index=vpn accion=mfa | eval no_aprobada=if(resultado="aprobado",0,1) | stats count as notificaciones sum(no_aprobada) as no_aprobadas by usuario` y lee la columna «no_aprobadas», no la de notificaciones.
Conectando con la base…
Índices y lookups
index=vpn
- _time
- usuario
- ip_origen
- pais
- accion
- resultado
- ip_tunel
El resultado aparece aquí.
fila(s)
Whoami-Labs Pro
Whoami-Labs Pro utiliza cookies
Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad
Preferencias
Configuraciones de cookies
Elige qué categorías permitir. Las esenciales siempre están activas. Consulta la Política de Privacidad.
Esenciales
Siempre activas · sesión, CSRF, tema y esta preferencia
Necesarias para iniciar sesión, proteger formularios (CSRF) y recordar tu elección de cookies y tema. Sin ellas la plataforma no funciona de forma segura.
Analíticos
Hoy no activos en la plataforma; listos para cuando se conecten
Nos ayudan a entender uso de cursos y páginas. Si los activas, se usarán cuando conectemos analítica; hasta entonces no se carga ningún tracker.
Marketing
Hoy no activos; campañas futuras solo con tu permiso
Comunicaciones o campañas. No activos hoy en la plataforma; quedarán listos si los conectamos y solo si los permites.