CommunityRedacción y edicióngithub.com

microsoft/azure-kusto-irql

Compone consultas IRQL (Incident Response Query Language) para investigaciones de ciberseguridad en Kusto. Traduce preguntas de búsqueda en lenguaje natural a pipelines IRQL componibles utilizando funciones Get_*, Extract_* y Enrich_*. CUÁNDO: consulta IRQL, búsqueda de amenazas, KQL de caza de amenazas, consulta de respuesta a incidentes, componer pipeline de búsqueda, inicios de sesión fallidos, investigación de phishing, movimiento lateral, ejecución de procesos, eventos de creación de archivos.

¿Qué es azure-kusto-irql?

IRQL (Incident Response Query Language) es un dialecto basado en funciones sobre KQL diseñado específicamente para investigadores de seguridad y analistas de SOC que necesitan realizar cacerías de amenazas de manera eficiente sin memorizar esquemas complejos de tablas de seguridad. Este skill permite componer pipelines de consulta utilizando bloques de construcción reutilizables: selectores (Get_*) que unifican el esquema de diferentes fuentes de datos, extractores (Extract_*) que derivan nuevos campos, y enriquecedores (Enrich_*) que agregan contexto de tablas relacionadas. La principal ventaja de IRQL es su portabilidad: las mismas consultas funcionan en diferentes clústeres y bases de datos, solo los selectores base necesitan ser reorientados. El skill es compatible con plataformas Kusto como Azure Data Explorer, y puede ejecutarse a través del clúster público de ejemplo (kc7001.eastus.kusto.windows.net) en las bases de datos ValdyTimes y JoJosHospital. Para usar el skill, las funciones IRQL deben estar previamente desplegadas en la base de datos destino — el skill no las implementa. Los pipelines se construyen siguiendo una secuencia lógica: Selector → Extract → Filter → Enrich → Summarize/Project, siempre utilizando el operador pipe (|) y la función invoke para conectar los componentes.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/microsoft/agent-skills/tree/main/.github/plugins/azure-kusto-graph-skills/skills/azure-kusto-irql

Installed? Explore more Redacción y edición skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

IRQL -- Lenguaje de Consulta para Respuesta a Incidentes

Componga pipelines de funciones IRQL a partir de bloques de construcción selectores, extractores y enriquecedores. IRQL envuelve tablas KQL de seguridad sin procesar detrás de funciones componibles que revelan la intención, permitiendo a los analistas (y LLMs) expresar búsquedas sin memorizar esquemas, ubicaciones de clústeres o claves de unión.

Disparadores de Activación

Use este skill cuando el usuario:

  • Mencione explícitamente IRQL, funciones Get_*, Extract_* o Enrich_*
  • Diga "usa IRQL" o "escribe una consulta IRQL"
  • Solicite un pipeline de búsqueda componible usando selectores IRQL conocidos

No active para consultas de seguridad genéricas (ej. "encuentra inicios de sesión fallidos") a menos que el usuario pida explícitamente IRQL. Enrute esas al skill azure-kusto.

No es un convertidor de lenguaje natural a IRQL. Este skill compone pipelines de funciones IRQL y puede manejar solicitudes básicas en lenguaje natural que se asignen directamente a selectores conocidos y filtros simples. Para conversión general de NL a KQL o NL a IRQL, use un skill de generación de consultas dedicado (disponible por separado).

Verificación Previa de Funciones IRQL

Antes de generar un pipeline, verifique que IRQL esté disponible en la base de datos destino:

.show functions
| where Name startswith "Get_" or Name startswith "Extract_" or Name startswith "Enrich_"
| project Name

Si no se encuentran funciones IRQL, informe al usuario que IRQL no está desplegado en la base de datos destino y sugiera usar azure-kusto para consultas KQL sin procesar. Las funciones IRQL son un requisito previo -- este skill no despliega los selectores base de IRQL.

Qué es IRQL

IRQL es un dialecto basado en funciones sobre KQL. Proporciona:

  1. Esquema unificado -- tablas de seguridad dispares proyectan nombres de columna consistentes independientemente de la fuente de datos subyacente
  2. Componibilidad -- funciones pequeñas se encadenan mediante | invoke para construir búsquedas complejas a partir de pasos simples
  3. Portabilidad -- el mismo pipeline IRQL funciona en diferentes clústeres/bases de datos; solo los primitivos Get_* necesitan ser reorientados

IRQL no es un lenguaje separado. Son funciones KQL que se invocan. Cualquier KQL válido funciona junto con las funciones IRQL.

Despliegue de IRQL

Las funciones IRQL son funciones KQL almacenadas (.create-or-alter function). Deben estar ya desplegadas en la base de datos destino antes de que este skill pueda generar pipelines.

Clúster público de ejemplo (funciones pre-desplegadas):

  • Clúster: https://kc7001.eastus.kusto.windows.net
  • Bases de datos: ValdyTimes, JoJosHospital

Para portar IRQL a un nuevo clúster/base de datos, cree selectores Get_* que proyecten sus tablas fuente en el esquema unificado (nombres de columna abajo), luego despliegue extractores y enriquecedores. Los extractores y enriquecedores funcionan sin cambios siempre que el esquema de entrada coincida.

Catálogo de Funciones

1. Selectores -- Get_*

Devuelven vistas proyectadas y unificadas en esquema de tablas fuente. Use la forma mínima por defecto; use _All cuando se necesiten columnas adicionales.

FunciónColumnas
Get_Event_AuthenticationEnvTime, Hostname, ClientIp, Username, Result
Get_Event_Authentication_All+ Description, UserAgent, PasswordHash
Get_EmailEnvTime, EmailSender, EmailRecipient, Subject, Url
Get_Email_All+ ReplyTo, Verdict
Get_EmployeesName, ClientIp, Email, Username, Hostname, Role
Get_Employees_All+ HireDate, UserAgent, Domain
Get_Event_FileCreationEnvTime, Hostname, Filename, Path
Get_Event_FileCreation_All+ Username, Sha256, ProcessName
Get_Event_NetworkInboundEnvTime, ClientIp, Url
Get_Event_NetworkInbound_All+ Method, UserAgent, StatusCode
Get_Event_NetworkOutboundEnvTime, ClientIp, Url
Get_Event_NetworkOutbound_All+ Method, UserAgent
Get_Dns_AllEnvTime, Domain, ClientIp
Get_Event_ProcessEnvTime, ProcessCommandLine, ProcessName, Hostname, Username
Get_Event_Process_All+ ParentProcessName, ParentProcessHash, ProcessHash
Get_SecurityAlerts_AllEnvTime, AlertType, Severity, Description, Indicators
Get_Network_Connection_AllEnvTime, SourceIp, SourcePort, DestinationIp, DestinationPort, Protocol, Bytes

2. Extractores -- Extract_*

Derivan una nueva columna a partir de una existente. Se invocan después de un selector.

FunciónColumna de EntradaAñade
Extract_Email_Sender_Domain(T)EmailSenderDomain
Extract_Employee_Firstname(T)NameFirstname
Extract_Event_Network_Domain(T)UrlDomainName

3. Enriquecedores -- Enrich_*

Ayudantes de left-join que adjuntan contexto de una tabla relacionada.

FunciónColumna ClaveEnriquece Con
Enrich_Event_Authentication_Username(T)UsernameEventos de autenticación para el usuario
Enrich_Ip_Employee(T)ClientIpIdentidad del empleado desde IP
Enrich_Username_Employee(T)UsernameIdentidad del empleado desde nombre de usuario
Enrich_Ip_Domain(T)ClientIpDominios DNS resueltos a IP
Enrich_Ip_Event_NetworkOutbound(T)ClientIpRed saliente desde IP
Enrich_Ip_Network_Connection(T)ClientIpFlujos de red desde IP

4. Enriquecedores Externos

FunciónFuenteRequisito
Enrich_Sha256_VirusTotal(T)Informe de archivo de VirusTotalClave API + política de callout
Get_CISA_KEV() / Enrich_CISA_KEV(T)Catálogo CISA KEVPolítica de callout

Reglas de Composición

Selector -> Extract -> Filter -> Enrich -> Summarize/Project
  1. Comience con un Selector: Get_Event_Authentication, Get_Email, etc.
  2. Extraiga campos derivados: | invoke Extract_Email_Sender_Domain()
  3. Filtre la señal: | where Result == "Failed Login"
  4. Enriquezca con contexto: | invoke Enrich_Username_Employee()
  5. Resuma / proyecte la respuesta

Use siempre pipe (|) entre pasos. Los extractores y enriquecedores usan | invoke FunctionName().

Directrices de Generación de Consultas

  • Use el selector mínimo a menos que se necesiten columnas adicionales -> entonces _All
  • Encadene extractores antes que enriquecedores (los extractores añaden columnas que los enriquecedores pueden usar como clave)
  • Coloque los filtros where lo más temprano posible
  • Use summarize para agregaciones, project para selección final de columnas
  • Termine con order by + take para limitar la salida

Ejemplos

Para ejemplos adicionales y prompts trabajados, consulte references/EXAMPLES.md.

Detección de fuerza bruta

Get_Event_Authentication
| where Result == "Failed Login"
| summarize FailedCount = count() by Username
| where FailedCount > 19
| invoke Enrich_Username_Employee()
| project Username, Name, Role, Email, FailedCount
| order by FailedCount desc

Triaje de phishing por antigüedad del destinatario

Get_Email
| invoke Extract_Email_Sender_Domain()
| project EnvTime, EmailSender, Domain, Username = EmailRecipient, Subject, Url
| invoke Enrich_Username_Employee()
| extend Seniority = case(
    Role has_any ("CEO", "Chief", "Director", "VP", "President"), 3,
    Role has_any ("Manager", "Lead", "Senior"), 2,
    1)
| summarize
    TotalEmails = count(),
    SeniorityScore = sum(Seniority),
    Recipients = make_set(Name, 50),
    DistinctRecipients = dcount(Username)
  by Domain
| where DistinctRecipients >= 2
| order by SeniorityScore desc
| take 20

Pivote post-explotación desde un indicador

let victims =
    Get_Event_FileCreation_All
    | where Filename has "<INDICATOR>"
    | distinct Hostname;
Get_Event_Process
| where Hostname in (victims)
| where ProcessCommandLine has_any ("rundll32", "regsvr32", "powershell", "systeminfo")
| project EnvTime, Hostname, Username, ProcessName, ProcessCommandLine
| order by EnvTime asc

Tráfico saliente sospechoso enriquecido con identidad

Get_Event_NetworkOutbound
| invoke Extract_Event_Network_Domain()
| where DomainName has_any ("<SUSPICIOUS_DOMAIN_1>", "<SUSPICIOUS_DOMAIN_2>")
| invoke Enrich_Ip_Employee()
| project EnvTime, Name, Role, DomainName, Url, ClientIp
| order by EnvTime desc

Anomalía de autenticación desde IP externa

Get_Event_Authentication_All
| where not(ClientIp startswith "10.") and not(ClientIp startswith "192.168.")
| summarize
    Attempts = count(),
    Failures = countif(Result == "Failed Login"),
    Users = make_set(Username)
  by ClientIp
| order by Failures desc
| take 20

Herramientas MCP Utilizadas

HerramientaPropósito
kusto_queryEjecutar pipelines IRQL contra una base de datos Kusto
kusto_table_schema_getDescubrir tablas y columnas disponibles
kusto_cluster_listListar clústeres ADX disponibles
kusto_database_listListar bases de datos en un clúster

Abrir Consultas en Kusto Explorer (Solo Windows)

Característica de conveniencia opcional. El flujo de trabajo predeterminado es mostrar el KQL en el chat y permitir que el usuario lo copie manualmente a Kusto Explorer o la extensión Kusto de VS Code. El auto-lanzamiento solo es opt-in.

Siempre muestre la consulta KQL completa en la respuesta del chat con el Paso 1 (conectar) y el Paso 2 (consultar) claramente etiquetados:

// Paso 1: Conéctese a su clúster (omitir si ya está conectado)
// Ejemplo: descomente para conectar al clúster de entrenamiento KC7
// #connect cluster('kc7001.eastus.kusto.windows.net').database('ValdyTimes')
// O reemplace con su propio clúster:
// #connect cluster('<YOUR_CLUSTER>').database('<YOUR_DATABASE>')

// Paso 2: Ejecute la consulta a continuación
<KQL_QUERY>

Si el usuario pide guardar o abrir en Kusto Explorer, siga el procedimiento en references/KUSTO_EXPLORER_LAUNCH.md. Reglas clave:

  • Use ask_user para confirmar antes de escribir archivos o lanzar ejecutables
  • Muestre el contenido del archivo en el chat para que el usuario lo revise antes de abrirlo
  • Nunca use interpolación de shell o here-strings — escriba archivos mediante Set-Content/Add-Content
  • Nunca codifique consultas en URLs del navegador
  • En macOS/Linux, guarde el archivo .kql y sugiera la extensión Kusto de VS Code o ADX Web Explorer
  • Para visualización de gráficos a partir de datos IRQL, consulte azure-kusto-graph y azure-kusto-irql-graph

Individual skills in this repo

This repo contains 12 individual skills — each has its own dedicated page.

microsoft/azure-ai-agents-persistent-dotnet

Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: "PersistentAgentsClient", "persistent agents", "agent threads", "agent runs", "streaming agents", "function calling agents .NET".

microsoft/azure-ai-document-intelligence-dotnet

Azure AI Document Intelligence SDK for .NET. Extract text, tables, and structured data from documents using prebuilt and custom models. Use for invoice processing, receipt extraction, ID document analysis, and custom document models. Triggers: "Document Intelligence", "DocumentIntelligenceClient", "form recognizer", "invoice extraction", "receipt OCR", "document analysis .NET".

microsoft/azure-ai-openai-dotnet

Azure OpenAI SDK for .NET. Client library for Azure OpenAI and OpenAI services. Use for chat completions, embeddings, image generation, audio transcription, and assistants. Triggers: "Azure OpenAI", "AzureOpenAIClient", "ChatClient", "chat completions .NET", "GPT-4", "embeddings", "DALL-E", "Whisper", "OpenAI .NET".

microsoft/azure-ai-projects-dotnet

Azure AI Projects SDK for .NET. High-level client for Azure AI Foundry projects including agents, connections, datasets, deployments, evaluations, and indexes. Use for AI Foundry project management, versioned agents, and orchestration. Triggers: "AI Projects", "AIProjectClient", "Foundry project", "versioned agents", "evaluations", "datasets", "connections", "deployments .NET".

microsoft/azure-ai-voicelive-dotnet

Azure AI Voice Live SDK for .NET. Build real-time voice AI applications with bidirectional WebSocket communication. Use for voice assistants, conversational AI, real-time speech-to-speech, and voice-enabled chatbots. Triggers: "voice live", "real-time voice", "VoiceLiveClient", "VoiceLiveSession", "voice assistant .NET", "bidirectional audio", "speech-to-speech".

microsoft/azure-eventgrid-dotnet

Azure Event Grid SDK for .NET. Client library for publishing and consuming events with Azure Event Grid. Use for event-driven architectures, pub/sub messaging, CloudEvents, and EventGridEvents. Triggers: "Event Grid", "EventGridPublisherClient", "CloudEvent", "EventGridEvent", "publish events .NET", "event-driven", "pub/sub".

microsoft/azure-eventhub-dotnet

Azure Event Hubs SDK for .NET. Use for high-throughput event streaming: sending events (EventHubProducerClient, EventHubBufferedProducerClient), receiving events (EventProcessorClient with checkpointing), partition management, and real-time data ingestion. Triggers: "Event Hubs", "event streaming", "EventHubProducerClient", "EventProcessorClient", "send events", "receive events", "checkpointing", "partition".

microsoft/azure-identity-dotnet

Azure Identity library for .NET. Authentication library for Azure SDK clients using Microsoft Entra ID. Use for DefaultAzureCredential, managed identity, service principals, and developer credentials. Triggers: "Azure Identity", "DefaultAzureCredential", "ManagedIdentityCredential", "ClientSecretCredential", "authentication .NET", "Azure auth", "credential chain".

microsoft/azure-kusto-graph

Build and query Kusto graphs from natural language. Covers transient graphs (make-graph), persistent graph models/snapshots, pattern matching (graph-match), shortest paths, connected components, and graph-to-table export. Generates the edges-first thinking: define edges, define node lookups, union, make-graph. WHEN: make-graph, graph-match, graph-shortest-paths, graph-to-table, graph-mark-components, persistent graph, graph model, graph snapshot, build a graph from data, find paths between nodes, pattern matching in graph, connected components, transient graph, Kusto graph, KQL graph.

microsoft/azure-kusto-irql-graph

Apply IRQL graph functions to KQL or IRQL query results for Kusto Explorer visualization. Generates Lift_To_Graph mappings and composes Graph_Render_View, Graph_Fold_By_Property, Extract_Node_*, Enrich_Node_*, and Enrich_Graph_* calls. Accepts a supplied query or limited basic natural-language source request; it is not a general natural-language-to-KQL/IRQL skill. WHEN: Lift_To_Graph, Graph_Render_View, Graph_Fold_By_Property, IRQL graph enrichment, graph mapping for existing query results, icon-decorated graph, fold graph nodes. Use azure-kusto-graph for native make-graph analysis, graph-match, shortest paths, components, or persistent graphs.

microsoft/azure-local

Plan, deploy, operate, and troubleshoot Azure Local (formerly Azure Stack HCI): sizing and prerequisites, Arc registration, lifecycle updates, workloads (Azure Local VMs, AKS on Azure Local, images, disks, logical networks), SDN and network security, and failure triage — starting read-only and confirming before risky changes. WHEN: Azure Local, Azure Stack HCI, Arc resource bridge, custom location, Azure Local VM, Arc VM, AKS on Azure Local, AKS hybrid, SDN, Lifecycle Manager, Azure Local update, disconnected site.

microsoft/azure-local-multi-rack

Plan, deploy, operate, and troubleshoot multi-rack (rack scale) deployments of Azure Local — preintegrated racks scaling to hundreds of machines, built on Network Fabric Controller, Cluster Manager, SAN storage, and managed network fabric. Use for the Microsoft.NetworkCloud and Microsoft.ManagedNetworkFabric control plane. NOT for standard 1-16 node Azure Local, and NOT for rack-aware clusters (two racks as availability zones, up to 8 nodes, synchronous replication) — those are standard scale. WHEN: multi-rack, rack scale Azure Local, aggregation rack, compute rack, Network Fabric Controller, NFC, Cluster Manager, network fabric, isolation domain, az networkcloud, az networkfabric, multi-rack logical network, multi-rack Arc VM.

Skills relacionados