في هذا الموضوع سوف نتحدث بشكل عملي على تحليل أحد الفايروسات الحقيقيةو هو فايروس Perlovga كما يسمية مضاد Mcafee وهناك أسماء أخرى لهذا الفايروس مثل TROJ_PERLOVGA.A (من تسمية شركة Trend Micro) ، باستخدام اداوت التحليل ومن ثم نتعلم كيف يتم القضاء عليها بواسطة برنامج بسي++ ، والقائمه التالية هي الأسماء الأخرى لهذا الفايروس Aliases من مضادات الفايروسات الأخرى:
- Mcafee: W32/Perlovga
- F-Secure: Trojan-Dropper.Win32.Small.apl
- Eset: Win32/TrojanDropper.Small.APL
- Bitdefender: Trojan.Dropper.Small.APL
هذا الفايروس يصيب أنظمه الويندوز Win32 وتم اكتشافه في منتصف 2006 وما يزال الى الأن يتواجد في الكثير من الأجهزه وينتشر عن طريق النقل بالوسائط مثل الفلاش ديسك Flash Disk ، وحينها يقوم الفايروس بعمل ملفين يضعهم في مجلد النظام System32 (الملف الأول بالإسم temp1.exe ويقوم بانشاء ملف بالإسم svchost.exe ويضعه في مجلد C:\Windows أما الملف الثاني temp2.exe فيقوم بالإتصال عبر المنفذ 8888 الى الموقع 211.69.242.91 وربما لغرض تحميل تروجان أو فايروس أخر ).
هذا كل ما يتعلق بعمل الفايروس Payload ، وهو انشاء هذين الملفين وتشغيل الملف svchost.exe عند بدء التشغيل وذلك من خلال التعديل في قيم الريجستري ووضعها في الStartup ، وكما يتضح من الPayload فالفايروس يعتبر من الفايروسات البسيطة قليلة الخطر على المستخدم Low Risk ، أي أن ضرر الفايروس في وضع الملفين في الجهاز لذلك يطلق على هذا النوع من الفايروسات Dropper Virus.
التحليل المبدئي Static Analysis:
دعنا الأن نأخذ نظره مقربه أكثر على الفايروس وطريقه عمله ونبدأ بتحليل الفايروس بدون تشغيله Static Analysis وهنا يمكن استخدام العديد من الأدوات والتي نريد من خلالها التعرف على بعض الأمور المتعلقة بالفايروس ، مثلا يمكن من خلال بعض هذه الأدوات معرفه جميع النصوص في البرنامج string ، أومعرفة هل البرنامج مضغوط أو مشفر Packed أم لأ ، ومعرفة الدوال والمكتبات التي يتعامل معها ال
فايروس Imported Function وغيرها من الأمور التي ستتوضح بعد قليل. وأكثر طريقه يمكن من خلالها التعرف على طريقة العمل بالتفصيل هي من خلال أستخدام أي Disassembler لأخذ نظرة مقربة على الكود ومعرفة تفاصيله .
وقبل البدء بأي عملية جراحية يفضل ان تكون على نظام أو جهاز أخر بخلاف الجهاز العادي التي يتم العمل عليه وتصفح الانترنت وما الى ذلك حتى لا تتسبب في اصابة الملفات في حالة القيام بفتح الفايروس عن طريق الخطأ وبالتالي تخسر ملفاتك بلمح البصر، لذلك يفضل دائما حفظ البيانات في مكان أخر Backup ، كما يفضل أخذ صوره Image للنظام وبالتالى عند عند اصابة الجهاز بأحد الفايروسات أو تم التغيير في أحد إعدادات النظام فيتم ارجاع النظام للصوره السابقة له Image في عده دقائق. أحد أشهر برامج حفظ واستعادة هذه الImage هو Norton Ghost.
حاليا سنعمل على جهاز أفتراضي وليس على الجهاز العادي ، وسنستخدم أي برنامج Virtualization مثل VMware و VirtualPC من مايكروسوفت وهناك غيرها الكثير ،، في هذا المثال سوف نستخدم برنامج Virtual Box المجاني من Sun نظرأ لصغر حجمه وسرعته في العمل وسهوله التعامل معه. بالإضافة الى برنامج الVirtualization سوف يتم استخدام برنامج Deepfreeze والذي سوف يعود النظام الى حالته الأصليه بعد عمل أي تغييرات عند اعادة التشغيل Restart، وهو مفيد بعد أن تقوم بتشغيل الفايروس وتلاحظ مهامه حينها يمكنك اعادة التشغيل وسيرجع الجهاز الى حالته الأصلية من قبل الإصابة بالفايروس. الشكل التالي يبين استخدام برنامج الVirtual Box والDeepfreeze .
نقوم بعد ذلك بجلب الفايروس الذي نود تحليله الى الجهاز التخيلي ، وذلك من خلال نسخه بواسطة Flash Disk الى النظام التخيلي أو تحميله من الأنترنت ، أو باستخدام أي طريقة أخرى مثل نقله من الجهاز المضيف Host الى التخيلي وذلك بعمل قرص تخيلي في الجهاز المضيف ومن ثم يتم الوصول لهذا القرص من خلال الجهاز التخيلي (باستخدام برنامج UltraISO) ، والشكل التالي يوضح الفايروس بعد جلبه الى الجهاز التخيلي و الذي سوف نقوم بتحليله :
بعد ذلك نبدأ بجمع معلومات أولية مثل اسم الملف وهو كما يتبين الأن في الصوره malware.exe ولكن بكل تأكيد لن تفيد هذه المعلومه كثيرا حيث يمكن تغيير اسم الملف لذلك لن يتم الإعتماد على هكذا معلومة ، أيضا يتم ملاحظه حجمه وهو 68.5 KB ومن ثم نرى هل هناك Attribute (للقرائه Read-only – مخفي Hidden ) على هذا الملف وحاليا كما هو واضح من الصوره أن الملف هو ملف عادي غير مخفي hidden وليس read-only . هذه المعلومات يتم جلبها من خلال الضغط على الفايروس بالزر الأيمن وعرض الخصائص للفايروس .
نقوم الأن بمعرفه هل الفايروس مشفر أو مضغوط وفي حال لم يكن كذلك سوف يتم معرفة لغه البرمجه التي استخدمت في كتابة الفايروس وهناك الكثير من البرامج للتعرف على هذا الأمر ، وسنستخدم الأن برنامج PEiD لمعرفه ذلك :
بعد ذلك يمكن الإطلاع علي محتويات البرنامج من خلال أي محرر هكس Hex Editor ولكن ستكون هناك كميه من البيانات والتي تتطلب وقتا لقرائتها وفهمها لذلك يمكن استخدام برامج صغيره مثلا BinText والذي سيقوم باستخراج النصوص من البرنامج ومعرفه الstring سواء كانت نصوص عاديه أم دوال يستدعيها البرنامج ، كما يوضح ذلك الشكل التالي :
ويفضل أخذ الChecksum للملف التنفيذي (الفايروس) من قبل اجراء أي تجارب عليه وبعد اجراء أي تجربة يتم اعادة أخذ الChecksum لمعرفه أي تغيير حصل على الفايروس لأن هناك برامج تقوم بتغيير نفسها بعد العمل Self Modified Code ، ويمكن أن يكون الChecksum عباره عن CRC أو Hash ، وحاليا سوف يتم أخذ الMD5 Hash للملف ، ويمكن كتابه برنامج لهذا الأمر أو الإستعانه بأحد الأدوات مثلا md5sum ، والشكل التالي يوضح الهاش الناتج وهو 1d4c07370babee309401a73ebaa64f58 باستخدام البرنامج md5sum :
نكمل الأن التحليل الستاتيكي ونصل لأهم طريقة لتحليل الفايروس وهي عن طريق استخدام الDisassembler ، وسوف نستخدم الDisassembler الذي يأتي مع المنقح OllyDB ، وسوف نلقى نظره على أهم الدوال بشكل سريع فنحن نريد أخذ فكره عن عمل الفايروس بشكل سطحي وليس فهم أدق التفاصيل بشكل 100% ، كما يتبين من الصور التاليه :
هنا في الشكل السابق يقوم الفايروس بالبحث عن مجلد النظام باستخدام الدالة GetSystemDirectory والتي أخرجت له مجلد النظام وسوف يستخدمه لكي يضع المخلفات فيها وسيقوم بالقرائه من الفايروس والكتابه في الملفات الجديدة .
الأن واضح أن الفايروس قام بانشاء الملف الأول temp1.exe وفي نفس الحلقة سوف ينشئ الملف الثاني temp2.exe ويقوم بالكتابه في هذه الملفين (طريقة الكتابة غريبه بعض الشيء) . بعد ذلك سيقوم بتشغيل كل من هذه الملفين باستخدام الدالة CreateProcess كما يوضحه الشكل التالي :
التحليل الديناميكي Dynamic Analysis:
الطريقة الأخرى لتحليل الفايروسات وهي الطريقة الديناميكية وهنا سوف نقوم بتشغيل الفايروس وملاحظه وظيفته أثناء عمله أي أننا سنقوم بتشغيل الفايروس بأنفسنا ولن يضر الجهار التخيلي ذلك بسبب وجود برنامج الDeep Freeze والذي سيعيد الجهاز الى حالته الأصليه عند اعادة تشغيل الجهاز. ويمكن الإستفاده في هذا التحليل من أدوات الMonitoring لملاحظه تغييرات الريجيستري التي يغيرها الفايروس وملاحظه العمليات على الملفات في القرص I/O وملاحظه التعامل مع الشبكة سواء بارسال أو استقبال بيانات ، وأشهر الأدوات هي أدوات Sysinternal.
وقبل أن نقوم بتشغيل الفايروس يجب أخذ حالة مسجل النظام الحاليه Registry ومن ثم بعد تشغيل الفايروس يتم أخذ حالة الـ Registry مره أخرى وبعدها تتم عملية المقارنه واكتشاف أي تغييرات حدثت على الريجستري، وسوف نستخدم الأداه الصغيره RegShot كما توضحه الصوره التاليه :
الأن سوف يتم تشغيل الفايروس ، وبعد تشغيل الفايروس خرجت الرسالة التاليه وعلى ما يبدوا هناك خطأ ما في الفايروس :
بعد تشغيل الفايروس بدأ الملف temp1.exe بالعمل في الذاكرة أم الملف الأخر فلم يعمل بسبب مشكلة ما ، على العموم يفضل حاليا بعد تشغيل الفايروس مباشره أخذ صوره أخرى لحالة مسجل النظام ومن ثم عمل مقارنه ما بين قيم الريجستري الجديده والقديمه واكتشاف التغيير والشكل التالي يوضح النتيجة ، ونلاحظ أن الفايروس يضيف برنامج جديد باسم svchost.exe يعمل مع بدء التشغيل ويكون هذا الملف موجود في المسار C:\windows . ولكن بعد الذهاب لذلك المسار لم يتم ايجاد الملف وهو دليل على أن هناك مشكله في الفايروس ولم يستطع انشاء الملف من الأساس!
وهذه الملفات التي قام الفايروس بانشائها وهي temp1.exe و temp2.exe وتكون موجوده في مجلد النظام system32 :
حاليا بعد اكتشاف التغييرات التي يحدثها الفايروس باستخدام الأدوات أعلاه فيمكن القيام بها مره أخرى ولكن باستخدام أدوات أخرى وذلك لاستخراج أكبر قدر ممكن من المعلومات ، فبالتالي يمكن اعاده تشغيل الجهاز التخيلي ومن ثم البدء بتحليل الفايروس باستخدام أداوت أخرى ولتكن أدوات الMonitoring مثل Process Monitor حيث تقوم هذه الأداوت بمراقبه كل العمليات في الProcess لكل العمليات Processes الموجودة في النظام.
وعند التعامل مع البرنامجProcess Monitor فسوف يقوم باخراج جميع المعلومات المتعلقه بأي عملية في النظام وهذا يؤدي لكثره المعلومات وصعوبه قرائتها وملاحظة الفايروس ، لذلك يجب عمل Filter واختيار مراقبة على عمليات معينه في الProcess المعين ، وسنقوم باختيار العمليات التي نريدها للعملية Process الذي نريد ، الشكل التالي يبين مراقبه العملية Malware.exe وسيتم مراقبة فقط عمليات الكتابة والقرائه على الملفات ومسجل النظام وبضعه أمور أخرى يبينها الشكل التالي:
هكذا ستكون النتيجة كلها عن العملية malware.exe وبالتالي يمكن ملاحظه التغييرات بكل سهوله ، الشكل التالي يوضح ذلك:
لنلقى نظره على معلومات الملفات التي أنشأها الفايروس ، والحصول على هذه المعلومات تكون بنفس الطريقة التي استخدمناها لمعرفة معلومات الفايروس الأصلي وسوف نستخدمها الأن لمعرفه تفاصيل كل من الملفات الجديده سولء بمعرفة الحجم و الهاش و اللغه التي يعمل بها ويفضل عمل قرائه سريعه للكود ، الشكل التالي يوضح الهاش الناتج لكل من الملفين :
وهم كالتالي:
temp1.exe: a5f8018df4209ae978b0907ce1664ff2
temp2.exe: 6350faf65f311c04cb4808ea3cad7ce7
لنلقى نظره على كل منهم على حده ، بالنسبة للملف الثاني temp2.exe فأهم ما فيه وهو محاولة الإتصال بالموقع (hnmy.3322.org) عن طريق السوكت TCP Socket ، الشكل التالي يوضح الكود المسؤول عن انشاء الإتصال:
أما الملف الأول temp1.exe فهو مشفر ببرنامج MEW 11 SE 1.2 ويحتاج للفك التشفير Unpacked ، وتمت تجربة برنامج Qunpacker ولكن لم ينجح في الفك لذلك لن نقوم بفكه حاليا ونكتفى بالمعلومات التي توفرت وهو أن الملف يكون موجود بالذاكرة temp1.exe فور عمل الفايروس.
ملخص للفايروس الذي قمنا بتحليله هو أنه يقوم بانشاء ملفين temp1.exe وهي يقوم بمهمه ما لا نعرف ماهيتها الى الأن ولكن لم تظهر لنا اي نتيجة بعد تشغيل الفايروس (لا يوجد ملفات ينشئها أو مهمه يقوم بها) ، الملف الأخر يقوم بالإتصال لأحد المواقع بالسوكت عن طريق المنفذ 8888 وتحصل مشكلة ويتوقف عن العمل كما وضحت أحد الصور السابقة.
موقع مكافي وضح عمل الفايروس W32/Perlovga كالتالي
وموقع Bitdefender وضح عمل الفايروس Trojan.Dropper.Small.APL كالتالي:
ولكن للأسف الملفات الموضحه بالمربع الأحمر في الشكل أعلاه لا توجد في الجهاز بعد أن أصبناه ، وهذا يعود لإحتمالين لا ثالث لها ، الأول هو أن يكون الفايروس الذي قمنا بتحليله يختلف عن الموجود لدى Bitdefender والإحتمال الأخر وهو الإحتمال الاكبر وجود مشكله ما أدت الى أن يتوقف الفايروس عن العمل ولم يكمل انشاء هذه الملفات !
كتابة المضاد للفايروس Perlovga Removal Tool:
بعد أن وضحنا عمل الفايروس بشكل سطحي ، يمكن الأن حذفه بسهوله من النظام وذلك من خلال البحث في المسارات التي تم كشفها والتي يستخدمه الفايروس ومن ثم القيام بتعديلها يدويا، أو كتابه بريمج صغير يقوم بالمهمه وهو ما سنفعله الأن ، أي كتابه أداه بسيطه للتخلص من هذا الفايروس Anti Perlovga وتقوم هذه الأداه بعد حذف الفايروس بتصليح المفاتيح في مسجل النظام والتي قام الفايروس بتغييرها.
الخوارزمية لهذا المنظف Removal تكون كالتالي :
- البحث في الذاكرة عن وجود الملف temp1.exe ، واذا وجد هذا الملف يتم اغلاقه .
- البحث في المسار system32 عن الملفين temp1.exe و temp2.exe ويتم حذفهم.
- البحث في المسار windows عن الملفات autorun.inf و svchost.exe و xcopy.exe ويتم حذفهم.
- تعديل القيمه في الريجستري وارجاعها الى القيمه الأصليه .
لتطبيق الخطوه الأولى سنحتاج لطريقة نمر من خلالها على جميع العمليات في النظام Enumerate Process ومن ثم نختبر كل عملية على حده ونرى هل أسم العملية هو نفس أسم الملف الذي نريد غلقه (في حال تغير الأسم يجب تغيير الإسم هنا أيضا ، ويمكن أن تكون المقارنة على أساس الHash للملفين) . وسوف يتم استخدام الدوال Process32First/Process32Next لإيجاد كل العمليات في النظام ومن ثم اغلاق العمليه باستخدام الداله TerminateProcess . الكود التالي يوضح العملية :
الخطوه الثانيه وهي حذف الملفات التي يخلفها الفايروس وهي temp1.exe و temp2.exe في مجلد الC:\WINDOWS\system32 ، بالإضافة الى الملفات autorun.inf و svchost.exe و xcopy.exe في المسار C:\WINDOWS . وسيتم استخدام الدالة DeleteFile للقيام بهذه المهمه ولكن بعد تعديل خصائص الملف وجعل الملف ملف عادي . الكود التالي يقوم بالمهمه :
الخطوه الأخيره وهي حذف قيمه الريجستري load الموجوده في المسار : HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows . وسيتم استخدام دوال الريجستري للتعامل معها ، والكود التالي يوضح حذف القيمه :
وكهذا يكون الكود الكامل بعد تجميع تلك الأجزاء على الشكل التالي:
نقوم الأن بعمل أعاده تشغيل الجهاز التخيلي ومن ثم اصابة الجهاز التخيلي بالفايروس ، وبعدها يتم نقل المضاد للفايروس الى الجهاز التخيلي ومن ثم تشغيله وتخرج الرسالة التاليه :
وهكذا يتم القضاء على الفايروس وحذف كل المخلفات التي يتركها Dropper ويعدل قيم الريجستري التي يغيرها الفايروس ، ويمكن عمل اعاده تشغيل بالضغط على ok .
هذه المقالة قمت بنشرها في 2009 في احد مواقع الهندسة العكسية وفي احد كتب الخاصه بالقضاء على الفايروسات
بارك الله فيكم أخي على هذا الشرح القيم و المليئ بالمعلومات
تحياتي