نحتاج الآن إلى معرفة كيفية وصف المنطق الذي سيعمل على البيانات المستلمة وإصدار حكم بشأن ما إذا كانت قاعدتنا ستعمل في موقف معين. هذا هو القسم من القاعدة وميزاتها التي خصصت هذه المقالة لها. يعد وصف قسم منطق الكشف أهم جزء في بناء الجملة ، والمعرفة اللازمة لفهم القواعد الحالية وكتابة القواعد الخاصة بك.
في المنشور التالي ، سوف نتناول بالتفصيل وصف المعلومات الوصفية (السمات التي تكون إعلامية أو ذات طبيعة بنية تحتية ، مثل الوصف أو المعرف) ومجموعات القواعد. تابع منشوراتنا!
وصف منطق الاكتشاف (سمة الكشف)
يتم تعيين شروط تشغيل القواعد في سمة الكشف . تصف حقولها الفرعية الجزء التقني الرئيسي من القاعدة. من المهم ملاحظة أن القاعدة يمكن أن تحتوي على جزء وصفي واحد فقط والعديد من مصادر السجلات والاكتشاف. نظرًا لأن قسم الاكتشاف يصف معيار التشغيل استنادًا إلى البيانات من قسم المصادر ، فإن هذين القسمين لهما 1 إلى 1.
بشكل عام ، يتكون محتوى حقل الاكتشاف من جزأين منطقيين:
- وصف الافتراضات حول حقول الحدث (معرفات البحث) ،
- العلاقة المنطقية بين هذه الأوصاف ( الإطار الزمني والتعبير في حقل الشرط ).
يتم وصف الافتراضات حول محتوى حقول الحدث من خلال تحديد معرفات البحث. يمكن أن يكون هذا المعرف واحدًا (كما هو الحال هنا ) أو يمكن أن يكون هناك العديد منهم (كما هو الحال هنا ).
يمكن أن يتكون الجزء الثاني من ثلاثة أنواع:
- الحالة المعتادة ،
- شرط مع تعبير مجمع (كما في المثال أعلاه) ،
- شرط مع الكلمة بالقرب .
تم وصف بناء جملة عناصر كل جزء في القسم المقابل من هذه المقالة.
معرّفات البحث
معرف البحث هو زوج من المفاتيح والقيمة ، حيث يكون المفتاح هو اسم معرف البحث ، والقيمة هي قائمة أو قاموس (ويعرف أيضًا باسم مصفوفة ترابطية). عن طريق القياس مع لغات البرمجة - قائمة أو خريطة. يتم تحديد تنسيق تحديد القوائم والقواميس بواسطة معيار YAML ، والذي يمكن العثور عليه هنا . تجدر الإشارة إلى أن تنسيق قاعدة سيجما لا يصلح أسماء معرّفات البحث ، ولكن في أغلب الأحيان يمكنك العثور على اختلافات مع اختيار الكلمات.
هناك متطلبات عامة تنطبق على كل من عناصر القائمة وعناصر القاموس:
- يتم التعامل مع جميع القيم كسلاسل غير حساسة لحالة الأحرف ، أي أنه لا يوجد فرق بين الأحرف الكبيرة والصغيرة.
- (wildcards) ‘*’ ‘?’. ‘*’ — ( ), ‘?’ — ( ).
- ‘\’, ‘\*’. , : ‘\\*’. .
- , .
- ‘ .
قائمة القيم معرف البحث
تحتوي قوائم القيم على السلاسل التي يتم البحث عنها خلال رسالة الحدث. يتم دمج عناصر القائمة مع OR المنطقي.
detection:
keywords:
- EVILSERVICE
- svchost.exe -n evil
condition: keywords
أمثلة على القواعد التي تحتوي على معرّفات البحث كقائمة من القيم:
- rules / web / web_apache_segfault.yml (يمكن أن تحتوي القائمة على عنصر واحد)
- القواعد / windows / بوويرشيل / powershell_clear_powershell_history.yml
- القواعد / لينكس / lnx_shell_susp_log_entries.yml
معرّف البحث في القاموس
تتكون القواميس من مجموعة من أزواج القيمة والمفتاح ، حيث يكون المفتاح هو اسم الحقل من الحدث ، ويمكن أن تكون القيمة سلسلة أو عددًا صحيحًا أو قائمة بأحد هذه الأنواع (يتم دمج قوائم السلاسل أو الأرقام مع 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 لمطابقة بداية سلسلة مع القيمة المطلوبة.
أمثلة على استخدام:
- القواعد / النوافذ / المدمج / win_ad_replication_non_machine_account.yml
- القواعد / النوافذ / process_creation / win_apt_winnti_mal_hk_jan20.yml
- القواعد / windows / بوويرشيل / powershell_downgrade_attack.yml
ينتهي
يتم استخدام معدّل endswith لمطابقة نهاية سلسلة مع قيمة بحث.
أمثلة على استخدام:
- القواعد / النوافذ / process_creation / win_local_system_owner_account_discovery.yml
- القواعد / windows / sysmon / sysmon_minidumwritedump_lsass.yml
- القواعد / النوافذ / process_creation / win_susp_odbcconf.yml
يحتوي على
يتحقق المعدل يحتوي على حدوث سلسلة فرعية في قيمة الحقل. في الواقع ، يحول هذا المُعدِّل قيمة الحقل على النحو التالي:
أي إذا أخذنا في الاعتبار نتائج تطبيق المُعدِّلات المدروسة ، يمكنك كتابة الصيغة التالية:
startswith + endswith = يحتوي على
أمثلة:
- القواعد / النوافذ / process_creation / win_hack_bloodhound.yml
- القواعد / النوافذ / process_creation / win_mimikatz_command_line.yml
- القواعد / windows / sysmon / sysmon_webshell_creation_detect.yml
الكل
عادةً ما يتم دمج عناصر الورقة مع OR المنطقي. يغير المُعدِّل جميع العناصر المنطقية OR إلى منطقية AND المنطقية ، أي أن جميع عناصر القائمة يجب أن تكون موجودة. دعونا نرى كيف ستتغير الشروط في المخطط العام الذي كان في بداية القسم:
كما ترى ، عندما يتم تطبيق جميع المعدلات ، يصبح الاتصال المنطقي بين عناصر القائمة AND. عادةً ، يتم استخدام كل المعدلات جنبًا إلى جنب مع معدل يحتوي. يمكن أن يعمل هذا الارتباط كبديل للنمط الذي يحتوي على أحرف البدل الأولية في حالة عدم معرفة ترتيب الأجزاء الثابتة.
أمثلة على استخدام كل المعدلات :
- القواعد / النوافذ / المدمج / win_meterpreter_or_cobaltstrike_getsystem_service_installation.yml
- القواعد / windows / بوويرشيل / powershell_suspicious_profile_create.yml
- القواعد / windows / بوويرشيل / powershell_suspicious_download.yml
قاعدة 64
يتم تطبيق هذا المعدل عندما يتم تشفير قيمة الحقل في Base64 ، وللتوضيح ، نكتب النص المشفر في القاعدة ، وليس سلسلة Base64 الناتجة.
يفترض هذا المعدل تطابق الحقل تمامًا مع السلسلة المشفرة. عادة ما يكون تحديد علامات النشاط المشبوه في البيانات الأصلية أكثر فائدة من البحث عن تطابق تام مع النتيجة المشفرة. لذلك ، لا توجد أمثلة على استخدام معدل base64 حتى الآن.
Base64offset
نظرا لطبيعة ترميز Base64، لا يمكنك استخدام خط أنابيب من base64 في و يحتوي على العثور على سلسلة فرعية المشفرة . تم إنشاء معدِّل base64offset لهذا الغرض بالذات . يتم استخدامه عندما تكون السلسلة مشفرة Base64 ونريد العثور على سلسلة فرعية للسلسلة المشفرة. علاوة على ذلك ، فإن الأحرف التي تحيط بالسلسلة الفرعية المطلوبة غير معروفة مسبقًا ، وإزاحة السلسلة الفرعية بالنسبة لبداية السلسلة غير معروفة. يمكنك أن ترى بوضوح ما هو على المحك هنا.
دائمًا ما يتم استخدام هذا المُعدِّل مع مُعدِّل يحتوي على :
أمثلة على الاستخدام:
- القواعد / النوافذ / process_creation / win_encoded_frombase64string.yml
- القواعد / النوافذ / process_creation / win_encoded_iex.yml
مهم! تُستخدم معدّلات تحويل الترميز الثلاثة التالية فقط مع معدّلات 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 ، لذلك لا يظهر عملياً في القواعد العامة.
أمثلة على استخدام:
- القواعد / النوافذ / process_creation / win_invoke_obfuscation_obfuscated_iex_commandline.yml
- القواعد / النوافذ / المدمج / win_invoke_obfuscation_obfuscated_iex_services.yml
- القواعد / النوافذ / المدمج / win_mal_creddumper.yml
الفاصل الزمني (سمة الإطار الزمني)
بالإضافة إلى ذلك ، يمكن تحسين منطق الاكتشاف عن طريق تحديد الفاصل الزمني الذي يجب أن تظهر خلاله معرّفات البحث. تستخدم الاختصارات القياسية للإشارة إلى الوحدات الزمنية:
15s (15 )
30m (30 )
12h (12 )
7d (7 )
3M (3 )
أمثلة على استخدام:
- القواعد / لينكس / modsecurity / modsec_mulitple_blocks.yml
- قواعد غير مدعومة / net_possible_dns_rebinding.yml
- القواعد / النوافذ / المدمج / win_rare_service_installs.yml
وصف شروط تشغيل القاعدة (سمة الشرط)
وفقًا لوثائق 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 منهم ، يعني أنه يجب أن يظهر واحد على الأقل من معرفات البحث في الحدث.
أمثلة على استخدام:
- القواعد / النوافذ / process_creation / win_hack_bloodhound.yml
- القواعد / windows / بوويرشيل / بوويرشيل_psattack.yml
- القواعد / السحابة / aws_ec2_download_userdata.yml
أحد معرّفات البحث المطابقة لنمط الاسم / جميع معرّفات البحث المطابقة لنمط الاسم (1 / كل نمط معرّف البحث)
مثل الفقرة السابقة ، لكن التحديد يقتصر على معرفات البحث التي تتطابق أسماؤها مع النمط. يتم إنشاء هذه الأنماط باستخدام حرف البدل * (أي عدد من الأحرف) في موضع معين في نمط الاسم.
بناء الجملة كما يلي:
condition: 1 of selection*
condition: all of selection*
أمثلة على استخدام:
- القواعد / windows / builtin / win_user_added_to_local_administrators.yml
- القواعد / النوافذ / process_creation / win_susp_eventlog_clear.yml
- القواعد / السحابة / aws_iam_backdoor_users_keys.yml
النفي المنطقي
يتم إنشاء السلبيات المنطقية باستخدام ليست الكلمة الأساسية . كما هو مذكور أعلاه ، يجب تحديد التعبير "ليس فارغًا" في حقل الشرط ، وليس في وصف معرف البحث. يوضح المثال التالي بوضوح الإصدار الصحيح لوصف التعبير "قيمة الحقل ليست فارغة".
أمثلة على استخدام:
- القواعد / windows / sysmon / sysmon_malware_backconnect_ports.yml
- القواعد / النوافذ / process_creation / win_apt_gallium.yml
يضخ
يشير الشريط العمودي (أو الأنبوب) إلى أنه سيتم تمرير نتيجة التعبير إلى دالة تجميعية ، من المحتمل مقارنة نتيجتها ببعض القيمة.
المخطط العام:
_ | _
condition: selection | count(category) by dst_ip > 30
أمثلة على استخدام:
- القواعد / النوافذ / المدمج / win_susp_failed_logons_single_source.yml
- القواعد / النوافذ / أخرى / win_rare_schtask_creation.yml
- القواعد / الشبكة / net_high_dns_requests_rate.yml
أقواس
تستخدم الأقواس لتحديد تعبير فرعي. يمكن أن يكون هذا مفيدًا لتحديد الترتيب الذي يتم به تقييم التعبير المنطقي ، أو لنفي المسند الذي يحتوي على تعبيرات متعددة. لديهم الأولوية القصوى للعملية.
condition: selection and (keywords1 or keywords2)
condition: selection and not (filter1 or filter2)
مثال على الاستخدام:
تجميعات الدالة
تُستخدم التعبيرات المجمعة (أو تعبيرات الدوال المجمعة) لتقدير الأحداث التي وقعت.
مخطط التعبير التجميعي: تتطلب
جميع الوظائف التجميعية باستثناء العدد اسم حقل كمعلمة. تحسب وظيفة العد جميع الأحداث المتطابقة إذا لم يتم تحديد اسم حقل. إذا تم تحديد اسم حقل ، فستقوم الدالة بعد ذلك بحساب قيم مختلفة في هذا الحقل. على سبيل المثال ، يحسب التعبير التالي عدد المنافذ المختلفة التي تم إجراء الاتصالات بها من عنوان IP واحد ، وإذا تجاوز هذا الرقم 10 ، فسيتم تشغيل القاعدة:
condition: selection | count(dst_port) by src_ip > 10
أمثلة على استخدام:
- القواعد / لينكس / lnx_susp_failed_logons_single_source.yml
- القواعد / النوافذ / أخرى / win_rare_schtask_creation.yml
- القواعد / الشبكة / net_susp_network_scan.yml
تجميع التعبير القريب
يتم استخدام الكلمة الأساسية القريبة لإنشاء استعلام (إذا كانت هذه الوظيفة مدعومة من قبل النظام الهدف والخلفية) التي تتعرف على حدوث جميع معرفات البحث المحددة خلال فترة زمنية محددة بعد العثور على المعرف الأول.
المخطط العام:
near search-id-1 [ [ and search-id-2 | and not search-id-3 ] ... ]
مثال على بناء الجملة:
timeframe: 30s
condition: selector | near dllload1 and dllload2 and not exclusion
تنطبق نفس القواعد على تعبير البحث بعد الكلمة القريبة من تعبير البحث قبل الشريط العمودي ، والذي قمنا بتفصيله أعلاه.
أمثلة على استخدام:
- القواعد / windows / sysmon / sysmon_mimikatz_inmemory_detection.yml
- القواعد / النوافذ / المدمج / win_susp_samr_pwset.yml
الأولوية الافتراضية للعمليات هي:
- (التعبير)
- X من نمط البحث
- ليس
- و
- أو
- |
وبالتالي ، يكون للأقواس أولوية قصوى ، ويكون الأنبوب هو الأدنى.
ملاحظة: إذا تم تحديد عدة حقول شرطية ، فسيتم الحصول على القيمة النهائية من خلال تطبيق OR المنطقي على جميع قيم التعبير.
في هذه المقالة ، قمنا بوصف منطق الكشف. تابع منشوراتنا ، في المقالة التالية سنلقي نظرة على الحقول المتبقية من القاعدة. معظمهم ذو طبيعة إعلامية أو بنية تحتية. بالإضافة إلى الحقول التي تحتوي على معلومات التعريف ، دعنا نتناول هذه الميزة لتكوين القواعد ، والتي تسمى مجموعات القواعد. بالنسبة للأشخاص غير المعتادين على تعقيدات لغة YAML ، سيكون النظر في هذا الجانب من النحو مفيدًا عند قراءة الغرباء وكتابة قواعدهم الخاصة.
المؤلف : أنطون كوتيبوف ، متخصص في قسم خدمات الخبراء وتطوير التقنيات الإيجابية (مركز أمان خبراء PT)