

Basic Static Analysis تعتبر أول مرحلة في تحليل البرمجيات الخبيثه. فعند تحليل اي Sample جديد نشرع بالفور في استخدام PE studio لكي نتعرف ونأحذ فكره مبدئية عن البرنامج الخبيث وماهيته. ولكن...
هل سألنا أنفسنا كيف يستخرج ال PE studio وغيره من الأدوات هذا الكم الهائل من المعلومات؟ مامصدره؟ وعلى ما تعتمد مرحله الـ Basic Static Analysis بأسرها؟
الـ PE Header (الكنز الدفين) يجيبنا على جميع هذه التساؤلات. فما قصته وعلى ما يحتوي؟ وكيفيه الأستفاده منه في كتابه التقرير النهائي للـ Analysis؟
ما هو ال PE file format؟
PE اختصار لـ (Portable Executable) وهو عبارة عن نموذج يتبعه أي ملف (Executable) في نظام التشغيل ويندوز. (كملفات الـ EXE, DLL)
فهو يخبر الـ Windows OS loader بما يجب أن يفلعه ويمده بالمعلومات المطلوبة لتشغيل البرامج.
هيكل يوضح العناصر المكونة ل PE File Format
يتكون في البدايه من جزء يسمىDOS Header لا نستخدم هذا الجزء كبيرا في مرحلة الـ Analysis ولكن يمكنك أن تقرأ عنه من هنا.
لذا لن أتطرق اليه وسأشرع في شرح العناصر التي تليه.
الـكنز الدفين (الـ PE Header)
يتكون الـ PE Header من عدة أقسام , أولها :
File Header
يعطيناهذا القسم المعلومات الأبتدائيه عن الملف والموضحة كالاتي:
-
Machine: تمثل نوع وفئة البروسيسور (في هذا المثال القيمة 0x14c تعني intel 386)
-
NumberOfSections: تمثل عدد الأقسام الموجودة بعد ال Header (كـ code section, data section and resources section ) سنتعرف عليها بعد قليل.
-
TimeDateStamp: الساعة والتاريخ الذي تمت فيهم ترجمة (compiled) البرنامج. (مفيد جدا ل Threat Intelligence).
-
Characteristics: تمثل نوع الملف. (هل هو DLL أم Driver ؟).
ملفات الDriver هيا ملفات يتم استخدامها للاتصال وتواصل أنظمة التشغيل ويندوز مع كل من الأجهزة الخارجية والداخلية.
Optional Header
يأتي بكم من المعلومات الغنية عن الملف:
-
Magic: هل سيعمل على نظام x86 أو 64x؟
-
AddressOfEntryPoint: يشير إلى نقطة البداية لتنفيذ البرنامج (أول أمر في الأسمبلي سينفذ من عندة البرنامج).
-
ImageBase: العنوان الذي سيتم عليه تحميل البرنامج في الذاكرة الافتراضية (virtual memory).
-
SectionAlignment: يجب ان يكون حجم كل قسم مساوي لهذه القيمة عندما يتم تحميلة على الذاكرة (Memory) وغالبا تكون قيمتة 0x1000 .
-
FileAlignment: يجب ان يكون حجم كل قسم مساوي لهذه القيمة عندما يتم تحميلة على القرص الصلب (Hard DISK).
-
MajorSubsystemVersion: يخبرك بأقل اصدار من نظام تشغيل ويندوز القادر على تشغيل هذا البرنامج.
-
SizeOfImage: حجم البرنامج بأكمله في الذاكرة (Memory) -عادة ما يكون أكبر من حجم البرنامج على القرص الصلب.
-
SizeOfHeaders: حجم جميع ال Headers .
هناك ما يسمى ب Rich Header ويحتوي على معلومات البرنامج الذي تمت عليه عملية ال compilation
Data Directory
تحتوي على جدوال بها معلومات مهمه لايمكن الأتسغناء عنها:
-
Import table: يمثل الدوال أو ال API التي لايتضمنها البرنامج ولكنة يستدعيها من المكاتب الأخرى (DLL)
-
Export table: الدوال أو ال API التي يتضمنها البرنامج بداخلة ويستعملها او اعطائها لبرنامج اخر
-
Resource table: المسوؤل عن الايقونات والصور والبيانات الأخرى.
-
Relocation table: اصلاح العنواين في الكود البرمجي عندما يتم تحميل البرنامج في مكان اخر في الذاكرة.
-
TLS Table (Thread local Storage): يمكن ان يتم استخدامة من صانعي الفيروس لتخطي ال Debuggers
Section table
Header بسيط جدا ويحتوي على أقسام عديدة كـ .text .data .rdata .rsrc كما هو موضح في الصورة
وكل قسم له خصائص معينة وهيا:
-
VirtualAddress: يسمى ال RVA ويشيرالى بداية القسم في الذاكرة (Memory) .
RVA اختصار لـ Relative Virtual addresss وهو مساوي للـ AddressOfEntryPoint
-
VirtualSize : حجم القسم في الذاكرة (Memory).
-
SizeOfRawData: حجم القسم في القرص الصلب (Hard DISK).
-
PointerToRawData: يشير الى بداية القسم ولكن في القرص الصلب.
-
Characteristics: لتحديد صلاحيات القسم وما الذي يستطيع أن يفعله في الذاكرة (?Read-Write-Execute)
ما يمكن للـ PE header كشفه !
حسناأ تعرفنا على مايحتويه كل قسم, كيف سنوظف هذه المعرفة الى خطوات عملية؟
في حالة وقوع هجوم أو أختراق، فتحليل الـ PE Header هو ملاذك الوحيد لتكوين فكرة عامة عن ماهية الهجوم والحصول على العديد من الاجابات وهذا لا يقتصر على مرحلة واحده فقط بل يشمل العديد.
مرحلة الـ Incident Response
1. هل البرنامج الخبيث مضغوط (Packed) أم لا ؟
تميل ال Packers الى تغيير أسماء الاقسام (text .data .rdata .rsrc) الى أسماء أخرى كـ (UPX1).
ويعملون ايضا على اخفاء ال API من ال Import table, لذا عندما تجد ال Import table فيه القليل من ال API فقد تكون علامة أنه Packed.
2. هل هذا البرنامج الخبيث Dropper أم Downloader ؟
اذا كان dropper فقد تجد PE Header زائد في ال resources وأداه مثل Resource Hacker قادرة على الكشف عن ذلك. والعلامة الأخرى عندما ترى بعض من ال API كـ FindResourse , SizeofResource .
أما اذا كان downloader ففي الغالب ستجد اثنين من ال API المشهورين UrlDownloadToFileA و ShellExecuteA من مكتبة urlmon.dll .
3. هل يتصل ويتواصل مع موقع المخترق (Command & Control Servers / C&C) ؟
اذا وجدت هذة المكتبات wsock32.dll , ws2-32.dll , wininet.dll وماتحتوية من API ك HTTPSendRequestA أو FTPPutFile, فنستطيع القول أنه يتواصل مع C&C.
4. ما هدف هذا البرنامج الخبيث ؟
نستطيع معرفة هذا عند النظر الى ال API الموجودة. فمثلا عندما ترى CryptEncrypt ففي الغالب سيكون Ransomware وعندما ترى GetKeyState فسيكون Keylogger.
مرحلة الـ Threat Intelligence
1. متى تم تصميم هذا البرنامج الخبيث؟
من المهم جدا للباحثين معرفة عمر العينة . هل هي عينة قديمة أم جديدة ومتى بدء المخترقون في مخططهم؟
في ال PE Headrer داخل الـ File Header هناك قيمة تسمى ال TimeDataStamp وتتضمن التاريخ والوقت المحددين الذي تم فيهم عملية الـ compiled للبرنامج.
2. ما هو بلد منشأ هؤلاء المخترقين؟
هل هم من الصين؟ روسيا؟ الولايات المتحدة؟ فمعرفة البلد سيعيطنا نبذه عن دافع هولاء المهاجمين.
ويتم عن طريق استخدام ال TimeDataStamp أيضا ولكن لعدة samples من البرنامج الضار كما هو موضح في الصورة.
fall into 9-5 jobs for the Russian time-zone
وفي الـخــتـام...
تيقنا أن الـ PE header كنز معلومات دفين مليئ بالتفاصيل الدقيقة داخل أقسامه. لقد أعطيت بعض الأفكار الأساسية والملاحظات ولكن هناك المزيد... ولك أن تسكتشف.
المصادر
[1] Book: Mastering Malware Analysis
[2] A Comprehensive Guide To PE Structure, The Layman’s Way
[3] ملف التمديد DRV