Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Series de tiempo y anomalías simples

5 tareas · 40 min · Principiante

Un número suelto no dice si algo es raro; una serie en el tiempo sí. Contar fallos de inicio de sesión por hora y compararlos con lo habitual es la forma más barata de ver que algo cambió. En la Clínica Veterinaria Mastranto, el jueves 11 de marzo, una franja de una hora se dispara. Aquí aprendes a construir la serie, a no dejarte engañar por las horas vacías, a compararla con una línea base y a desglosar el pico para ver qué lo causó. Las reglas son simples y explicables a propósito. Todo es lectura del extracto, en UTC.

0 de 5 · 0%

Objetivo de la sala

Un número suelto no dice si algo es raro; una serie en el tiempo sí. Contar fallos de inicio de sesión por hora y compararlos con lo habitual es la forma más barata de ver que algo cambió. En la Clínica Veterinaria Mastranto, el jueves 11 de marzo, una franja de una hora se dispara. Aquí aprendes a construir la serie, a no dejarte engañar por las horas vacías, a compararla con una línea base y a desglosar el pico para ver qué lo causó. Las reglas son simples y explicables a propósito. Todo es lectura del extracto, en UTC.

summarize Fallos = count() by bin(TimeGenerated, 1h) cuenta los fallos por hora. Pero summarize solo devuelve los grupos que existen: una hora sin ningún fallo no sale como una fila con cero, simplemente no sale. Un día tiene 24 franjas de una hora; si el resultado trae menos filas, faltan las franjas vacías, y eso cambia cualquier promedio que se calcule sobre él.

Ejecuta esa consulta ordenada por hora y cuenta cuántas de las 24 horas del jueves no aparecen.

Responde para continuar

¿Cuántas de las veinticuatro horas del jueves 11 de marzo no aparecen en el resultado de summarize por hora? Escribe solo el número.

Ver pista de ayuda

Escribe `SigninLogs | where ResultType != "0" | summarize Fallos = count() by bin(TimeGenerated, 1h) | sort by TimeGenerated asc` y cuenta las filas; las que faltan son 24 menos esa cifra.

make-series está hecho para series de tiempo: make-series Fallos = count() on TimeGenerated from A to B step 1h. Devuelve una sola fila con dos listas del mismo largo, los valores y las marcas de tiempo, y las franjas sin datos se rellenan con el valor por defecto, 0. El límite superior to no se incluye. Es la forma correcta de preparar datos para un gráfico o para un cálculo estadístico, porque la serie queda completa.

Ejecuta SigninLogs | where ResultType != "0" | make-series Fallos = count() on TimeGenerated from datetime(2027-03-11T00:00:00Z) to datetime(2027-03-12T00:00:00Z) step 1h y compara la lista de valores con el resultado anterior.

Responde para continuar

Compara lo que hacen summarize por bin() y make-series con las horas sin ningún evento. ¿Cuál es la diferencia?

Ver pista de ayuda

Una de las dos devuelve las 24 franjas del día; la otra solo las que tienen eventos.

Para saber si una hora es alta hay que saber qué es normal. El promedio sirve de referencia, pero depende de si se cuentan las horas vacías. Ejecuta SigninLogs | where ResultType != "0" | summarize Total = count() para tener los fallos del día y reparte ese total entre las 24 horas. Luego ejecuta la consulta que promedia solo sobre las franjas que existen, SigninLogs | where ResultType != "0" | summarize Fallos = count() by bin(TimeGenerated, 1h) | summarize Promedio = avg(Fallos), Maximo = max(Fallos), y compara: ese promedio sale más alto, porque no cuenta las horas tranquilas.

Responde para continuar

¿Cuál es el promedio de fallos por hora del día completo (24 horas), redondeado al entero más cercano?

Ver pista de ayuda

Divide el total de fallos del día entre 24 y redondea.

Un umbral sin base es una corazonada. La tabla LineaBase de este laboratorio resume los 14 días previos: por cada hora del día, el promedio y el máximo de fallos de la clínica. Con ella se justifica un umbral: si el pico de hoy supera el máximo histórico de esa misma hora, no es variación normal. La consulta ... | where Fallos > 15 aplica un umbral fijo y deja la franja que lo supera.

Ejecuta la consulta de la franja anómala y consulta la línea base de la hora en que cae. Una advertencia de honestidad: un umbral fijo es simple y fácil de explicar, pero hay que revisarlo cuando cambia el negocio; las funciones estadísticas más finas de KQL para series (como las de descomposición y detección de anomalías) son el paso siguiente, no el primero.

Responde para continuar

¿Cuál es el máximo de fallos que alcanzó en los 14 días previos la hora del pico (hora_utc 9)? Escribe solo el número.

Ver pista de ayuda

Escribe `LineaBase | where hora_utc == "9"` y lee maximo_fallos. La franja del pico sale con `SigninLogs | where ResultType != "0" | summarize Fallos = count() by bin(TimeGenerated, 1h) | where Fallos > 15`.

Un pico se interpreta desglosándolo. La pregunta es de quién son los fallos: de una cuenta, de varias, de una dirección o de muchas. summarize Fallos = count(), Cuentas = dcount(UserPrincipalName) by IPAddress responde cuántos fallos vino cada dirección y contra cuántas cuentas distintas.

Muchos fallos de una persona que olvidó su contraseña se ven como una dirección y una cuenta con muchos intentos. Pocos fallos contra muchas cuentas desde una misma dirección es otro patrón, que las guías de detección describen como intentos repartidos entre cuentas para evitar el bloqueo de cada una. Ejecuta el desglose de la franja del pico.

Responde para continuar

En la franja del pico, ¿contra cuántas cuentas distintas fallaron los inicios de sesión de la dirección con más fallos? Escribe solo el número.

Ver pista de ayuda

Escribe `SigninLogs | where ResultType != "0" and TimeGenerated between (datetime(2027-03-11T09:00:00Z) .. datetime(2027-03-11T10:00:00Z)) | summarize Fallos = count(), Cuentas = dcount(UserPrincipalName) by IPAddress | sort by Fallos desc`.

Inicia sesión para registrar tus puntos y progreso en el ranking.

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