هل تبحث عن شيئ معين في المدونة ؟ اكتب الجملة أو الكلمة التي تريد البحث عنها، واضغط Enter
اضف تعليق

Mostly about DFIR and some other stuffs

استخدام Yara rules للكشف عن Malwares

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

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

Yara rules هي عباره عن قواعد مكتوبة تصف Malwares بحيث يمكن البحث والكشف عنها، يتم اطلاق عليها احيانا Yara signatures بسبب انها تمثل توقيع رقمي يمكن من خلاله الكشف عن وجود malwares في الانظمه. تم انتاج مشروع Yara من قبل شركة VirusTotal كاداة قوية تستخدم للبحث عن الفيروسات. Yara Search Engine يعتمد على التوقيعات المدخله للبحث في الملفات واستخراج اي ملف له نفس الصفات المذكوره في التوقيع.  Yara لها توثيق اكثر من رائع يصف كيفية كتابة التواقيع لوصف malwares تجده في هذا الرابط

قواعد كتابة تواقيع Yara

اي توقيع يتم كتابة داخل ملف نصي ويحمل الامتداد .yar  ويتكون من ثلاث أفسام رئيسية

  • Meta
  • Strings
  • Condition

metas يحمل معلومات عن التوقيع نفسه والشخص الذي قام بكتابته ومعلومات اخرى لا تؤثر على عمل التوقيع في اكتشاف الملف وأنما للشخص الذي يقوم بقراءة التوقيع هذا الجزء اختياري. Strings هذا الجزء يحمل صفات الملف الذي سوف يتم البحث عنه وكل صفه لها اسم خاص يتم استخدامه في قسم condition. اخيرا قسم condition يحمل boolean experssion لما سوف يتم تطبيقه مثل هل وصف احد كافي ام كل الصفات يجب ان تتوفر وبعض التفاصيل الاخرى التي سوف اتطرق لها في هذه التدوينة.

لناخذ مثال عملي لاحد الفيروسات من Yara repository

 

rule BangatCode
{
    
    meta:
        description = "Bangat code features"
        author = "Seth Hardy"
        last_modified = "2014-07-10"
    
    strings:
        // dec [ebp + procname], push eax, push edx, call get procaddress
        $ = { FE 4D ?? 8D 4? ?? 50 5? FF }
    
    condition:
        any of them
}

المثال السابق يحتوي على جزء meta والذي يحمل معلومات كاتب التوقيع والتاريخ. قسم Srings يحمل النص الذي سوف يتم البحث عنه والنوع HEX واخيرا Condition تصف قاعده البحث والتي هي any of them والتي تعني انه اي واحده من قواعد stings كافيه للمقارنة ، في هذا المثال لا يوجد الا وصف واحد.

مميزات Yara

تتميز Yara بانها ليست مجرد اداة بحث، لها العديد من المميزات الرائعه التي يمكن استخدامها اثناء كتابه التواقيع مثل دمجها مع لغه البرمجه بايثون او C ، استخدام modules متعدده يمكن تطويرها لمحرك البحث الخاص بالاداه، المرونه العاليه في كتابه قواعد اللغه التي تصف التواقيع بالاضافه الى التبني العالي لهذه الاداه من قبل مجتمع امن المعلومات.

كتابة قسم Strings والذي يصف التواقيع للفيروس يمكن كتابته بثلاث طرق

  • Text
  • Hex
  • RegEx

وصف التواقيع باستخدام Text في قسم Strings

اذا تم استخدام text في وصف الملف يجب ان يكون داخل علامة التنصيص  ” ” يمكن ايضا استخدام مجموعة من modifier لزياده مرونة القاعدة

مثال لملف Yara يحمل تواقيع من نوع  Text

rule Kovter
{ 
	meta:
		maltype = "Kovter"
		date = "9-19-2016"
		description = "fileless malware"
	strings:
		
		$type2="Microsoft-Windows-Security-Auditing" wide ascii
		$eventid2="4689" wide ascii
		$data2="Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" wide ascii

		$type3="Microsoft-Windows-Security-Auditing" wide ascii
		$eventid3="4689" wide ascii
		$data3="Windows\\System32\\wbem\\WmiPrvSE.exe" wide ascii

	condition:
		all of them
}

القاعدة السابقة السابق تحمل تواقيع من نوع Text مع بعض الكلمة wide و ascii  ايضا في قسم condition يمكن تحديد اسم التواقيع التي تريد باستخدام and و or

يمكن زياده المرونة باستخدام modifiers التالية

  • nocase : يمكن مطابقة التوقيع للأحرف الكبيرة والصغيرة
  • wide : تستخدم لمقارنة الاحرف التي لها two bytes للحرف الواحد
  • xor : تقوم الاداه بعمل xor للنصوص ومقارنتها في نفس الوقت
  • fullword : يجب مقارنة كل النص وليس جزء منه

وصف التواقيع باستخدام  Hex

ببساطة يمكن البحث عن قيمه hex في الملفات ويتم كتابته القيم داخل قوسين {} بدون علامات تنصيص، يوجد مرونه اكبر في hex حيث يمكن وضع علامة الاستفهام ؟؟ للدلاله على انه يمكن ان يكون اي شي

مثال لملف Yara يحمل تواقيع Hex

rule CCTV0Header : Family CCTV0 {
        meta:  
		description = "5 char code for LURK0"
		author = "Katie Kleemola"
		last_updated = "07-21-2014"

	strings:
		//if its just one char a time
		$ = { ?? [5] 43 C6 [5] ?? ?? [5] 54 C6 [5]  }
		$ = { B0 43 88 [3] 88 [0-12] C6 (B0 30 | C6 [3] 30) }

	condition:
		any of them
}

قمت بتعديل القاعده السابقة بعض الشي لجعلها اقل حجم، القاعده السابقة تصف قسمه Hex وتم استخدام wild-cards مثل علامة ? للدلاله على انه قد تكون اي قيمه، ايضا تم استخدام [12-0] للدلاله على كل القيم من 0 الى 12.

وصف التواقيع باستخدام  regular expression

يمكن كتابة وصف معقد باستخدام RegEx، لا تختلف كثيرا قواعد RegEx في Yara عن القواعد الاساسية لكتابة اي RegEx.

مثال للبحث عن عنوان ايبي

rule IP {
   
    strings:
        $ip = /([0-9]{1,3}\.){3}[0-9]{1,3}/ wide ascii
    condition:
        $ip
}

قاعده اخرى تصف اي URL

rule url {
 
    strings:
        $url_regex = /https?:\/\/([\w\.-]+)([\/\w \.-]*)/ wide ascii
    condition:
        $url_regex
}

 

كتابة قواعد Condition

جانب اخرى من جوانب قوة Yara بالاضافة الى RegEx هو مدى مرونة قسم condition والتي تصف boolean expression تدعم ال relational  operators مثل  >=, <=, <, >, ==, != ايضا Bitwise operators &, |, <<, >>, ~, ^ . يمكن تحديد حجم الملف باستخدام filesize.

كتابة اكثر من قاعدة في نفس ملف الملف

يمكن كتابة اكثر من قاعدة لاكثر من فايروس او نفس الفايروس في نفس الملف والاستفاده من جميع القواعد المختلفه في داخل جزء condition لاي قاعده.

مثال يوضح كيفيه استخدام اكثر من قاعده وتطبيقهم في نفس الملف

rule BangatCode
{
    
    meta:
        description = "Bangat code features"
        author = "Seth Hardy"
        last_modified = "2014-07-10"
    
    strings:
        $ = { FE 4D ?? 8D 4? ?? 50 5? FF }
    
    condition:
        any of them
}

rule BangatStrings
{
    
    meta:
        description = "Bangat Identifying Strings"
        author = "Seth Hardy"
        last_modified = "2014-07-10"
        
    strings:
        $lib1 = "DreatePipe"
        $lib2 = "HetSystemDirectoryA"
        $lib3 = "SeleaseMutex"
        $lib4 = "DloseWindowStation"
        $lib5 = "DontrolService"
        $file = "~hhC2F~.tmp"
        $mc = "~_MC_3~"

    condition:
       all of ($lib*) or $file or $mc
}

rule Bangat
{
    meta:
        description = "Bangat"
        author = "Seth Hardy"
        last_modified = "2014-07-10"
        
    condition:
        BangatCode or BangatStrings
}

المثال السابق يحتوي على قاعدتين وفي القاعده الثالثه تم اختيار بينهم باستخدام OR بحيث اي واحده منهم كافيه ويمكن الاستفاده بكل كامل مميزات  conditions للاختيار بينهم.

يمكن ايضا ان يتم كتابة قواعد خاصه وتكون مخفيه باستخدام الكلمة private كالتالي

private rule PrivateRuleExample
{
    ...
}

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

مثال عملي لاستخدام ميزه private rule :

https://github.com/Yara-Rules/rules/blob/master/malware/MALW_TRITON_HATMAN.yar

يمكن استخدام Yara من خلال لغة البرمجه بايثون والاستفاده منها بشكل اوسع. Yara ليست اداة محصوره في اصطياد malware يمكن استخدامها في تطبيقات كثيره جدا، على سبيل المثال يمكن استخدامها في التحقيق الجنائي الرقمي  للبحث عن الملفات اعتمادا على magic number، يوجد عدد من rules التي يمكن الحصول عليها للملفات المعروفه من الرابط التالي

https://github.com/Xumeiquer/yara-forensics

التعليقات مغلقة لهذا المقال.