كل ما تريد معرفته عن قواعد سيجما. الجزء 2

هذه المقالة هي استمرار لسلسلة المواد الخاصة بنا المخصصة لوصف تنسيق قواعد سيجما. دعونا نتذكر بإيجاز هيكل الدورة. في المنشور السابق ، قدمنا ​​مثالاً على قاعدة بسيطة وألقينا نظرة تفصيلية على القسم الذي يصف مصادر الأحداث. الآن لدينا فهم عام لهيكل القواعد ، ونحن قادرون أيضًا على تحديد مكان وما هي المعلومات التي يجب توفيرها للقاعدة لاكتشاف النشاط المشبوه.



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



في المنشور التالي ، سوف نتناول بالتفصيل وصف المعلومات الوصفية (السمات التي تكون إعلامية أو ذات طبيعة بنية تحتية ، مثل الوصف أو المعرف) ومجموعات القواعد. تابع منشوراتنا!



وصف منطق الاكتشاف (سمة الكشف)



يتم تعيين شروط تشغيل القواعد في سمة الكشف . تصف حقولها الفرعية الجزء التقني الرئيسي من القاعدة. من المهم ملاحظة أن القاعدة يمكن أن تحتوي على جزء وصفي واحد فقط والعديد من مصادر السجلات والاكتشاف. نظرًا لأن قسم الاكتشاف يصف معيار التشغيل استنادًا إلى البيانات من قسم المصادر ، فإن هذين القسمين لهما 1 إلى 1.



بشكل عام ، يتكون محتوى حقل الاكتشاف من جزأين منطقيين:



  • وصف الافتراضات حول حقول الحدث (معرفات البحث) ،
  • العلاقة المنطقية بين هذه الأوصاف ( الإطار الزمني والتعبير في حقل الشرط ).






يتم وصف الافتراضات حول محتوى حقول الحدث من خلال تحديد معرفات البحث. يمكن أن يكون هذا المعرف واحدًا (كما هو الحال هنا ) أو يمكن أن يكون هناك العديد منهم (كما هو الحال هنا ).



يمكن أن يتكون الجزء الثاني من ثلاثة أنواع:



  • الحالة المعتادة ،
  • شرط مع تعبير مجمع (كما في المثال أعلاه) ،
  • شرط مع الكلمة بالقرب .


تم وصف بناء جملة عناصر كل جزء في القسم المقابل من هذه المقالة.



معرّفات البحث



معرف البحث هو زوج من المفاتيح والقيمة ، حيث يكون المفتاح هو اسم معرف البحث ، والقيمة هي قائمة أو قاموس (ويعرف أيضًا باسم مصفوفة ترابطية). عن طريق القياس مع لغات البرمجة - قائمة أو خريطة. يتم تحديد تنسيق تحديد القوائم والقواميس بواسطة معيار YAML ، والذي يمكن العثور عليه هنا . تجدر الإشارة إلى أن تنسيق قاعدة سيجما لا يصلح أسماء معرّفات البحث ، ولكن في أغلب الأحيان يمكنك العثور على اختلافات مع اختيار الكلمات.



هناك متطلبات عامة تنطبق على كل من عناصر القائمة وعناصر القاموس:



  • يتم التعامل مع جميع القيم كسلاسل غير حساسة لحالة الأحرف ، أي أنه لا يوجد فرق بين الأحرف الكبيرة والصغيرة.
  • (wildcards) ‘*’ ‘?’. ‘*’ — ( ), ‘?’ — ( ).
  • ‘\’, ‘\*’. , : ‘\\*’. .
  • , .
  • ‘ .


قائمة القيم معرف البحث

تحتوي قوائم القيم على السلاسل التي يتم البحث عنها خلال رسالة الحدث. يتم دمج عناصر القائمة مع OR المنطقي.



detection: 
  keywords: 
	- EVILSERVICE 
	- svchost.exe -n evil 
  condition: keywords 
 






أمثلة على القواعد التي تحتوي على معرّفات البحث كقائمة من القيم:



معرّف البحث في القاموس



تتكون القواميس من مجموعة من أزواج القيمة والمفتاح ، حيث يكون المفتاح هو اسم الحقل من الحدث ، ويمكن أن تكون القيمة سلسلة أو عددًا صحيحًا أو قائمة بأحد هذه الأنواع (يتم دمج قوائم السلاسل أو الأرقام مع OR المنطقي). يتم الجمع بين مجموعات القواميس بواسطة AND المنطقي



المخطط العام:







لنأخذ في الاعتبار عدة أمثلة.



مثال 1. قواعد الكشف عن تنظيف سجل الأحداث



/ windows / builtin / win_susp_security_eventlog_cleared.yml


سيتم تشغيل هذه القاعدة إذا استوفى الحدث الشرط:



EventID = 517  OR EventID = 1102



في القاعدة ، يبدو كما يلي:



detection: 
  selection: 
      EventID: 
        - 517 
        - 1102 
  condition: selection 


هنا التحديد هو اسم معرف البحث الوحيد ، وبقية الحقول الفرعية هي قيمته ، وهذه القيمة من نوع "القاموس". في هذا القاموس ، EventID هو المفتاح ، والأرقام 517 و 1102 تشكل قائمة ، وهي قيمة مفتاح القاموس هذا.



مثال 2. طلب ​​تذكرة مشبوه ، على الأرجح قواعد Kerberoasting



/ windows / builtin / win_susp_rc4_kerberos.yml


سيتم تشغيل هذه القاعدة إذا كان الحدث يفي بالشرط:



EventID = 4679 AND  TicketOptions = 0x40810000 AND TicketEncryption = 0x17 AND ServiceName لا ينتهي بعلامة '$'



في القاعدة ، يبدو كما يلي:



detection: 
  selection: 
    EventID: 4769 
    TicketOptions: '0x40810000' 
    TicketEncryption: '0x17' 
  reduction: 
	- ServiceName: '*$' 
  condition: selection and not reduction 


قيم الحقول الخاصة



هناك نوعان من قيم الحقول الخاصة التي يمكن استخدامها:



  • قيمة فارغة محددة بعلامتي اقتباس منفردتين ''
  • القيمة الخالية المحددة بواسطة الكلمة الأساسية الفارغة


ملاحظة: لا يمكن تحديد قيمة غير فارغة من خلال بنية غير فارغة


يعتمد تطبيق هذه القيم على نظام SIEM المستهدف. لوصف الشرط غير الفارغ ، تحتاج إلى إنشاء معرف بحث منفصل بقيمة فارغة وأخذ منه النفي في الشرط (حقل الشرط ، موصوف في نهاية المقالة). ضع في اعتبارك المزيد من الأمثلة للقواعد التي تستخدم وصف حقل فارغ.



مثال 3. إطلاق مريب لقواعد تيار بعيد



/ windows / sysmon / sysmon_password_dumper_lsass.yml


سيتم تشغيل القاعدة المحددة إذا كان الحدث يفي بالشرط:



EventID = 8 AND TargetImage = 'C: \ Windows \ System32 \ lsass.exe' AND StartModule هو حقل فارغ



في القاعدة يبدو كما يلي:



detection: 
	selection: 
        EventID: 8 
        TargetImage: 'C:\Windows\System32\lsass.exe' 
        StartModule: null 
	condition: selection 


مثال 4. كتابة ملف قابل للتنفيذ إلى دفق ملف بديل قواعد NTFS



/ windows / sysmon / sysmon_ads_executable.yml


القاعدة المدروسة هي مثال على التعيين الصحيح لقيمة غير فارغة. سيتم تشغيل هذه القاعدة إذا استوفى الحدث الشرط:



EventID = 15 AND I mphash != '00000000000000000000000000000000' Imphash



في القاعدة ، يبدو كما يلي:



detection: 
    selection: 
        EventID: 15 
	filter: 
        Imphash:  
        	- '00000000000000000000000000000000' 
        	- null 
	condition: selection and not filter 


كما هو مذكور أعلاه ، يجب الآن وضع النفي في الشرط (حقل الشرط) ، وليس في معرفات البحث.



معدِّلات القيمة



يمكن تغيير تفسير قيم الحقل في القاعدة باستخدام المُعدِّلات. تُضاف المُعدِّلات بعد اسم الحقل ، ويسبق كل مُعدِّل شريط عمودي (أنبوب) - "|". يمكن ربطها بالسلاسل لبناء سلاسل (خطوط أنابيب) للمُعدِّلات:







يتم تعديل قيمة الحقل وفقًا لترتيب المُعدِّلات في السلسلة. يمكن أن تكون المعدِّلات من نوعين: معدِّلات التحويل والنوع.



معدِّلات التحويل هي تلك التي تحوّل قيمة الحقل الأصلي إلى قيمة أخرى ، أو تحوّل المنطق لمعالجة قوائم القيم في معرّفات البحث. مثال على النوع الأول هو معدّلات Base64 ، والثاني هو معدّل الكل . سيتم مناقشة جميع المعدلات بمزيد من التفصيل لاحقًا.



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



ابدا ب



يتم استخدام معدّل startswith لمطابقة بداية سلسلة مع القيمة المطلوبة.







أمثلة على استخدام:





ينتهي



يتم استخدام معدّل endswith لمطابقة نهاية سلسلة مع قيمة بحث.







أمثلة على استخدام:





يحتوي على



يتحقق المعدل يحتوي على حدوث سلسلة فرعية في قيمة الحقل. في الواقع ، يحول هذا المُعدِّل قيمة الحقل على النحو التالي:







أي إذا أخذنا في الاعتبار نتائج تطبيق المُعدِّلات المدروسة ، يمكنك كتابة الصيغة التالية:



startswith + endswith = يحتوي على



أمثلة:





الكل



عادةً ما يتم دمج عناصر الورقة مع OR المنطقي. يغير المُعدِّل جميع العناصر المنطقية OR إلى منطقية AND المنطقية ، أي أن جميع عناصر القائمة يجب أن تكون موجودة. دعونا نرى كيف ستتغير الشروط في المخطط العام الذي كان في بداية القسم:







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



أمثلة على استخدام كل المعدلات :





قاعدة 64



يتم تطبيق هذا المعدل عندما يتم تشفير قيمة الحقل في Base64 ، وللتوضيح ، نكتب النص المشفر في القاعدة ، وليس سلسلة Base64 الناتجة.







يفترض هذا المعدل تطابق الحقل تمامًا مع السلسلة المشفرة. عادة ما يكون تحديد علامات النشاط المشبوه في البيانات الأصلية أكثر فائدة من البحث عن تطابق تام مع النتيجة المشفرة. لذلك ، لا توجد أمثلة على استخدام معدل base64 حتى الآن.



Base64offset



نظرا لطبيعة ترميز Base64، لا يمكنك استخدام خط أنابيب من base64 في و يحتوي على العثور على سلسلة فرعية المشفرة . تم إنشاء معدِّل base64offset لهذا الغرض بالذات . يتم استخدامه عندما تكون السلسلة مشفرة Base64 ونريد العثور على سلسلة فرعية للسلسلة المشفرة. علاوة على ذلك ، فإن الأحرف التي تحيط بالسلسلة الفرعية المطلوبة غير معروفة مسبقًا ، وإزاحة السلسلة الفرعية بالنسبة لبداية السلسلة غير معروفة. يمكنك أن ترى بوضوح ما هو على المحك هنا.



دائمًا ما يتم استخدام هذا المُعدِّل مع مُعدِّل يحتوي على :







أمثلة على الاستخدام:





مهم! تُستخدم معدّلات تحويل الترميز الثلاثة التالية فقط مع معدّلات Base64.


utf16le أو واسع



المُعدِلات العريضة و utf16le مترادفات. يقومون بتحويل حقل سلسلة في ترميز UTF-16LE ، أي .“123” -> 0x31 0x00 0x32 0x00 0x33 0x00







utf16be



يحول معدِّل utf16be قيمة سلسلة الحقل إلى UTF-16BE ، أي “123” -> 0x00 0x31 0x00 0x32 0x00 0x33.







utf16



معدل UTF16 يضيف علامة ترتيب البايت (BOM)، ويرمز سلسلة في UTF-16، وهذا هو “123” -> 0xFF 0xFE 0x31 0x00 0x32 0x00 0x33 0x00.







يوجد حاليا معدّل نوع واحد فقط - re .



إعادة



يفسر معدِّل النوع قيمة الحقل كنمط تعبير عادي. حتى الآن ، يتم دعمه فقط بواسطة المحول إلى استعلام Elasticsearch ، لذلك لا يظهر عملياً في القواعد العامة.



أمثلة على استخدام:





الفاصل الزمني (سمة الإطار الزمني)



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



15s  (15 ) 
30m  (30 ) 
12h  (12 ) 
7d   (7 ) 
3M   (3 ) 


أمثلة على استخدام:





وصف شروط تشغيل القاعدة (سمة الشرط)



وفقًا لوثائق Sigma الرسمية ، فإن جزء شرط التشغيل من القاعدة هو الأكثر تعقيدًا وسيتغير بمرور الوقت. التعبيرات التالية متاحة حاليا.



العمليات المنطقية AND، OR



هم يتبين من الكلمات الرئيسية و و أو، على التوالي. هذه التعبيرات هي العناصر الرئيسية لبناء علاقة منطقية بين معرفات البحث.



detection: 
  keywords1: 
      - EVILSERVICE
      - svchost.exe -n evil 
  keywords2: 
	- SERVICEEVIL 
	- svchost.exe -n live 
  condition: keywords1 or keywords2 




أمثلة على استخدام:





إحدى قيم معرّف البحث / جميع قيم معرّف البحث (1 / كل معرّف البحث)

كما هو الحال في الحالة السابقة ، إذا كان معرّف البحث



  • 1 - OR المنطقي بين البدائل ،
  • الكل - منطقي و بين البدائل.


condition: keywordsيعني افتراضيًا أن القيم المدرجة في معرّف الكلمات الأساسية منطقية أو ، أي أن هذا هو نفس الكتابة condition: 1 of keywords. إذا أردنا دمج القيم مع منطقية AND ، فنحن بحاجة إلى الكتابة condition: all of keywords.



أمثلة على استخدام:





أحد معرّفات البحث / جميع معرّفات البحث (1 / جميعها)

منطقي OR (1 منهم) أو منطقي AND (جميعهم) بين جميع معرّفات البحث المقدمة. بشكل افتراضي ، يتم ربط معرفات البحث بواسطة AND المنطقية إذا كانت عناصر من قاموس ، أو OR المنطقية إذا كانت عناصر من قائمة. لتغيير هذه العلاقات ، تم إنشاء هذا الهيكل. وبالتالي ، فإن الشرط ، الشرط: 1 منهم ، يعني أنه يجب أن يظهر واحد على الأقل من معرفات البحث في الحدث.



أمثلة على استخدام:





أحد معرّفات البحث المطابقة لنمط الاسم / جميع معرّفات البحث المطابقة لنمط الاسم (1 / كل نمط معرّف البحث)



مثل الفقرة السابقة ، لكن التحديد يقتصر على معرفات البحث التي تتطابق أسماؤها مع النمط. يتم إنشاء هذه الأنماط باستخدام حرف البدل * (أي عدد من الأحرف) في موضع معين في نمط الاسم.



بناء الجملة كما يلي:



condition: 1 of selection* 
 
condition: all of selection* 


أمثلة على استخدام:





النفي المنطقي



يتم إنشاء السلبيات المنطقية باستخدام ليست الكلمة الأساسية . كما هو مذكور أعلاه ، يجب تحديد التعبير "ليس فارغًا" في حقل الشرط ، وليس في وصف معرف البحث. يوضح المثال التالي بوضوح الإصدار الصحيح لوصف التعبير "قيمة الحقل ليست فارغة".







أمثلة على استخدام:





يضخ



يشير الشريط العمودي (أو الأنبوب) إلى أنه سيتم تمرير نتيجة التعبير إلى دالة تجميعية ، من المحتمل مقارنة نتيجتها ببعض القيمة.



المخطط العام:



_ | _  
 
condition: selection | count(category) by dst_ip > 30 


أمثلة على استخدام:





أقواس



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



condition: selection and (keywords1 or keywords2) 
 
condition: selection and not (filter1 or filter2) 


مثال على الاستخدام:





تجميعات الدالة



تُستخدم التعبيرات المجمعة (أو تعبيرات الدوال المجمعة) لتقدير الأحداث التي وقعت.



مخطط التعبير التجميعي: تتطلب







جميع الوظائف التجميعية باستثناء العدد اسم حقل كمعلمة. تحسب وظيفة العد جميع الأحداث المتطابقة إذا لم يتم تحديد اسم حقل. إذا تم تحديد اسم حقل ، فستقوم الدالة بعد ذلك بحساب قيم مختلفة في هذا الحقل. على سبيل المثال ، يحسب التعبير التالي عدد المنافذ المختلفة التي تم إجراء الاتصالات بها من عنوان IP واحد ، وإذا تجاوز هذا الرقم 10 ، فسيتم تشغيل القاعدة:



condition: selection | count(dst_port) by src_ip > 10 




أمثلة على استخدام:





تجميع التعبير القريب



يتم استخدام الكلمة الأساسية القريبة لإنشاء استعلام (إذا كانت هذه الوظيفة مدعومة من قبل النظام الهدف والخلفية) التي تتعرف على حدوث جميع معرفات البحث المحددة خلال فترة زمنية محددة بعد العثور على المعرف الأول.



المخطط العام:



near search-id-1 [ [ and search-id-2 | and not search-id-3 ] ... ]



مثال على بناء الجملة:



timeframe: 30s 
condition: selector | near dllload1 and dllload2 and not exclusion 


تنطبق نفس القواعد على تعبير البحث بعد الكلمة القريبة من تعبير البحث قبل الشريط العمودي ، والذي قمنا بتفصيله أعلاه.



أمثلة على استخدام:





الأولوية الافتراضية للعمليات هي:

  1. (التعبير)
  2. X من نمط البحث
  3. ليس
  4. و
  5. أو
  6. |


وبالتالي ، يكون للأقواس أولوية قصوى ، ويكون الأنبوب هو الأدنى.



ملاحظة: إذا تم تحديد عدة حقول شرطية ، فسيتم الحصول على القيمة النهائية من خلال تطبيق OR المنطقي على جميع قيم التعبير.


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



المؤلف : أنطون كوتيبوف ، متخصص في قسم خدمات الخبراء وتطوير التقنيات الإيجابية (مركز أمان خبراء PT)



All Articles