– مقدمة:
فايروس Emotet هو أحد أنواع فيروسات ال Trajon. وفكرة فيروسات ال Trajon تقوم على سرقة بياناتك الشخصية او بياناتك البنكية او التحكم بجهازك. كما نرى ليس هنالك شي محدد بعينه يقوم الفايروس بسرقته وهذا يعتمد كليا على صانع الفايروس وماذا يريد. الفايروس ينتشر عن طريق اييملات ال spam. ايضا الفايروس ممكن يستخدم تحديثات الجهاز لايهامك انه تحديث للجهاز وهو في الواقع يتحكم في جهازك. طبعا هنالك الكثر من الخدع التي ممكن ان يقوم بها الفايروس كما سنرى لاحقا.
الفايروس ينتقل الى جهازك ممكن عن طريق روابط مزيفة ضغطت عليها او عن طريق ملفات word او pdf اذا كنت مفعل ال macro. المتطلبات المطلوبة لهذه المقالة كالاتي
- معرفة وفهم سابق للغة ال C.
- معرفة وفهم سابق للغة الاسمبلي.
- معرفة وفهم سابق لطرق تحليل الفايروسات.
:Static Analysis –
فكرة ال static analysis للتذكير هو قدرتنا على اختبار الفايروس بدون ما نشغل الفايروس. لماذا؟ حتى لا يؤثر على جهازنا او يحاول اخفاء نفسه. بعض الفايروسات بمجرد تشغيلك له، يحاول ان يشتغل كبرنامج عادي ويخفي عنك اي عمليات ضارة يقوم بها الفايروس على جهازك. ولهذا السبب، حنبدا بال static analysis ونحاول ناخذ معلومات اولية عن الفايروس على قدر استطاعتنا. باستخدام ال static analysis بحاول أجيب على الاسئلة التالية:
- ما هو تاريخ كتابة وانتاج الفايروس؟
- ما هي الخصائص التي نعتقد انها قد تكون ضارة من program import?
- ما هي العناوين، الروابط، process،اسماء ملفات التي نعتقد انها قد تكون ضارة او محل شبهة؟
- هل هناك اي obfuscation method؟ (طبعا obfuscation method هيا الطرق او الخدع التي يستخدمها الفايروس في اخفاء نفسه عن البرامج المضادة للفيروسات وغيرها كاخفاء نفسه عن VMware
استخدمت برنامج PeStudio لتحليل الفيروس ومعرفة معلومات أولية عنه. وكما نرى في الصورة رقم ١ ادناه، الفايروس كتب وانشى موخرا بتاريخ March 4th, 2022. وأيضا نستطيع أن نرى ال MD5 (والتي من خلالها نستطيع ان نبحث عن نفس عينة الفيروس التي استخدمنا وايضا ممكن ان نرى اذا اكتشفت نفس العينة وكيف تم تحليلها) وهيا برقم 3AC8BFD8DA5D3C4789D1F5D26E0E082B.
- .text: القسم هذا يحتوي الكواد القابلة للتنفيذ executable code
- .rdata and .data : هذه الاقسام عادة نخزن فيها البيانات
- .rsrc and .reloc: هذه الاقسام عادة نخزن فيها المصادر resources المستخدمة من قبل الفايروس كملفات او فانكشن خارجية.
أكثر قسم يثير الشكوك هو قسم .rsrc. لماذا؟ لان مثل ما نلاحظ ال entropy عالية (7.688). أكيد يجي في بالك كيف حكمت ان entropy عالية؟ حشرحها بالتفصيل في مقالة منفصلة لكن اعرف انه اذا كانت entropy لملف او لقسم أكبر من 7، فاعرف انه الملف او القسم غالبا packed. ماذا نقصد بان القسم او الملف packed?
فكرة packed مشابهة جدا لفكرة compressed file وهيا باختصار انه يكون عندي ملف كبير واحاول ان اصغر حجم الملف باستخدام ادوات مثل zip او rar. ما وجه الربط بين المصطلحين؟ وما الذي يدعونا للشك؟ الفكرة انه مطورين وصانعين الفايروسات يستخدمون نفس الفكرة ولكن لاخفاء الهدف الحقيقي من الفايروس. مثلا يصغر حجم الفايروس والجزء المصغر هو الجزء الذي يحتوي النوايا الحقيقة للفيروس وبالطريقة هذه يستطيع ان يمر الفايروس من غير ما يتم كشفه من قبل anti-vuirs او حتى من محلل الفيروسات! وهذه تعد من انواع ال obfuscation method التي يستخدمها صانع الفايروس للتخفي.
نلاحظ من الصورة اعلاه، كثير من ال string قد يكون اصلا هيا دالة function وليس string. طبعا مهم نعرف كل فانكشن وايش ممكن تسوي لكن حنشوف الدوال التي نحتاجها عندما نشغل الفايروس. هذا جزء من string. ووجدت ايضا كثير من string الغير مقروءة والتي تدل على فعلا الفايروس ممكن يكون packed. كيف استنتجت هذا؟ عادة اذا ضغطنا الملف او سوينا له pack، برامج الضغط تنتج ارقام وstring عشوائية.
ايضا استخدمت برنامج ثاني خاص بال static analysis وهو Ghidra. Ghidra هو برنامج مجاني يسمح لنا نشوف الكود الخاص بالفايروس (البرنامج) عن طريق لغة الاسمبلي. فكرة البرنامج انه يحاول ان يعمل لنا عملية عكسية للكود reverse. لماذا؟ لان احنا ما عندنا الكود الاصلي الذي كتبه صانع الفايروس. بالتالي حنستخدم Ghidra والذي يحول لنا من لغة الالة الى لغة الاسمبلي ومن ثم الى لغة ال C. لمعلومات اكثر عن البرنامج وكيف شكله وطريقة استخدامه، تقدر تشوف الفديو الخاص بالمقالة عن طريق قناة المنصة (أكاديما)
وجدت جزء من الكود غير قابل للعكس من قبل Ghidra كما نرى في الصورة رقم 5 ادناه
هذا ممكن يكون مقصود من قبل صانع الفايروس وممكن غير مقصود وبالتالي خطأ من قبل Ghidra. اذا كان مقصود، فمن الممكن ان يكون احد الخدع التي استخدمها صانع الفايروس لاخفاء بعض الدوال وتسمى anti-assembly. في الصورة اعلاه عند العنوان 10004329، اذا ضغطت على Disassemble (press D) حنلاحظ انه حيظهر لنا دوال حقيقة vaild functions كما نرى في الصورة رقم 6.
ايضا لاحظت انه تم استخدام isDebuggerPresent وهيا دالة تحدد لي اذا Debugger استخدم من قبل المستخدم او محلل الفيروسات كما نرى في صورة رقم 7. كيف يتم استخدامها من قبل صانع الفيروس؟ اذا اكتشفت انه احنا نسوي Debugging للبرنامج (الفايروس)، فيقدر يقوم باشياء كثير تصعب علينا عملية الكشف عن الفيروس.
ايضا لاحظت كما نرى في الصورة رقم 8 ادناه. الكود جدا معقد ومن الصعب علينا فهمه من غير استخدام dynamic analysis
: Dynamic Analysis –
فكرة dynamic analysis هو أن نقوم باختبار سلوكيات وقدرات الفايروس عن طريق تشغيل الفايروس مباشرة او عن طريق تشغيله باستخدام debugger حتى نحاول ننتبع دوال الفايروس بالتفصيل قدر الاستطاعة. باستخدام ال dynamic analysis بحاول أجيب على الاسئلة التالية:
- ما هيا السلوكيات المريبة التي لاحظناها بعد ما شغلنا الفايروس؟
- هل هناك دلائل على نشاطات خاصة ب network?
- ما هيا الملفات او process التي انشئت من قبل الفايروس؟
- هل لاحظت اي persistence mechanisms؟
- كيف استطعت كشف obfuscation methods المستخدمة من قبل الفايروس؟
ما اخفيكم الفايروس لانه جديد فهو جدا معقد لكن ان شاء الله حنحاول نستخرج ونفهم طبيعته قد ما نقدر. الان الفايروس هو DLL وهيا اختصار Dynamic-link library. وهذا الشي معناه ما نقدر نشغل الفايروس مباشرة بمجرد الضغط عليه كما نفعل مع اي برنامج امتداده exe بالرغم ان DLL في طبيعتها هيا ملفات قابلة للتشغيل executable files مثل exe. لكن الفرق ان DLL ما فيها normal main والتي من خلالها الفايروس او البرنامج يشتغل بمجرد الضغط عليه.
الحل اني قمت بتشغيل الفايروس عن طريق rundll32.exe وهيا موجودة في system32 في ملفات الوندوز. كل ما عليك هو ان تشغل Windows command prompt وتضع التالي: rundll32.exe DllFileName.dll. وبالطريقة هاذي حياخذنها ل DLLmain مثل التي موجودة في ملفات exe.
باستخدام Process Monitor، لاحظت ان الفايروس قام بالاتصال بعدة سيرفرات عن طريق عمل TCP connections كما نشاهد في الصورة رقم 9 ادناه.
عنوانين ال IP للسيرفرات هيا كالاتي:
- 51.75.33.122
- 186.250.48.5
- 168.119.39.118
- 207.148.81.119
- 194.9.172.107
- 139.196.72.155
- 78.47.204.80
- 159.69.237.188
- 54.37.106.167
- 185.168.130.138
- 37.44.244.177
- 185.184.25.78
- 185.148.169.15
- 128.199.192.135
- 37.59.209.141
- 103.41.204.169
- 185.148.168.220
- 103.42.58.120
- 78.46.73.125
- 68.183.93.250
- 190.90.233.66
- 5.56.132.177
- 62.171.178.147
- 196.44.98.190
- 168.197.250.14
- 66.42.57.149
- 59.148.253.194
- 104.131.62.48
- 191.252.103.16
- 54.37.228.122
- 88.217.172.165
- 195.77.239.39
- 116.124.128.206
- 93.104.209.107
- 118.98.72.86
- 217.182.143.207
- 87.106.97.83
- 210.57.209.142
- 54.38.242.185
- 195.154.146.35
- 203.153.216.46
- 198.199.98.78
- 85.214.67.203
عندما بحثت عن العناوين اعلاه، اكتشفت انهم C&C servers لفايروس Emotet. ايضا ال TCP Connections قادمة من ٤ بورتات وهيا كالاتي: 443, 8080, 7080 and 80.
ايضا لاحظت ان الفايروس عدل بعض registry keys كما نشاهد في الصورة رقم ١٠ ادناه
في static analysis, استعرضت عينة من الكود وكيف غير واضح. حاولت اتتبع واعرف ما هيا الدوال المستخدمة والهدف منها عن طريق debugger كما نشاهد في الصورة التالية:
مهم جدا اذا كنت تطمح ان تصبح محلل فيروسات ان تعرف ماذا يمكن تفعل كل دالة من الدوال في صورة رقم 11. مثلا realloc تحجز لنا مكان في الذاكرة. كل ما عليك ان تكتب اسم الدالة في قوقل وستعرف ما الهدف منها. ما احاول الوصول له هو استخراج الملف ال packed الذي شاهدناه في قسم resource والذي رقمه ٣٣٣. الدوال في رقم ١١ ليست الوحيدة بل هناك دوال اخرى كما نرى في الصورة رقم 12.
نلاحظ في السطر رقم 129و130 انه هنا يقوم بتحميل load المصادر resources ويحدد حجمها. كيف استنتجت ذلك؟ حاولت اتتبع الكود باستخدام ال Debugger الى ان وجدت الدالة LoadResource. قرات عنها في قوقل ووجدت تحتوي على pointer وموجه على ال first byte من المصادر في الذاكرة. يعني ان الدالة تسمح لنا بتحميل المصادر. بعد ذلك خصصت memory في virtual address space ونسخت المصادر للمنطقة المخصصة باستخدام memcpy كما نشاهد في الصورة رقم 13.
بعد ذلك، تقوم فك شفرة المصدر decrypts the resource في المنطقة المخصصة باستخدام الدالة رقم 10001FCA في الكود. بعد ذلك، الفايروس يقوم بتحميل المصدر الغير مشفر الى image base address والذي هو 1000000 كما نرى في الصورة رقم 14.
تعال نشاهد عملية فك التشفير للمصدر decryption process من خلال debugger للتضح الصورة اكثر. في الصورة التالية رقم 15، سوف نرى المنطقة المخصصة في الذاكرة memory region قبل فك التشفير.
تعال نشاهد الصورة بعد عملية فك التشفير ونلاحظ التغيير كما في الصورة ادناه
نلاحظ عند العنوان 4860000 وجود 4D 5A. ماذا تعني؟ تعني انه موجود هنا ملف Executable وهو الملف المخفي الذي كنا نبحث عنه. بعد ذلك عملت dump للمصدر باستخدام memory map وحفظت الملف. وفعلا قدر يتعرف عليه pestudio.
ايضا وجدت ال string التالي: FW4B1WqO0Hmr@&tp_z<1uGyHcF>P^EI9&SHA
– الخاتمة:
الفايروس بشكل دوري يحاول يتصل بسيرفرات خارجية والتي هيا Command and Control (C&C) servers وينتظر الرد منها لسرقة ما يمكن سرقته والتحكم بالجهاز. شاهدنا ايضا كيفية استخراج المصادر والدوال المخفية المستخدمة من قبل الفايروس وكيف استطعنا فك التشفير للملفات.
مثل ما ذكرت سابقا، الفايروس جدا معقد لانه جديد وهنا حاولت استخرج منه معلومات قدر الاستطاعة. ولهذا بالتاكيد هنالك اهداف اخرى واشياء يحاول ان يقوم بها الفايروس ولم استطع كشفها. اذا أردت ان تواصل البحث عن اهداف اخرى للفايروس تستطيع ايجاد الفايروس عن طريق رقم MD5. ولا تنسى ان تشاركنا ما وجدت.
اخيرا، اذا وجدت من الصعب فهم بعض ما شرحت، ارجع الى الفديو ( الجزء الاول من هنا و الجزء الثاني من هنا ) لان شرحت فيه بشكل مباشر ما تحدثت عنه بتفصيل اكثر.
ان اصبت فمن الله وان اخطات فمن نفسي .. لا تنسى مشاركة المقالة اذا أعجبتك .. اخوكم رائد الحربي
ولاي ملاحضات او استفسارات يرجى مراسلتي على تويتر @raedalharbi14 أو كتابة التعليق هنا