Qué es KQL y dónde vive
SecurityEvent
| where TimeGenerated > ago(1h)
| where EventID == 4625
| summarize fallos = count() by Computer
| sort by fallos descEsas cinco líneas responden cuántos inicios de sesión fallidos hubo en la última hora, equipo por equipo, de mayor a menor. Se leen de arriba abajo como una receta: tome la tabla, quédese con la última hora, quédese con los 4625, cuente por equipo, ordene. Eso es KQL.
Qué es KQL
KQL (Kusto Query Language, "lenguaje de consulta de Kusto") es el lenguaje con el que se piden datos al motor Kusto de Microsoft. Una consulta KQL es de solo lectura: no cambia ni borra nada, solo devuelve una tabla de resultados. Puede equivocarse cien veces y lo peor que pasa es un mensaje de error o un resultado vacío.
El modelo es una tubería. Cada consulta empieza con una tabla y la pasa, con el pipe (|), por una serie de operadores. Cada operador recibe una tabla y entrega otra: where quita filas, project quita o renombra columnas, summarize agrupa. El orden importa. Si cuenta antes de filtrar, cuenta otra cosa.
Las tablas tienen columnas con tipo: TimeGenerated es datetime, EventID es int, Computer es string. Parece un detalle hasta que compara una fecha con un texto, o un número guardado como texto con un número, y recibe un error de tipos. En la lección 9 verá el caso más famoso, ResultType en SigninLogs.
De dónde viene
Kusto nació en 2014 en el centro de investigación y desarrollo de Microsoft en Israel, para analizar la telemetría de los servicios de la empresa. El nombre suele explicarse como un guiño a Jacques Cousteau y a "explorar un océano de datos", aunque Microsoft nunca lo ha documentado como origen oficial.
| Año | Hito |
|---|---|
| 2014 | Arranca Kusto como proyecto interno de Microsoft |
| 2018 | Se anuncia la vista previa pública de Azure Data Explorer, el servicio que expone Kusto |
| 2019 | Azure Data Explorer queda disponible para todos (7 de febrero); Azure Sentinel, que hoy se llama Microsoft Sentinel, sale de vista previa ese mismo año |
| 2023 | KQL llega a Microsoft Fabric con Real-Time Analytics, que en 2024 pasa a llamarse Real-Time Intelligence |
| 2026 | Sentinel se opera desde el portal de Microsoft Defender; el portal de Azure deja de soportarlo después del 31 de marzo de 2027 |
Por qué importa en el SOC
En un SOC con Microsoft, todo pasa por KQL. La alerta que le llega la generó una regla escrita en KQL; cuando el L2 le pide "tráigame los procesos de esa cuenta en las dos horas siguientes", se lo pide en KQL, y los paneles del turno son consultas con un gráfico al final. La certificación SC-200 de Microsoft también evalúa consultas KQL.
El analista que no lo maneja depende de las consultas guardadas por otros, que funcionan hasta el día en que llega una alerta que no se parece a ninguna.
Dónde se usa
| Lugar | Para qué lo usa el defensor | Tiempo de los datos |
|---|---|---|
| Microsoft Sentinel | SIEM: registros de Windows, Entra ID, firewalls, Microsoft 365 | Columna TimeGenerated |
| Defender XDR, búsqueda avanzada (advanced hunting) | Telemetría del EDR: procesos, red, archivos, inicios de sesión | Columna Timestamp |
| Log Analytics (Azure Monitor) | Registros de máquinas y servicios de Azure; Sentinel se apoya en él | TimeGenerated |
| Azure Data Explorer | Clústeres de análisis; aquí está el laboratorio gratuito del curso | Lo que defina cada tabla |
| Microsoft Fabric Real-Time Intelligence | Análisis de datos en tiempo real fuera del mundo de seguridad | Lo que defina cada tabla |
Ojo con la sigla. En Introducción al SOC: su primer turno como analista vio búsquedas como source.ip: 203.0.113.77 en Kibana, que también llama "KQL" a su lenguaje (Kibana Query Language). Ese solo filtra: no tiene tuberías, summarize ni join. Si una oferta dice "KQL" junto a Sentinel, es el de este curso.
Conceptos clave
| Concepto | Qué significa |
|---|---|
| Clúster | El servicio que guarda los datos y ejecuta las consultas |
| Base de datos | Agrupa tablas dentro del clúster; en Sentinel, el área de trabajo de Log Analytics hace ese papel |
| Tabla | Filas de eventos con las mismas columnas, como SecurityEvent |
| Operador | Cada paso de la tubería después del pipe: where, summarize, join |
| Función | Calcula un valor dentro de un operador: ago(), count(), bin() |
let | Le pone nombre a un valor o a una tabla intermedia para reutilizarla |
datatable | Tabla escrita a mano dentro de la consulta; la usará en los laboratorios |
Cómo leer una sintaxis y dónde pedir ayuda
En las fichas, los corchetes marcan lo opcional, las MAYÚSCULAS lo que usted reemplaza y los puntos suspensivos lo que se puede repetir:
TABLA
| where CONDICIÓN
| summarize [NOMBRE =] AGREGACIÓN [, ...] by COLUMNA [, ...]KQL no tiene man ni --help. La ayuda está en el editor del Data Explorer, que completa tablas, columnas y operadores mientras escribe (Ctrl+Espacio la fuerza), y en la referencia de Microsoft Learn, con una página por operador y ejemplos sobre StormEvents. Si un operador le da un resultado raro, lea las notas de su página: casi siempre cubren su caso.