Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Sentinel-Queries — مجموعة من استعلامات KQL | Kitploit
أدوات/GitHubGitHub/reprise99/sentinel-queries
أدوات دفاعيةاستخبارات التهديداتالتعلم والتعليمموارد منسقةكشف الشذوذتحليل السجلات
GitHubreprise99/sentinel-queries

Sentinel-Queries

مجموعة من استعلامات KQL

عرض المستودع
1.6k38216منذ 8 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

KQL لـ Microsoft Sentinel

بعض النصائح والحيل والأمثلة لاستخدام KQL مع Microsoft Sentinel.

  1. مقدمة
  2. تشريح استعلام KQL
  3. الأساسيات
    1. أساسيات الوقت
    2. أساسيات Where
    3. أساسيات Project
    4. أساسيات Summarize
    5. أساسيات Render
    6. أساسيات Parse وSplit

مقدمة

Kusto Query Language هي اللغة المستخدمة عبر Azure Monitor وAzure Data Explorer وAzure Log Analytics (وهو ما يستخدمه Microsoft Sentinel داخليًا). لطالما وجدت هذا المخطط المرئي الخاص بـ KQL مفيدًا -

KQL موضّح بصريًا

نريد استخدام KQL لإنشاء استعلامات دقيقة وفعّالة للعثور على التهديدات والاكتشافات والأنماط والشذوذ من داخل مجموعة البيانات الأكبر لدينا.

تشريح استعلام KQL

خذ الاستعلام أدناه كمثال```kql SigninLogs | where TimeGenerated > ago(14d) | where UserPrincipalName == "[email protected]" | where ResultType == "0" | where AppDisplayName == "Microsoft Teams" | project TimeGenerated, Location, IPAddress, UserAgent

عند تشغيل استعلام مثل هذا، يخبر السطر الأول Microsoft Sentinel بالجدول الذي يجب البحث عن البيانات فيه، لذا في هذه الحالة نريد البحث في جدول SigninLogs، وهو المكان الذي تُرسل إليه بيانات تسجيل الدخول إلى Azure AD. يمكنك الاطلاع على قائمة الجداول [هنا](https://docs.microsoft.com/en-us/azure/sentinel/data-source-schema-reference).

بعد ذلك، سيقوم Microsoft Sentinel بتنفيذ استعلامك بالتسلسل، حيث سيتم تشغيل كل سطر واحدًا تلو الآخر حتى الوصول إلى النهاية، أو حدوث خطأ. لذا دعونا نقسّم استعلامنا سطرًا بسطر.```kql
SigninLogs

إذاً أولاً اخترنا جدول SigninLogs الخاص بنا.```kql SigninLogs | where TimeGenerated > ago(14d)

بعد ذلك، نطلب من Sentinel النظر إلى بيانات آخر 14 يومًا في هذا الجدول.```kql
SigninLogs
| where TimeGenerated > ago(14d)
| where UserPrincipalName == "[email protected]"

بعد ذلك، نطلب من Sentinel العثور على السجلات فقط حيث يكون UserPrincipalName مساوياً لـ "[email protected]"```kql SigninLogs | where TimeGenerated > ago(14d) | where UserPrincipalName == "[email protected]" | where ResultType == "0"

ثم نبحث عن السجلات التي يكون فيها ResultType == 0 فقط، وهو ما يمثل تسجيل دخول ناجحًا إلى Azure AD.```kql
SigninLogs
| where TimeGenerated > ago(14d)
| where UserPrincipalName == "[email protected]"
| where ResultType == "0"
| where AppDisplayName == "Microsoft Teams"

بعد ذلك، نبحث عن عمليات تسجيل الدخول إلى Microsoft Teams فقط.```kql SigninLogs | where TimeGenerated > ago(14d) | where UserPrincipalName == "[email protected]" | where ResultType == "0" | where AppDisplayName == "Microsoft Teams" | project TimeGenerated, Location, IPAddress, UserAgent

يستخدم سطرنا الأخير معامل project لإرجاع 4 حقول فقط من سجلاتنا، لذا سنرى فقط TimeGenerated وLocation وIPAddress وUserAgent المعادة من بيانات SigninLogs الخاصة بنا.

هكذا تبني الاستعلامات، والآن الأساسيات.

## الأساسيات

### أساسيات الوقت

تم تحسين Microsoft Sentinel وKQL بشكل كبير لمرشحات الوقت، لذا إذا كنت تعرف الفترة الزمنية للبيانات التي تريد البحث عنها، فيجب عليك تصفية النطاق الزمني فورًا. استرجاع آخر 14 يومًا من السجلات، ثم البحث عن اسم مستخدم مثل الاستعلام أدناه -```kql
SigninLogs
| where TimeGenerated > ago(14d)
| where UserPrincipalName == "[email protected]"

أكثر كفاءة بكثير من البحث أولاً عن اسم مستخدم ثم البحث عن الفترة الزمنية مثل هذا -```kql SigninLogs | where UserPrincipalName == "[email protected]" | where TimeGenerated > ago(14d)

يوفر KQL العديد من الخيارات للاستعلام عن فترات زمنية محددة.```kql
SigninLogs
| where TimeGenerated > ago(14d)

كما في المثال الأول، سيبحث هذا عن آخر 14 يومًا.```kql SigninLogs | where TimeGenerated > ago(14h)

يمكنك أيضًا العمل لساعات.```kql
SigninLogs
| where TimeGenerated > ago(14m)

والدقائق.

تدعم KQL أيضًا الاستعلام بين نطاقات زمنية -```kql SigninLogs | where TimeGenerated between (ago(14d) .. ago(7d))

سيعثر هذا على بيانات SigninLogs بين 14 يومًا و7 أيام مضت.```kql
SigninLogs
| where TimeGenerated between (ago(14h) .. ago(7h))

بين 14 ساعة و7 ساعات مضت.```kql SigninLogs | where TimeGenerated between (ago(14m) .. ago(7m))

وبين 14 دقيقة و7 دقائق مضت.

### أساسيات Where

Where هو عامل (Operator) ستستخدمه في كل استعلام تقريبًا تكتبه. بهذه الطريقة تخبر Microsoft Sentinel بالبحث عن بيانات محددة. بناء الجملة (Syntax) مهم جدًا مع عامل where. إذا استخدمنا نفس مثالنا.```kql
SigninLogs
| where TimeGenerated > ago(14d)
| where UserPrincipalName == "[email protected]"

سيقوم هذا بالبحث في جدول SigninLogs لدينا، خلال آخر 14 يومًا، عن تطابقات تامة حيث يكون UserPrincipalName لدينا مساويًا لـ [email protected]. في KQL، العامل == حساس لحالة الأحرف، لذا إذا بحثت عن [email protected] وكان اسم المستخدم في الواقع [email protected]، فلن تحصل على أي نتائج. المكافئ غير الحساس لحالة الأحرف هو =~.```kql SigninLogs | where TimeGenerated > ago(14d) | where UserPrincipalName =~ "[email protected]"

سيؤدي هذا إلى العثور على أي تطابقات لـ [email protected] بغض النظر عن حساسية حالة الأحرف.

بدلاً من يساوي، يمكننا أيضًا استخدام يحتوي.```kql
SigninLogs
| where TimeGenerated > ago(14d)
| where UserPrincipalName contains "reprise_99"

سيؤدي هذا إلى العثور على أي إدخالات سجل حيث يحتوي UserPrincipalName على reprise_99، إذا كان لديك بيانات [email protected] و [email protected]، فسيجد كلاهما. عامل contains ليس حساسًا لحالة الأحرف، ولكن يمكنك استخدام contains_cs لجعله حساسًا لحالة الأحرف.

يمكنك استخدام إما startswith أو endswith إذا كنت تبحث عن أنماط معينة.```kql SigninLogs | where TimeGenerated > ago(14d) | where UserPrincipalName startswith "reprise_99"

SigninLogs | where TimeGenerated > ago(14d) | where UserPrincipalName endswith "testdomain.com"

Both startswith and endswith are not case sensitive, but you can use the startswith_cs or endswith_cs to make them case sensitive.

If you are searching for full words (greater than four characters), in KQL you can use the has operator. Using 'has' is more efficient than 'contains' as the data is indexed for you.```kql
SigninLogs
| where TimeGenerated > ago(14d)
| where AppDisplayName has "Teams"

سيجد هذا أي SigninLogs حيث يحتوي اسم عرض التطبيق على كلمة Teams فيه، وقد يتضمن ذلك "Microsoft Teams" و"Microsoft Teams Web Client"، وكلاهما يلبي الاستعلام.

إذا كنت تبحث عن كلمات متعددة، يمكنك استخدام has_any أو has_all.```kql SigninLogs | where TimeGenerated > ago(14d) | where AppDisplayName has_any ("Teams","Outlook")

سيعيد هذا نتائج حيث يحتوي اسم عرض التطبيق على إما "Teams" أو "Outlook"```kql
SigninLogs
| where TimeGenerated > ago(14d)
| where AppDisplayName has_all ("Teams","Outlook")

سيعيد هذا النتائج التي يحتوي اسم عرض التطبيق فيها على "Teams" و"Outlook".

إذا كنت لا تعرف الحقول التي تريد البحث فيها، يمكنك أيضًا استخدام أحرف البدل (wildcards)، فهي غير فعالة لكنها قد تضعك على المسار الصحيح للعثور على ما تبحث عنه.```kql SigninLogs | where TimeGenerated > ago(14d) | where * contains "reprise_99"

سيؤدي هذا إلى البحث في جدول SigninLogs عن أي حقل يحتوي على reprise_99.

يدعم عدد من هذه الخيارات أيضًا استخدام `!` لعكس الاستعلام والعثور على نتائج لا ينطبق عليها الشرط.```kql
SigninLogs
| where TimeGenerated > ago(14d)
| where UserPrincipalName != "[email protected]"

سيعثر هذا الاستعلام على جميع سجلات تسجيل الدخول (SigninLogs) حيث لا يساوي UserPrincipalName القيمة [email protected]```kql SigninLogs | where TimeGenerated > ago(14d) | where UserPrincipalName !contains "reprise_99"

سيعثر هذا الاستعلام على جميع SigninLogs حيث لا يحتوي UserPrincipalName على reprise_99```kql
SigninLogs
| where TimeGenerated > ago(14d)
| where AppDisplayName !has "Teams"

هذا الاستعلام سيجد SigninLogs حيث لا يحتوي اسم عرض التطبيق على "Teams".

أساسيات المشروع

تنزيل الأداة