الكنز الدفين! ما يجب معرفته عن الـ PE header

Malware
هل أثار انتباهك يوما ما.... ما هو ال PE header؟ وما الذي بداخله؟ دعنا نعرف سويا...
Khaled Eid
May 24, 2023, 5:15 p.m.
khaled_eid
الكنز الدفين!  ما يجب معرفته عن الـ PE header

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


ماهو ال PE header PE Format Portable Executable What Is the Windows Portable Executable File Format A brief introduction to