Saltar al contenido
Lectura12 minPreview

Qué es KQL y dónde vive

SecurityEvent
| where TimeGenerated > ago(1h)
| where EventID == 4625
| summarize fallos = count() by Computer
| sort by fallos desc

Esas 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ñoHito
2014Arranca Kusto como proyecto interno de Microsoft
2018Se anuncia la vista previa pública de Azure Data Explorer, el servicio que expone Kusto
2019Azure 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
2023KQL llega a Microsoft Fabric con Real-Time Analytics, que en 2024 pasa a llamarse Real-Time Intelligence
2026Sentinel 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

LugarPara qué lo usa el defensorTiempo de los datos
Microsoft SentinelSIEM: registros de Windows, Entra ID, firewalls, Microsoft 365Columna TimeGenerated
Defender XDR, búsqueda avanzada (advanced hunting)Telemetría del EDR: procesos, red, archivos, inicios de sesiónColumna Timestamp
Log Analytics (Azure Monitor)Registros de máquinas y servicios de Azure; Sentinel se apoya en élTimeGenerated
Azure Data ExplorerClústeres de análisis; aquí está el laboratorio gratuito del cursoLo que defina cada tabla
Microsoft Fabric Real-Time IntelligenceAnálisis de datos en tiempo real fuera del mundo de seguridadLo 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

ConceptoQué significa
ClústerEl servicio que guarda los datos y ejecuta las consultas
Base de datosAgrupa tablas dentro del clúster; en Sentinel, el área de trabajo de Log Analytics hace ese papel
TablaFilas de eventos con las mismas columnas, como SecurityEvent
OperadorCada paso de la tubería después del pipe: where, summarize, join
FunciónCalcula un valor dentro de un operador: ago(), count(), bin()
letLe pone nombre a un valor o a una tabla intermedia para reutilizarla
datatableTabla 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.