إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يستخدم مستخدمو نموذج معلومات الأمان المتقدم (ASIM) محللات توحيد بدلا من أسماء الجداول في استعلاماتهم، لعرض البيانات بتنسيق تمت تسويته ولتضمين جميع البيانات ذات الصلة بالمخطط في الاستعلام. توحيد المحللات، بدورها، استخدم محللات خاصة بالمصدر للتعامل مع التفاصيل المحددة لكل مصدر.
يوفر Microsoft Sentinel محللات مضمنة خاصة بالمصدر للعديد من مصادر البيانات. قد تحتاج إلى تعديل هذه المحللات الخاصة بالمصدر أو تطويرها في الحالات التالية:
عندما يوفر جهازك أحداثا تناسب مخطط ASIM، ولكن لا يتوفر محلل خاص بالمصدر لجهازك والمخطط ذي الصلة في Microsoft Sentinel.
عندما تتوفر محللات مصدر ASIM الخاصة بجهازك، ولكن جهازك يرسل الأحداث بطريقة أو تنسيق مختلف عن المتوقع من قبل محللات ASIM. على سبيل المثال:
قد يتم تكوين جهازك المصدر لإرسال الأحداث بطريقة غير قياسية.
قد يكون لجهازك إصدار مختلف عن الإصدار الذي يدعمه محلل ASIM.
قد يتم تجميع الأحداث وتعديلها وإعادة توجيهها بواسطة نظام وسيط.
لفهم كيفية احتواء المحللات ضمن بنية ASIM، راجع الرسم التخطيطي لبنية ASIM.
عملية تطوير محلل ASIM المخصصة
يصف سير العمل التالي الخطوات عالية المستوى في تطوير ASIM مخصص، محلل خاص بالمصدر:
حدد المخططات أو المخططات التي تمثلها الأحداث المرسلة من المصدر. لمزيد من المعلومات، راجع نظرة عامة على المخطط.
تعيين حقول الحدث المصدر إلى المخطط أو المخططات المحددة.
قم بتطوير محلل ASIM واحد أو أكثر لمصدرك. ستحتاج إلى تطوير محلل تصفية وموزع بدون معلمات لكل مخطط ذي صلة بالمصدر.
اختبر المحلل الخاص بك.
انشر المحللات في مساحات عمل Microsoft Sentinel.
قم بتحديث محلل توحيد ASIM ذي الصلة للإشارة إلى المحلل المخصص الجديد. لمزيد من المعلومات، راجع إدارة محللات ASIM.
قد ترغب أيضا في المساهمة بالموزعين في توزيع ASIM الأساسي. يمكن أيضا توفير المحللات المساهمة في جميع مساحات العمل كمحللات مضمنة.
ترشدك هذه المقالة خلال خطوات التطوير والاختبار والتوزيع الخاصة بالعملية.
تلميح
شاهد أيضا ندوة الغوص العميق على Microsoft Sentinel تسوية المحللات والمحتوى العادي أو راجع مجموعة الشرائح ذات الصلة. لمزيد من المعلومات، راجع الخطوات التالية.
جمع نماذج السجلات
لإنشاء محللات ASIM فعالة، تحتاج إلى مجموعة تمثيلية من السجلات، والتي في معظم الحالات تتطلب إعداد النظام المصدر وتوصيله Microsoft Sentinel. إذا لم يكن لديك الجهاز المصدر متوفرا، فإن خدمات الدفع حسب الاستخدام السحابية تتيح لك نشر العديد من الأجهزة للتطوير والاختبار.
بالإضافة إلى ذلك، يمكن أن يساعد العثور على وثائق المورد وعينات السجلات في تسريع التطوير وتقليل الأخطاء من خلال ضمان تغطية تنسيق السجل الواسع.
يجب أن تتضمن مجموعة تمثيلية من السجلات ما يلي:
- الأحداث التي لها نتائج أحداث مختلفة.
- الأحداث ذات إجراءات استجابة مختلفة.
- تنسيقات مختلفة لاسم المستخدم واسم المضيف والمعرف والحقول الأخرى التي تتطلب تسوية القيمة.
تلميح
ابدأ محلل مخصص جديد باستخدام محلل موجود لنفس المخطط. يعد استخدام محلل موجود أمرا مهما بشكل خاص لتصفية المحللات للتأكد من قبولها لجميع المعلمات المطلوبة من قبل المخطط.
تخطيط التعيين
قبل تطوير محلل، قم بتعيين المعلومات المتوفرة في الحدث أو الأحداث المصدر إلى المخطط الذي حددته:
- تعيين كافة الحقول الإلزامية ويفضل أيضا الحقول الموصى بها.
- حاول تعيين أي معلومات متوفرة من المصدر إلى الحقول التي تمت تسويتها. إذا لم يكن متوفرا كجزء من المخطط المحدد، ففكر في التعيين إلى الحقول المتوفرة في المخططات الأخرى.
- تعيين قيم الحقول في المصدر إلى القيم التي تمت تسويتها المسموح بها بواسطة ASIM. يتم تخزين القيمة الأصلية في حقل منفصل، مثل
EventOriginalResultDetails.
تطوير المحللات
تطوير كل من التصفية والموزع بدون معلمات لكل مخطط ذي صلة.
المحلل المخصص هو استعلام KQL تم تطويره في صفحة سجلات Microsoft Sentinel. يحتوي استعلام المحلل على ثلاثة أجزاء:
تصفيه>تحليل>إعداد الحقول
تصفيه
تصفية السجلات ذات الصلة
في كثير من الحالات، يتضمن جدول في Microsoft Sentinel أنواعا متعددة من الأحداث. على سبيل المثال:
- يحتوي جدول Syslog على بيانات من مصادر متعددة.
- قد تتضمن الجداول المخصصة معلومات من مصدر واحد يوفر أكثر من نوع حدث واحد ويمكن أن يتناسب مع مخططات مختلفة.
لذلك، يجب على المحلل أولا تصفية السجلات ذات الصلة بالمخطط الهدف فقط.
تتم التصفية في KQL باستخدام where عامل التشغيل . على سبيل المثال، يبلغ حدث Sysmon 1 عن إنشاء عملية، وبالتالي يتم تسويته إلى مخطط ProcessEvent . يعد حدث حدث Sysmon 1 جزءا من Event الجدول، لذلك يمكنك استخدام عامل التصفية التالي:
Event | where Source == "Microsoft-Windows-Sysmon" and EventID == 1
هام
يجب ألا يقوم المحلل بالتصفية حسب الوقت. سيطبق الاستعلام الذي يستخدم المحلل نطاقا زمنيا.
التصفية حسب نوع المصدر باستخدام قائمة المشاهدة
في بعض الحالات، لا يحتوي الحدث نفسه على معلومات تسمح بالتصفية لنوع معين من المصادر.
على سبيل المثال، يتم إرسال أحداث Infoblox DNS كرسائل Syslog، ويصعب التمييز بينها وبين رسائل Syslog المرسلة من مصادر أخرى. في مثل هذه الحالات، يعتمد المحلل على قائمة بالمصادر التي تحدد الأحداث ذات الصلة. يتم الاحتفاظ بهذه القائمة في قائمة مراقبة Sources_by_SourceType .
لاستخدام قائمة مراقبة ASimSourceType في المحللات، استخدم الدالة _ASIM_GetSourceBySourceType في قسم تصفية المحلل. على سبيل المثال، يتضمن محلل Infoblox DNS ما يلي في قسم التصفية:
| where Computer in (_ASIM_GetSourceBySourceType('InfobloxNIOS'))
لاستخدام هذا النموذج في المحلل الخاص بك:
استبدل
Computerباسم الحقل الذي يتضمن معلومات المصدر لمصدرك. يمكنك الاحتفاظ بهذا كماComputerهو الحال مع أي محللات استنادا إلى Syslog.InfobloxNIOSاستبدل الرمز المميز بقيمة من اختيارك للمحلل الخاص بك. أبلغ مستخدمي المحلل بأنه يجب عليهم تحديث قائمة المشاهدةASimSourceTypeباستخدام القيمة المحددة، بالإضافة إلى قائمة المصادر التي ترسل أحداثا من هذا النوع.
التصفية استنادا إلى معلمات المحلل
عند تطوير محللات التصفية، تأكد من أن المحلل يقبل معلمات التصفية للمخطط ذي الصلة، كما هو موثق في المقالة المرجعية لهذا المخطط. يضمن استخدام محلل موجود كنقطة بداية أن المحلل الخاص بك يتضمن توقيع الدالة الصحيح. في معظم الحالات، تكون التعليمات البرمجية للتصفية الفعلية مشابهة أيضا لتصفية المحللات لنفس المخطط.
عند التصفية، تأكد من:
- تصفية قبل التحليل باستخدام الحقول الفعلية. إذا لم تكن النتائج المصفاة دقيقة بما فيه الكفاية، كرر الاختبار بعد التحليل لضبط نتائجك. لمزيد من المعلومات، راجع تحسين التصفية.
- لا تقم بالتصفية إذا لم يتم تعريف المعلمة ولا تزال لها القيمة الافتراضية.
توضح الأمثلة التالية كيفية تنفيذ التصفية لمعلمة سلسلة، حيث تكون القيمة الافتراضية عادة '*'، وبالنسبة لمعلمة قائمة، حيث تكون القيمة الافتراضية عادة قائمة فارغة.
srcipaddr=='*' or ClientIP==srcipaddr
array_length(domain_has_any) == 0 or Name has_any (domain_has_any)
راجع المزيد من المعلومات حول العناصر التالية في وثائق Kusto:
تحسين التصفية
لضمان أداء المحلل، لاحظ توصيات التصفية التالية:
- قم دائما بالتصفية على الحقول المضمنة بدلا من الحقول التي تم تحليلها. في حين أنه من الأسهل في بعض الأحيان التصفية باستخدام الحقول الموزعة، فإنه يؤثر بشكل كبير على الأداء.
-
استخدم عوامل التشغيل التي توفر أداء محسنا. على وجه الخصوص، و
==hasو وstartswith. يؤثر استخدام عوامل التشغيل مثلcontainsأوmatches regexأيضا بشكل كبير على الأداء.
قد لا يكون من السهل دائما اتباع توصيات التصفية للأداء. على سبيل المثال، استخدام has أقل دقة من contains. في حالات أخرى، تكون مطابقة الحقل المضمن، مثل SyslogMessage، أقل دقة من مقارنة حقل مستخرج، مثل DvcAction. في مثل هذه الحالات، نوصي بأن تظل تقوم بالتصفية المسبقة باستخدام عامل تشغيل تحسين الأداء عبر حقل مضمن وتكرار عامل التصفية باستخدام شروط أكثر دقة بعد التحليل.
على سبيل المثال، راجع مقتطف محلل Infoblox DNS التالي. يتحقق المحلل أولا من أن حقل has SyslogMessage هو الكلمة client. ومع ذلك، قد يتم استخدام المصطلح في مكان مختلف في الرسالة، لذلك بعد تحليل Log_Type الحقل، يتحقق المحلل مرة أخرى من أن الكلمة client كانت بالفعل قيمة الحقل.
Syslog | where ProcessName == "named" and SyslogMessage has "client"
…
| extend Log_Type = tostring(Parser[1]),
| where Log_Type == "client"
ملاحظة
يجب ألا تتم تصفية المحللات حسب الوقت، حيث يقوم الاستعلام باستخدام المحلل بالفعل بتصفية الوقت.
تحليل
بمجرد أن يحدد الاستعلام السجلات ذات الصلة، قد يحتاج إلى تحليلها. عادة ما يكون التحليل مطلوبا إذا تم نقل حقول أحداث متعددة في حقل نصي واحد.
يتم سرد عوامل تشغيل KQL التي تقوم بتحليلها أدناه، مرتبة حسب تحسين أدائها. يوفر الأول الأداء الأكثر تحسينا، بينما يوفر الأخير الأداء الأقل تحسينا.
| عامل التشغيل/الدالة() | الوصف |
|---|---|
| دالة split() | تحليل سلسلة من القيم المحددة. |
| الدالة parse_csv() | تحليل سلسلة من القيم المنسقة كخط CSV (قيم مفصولة بفواصل). |
| عامل تشغيل parse-kv | يستخرج المعلومات المنظمة من تعبير سلسلة ويمثل المعلومات في نموذج مفتاح/قيمة. |
| عامل تشغيل التحليل | تحليل قيم متعددة من سلسلة عشوائية باستخدام نمط، والذي يمكن أن يكون نمطا مبسطا بأداء أفضل، أو تعبيرا عاديا. |
| دالة extract_all() | تحليل قيم مفردة من سلسلة عشوائية باستخدام تعبير عادي.
extract_all له أداء مشابه ل parse إذا كان الأخير يستخدم تعبيرا عاديا. |
| دالة extract() | استخراج قيمة واحدة من سلسلة عشوائية باستخدام تعبير عادي. يوفر الاستخدام extract أداء أفضل من parse أو extract_all إذا كانت هناك حاجة إلى قيمة واحدة. ومع ذلك، فإن استخدام عمليات extract تنشيط متعددة عبر نفس السلسلة المصدر أقل كفاءة من واحد parse أو extract_all يجب تجنبه. |
| دالة parse_json() | تحليل القيم في سلسلة منسقة ك JSON. إذا كانت هناك حاجة إلى قيم قليلة فقط من JSON، فإن استخدام parseأو extractأو extract_all يوفر أداء أفضل. |
| الدالة parse_xml() | تحليل القيم في سلسلة منسقة ك XML. إذا كانت هناك حاجة إلى قيم قليلة فقط من XML، فإن استخدام parseأو extractأو extract_all يوفر أداء أفضل. |
تطبيع
تعيين أسماء الحقول
أبسط شكل من أشكال التسوية هو إعادة تسمية حقل أصلي باسمه الذي تمت تسويته. استخدم عامل التشغيل project-rename لذلك. يضمن استخدام إعادة تسمية المشروع أن الحقل لا يزال مدارا كحقل فعلي وأن معالجة الحقل أكثر أداء. على سبيل المثال:
| project-rename
ActorUserId = InitiatingProcessAccountSid,
ActorUserAadId = InitiatingProcessAccountObjectId,
ActorUserUpn = InitiatingProcessAccountUpn,
تسوية تنسيق الحقول ونوعها
في كثير من الحالات، يجب تسوية القيمة الأصلية المستخرجة. على سبيل المثال، في ASIM يستخدم عنوان MAC النقطتين كفاصل، بينما قد يرسل المصدر عنوان MAC محدد الواصلة. عامل التشغيل الأساسي لتحويل القيم هو extend، جنبا إلى جنب مع مجموعة واسعة من سلسلة KQL والدالات العددية والتاريخية.
أيضا، يعد التأكد من تطابق حقول إخراج المحلل مع النوع المحدد في المخطط أمرا بالغ الأهمية للمحللات للعمل. على سبيل المثال، قد تحتاج إلى تحويل سلسلة تمثل التاريخ والوقت إلى حقل التاريخ والوقت. وظائف مثل todatetime و tohex مفيدة في هذه الحالات.
على سبيل المثال، قد يتم إرسال معرف الحدث الفريد الأصلي كأعداد صحيحة، ولكن ASIM يتطلب القيمة لتكون سلسلة، لضمان التوافق الواسع بين مصادر البيانات. لذلك، عند تعيين حقل المصدر، استخدم extend بدلا tostring من project-rename:
| extend EventOriginalUid = tostring(ReportId),
الحقول والقيم المشتقة
قد تحتاج قيمة الحقل المصدر، بمجرد استخراجها، إلى تعيينها إلى مجموعة القيم المحددة لحقل المخطط الهدف. يمكن أن تكون الدالات iffو caseو مفيدة lookup لتعيين البيانات المتوفرة للقيم المستهدفة.
على سبيل المثال، يقوم محلل Microsoft DNS بتعيين EventResult الحقل استنادا إلى معرف الحدث ورمز الاستجابة باستخدام عبارة iff ، كما يلي:
extend EventResult = iff(EventId==257 and ResponseCode==0 ,'Success','Failure')
لتعيين عدة قيم، حدد التعيين باستخدام datatable عامل التشغيل واستخدم lookup لتنفيذ التعيين. على سبيل المثال، تبلغ بعض المصادر عن رموز استجابة DNS الرقمية وبروتوكول الشبكة، بينما يفرض المخطط تمثيل تسميات النص الأكثر شيوعا لكليهما. يوضح المثال التالي كيفية اشتقاق القيم المطلوبة باستخدام datatable و lookup:
let NetworkProtocolLookup = datatable(Proto:real, NetworkProtocol:string)[
6, 'TCP',
17, 'UDP'
];
let DnsResponseCodeLookup=datatable(DnsResponseCode:int,DnsResponseCodeName:string)[
0,'NOERROR',
1,'FORMERR',
2,'SERVFAIL',
3,'NXDOMAIN',
...
];
...
| lookup DnsResponseCodeLookup on DnsResponseCode
| lookup NetworkProtocolLookup on Proto
لاحظ أن البحث مفيد وفعال أيضا عندما يحتوي التعيين على قيمتين محتملتين فقط.
عندما تكون شروط التعيين أكثر تعقيدا، اجمع iffو caseو lookup. يوضح المثال أدناه كيفية الجمع بين lookup و case. يرجع lookup المثال أعلاه قيمة فارغة في الحقل DnsResponseCodeName إذا لم يتم العثور على قيمة البحث. المثال case أدناه يزيده باستخدام نتيجة lookup العملية إذا كانت متوفرة، وتحديد شروط إضافية بخلاف ذلك.
| extend DnsResponseCodeName =
case (
DnsResponseCodeName != "", DnsResponseCodeName,
DnsResponseCode between (3841 .. 4095), 'Reserved for Private Use',
'Unassigned'
)
يوفر Microsoft Sentinel وظائف مفيدة لقيم البحث الشائعة. على سبيل المثال، DnsResponseCodeName يمكن تنفيذ البحث أعلاه باستخدام إحدى الدالات التالية:
| extend DnsResponseCodeName = _ASIM_LookupDnsResponseCode(DnsResponseCode)
| invoke _ASIM_ResolveDnsResponseCode('DnsResponseCode')
يقبل الخيار الأول كمعلمة القيمة للبحث عنها والسماح لك باختيار حقل الإخراج وبالتالي يكون مفيدا كدالة بحث عامة. الخيار الثاني أكثر توجها نحو المحللات، ويأخذ كمدخل اسم الحقل المصدر، ويحدث حقل ASIM المطلوب، في هذه الحالة DnsResponseCodeName.
للحصول على قائمة كاملة بوظائف تعليمات ASIM، راجع دالات ASIM
حقول الإثراء
بالإضافة إلى الحقول المتوفرة من المصدر، يتضمن حدث ASIM الناتج حقول الإثراء التي يجب أن ينشئها المحلل. في كثير من الحالات، يمكن للموزعين تعيين قيمة ثابتة للحاول، على سبيل المثال:
| extend
EventCount = int(1),
EventProduct = 'M365 Defender for Endpoint',
EventVendor = 'Microsoft',
EventSchemaVersion = '0.1.0',
EventSchema = 'ProcessEvent'
نوع آخر من حقول الإثراء التي يجب أن يقوم المحلل بتعيينها هو حقول النوع، والتي تعين نوع القيمة المخزنة في حقل ذي صلة. على سبيل المثال، SrcUsernameType يعين الحقل نوع القيمة المخزنة في SrcUsername الحقل. يمكنك العثور على مزيد من المعلومات حول حقول النوع في وصف الكيانات.
في معظم الحالات، يتم أيضا تعيين قيمة ثابتة للأنواد. ومع ذلك، في بعض الحالات يجب تحديد النوع استنادا إلى القيمة الفعلية، على سبيل المثال:
DomainType = iif (array_length(SplitHostname) > 1, 'FQDN', '')
يوفر Microsoft Sentinel وظائف مفيدة لمعالجة الإثراء. على سبيل المثال، استخدم الدالة التالية لتعيين الحقول SrcHostnameتلقائيا و SrcDomainSrcDomainType استنادا SrcFQDN إلى القيمة الموجودة في الحقل Computer.
| invoke _ASIM_ResolveSrcFQDN('Computer')
ستقوم هذه الدالة بتعيين الحقول كما يلي:
| حقل الكمبيوتر | حقول الإخراج |
|---|---|
| server1 | SrcHostname: server1 SrcDomain، SrcDomainType، SrcFQDN كلها فارغة |
| server1.microsoft.com | SrcHostname: server1 SrcDomain: microsoft.com SrcDomainType: FQDN SrcFQDN:server1.microsoft.com |
الدالات _ASIM_ResolveDstFQDN وتنفيذ _ASIM_ResolveDvcFQDN مهمة مماثلة لملء الحقول و Dvc ذات الصلةDst. للحصول على قائمة كاملة بوظائف تعليمات ASIM، راجع دالات ASIM
تحديد الحقول في مجموعة النتائج
يمكن للموزع اختياريا تحديد الحقول في مجموعة النتائج. يمكن أن تؤدي إزالة الحقول غير الضرورية إلى تحسين الأداء وإضافة الوضوح من خلال تجنب الخلط بين الحقول التي تمت تسويتها وحقول المصدر المتبقية.
يتم استخدام عوامل تشغيل KQL التالية لتحديد الحقول في مجموعة النتائج الخاصة بك:
| المشغل | الوصف | متى تستخدم في محلل |
|---|---|---|
| خارج المشروع | إزالة الحقول. | استخدم project-away لحقول معينة تريد إزالتها من مجموعة النتائج. نوصي بعدم إزالة الحقول الأصلية التي لم تتم تسويتها من مجموعة النتائج، ما لم تخلق ارتباكا أو كبيرة جدا وقد يكون لها آثار على الأداء. |
| المشروع | تحديد الحقول الموجودة من قبل، أو التي تم إنشاؤها كجزء من العبارة، وإزالة كافة الحقول الأخرى. | غير مستحسن للاستخدام في المحلل، حيث يجب ألا يزيل المحلل أي حقول أخرى لم تتم تسويتها. إذا كنت بحاجة إلى إزالة حقول معينة، مثل القيم المؤقتة المستخدمة أثناء التحليل، فاستخدم project-away لإزالتها من النتائج. |
على سبيل المثال، عند تحليل جدول سجل مخصص، استخدم ما يلي لإزالة الحقول الأصلية المتبقية التي لا تزال تحتوي على واصف نوع:
| project-away
*_d, *_s, *_b, *_g
معالجة متغيرات التحليل
هام
تمثل المتغيرات المختلفة أنواع أحداث مختلفة ، يتم تعيينها عادة إلى مخططات مختلفة، وتطوير محللات منفصلة
في كثير من الحالات، تتضمن الأحداث في تدفق الأحداث متغيرات تتطلب منطق تحليل مختلف. لتحليل متغيرات مختلفة في محلل واحد، استخدم عبارات شرطية مثل iff و case، أو استخدم بنية اتحاد.
لاستخدام union لمعالجة متغيرات متعددة، قم بإنشاء دالة منفصلة لكل متغير واستخدم عبارة الاتحاد لدمج النتائج:
let AzureFirewallNetworkRuleLogs = AzureDiagnostics
| where Category == "AzureFirewallNetworkRule"
| where isnotempty(msg_s);
let parseLogs = AzureFirewallNetworkRuleLogs
| where msg_s has_any("TCP", "UDP")
| parse-where
msg_s with networkProtocol:string
" request from " srcIpAddr:string
":" srcPortNumber:int
…
| project-away msg_s;
let parseLogsWithUrls = AzureFirewallNetworkRuleLogs
| where msg_s has_all ("Url:","ThreatIntel:")
| parse-where
msg_s with networkProtocol:string
" request from " srcIpAddr:string
" to " dstIpAddr:string
...
union parseLogs, parseLogsWithUrls…
لتجنب الأحداث المكررة والمعالجة المفرطة، تأكد من أن كل دالة تبدأ بالتصفية، باستخدام الحقول الأصلية، فقط الأحداث التي تهدف إلى تحليلها. أيضا، إذا لزم الأمر، استخدم المشروع بعيدا في كل فرع، قبل الاتحاد.
توزيع المحللات
انشر المحللات يدويا عن طريق نسخها إلى صفحة Azure Monitor Log وحفظ الاستعلام كدالة. هذا الأسلوب مفيد للاختبار. لمزيد من المعلومات، راجع إنشاء دالة.
لنشر عدد كبير من المحللات، نوصي باستخدام قوالب ARM للموزع، كما يلي:
أنشئ ملف YAML استنادا إلى القالب ذي الصلة لكل مخطط وقم بتضمين الاستعلام فيه. ابدأ بقالب YAML ذي الصلة بنوع المخطط والموزع أو التصفية أو بدون معلمات.
استخدم محول قالب ASIM YAML إلى ARM لتحويل ملف YAML إلى قالب ARM.
في حالة نشر تحديث، احذف الإصدارات القديمة من الوظائف باستخدام المدخل أو الدالة حذف أداة PowerShell.
انشر القالب باستخدام مدخل Azure أو PowerShell.
يمكنك أيضا دمج قوالب متعددة في عملية توزيع واحدة باستخدام قوالب مرتبطة
تلميح
يمكن أن تجمع قوالب ARM بين موارد مختلفة، بحيث يمكن توزيع المحللات جنبا إلى جنب مع الموصلات أو القواعد التحليلية أو قوائم المشاهدة، لتسمية بعض الخيارات المفيدة. على سبيل المثال، يمكن للموزع الخاص بك الرجوع إلى قائمة مشاهدة تم نشرها جنبا إلى جنب معها.
محللات الاختبار
يصف هذا القسم أن أدوات الاختبار التي يوفرها ASIM تمكنك من اختبار المحللات الخاصة بك. ومع ذلك، فإن المحللات هي تعليمات برمجية، وأحيانا معقدة، ويوصى بممارسات ضمان الجودة القياسية مثل مراجعات التعليمات البرمجية بالإضافة إلى الاختبار التلقائي.
تثبيت أدوات اختبار ASIM
لاختبار ASIM، انشر أداة اختبار ASIM إلى مساحة عمل Microsoft Sentinel حيث:
- يتم نشر المحلل الخاص بك.
- يتوفر الجدول المصدر الذي يستخدمه المحلل.
- يتم ملء الجدول المصدر الذي يستخدمه المحلل بمجموعة متنوعة من الأحداث ذات الصلة.
التحقق من صحة مخطط الإخراج
للتأكد من أن المحلل ينتج مخططا صالحا، استخدم اختبار مخطط ASIM عن طريق تشغيل الاستعلام التالي في صفحة سجلات Microsoft Sentinel:
<parser name> | getschema | invoke ASimSchemaTester('<schema>')
التعامل مع النتائج كما يلي:
| الخطأ | العمل |
|---|---|
| الحقل الإلزامي المفقود [<الحقل>] | أضف الحقل إلى المحلل الخاص بك. في كثير من الحالات، ستكون هذه قيمة مشتقة أو قيمة ثابتة، وليست حقلا متوفرا بالفعل من المصدر. |
| الحقل المفقود [<Field>] إلزامي عند وجود عمود إلزامي [<Field>] | أضف الحقل إلى المحلل الخاص بك. يشير هذا الحقل في كثير من الحالات إلى أنواع العمود الموجود الذي يشير إليه. |
| الحقل المفقود [<الحقل>] إلزامي عند وجود العمود [<الحقل>] | أضف الحقل إلى المحلل الخاص بك. يشير هذا الحقل في كثير من الحالات إلى أنواع العمود الموجود الذي يشير إليه. |
| الاسم المستعار الإلزامي المفقود [<Field>] المستعار للعمود الموجود [<Field>] | إضافة الاسم المستعار إلى المحلل الخاص بك |
| الاسم المستعار الموصى به مفقود [<Field>] الذي يسم العمود الموجود [<Field>] | إضافة الاسم المستعار إلى المحلل الخاص بك |
| الاسم المستعار الاختياري المفقود [<Field>] الذي يسم العمود الموجود [<Field>] | إضافة الاسم المستعار إلى المحلل الخاص بك |
| الاسم المستعار الإلزامي المفقود [<Field>] الاسم المستعار للعمود المفقود [<Field>] | يصاحب هذا الخطأ خطأ مشابه للحقل المستعار. قم بتصحيح خطأ الحقل المستعار وأضف هذا الاسم المستعار إلى المحلل الخاص بك. |
| عدم تطابق النوع للحقل [<حقل>]. وهو حاليا [<Type>] ويجب أن يكون [<Type>] | تأكد من صحة نوع الحقل الذي تمت تسويته، عادة باستخدام دالة تحويل مثل tostring. |
| معلومات | العمل |
|---|---|
| الحقل الموصى به مفقود [<الحقل>] | ضع في اعتبارك إضافة هذا الحقل إلى المحلل الخاص بك. |
| معلومات | العمل |
|---|---|
| الاسم المستعار الموصى به مفقود [<Field>] الذي يسمى العمود غير الموجود [<Field>] | إذا أضفت الحقل المستعار إلى المحلل، فتأكد من إضافة هذا الاسم المستعار أيضا. |
| الاسم المستعار الاختياري المفقود [<Field>] الذي يسمى العمود غير الموجود [<Field>] | إذا أضفت الحقل المستعار إلى المحلل، فتأكد من إضافة هذا الاسم المستعار أيضا. |
| حقل اختياري مفقود [<حقل>] | في حين أن الحقول الاختيارية غالبا ما تكون مفقودة، فمن المفيد مراجعة القائمة لتحديد ما إذا كان يمكن تعيين أي من الحقول الاختيارية من المصدر. |
| حقل غير مكرر إضافي [<حقل>] | في حين أن الحقول غير المتطابقة صالحة، فمن المفيد مراجعة القائمة لتحديد ما إذا كان يمكن تعيين أي من القيم غير المتطابقة إلى حقل اختياري. |
ملاحظة
ستمنع الأخطاء المحتوى الذي يستخدم المحلل من العمل بشكل صحيح. لن تمنع التحذيرات المحتوى من العمل، ولكنها قد تقلل من جودة النتائج.
التحقق من صحة قيم الإخراج
للتأكد من أن المحلل ينتج قيما صالحة، استخدم اختبار بيانات ASIM عن طريق تشغيل الاستعلام التالي في صفحة Microsoft Sentinel Logs:
<parser name> | limit <X> | invoke ASimDataTester ('<schema>')
تحديد مخطط اختياري. إذا لم يتم تحديد مخطط، EventSchema يتم استخدام الحقل لتحديد المخطط الذي يجب أن يلتزم به الحدث. إذا لم يتضمن الحدث حقلا EventSchema ، فسيتم التحقق من الحقول الشائعة فقط. إذا تم تحديد مخطط كمعلمة، فسيتم استخدام هذا المخطط لاختبار جميع السجلات. هذا مفيد للموزعات القديمة التي لم تقم بتعيين EventSchema الحقل.
ملاحظة
حتى عندما لا يتم تحديد مخطط، تكون هناك حاجة إلى أقواس فارغة بعد اسم الدالة.
هذا الاختبار كثيف الموارد وقد لا يعمل على مجموعة البيانات بأكملها. قم بتعيين X إلى أكبر عدد لن مهلة الاستعلام له، أو قم بتعيين النطاق الزمني للاستعلام باستخدام منتقي النطاق الزمني.
التعامل مع النتائج كما يلي:
| رساله | العمل |
|---|---|
| (0) خطأ: عدم تطابق النوع للعمود [<الحقل>]. وهو حاليا [<Type>] ويجب أن يكون [<Type>] | تأكد من صحة نوع الحقل الذي تمت تسويته، عادة باستخدام دالة تحويل مثل tostring. |
| (0) خطأ: قيمة (قيم) غير صحيحة (حتى 10 مدرجة) للحقل [<الحقل>] من النوع [<النوع> المنطقي] | تأكد من أن المحلل يعين حقل المصدر الصحيح إلى حقل الإخراج. إذا تم تعيينه بشكل صحيح، فقم بتحديث المحلل لتحويل قيمة المصدر إلى النوع أو القيمة أو التنسيق الصحيح. راجع قائمة الأنواع المنطقية للحصول على مزيد من المعلومات حول القيم والتنسيقات الصحيحة لكل نوع منطقي. لاحظ أن أداة الاختبار تسرد عينة من 10 قيم غير صالحة فقط. |
| (1) تحذير: قيمة فارغة في الحقل الإلزامي [<الحقل>] | يجب ملء الحقول الإلزامية، وليس تعريفها فقط. تحقق مما إذا كان يمكن ملء الحقل من مصادر أخرى للسجلات التي يكون المصدر الحالي فارغا لها. |
| (2) معلومات: قيمة فارغة في الحقل الموصى به [<الحقل>] | يجب عادة ملء الحقول الموصى بها. تحقق مما إذا كان يمكن ملء الحقل من مصادر أخرى للسجلات التي يكون المصدر الحالي فارغا لها. |
| (2) معلومات: قيمة فارغة في حقل اختياري [<حقل>] | تحقق مما إذا كان الحقل المستعار إلزاميا أو مستحسنا، وإذا كان الأمر كذلك، ما إذا كان يمكن ملؤه من مصادر أخرى. |
تقوم العديد من الرسائل أيضا بالإبلاغ عن عدد السجلات التي أنشأت الرسالة ونسبتها المئوية للعينة الإجمالية. وهذه النسبة المئوية مؤشر جيد على أهمية هذه المسألة. على سبيل المثال، لحقل موصى به:
- قد تشير القيم الفارغة بنسبة 90٪ إلى مشكلة تحليل عامة.
- قد تشير القيم الفارغة بنسبة 25٪ إلى متغير حدث لم يتم تحليله بشكل صحيح.
- قد تكون حفنة من القيم الفارغة مشكلة ضئيلة.
ملاحظة
ستمنع الأخطاء المحتوى الذي يستخدم المحلل من العمل بشكل صحيح. لن تمنع التحذيرات المحتوى من العمل، ولكنها قد تقلل من جودة النتائج.
المساهمة في المحللات
قد ترغب في المساهمة بالموزع في توزيع ASIM الأساسي. إذا تم قبولها، ستكون المحللات متاحة لكل عميل كموزعين مضمنين في ASIM.
للمساهمة في المحللات الخاصة بك:
- تطوير محلل تصفية وموزع بدون معلمات.
- إنشاء ملف YAML للموزع كما هو موضح في Deploying Parsers أعلاه.
- تأكد من أن المحللات الخاصة بك تجتاز جميع الاختبارات دون أخطاء. إذا تركت أي تحذيرات، فوثقها في ملف YAML للموزع.
- إنشاء طلب سحب مقابل مستودع GitHub Microsoft Sentinel، بما في ذلك:
- محللات ملفات YAML في مجلدات محلل ASIM (
/Parsers/ASim<schema>/Parsers) - عينة بيانات تمثيلية وفقا لإرشادات تقديم العينات.
- نتائج الاختبار وفقا لإرشادات إرسال نتائج الاختبار.
- محللات ملفات YAML في مجلدات محلل ASIM (
توثيق التحذيرات المقبولة
إذا اعتبرت التحذيرات المدرجة بواسطة أدوات اختبار ASIM صالحة للموزع، فوثق التحذيرات المقبولة في ملف YAML للموزع باستخدام قسم الاستثناءات كما هو موضح في المثال أدناه.
Exceptions:
- Field: DnsQuery
Warning: Invalid value
Exception: May have values such as "1164-ms-7.1440-9fdc2aab.3b2bd806-978e-11ec-8bb3-aad815b5cd42" which are not valid domains names. Those are related to TKEY RR requests.
- Field: DnsQuery
Warning: Empty value in mandatory field
Exception: May be empty for requests for root servers and for requests for RR type DNSKEY
يجب أن يكون التحذير المحدد في ملف YAML نموذجا قصيرا لرسالة التحذير التي تحدد بشكل فريد. يتم استخدام القيمة لمطابقة رسائل التحذير عند إجراء الاختبارات التلقائية وتجاهلها.
إرشادات إرسال العينات
بيانات العينة مطلوبة عند استكشاف مشكلات المحلل وإصلاحها وضمان توافق التحديثات المستقبلية للموزع مع العينات القديمة. يجب أن تتضمن العينات التي ترسلها أي متغير حدث يدعمه المحلل. تأكد من أن نماذج الأحداث تتضمن جميع أنواع الأحداث المحتملة وتنسيقات الأحداث والتباينات مثل الأحداث التي تمثل نشاطا ناجحا وفشلا. تأكد أيضا من تمثيل الاختلافات في تنسيقات القيم. على سبيل المثال، إذا كان يمكن تمثيل اسم مضيف ك FQDN أو اسم مضيف بسيط، يجب أن تتضمن أحداث العينة كلا التنسيقين.
لإرسال عينات الحدث، استخدم الخطوات التالية:
- في
Logsالشاشة، قم بتشغيل استعلام يستخرج من الجدول المصدر فقط الأحداث المحددة بواسطة المحلل. على سبيل المثال، بالنسبة إلى محلل Infoblox DNS، استخدم الاستعلام التالي:
Syslog
| where ProcessName == "named"
قم بتصدير النتائج باستخدام الخيار تصدير إلى CSV إلى ملف يسمى
<EventVendor>_<EventProduct>_<EventSchema>_IngestedLogs.csv، حيثEventProduct،EventProduct، وهيEventSchemaالقيم المعينة من قبل المحلل لتلك الحقول.في
Logsالشاشة، قم بتشغيل استعلام يقوم بإخراج المخطط أو جدول إدخال المحلل. على سبيل المثال، بالنسبة لنفس محلل Infoblox DNS، الاستعلام هو:
Syslog
| getschema
تصدير النتائج باستخدام الخيار تصدير إلى CSV إلى ملف يسمى
<TableName>_schema.csv، حيثTableNameهو اسم الجدول المصدر الذي يستخدمه المحلل.قم بتضمين كلا الملفين في PR الخاص بك في المجلد
/Sample Data/ASIM. إذا كان الملف موجودا بالفعل، أضف مقبض GitHub إلى الاسم، على سبيل المثال:<EventVendor>_<EventProduct>_<EventSchema>_SchemaTest_<GitHubHandle>.csv
إرشادات إرسال نتائج الاختبار
نتائج الاختبار مهمة للتحقق من صحة المحلل وفهم أي استثناء تم الإبلاغ عنه.
لإرسال نتائج الاختبار، استخدم الخطوات التالية:
قم بتشغيل اختبارات المحلل والموضحة في قسم الاختبارات .
وقم بتصدير نتائج الاختبارات باستخدام خيار التصدير إلى CSV إلى الملفات المسماة
<EventVendor>_<EventProduct>_<EventSchema>_SchemaTest.csvوعلى<EventVendor>_<EventProduct>_<EventSchema>_DataTest.csvالتوالي.قم بتضمين كلا الملفين في PR الخاص بك في المجلد
/Parsers/ASim<schema>/Tests.
الخطوات التالية
تتناول هذه المقالة تطوير محللات ASIM.
تعرف على المزيد حول محللات ASIM:
تعرف على المزيد حول ASIM بشكل عام: