¿Qué es KQL y por qué es clave en Microsoft Sentinel?

Ya que estamos aprendiendo sobre ciberseguridad, herramientas de Microsoft, probablemente te has topado con KQL. Pero, ¿qué significa y por qué es tan importante en Microsoft Sentinel? En este artículo, te lo explicaremos de manera sencilla, para que incluso si no tienes mucha experiencia, puedas entender su utilidad y cómo aplicarlo.

¿Qué es KQL?

KQL significa Kusto Query Language, un lenguaje de consulta desarrollado por Microsoft para explorar y analizar grandes volúmenes de datos almacenados en bases de datos tipo Azure Data Explorer y Log Analytics.

En términos simples, KQL es como el «SQL» pero enfocado en la búsqueda y análisis de datos en la nube de Microsoft, especialmente en servicios de monitoreo y seguridad como Microsoft Sentinel.

Si has trabajado con SQL antes, notarás algunas similitudes, pero KQL está más optimizado para consultas rápidas y eficientes sobre datos de registro, que pueden ser logs de servidores, eventos de red, alertas de seguridad, entre otros.

¿Dónde se aplica KQL?

KQL se usa principalmente dentro de Microsoft Azure, en servicios como:

Azure Monitor → Para analizar logs y métricas en la nube.
Log Analytics → Para monitorear el estado de servidores y aplicaciones.
Microsoft Sentinel → Para detectar amenazas de seguridad y responder a incidentes.
Azure Data Explorer → Para análisis de datos a gran escala.

En el caso de Microsoft Sentinel, KQL es fundamental porque permite a los analistas de seguridad buscar patrones sospechosos, correlacionar eventos y generar alertas automáticas a partir de los logs de la organización.

¿Cómo funciona KQL?

KQL es un lenguaje de solo lectura, lo que significa que solo se usa para consultar y analizar datos, pero no para modificarlos o eliminarlos.

La idea es tomar una gran cantidad de datos (logs de actividad, eventos de red, registros de errores, etc.) y filtrarlos para obtener la información realmente importante.

Por ejemplo, imagina que tienes millones de registros en una base de datos y solo necesitas encontrar los eventos de inicio de sesión fallidos en los últimos 7 días. En lugar de revisar manualmente cada registro, puedes usar una consulta KQL para extraer exactamente lo que necesitas en segundos.

Sintaxis básica de KQL

Para entender mejor cómo escribir consultas en KQL, veamos los elementos clave de su sintaxis.

1. Selección de datos

En KQL, los datos se almacenan en tablas. Para ver el contenido de una tabla, simplemente escribes su nombre:

SecurityEvent

Esto mostrará todos los datos dentro de la tabla «SecurityEvent», lo cual puede ser demasiado si hay millones de registros. Por eso, lo normal es aplicar filtros.

2. Filtrar datos

Usamos el operador where para quedarnos solo con los registros que cumplen una condición.

Ejemplo: Buscar eventos de inicio de sesión fallidos (EventID 4625):

SecurityEvent

| where EventID == 4625

El | (pipe) se usa para encadenar operaciones en KQL, permitiendo refinar los datos paso a paso.

3. Filtrar por tiempo

Muchas consultas en Microsoft Sentinel necesitan analizar eventos dentro de un rango de tiempo. Para eso, usamos ago().

Ejemplo: Ver eventos de inicio de sesión fallidos en los últimos 7 días:

SecurityEvent

| where EventID == 4625

| where TimeGenerated >= ago(7d)

4. Seleccionar columnas específicas

Si una tabla tiene muchas columnas, puedes elegir solo las que te interesan con project:

SecurityEvent

| where EventID == 4625

| where TimeGenerated >= ago(7d)

| project TimeGenerated, Account, Computer

Así, en lugar de mostrar todas las columnas, solo veremos la fecha, el usuario y la computadora involucrada.

5. Agrupar datos

Para contar cuántos eventos de cada tipo han ocurrido, usamos summarize y count().

Ejemplo: Contar los eventos de inicio de sesión fallidos por usuario:

SecurityEvent

| where EventID == 4625

| summarize TotalEventos = count() by Account

Esto mostrará cuántas veces cada usuario ha intentado iniciar sesión sin éxito.

6. Ordenar resultados

Si queremos ver los usuarios con más intentos fallidos, usamos order by:

SecurityEvent

| where EventID == 4625

| summarize TotalEventos = count() by Account

| order by TotalEventos desc

Esto ordena los resultados de mayor a menor, destacando los usuarios con más intentos fallidos.

¿Por qué es importante KQL en Microsoft Sentinel?

Microsoft Sentinel es una herramienta de SIEM (Security Information and Event Management) que ayuda a las empresas a detectar, investigar y responder a amenazas de seguridad.

Dado que Sentinel trabaja con grandes volúmenes de logs de seguridad, necesitamos una forma rápida y eficiente de buscar patrones sospechosos. Ahí es donde entra KQL.

Algunas razones por las que KQL es clave en Sentinel:

✔️ Permite detectar actividad sospechosa (como múltiples intentos de inicio de sesión fallidos).
✔️ Facilita la correlación de eventos (por ejemplo, ver si un usuario accedió desde ubicaciones diferentes en poco tiempo).
✔️ Ayuda a generar alertas automáticas basadas en patrones de comportamiento.
✔️ Optimiza la búsqueda de incidentes para una rápida respuesta ante ataques.

Por ejemplo, una consulta en Sentinel podría ayudarte a detectar si un usuario ha intentado iniciar sesión en múltiples servidores en poco tiempo, lo que podría ser un intento de ataque.

SecurityEvent

| where EventID == 4625

| summarize FailedLogins = count() by Account, bin(TimeGenerated, 1h)

| where FailedLogins > 10 Esto detectaría usuarios con más de 10 intentos fallidos en una hora, lo que podría indicar un intento de fuerza bruta.