IRQL: زبان کوئری برای تحلیل رویدادهای امنیتی
خلاصهٔ کاملتر
وقتی با KQL کار میکنی و باید بین دهها جدول مختلف کوئری بزنی، یه مشکل آشنا پیدا میشه: هر جدول اسم ستونهاش رو به شکل متفاوتی نوشته. مثلاً آدرس IP میتونه ipAddress، IPAddress، ClientIp یا callerIpAddress باشه — بسته به اینکه کدوم جدول رو نگاه میکنی. این «drift در schema» (ناهماهنگی ساختار دادهها) باعث میشه آنالیستها وقت زیادی رو صرف یادآوری جزئیات بکنن، نه تحلیل واقعی.
IRQL یا Incident Response Query Language برای حل همین مشکل ساخته شده. این پروژه یه مجموعه از توابع Kusto (KQL) هست که پشت یه دیالکت یکپارچه و معنادار پنهان میشن. به جای نوشتن join های تکراری و پیچیده، با توابعی مثل Get_Event_Authentication یا Enrich_Ip_Employee کار میکنی که اسمشون دقیقاً میگه چیکار میکنن.
توابع IRQL به پنج دسته اصلی تقسیم میشن:
- Selectors (با پیشوند
Get_): یه view یکپارچه از جداول زیرین میسازن با schema استاندارد - Extractors (با پیشوند
Extract_): مقادیر جدید از ستونهای موجود استخراج میکنن — مثلاً دامنه از URL یا نام از ایمیل - Enrichers (با پیشوند
Enrich_): یه جدول رو با left-join به دادههای بیشتر غنی میکنن - Graph-lifted variants: همون منطق، ولی روی خروجی گراف برای تحلیل بصری
- External enrichment: مثل
Enrich_Sha256_VirusTotalوGet_CISA_KEVبرای اطلاعات تهدید خارجی
یه مثال ملموس از تفاوت: فرض کن میخوای تشخیص بدی که یه اپلیکیشن Azure AD ناگهان از نوع user-agent جدیدی لاگین میگیره — سیگنال رایج برای سرقت توکن یا حملات AiTM (مرد میانی احراز هویت). با raw KQL باید یه تابع استخراج user-agent بنویسی، چند جدول رو join کنی، ستونها رو rename کنی و منطق مقایسه بازههای زمانی رو پیادهسازی کنی. نتیجه یه کوئری چند ده خطی میشه که نگهداریش سخته.
با IRQL همون منطق پشت توابعی مثل Get_Event_Authentication و Extract_UserAgent_Category مخفی میشه و کوئری نهایی کوتاه، خوانا، و قابلنگهداری میمونه. مهمتر از همه، این نامگذاری معنادار باعث میشه مدلهای هوش مصنوعی هم بتونن کوئریهای صحیحتری تولید کنن، چون به جای پارس کردن منطق خام، با اسامی معنادار کار میکنن.
IRQL کاملاً با KQL سازگاره — یعنی هر تابعش در کنار کوئریهای معمولی، dashboard ها و pipeline های تشخیص تهدید موجود کار میکنه. پروژه همچنین با توابع Lift to Graph ترکیب میشه تا نتایج رو هم به صورت رابطهای و هم به صورت گراف بصری بشه بررسی کرد.
نکات کلیدی:
- IRQL یه لایهی abstraction روی KQL هست، نه یه زبان جدید — همه چیز همچنان Kusto هست
- schema یکپارچه با نامهایی مثل
EnvTime،ClientIp،Usernameجایگزین ناهماهنگیهای مختلف جداول میشه - نامگذاری معنادار توابع هم خوانایی برای انسان رو بالا میبره، هم کیفیت خروجی LLM ها رو
- با توابع گراف (Lift to Graph) ترکیب میشه برای تحلیل بصری روابط
- از منابع threat-intel خارجی مثل VirusTotal و CISA KEV هم پشتیبانی میکنه




