تطوير محللات Advanced Security Information Model (ASIM) (معاينة عامة)

مستخدمو Advanced Security Information Model (ASIM) يستخدمونمحللات توحيد بدلاً من أسماء الجداول في استعلاماتهم، لعرض البيانات بتنسيق تمت تسويته وتضمين جميع البيانات ذات الصلة بالمخطط في الاستعلام. بدوره، يستخدم توحيد المحللات محللات خاصة بالمصدر لمعالجة التفاصيل المحددة لكل مصدر.

يوفر Microsoft Sentinel محللات مضمَّنة خاصة بالمصادر للعديد من مصادر البيانات. قد تحتاج إلى تعديل هذه المحللات الخاصة بالمصدر أو تطويرها في الحالات التالية:

  • عندما يوفر جهازك أحداثًا تناسب مخطط ASIM، ولكن لا يتوفر محلل خاص بالمصدر لجهازك والمخطط ذي الصلة في Microsoft Sentinel.

  • عندما تتوفر محللات مصدر ASIM الخاصة بجهازك، ولكن جهازك يرسل الأحداث بطريقة أو تنسيق مختلف عن المتوقع من قبل محللات ASIM. على سبيل المثال:

    • قد يتم تكوين جهازك المصدر لإرسال الأحداث بطريقة غير قياسية.

    • قد يكون لجهازك إصدار مختلف عن الإصدار الذي يدعمه محلل ASIM.

    • الأحداث قد يتم تجميعها وتعديلها وإعادة توجيهها بواسطة نظام وسيط.

لفهم كيفية احتواء المحلات ضمن بنية نموذج معلومات الأمان المتقدم، راجع مخطط بنية نموذج معلومات الأمان المتقدم.

هام

ASIM في وضع PREVIEW حاليًا. تتضمن الشروط التكميلية لمعاينة Azure شروطا قانونية إضافية تنطبق على ميزات Azure الموجودة في الإصدار التجريبي أو المعاينة أو التي لم يتم إصدارها بعد في التوفر العام.

عملية تطوير محلل ASIM المخصص

سير العمل التالي يصف الخطوات عالية المستوى في تطوير ASIM مخصص، محلل خاص بالمصدر:

  1. جمع نماذج السجلات.

  2. تحديد المخططات التي تمثلها الأحداث المرسلة من المصدر. لمزيد من المعلومات، راجع نظرة عامة على المخطط.

  3. تعيين حقول الحدث المصدر إلى المخطط أو المخططات المحددة.

  4. تطوير محلل ASIM واحد أو أكثر لمصدرك. ستحتاج إلى تطوير محلل تصفية ومحلل بدون معلمات لكل مخطط ذي صلة بالمصدر.

  5. اختبر المحلل الخاص بك.

  6. انشر المحللات في مساحات عمل Microsoft Sentinel الخاصة بك.

  7. حدث محلل توحيد ASIM ذي الصلة للإشارة إلى المحلل المخصص الجديد. لمزيد من المعلومات، راجع إدارة محللات ASIM.

  8. كما قد ترغب في المساهمة في توزيع المحللات الخاصة بك إلى توزيع ASIM الأساسي. كما يمكن توفير المحللات المساهمة في جميع مساحات العمل كمحللات مضمنة.

هذه المقالة ترشدك خلال خطوات التطوير والاختبار والتوزيع الخاصة بالعملية.

جمع نماذج السجلات

لإنشاء محللات 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)

تحسين التصفية

لضمان أداء المحلل، لاحظ توصيات التصفية التالية:

  • قم دائمًا بالتصفية على الحقول المضمنة بدلاً من الحقول التي تم تحليلها. في حين أنه من الأسهل في بعض الأحيان التصفية باستخدام الحقول المحللة، فإنه يؤثر بشكل كبير على الأداء.
  • استخدم عوامل التشغيل التي توفر أداءً محسنًا. على وجه الخصوص، == وhas وstartswith. يؤثر استخدام عوامل التشغيل مثل contains أو matches regex أيضًا على الأداء بشكل كبير.

قد لا يكون من السهل دائمًا اتباع توصيات التصفية للأداء. على سبيل المثال، استخدام has أقل دقة من contains. في حالات أخرى، تكون مطابقة الحقل المضمن، مثل SyslogMessage، أقل دقة من مقارنة حقل مستخرج، مثل DvcAction. في مثل هذه الحالات، نوصي بألا تزال تقوم بالتصفية المسبقة باستخدام عامل تشغيل تحسين الأداء عبر حقل مضمن وتكرار عامل التصفية باستخدام شروط أكثر دقة بعد التحليل.

على سبيل المثال، راجع القصاصة البرمجية لمحلل Infoblox DNS التالي. المحلل يتحقق أولاً من أن حقل SyslogMessage has هو الكلمة 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 يستخرج المعلومات المنظمة من تعبير سلسلة ويمثل المعلومات في نموذج مفتاح/قيمة.
parse قم بتحليل قيم متعددة من سلسلة عشوائية باستخدام نمط، والذي يمكن أن يكون نمطًا مبسطًا بأداء أفضل، أو تعبيرًا عاديًا.
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 مهمة مماثلة لملء الحقول وDst المرتبطةDvc. للحصول على قائمة كاملة بوظائف تعليمات ASIM، راجع دوال ASIM

تحديد الحقول في مجموعة النتائج

يمكن للموزع اختياريًا تحديد الحقول في مجموعة النتائج. إزالة الحقول غير الضرورية يمكن أن تؤدي إلى تحسين الأداء وإضافة الوضوح من خلال تجنب الخلط بين الحقول التي تمت تسويتها وحقول المصدر المتبقية.

يتم استخدام عوامل تشغيل KQL التالية لتحديد الحقول في مجموعة النتائج:

عامل ‏‏الوصف متى تستخدمه في محلل
خارج المشروع إزالة الحقول. استخدم project-away لحقول معينة تريد إزالتها من مجموعة النتائج. نوصي بعدم إزالة الحقول الأصلية التي لم تتم تسويتها من مجموعة النتائج، ما لم تخلق ارتباكًا أو أنها كبيرة جدًا وقد يكون لها آثار على الأداء.
project يحدد الحقول الموجودة من قبل، أو التي تم إنشاؤها كجزء من العبارة، ويزيل كافة الحقول الأخرى. غير مستحسن للاستخدام في المحلل، حيث يجب ألا يزيل المحلل أي حقول أخرى لم تتم تسويتها.

إذا كنت بحاجة إلى إزالة حقول معينة، مثل القيم المؤقتة المستخدمة أثناء التحليل، فاستخدم 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 المحلل، كما يلي:

  1. أنشئ ملف YAML استنادًا إلى القالب ذي الصلة لكل مخطط وتضمين الاستعلام فيه. ابدأ بـ قالب YAML ذي الصلة بنوع المخطط والموزع، أو التصفية أو بدون معلمة.

  2. استخدم محول قالب ASIM Yaml إلى ARM لتحويل ملف YAML إلى قالب ARM.

  3. في حالة نشر تحديث، احذف الإصدارات القديمة من الدوال باستخدام المدخل أو أداة حذف الدالة PowerShell.

  4. انشر قالبك باستخدام مدخل 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>] الذي يمنح اسمًا مستعارًا للعمود الموجود [<Field>] إضافة الاسم المستعار إلى المحلل الخاص بك
الاسم المستعار الإلزامي المفقود [<Field>] الذي يمنح اسمًا مستعارًا للعمود المفقود [<Field>] هذا الخطأ يصاحب خطأ مشابهًا للحقل المستعار. قم بتصحيح خطأ الحقل المستعار، وأضف هذا الاسم المستعار إلى المحلل.
عدم تطابق النوع للحقل [<Field>]. وهو حاليًا [<Type>] ويجب أن يكون [<Type>] تأكد من صحة نوع الحقل الذي تمت تسويته، عادة باستخدام دالة تحويل مثل tostring.
المعلومات الإجراء
الحقل الموصى به مفقود [<Field>] ضع في اعتبارك إضافة هذا الحقل إلى المحلل.
المعلومات الإجراء
الاسم المستعار المستحسن المفقود [<Field>] الذي يمنح اسمًا مستعارًا للعمود غير موجود [<Field>] إذا أضفت الحقل المستعار إلى المحلل، فتأكد من إضافة هذا الاسم المستعار أيضًا.
الاسم المستعار الاختياري المفقود [<Field>] الذي يمنح اسمًا مستعارًا للعمود غير موجود [<Field>] إذا أضفت الحقل المستعار إلى المحلل، فتأكد من إضافة هذا الاسم المستعار أيضًا.
حقل اختياري مفقود [<Field>] في حين أن الحقول الاختيارية غالبًا ما تكون مفقودة، فمن المفيد مراجعة القائمة لتحديد ما إذا كان يمكن تعيين أي من الحقول الاختيارية من المصدر.
حقل غير منسق إضافي [<Field>] في حين أن الحقول غير المتطابقة صالحة، يجدر مراجعة القائمة لتحديد ما إذا كان يمكن تعيين أي من القيم غير المتطابقة إلى حقل اختياري.

إشعار

الأخطاء ستمنع المحتوى الذي يستخدم المحلل من العمل بشكل صحيح. التحذيرات لن تمنع المحتوى من العمل، ولكن قد تقلل من جودة النتائج.

التحقق من صحة مخطط القيم

للتأكد من أن المحلل ينتج قيمًا صالحة، استخدم اختبار بيانات ASIM عن طريق تشغيل الاستعلام التالي في صفحة سجلات Microsoft Sentinel:

<parser name> | limit <X> | invoke ASimDataTester ('<schema>')

تحديد أحد المخططات اختياري. إذا لم يتم تحديد مخطط، يتم استخدام الحقل EventSchema لتعريف المخطط الذي يجب أن يلتزم به الحدث. لا يتضمن الحدث حقل EventSchema، وسيتم التحقق من الحقول الشائعة فقط. إذا تم تحديد مخطط كمعلمة، فسيتم استخدام هذا المخطط لاختبار كافة السجلات. هذا مفيد للمحللات الأقدم التي لا تقوم بتعيين الحقل EventSchema.

إشعار

حتى عندما لا يتم تحديد مخطط، تكون هناك حاجة إلى أقواس فارغة بعد اسم الدالة.

هذا الاختبار كثيف الموارد وقد لا يعمل على مجموعة البيانات بأكملها. قم بتعيين X إلى أكبر رقم لن تنتهي مهلة الاستعلام له، أو قم بتعيين النطاق الزمني للاستعلام باستخدام منتقي النطاق الزمني.

تعامل مع النتائج كما يلي:

رسالة الإجراء
(0) خطأ: عدم تطابق النوع للعمود [<Field>]. وهو حاليًا [<Type>] ويجب أن يكون [<Type>] تأكد من صحة نوع الحقل الذي تمت تسويته، عادة باستخدام دالة تحويل مثل tostring.
(0) خطأ: قيمة (قيم) غير صحيحة (حتى 10 مدرجة) للحقل [<Field>] من النوع [<Logical Type>] تأكد من تعيين المحلل لحقل المصدر الصحيح لحقل الإخراج. إذا تم تعيينه بشكل صحيح، فقم بتحديث المحلل لتحويل قيمة المصدر إلى النوع أو القيمة أو التنسيق الصحيح. راجع قائمة الأنواع المنطقية للحصول على مزيد من المعلومات حول القيم والتنسيقات الصحيحة لكل نوع منطقي.

لاحظ أن أداة الاختبار تسرد عينة من 10 قيم غير صالحة فقط.
(1) تحذير: قيمة فارغة في الحقل الإلزامي [<Field>] يجب ملء الحقول الإلزامية، وليس تعريفها فقط. تحقق مما إذا كان يمكن ملء الحقل من مصادر أخرى للسجلات التي يكون المصدر الحالي فارغًا لها.
(2) معلومات: قيمة فارغة في الحقل الموصى به [<Field>] عادة ما يجب ملء الحقول الموصى بها. تحقق مما إذا كان يمكن ملء الحقل من مصادر أخرى للسجلات التي يكون المصدر الحالي فارغًا لها.
(2) معلومات: قيمة فارغة في حقل اختياري [<Field>] تحقق مما إذا كان الحقل المستعار إلزاميًا أو مستحسنًا، وإذا كان الأمر كذلك، ما إذا كان يمكن ملؤه من مصادر أخرى.

كما تقوم العديد من الرسائل بالإبلاغ عن عدد السجلات التي أنشأت الرسالة ونسبتها المئوية للعينة الإجمالية. وهذه النسبة المئوية مؤشر جيد على أهمية المسألة. على سبيل المثال، بالنسبة لحقل مستحسن:

  • القيم الفارغة قد تشير بنسبة 90٪ إلى مشكلة تحليل عامة.
  • القيم الفارغة قد تشير بنسبة 25٪ إلى متغير حدث لم يتم تحليله بشكل صحيح.
  • حفنة من القيم الفارغة قد تسبب مشكلة لا تذكر.

إشعار

الأخطاء ستمنع المحتوى الذي يستخدم المحلل من العمل بشكل صحيح. التحذيرات لن تمنع المحتوى من العمل، ولكن قد تقلل من جودة النتائج.

المساهمة في المحللات

قد ترغب في المساهمة بالمحلل في توزيع ASIM الأساسي. إذا تم قبولها، ستكون المحللات متاحة لكل عميل كمحللات مضمنة في ASIM.

للمساهمة في محللاتك:

  • تطوير محلل تصفية وتحليل بدون معلمة.
  • إنشاء ملف YAML للموزع كما هو موضح في Deploying Parsers أعلاه.
  • تأكد من أن المحللات الخاصة بك تجتاز جميع الاختبارات دون أخطاء. إذا تركت أي تحذيرات، فوثقها في ملف YAML المحلل.
  • إنشاء طلب سحب مقابل مستودع Microsoft Sentinel GitHub، بما في ذلك:
    • محلل ملفات YAML في مجلدات محلل ASIM (/Parsers/ASim<schema>/Parsers)
    • بيانات نموذجية وفقا لإرشادات تقديم العينات.
    • نتائج الاختبار وفقا لإرشادات إرسال نتائج الاختبار.

توثيق التحذيرات المقبولة

إذا كانت التحذيرات المدرجة بواسطة أدوات اختبار 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_<GitHubHanlde>.csv

إرشادات إرسال نتائج الاختبار

نتائج الاختبار مهمة للتحقق من صحة المحلل وفهم أي استثناء تم الإبلاغ عنه.

لإرسال نتائج الاختبار، استخدم الخطوات التالية:

  • قم بتشغيل اختبارات المحلل والموضحة في قسم الاختبارات .

  • وتصدير نتائج الاختبارات باستخدام الخيار تصدير إلى CSV إلى الملفات المسماة <EventVendor>_<EventProduct>_<EventSchema>_SchemaTest.csv وعلى <EventVendor>_<EventProduct>_<EventSchema>_DataTest.csv التوالي.

  • قم بتضمين كلا الملفين في PR الخاص بك في المجلد /Parsers/ASim<schema>/Tests.

الخطوات التالية

هذه المقالة تتناول تطوير محللات ASIM.

تعرف على المزيد حول محللات ASIM:

تعرف على المزيد حول ASIM بشكل عام: