صياغة قواعد YARA
السلاسل، والشروط، والبيانات الوصفية.
صياغة قواعد YARA درس مجاني في Cyber Security Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cyber Security Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cyber Security Academy 4 دروس في المجموع.
الأقسام الثلاثة
تتكون قاعدة YARA من اسم وما يصل إلى ثلاثة أقسام: meta وstrings وcondition. ويُعد قسم condition القسم الإلزامي الوحيد، لكن القواعد الفعلية تستخدم الأقسام الثلاثة.
rule Example_Malware
{
meta:
author = "analyst"
description = "Detects Example family"
strings:
$a = "EvilConfig"
$b = { 6A 40 68 00 30 00 00 }
condition:
$a and $b
}قسم meta
يحتوي meta على بيانات وصفية لا تؤثر في المطابقة، لكنها ضرورية للفرز والصيانة.
authorوdateوdescriptionreference— رابط التقرير أو الاستشارةhash— العينة أو العينات التي بُنيت القاعدة انطلاقًا منهاtlp— تصنيف المشاركة
تكون القيم سلاسل نصية أو أعدادًا صحيحة أو قيمًا منطقية. تعاملوا مع meta بوصفه توثيقًا؛ فالمستجيب التالي يعتمد عليه.
السلاسل النصية
يعرّف قسم strings معرّفات تبدأ بـ $ وترتبط بأنماط. وأبسطها سلسلة نصية بين علامتي اقتباس.
تعمل المعدّلات على تحسين المطابقة:
nocase— غير حساس لحالة الأحرفwide— UTF-16 (بايتان لكل محرف، وهو شائع في Windows)ascii— ASCII (الافتراضي؛ ادمجه مع wide لمطابقة كليهما)fullword— المطابقة باعتبارها كلمة كاملة فقط
strings:
$s1 = "cmd.exe /c" nocase
$s2 = "InjectDll" wide ascii
$s3 = "admin" fullwordالسلاسل السداسية عشرية
بالنسبة إلى الأنماط الثنائية، استخدموا سلسلة سداسية عشرية بين أقواس معقوفة. فهي تطابق البايتات الخام، ما يجعلها مناسبة للتعليمات البرمجية والأرقام السحرية والبنى.
تدعم السلاسل السداسية عشرية المرونة التالية:
??— خانة بدل سداسية عشرية/بايت[n-m]— قفزة من n إلى m من البايتات العشوائية( A | B )— بدائل
strings:
$h1 = { 4D 5A 90 00 }
$h2 = { E8 ?? ?? ?? ?? 83 C4 04 }
$h3 = { 6A 00 [2-6] FF 15 ?? ?? ?? ?? }
$h4 = { ( B8 | B9 ) 00 00 00 00 }التعبيرات النمطية
يدعم YARA أنماط التعبيرات النمطية المحاطة بشرطتين مائلتين، باستخدام المعدِّلات نفسها المستخدمة مع السلاسل النصية. استخدم التعبيرات النمطية عندما يختلف النمط لكنه يتبع بنية معينة، مثل علامة إعدادات أو اسم mutex مُولَّد.
التعبيرات النمطية قوية لكنها مكلفة؛ لذا يُفضَّل استخدام السلاسل الثابتة أو الصيغة السداسية عشرية متى أمكن، وتقييد التعبير النمطي بإحكام لتجنب فحص الملف بأكمله.
strings:
$re1 = /mutex_[a-f0-9]{8}/ nocase
$re2 = /https?:\/\/[a-z0-9]{12,20}\.top\// asciiقسم condition
condition هو تعبير منطقي يحدد حدوث التطابق. أشر إلى معرّفات السلاسل مباشرةً؛ وتكون $a المجردة صحيحة إذا عُثر على السلسلة.
اجمع بينها باستخدام and وor وnot والأقواس. هنا تُرمِّزون المنطق الذي يميّز إصابة حقيقية لعائلة برمجية عن مجرد مصادفة.
condition:
$a and ($b or $c) and not $benignالعدّ والمجموعات
يوفّر YARA محددات كمية مرنة على مجموعات السلاسل:
any of them/all of them2 of ($s*)— اثنتان على الأقل من مجموعة#a > 3— عدد مطابقات $a يتجاوز 3
تتيح لكم هذه المحددات اشتراط وجود ثلاثة مؤشرات للعائلة، مثلًا، من أصل خمسة، لتحقيق توازن بين الحساسية والإيجابيات الكاذبة.
condition:
3 of ($str*) and #marker >= 2الإزاحات وحجم الملف
يمكن للشروط الإشارة إلى موضع حدوث التطابق وإلى حجم الملف:
$a at 0— يجب أن يحدث التطابق عند الإزاحة 0$a in (0..1024)— ضمن نطاق من البايتاتfilesize— الحجم الإجمالي، مثلfilesize < 200KBuint16(0) == 0x5A4D— قراءة عدد صحيح عند إزاحة معينة، وهنا ترويسة MZ
يؤدي تقييد التطابقات بموضعها إلى تقليل الإيجابيات الكاذبة بدرجة كبيرة وتسريع الفحص.
condition:
uint16(0) == 0x5A4D and filesize < 500KB and $payloadالوحدات
تُتيح وحدات YARA بيانات منظمة تراعي تنسيق الملف، بحيث يمكن للشروط تحليل حقول مفسَّرة بدلًا من البايتات الخام.
pe— واردات PE والأقسام ونقطة الدخول والتوقيعات وimphashhash— حساب md5/sha256 للمناطقmath— الإنتروبيا والإحصاءاتelfوdotnetوmagic
يتيح استيراد pe، مثلًا، المطابقة بناءً على الدوال المستوردة أو imphash محدد، وهو أكثر متانة بكثير من الاعتماد على سلسلة نصية حرفية.
import "pe"
condition:
pe.imphash() == "a1b2c3d4e5f6..." and
pe.imports("kernel32.dll", "VirtualAllocEx")التكرار على المجموعات
لإنشاء منطق أكثر ثراءً، يدعم YARA الحلقات على المجموعات باستخدام for. يمكنكم التعبير عن شروط مثل أن يحقق ما لا يقل عن إزاحتين من هذه الإزاحات خاصية معينة، أو أن يطابق أي اسم قسم نمطًا محددًا.
يُعد ذلك ضروريًا عند التعامل مع بيانات الوحدات، مثل أقسام PE أو الواردات، حيث يجب فحص قائمة متغيرة الطول بدلًا من قيمة واحدة.
import "pe"
condition:
for any i in (0..pe.number_of_sections - 1) : (
pe.sections[i].name == ".evil"
)global وprivate والوسوم
تنظّم الكلمات المفتاحية على مستوى القاعدة مجموعة القواعد:
global rule— يتحكم شرطها في جميع القواعد الأخرى في الملف، مثل فحص ملفات PE فقطprivate rule— لبنة قابلة لإعادة الاستخدام، لا يُبلَّغ عنها بمفردها، لكن يمكن للقواعد الأخرى الإشارة إليها- تُصنّف الوسوم التي تأتي بعد اسم القاعدة الإصابات، مثلًا لتصفية المخرجات
global private rule IsPE { condition: uint16(0) == 0x5A4D }
rule Dropper : trojan dropper {
strings: $a = "drop_payload"
condition: $a
}تحقق سريع
حلّل مدى متانة الشرط.
مراجعة
صياغة قواعد YARA في لمحة واحدة:
- القاعدة =
meta+strings+condition - السلاسل النصية مع معدِّلات nocase/wide/ascii/fullword
- السلاسل السداسية عشرية مع محارف البدل
??والقفزات[n-m]والبدائل - التعبيرات النمطية للأنماط المتغيرة ذات البنية، فاستخدموها باعتدال
- يجمع
conditionالسلاسل باستخدام and/or/not - المحددات الكمية: any/all/N of، وعدّ
#a - التقييد بالموضع: at وin وfilesize وقراءات uint
- الوحدات (pe وhash وmath) لمطابقة البيانات المنظمة وimphash
- تنظّم
globalوprivateوالوسوم مجموعات القواعد
التالي: البحث العملي باستخدام السلاسل والسلاسل السداسية عشرية.
الأسئلة الشائعة
هل درس «صياغة قواعد YARA» مجاني؟
نعم — نص درس «صياغة قواعد YARA» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cyber Security Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Cyber Security Academy 4 دروس في المجموع.
ماذا ستتعلم في «صياغة قواعد YARA»؟
السلاسل، والشروط، والبيانات الوصفية. تتمرن على Cyber Security Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Cyber Security Academy؟
لا تُشترط خبرة سابقة. Cyber Security Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «صياغة قواعد YARA»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Cyber Security Academy هذا؟
نعم. كل درس في Cyber Security Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.