قصة تشريح الجثة: كيف عكسنا Hancitor



بالنسبة لأولئك الذين لعبوا بالفعل ما يكفي مع ألغاز الكراك ، قمنا بإحضار حصان طروادة جديد. في البرية ، لا يزال برنامج تنزيل Hancitor موجودًا في بيئته الطبيعية - رسائل البريد العشوائي. حاليا ، يتم استخدامه بنشاط لتحميل طروادة باندا المصرفية ، وهو تعديل زيوس سيئ السمعة.

في أحد أمسيات الصيف الباردة ، التقينا وجهاً لوجه ، وننظر في البريد الإلكتروني العشوائي. إذا كنت ترغب في مشاهدة ما تحتويه البرامج الضارة تحت الغطاء ، فقم بقراءة التحليل العكسي الجديد.

يبدو مستندنا الضار كما يلي:



افتراضيًا ، يتم حظر وحدات الماكرو ، لذلك يحذر النظام: "تم تعطيل وحدات الماكرو". ومع ذلك ، يقول محتوى الرسالة أنه يجب تضمين وحدات الماكرو. حسنًا ، لنفعل ذلك. بعد النقر فوق الزر تمكين المحتوى ، يصاب الكمبيوتر. الآن دعونا نرى أي نوع من الماكرو يتم تنفيذه وكيف تحدث العدوى بالضبط. يمكن القيام بذلك على الفور في Word بالانتقال إلى علامة التبويب وحدات الماكرو View-> Vacros \ View.



يمكنك القيام بمهنية أكثر - استخدم olevba من حزمة oletools. يمكنك تثبيت الحزمة هناك على الرابط. بعد ذلك ، اكتب olevba doc_file –c –decode> source.txt واحصل على مصدر الماكرو.



بواسطة الكود ، أريد أن أقول على الفور أن حصان طروادة ينتمي إلى فئة التنزيل. سيناريو ينكمش فقط من مكان ما إلى Malwara. لإثبات ذلك ، لنقم بفك تشفير سلاسل base64. إنه أكثر ملاءمة بالنسبة لنا للقيام بذلك على الفور من خلال hiew ، حتى لا ننسخ ولصق مائة مرة. للقيام بذلك ، نستخدم مكونًا إضافيًا خاصًا ، موصوفًا هنا . إليك ما حدث:



هذا نص برمجي ضار ، مقسم إلى جزئين وحفظه كـ 1.hta. من حيث المبدأ ، نحن لسنا مهتمين بشكل خاص بكيفية عملها. كل شيء شائع جدا. النقطة المهمة الوحيدة هي تحديد عنوان URL الذي يتم تنزيل الملف الضار فيه. دعونا نحاول العثور عليه ، لأن هذه المعلومات قد تكون مفيدة للأمان . يمكنهم إضافة قواعد الشبكة لحظر الطلبات على عناوين URL هذه ، والتي يمكن أن تنقذ الشركة من الإصابة.

ها! لا توجد روابط. ولكن من أين يأتي ملف 6.exe الذي يبدأ تشغيل 1.hta؟ حان الوقت لإلقاء نظرة أخرى على ملف إرساءنا في hiew ، ولكن بحذر أكبر:



نعم ، تم تضمين exe-shnik في مستند المرسى. نعم ، ومعبأة بشكل كبير. دعنا نشرح ما يحدث. يقوم الماكرو بإسقاط البرنامج النصي 1.hta الخبيث في مجلد Temp ويقوم بتشغيله ، ويقوم 1.hta بدوره بتشغيل 6.exe من الدليل الخاص به. من الواضح أن 6.exe هو نفس PE-shnik المعبأ الذي نراه على الشاشة. لكننا الآن نتساءل كيف ينخفض ​​6.exe في٪ temp٪. ويحدث هذا بسبب ميزة مثيرة للاهتمام في مجموعة Microsoft Office. والحقيقة هي أنه في أي مستند OLE ، يمكن تضمين أي ملف آخر بتنسيق Ole10Native.

إذا كانت هذه هي الحالة ، فعند بدء التشغيل ، يقوم MS-Office نفسه بإسقاط الملف المضمن بهذه الطريقة إلى المجلد٪ temp٪ تحت الاسم المحدد في رأس بنية Ole10Native. دعونا نلقي نظرة على هذا الكائن. لقد ساعدنا البرنامج المساعد لمدير FAR - OLE2Viewer . نفتح المستند الضار في المكون الإضافي ، وانتقل إلى دليل ObjectPool \ _1593522492 وشاهد هذا:



انسخ هذا الملف (Ole10Native) وافتحه في hiew.



هنا نرى تحت اسم كائن OLE الخاص بنا - 5c.pif سيسقط في المجلد٪ temp٪. الآن نعود إلى الماكرو لدينا. مهمته هي إطلاق exe-shnik في حالة سكر.



في الواقع ، على وجه الدقة ، لا يبدأ الماكرو دائمًا الملف الذي تم إسقاطه من خلال 1.hta ، ولكن أيضًا على النحو التالي: Shell "cmd.exe / c ping localhost -n 100 &&" & Environ ("Temp") & "\ 6 .pif "، vbHide



تعتمد طريقة التشغيل ، كما نرى ، على وجود العمليات التالية في النظام: bdagent.exe و PSUAMain.exe. فلماذا تحتاج ping localhost -n 100؟ وهذه خدعة يونانية قديمة لخلق تأخير اصطناعي ، في حالة حدوث ذلك. عادة ما يتم استخدام اختلافاتها لإزالة الذات.

في هذه المرحلة ، درسنا تشغيل مستند ضار. أصبح من الواضح لنا أن المستند نفسه لا ينتمي إلى برامج ضارة من نوع Trojan-Downloader ، كما بدا للوهلة الأولى ، ولكنه مناسب لنوع Trojan-Dropper. إليك ما حدث عند بدء التشغيل:



الآن يبقى تفكيك الحمولة نفسها. لقد أدركنا بالفعل أن طروادة لدينا معبأة ، لذلك يجب علينا فكها أولاً. عادة ما تنقسم هذه العملية إلى مرحلتين:
1. إزالة التفريغ غير المعبأ + استعادة جدول الاستيراد.
2. تحليل وتنقية المتغيرات العالمية.

نحتاج إلى المرحلة الثانية نظرًا لوجود العديد من وظائف واجهة برمجة التطبيقات التي ترجع إلينا قيمًا غير متكررة نتيجة لعملها. على سبيل المثال ، سيرجع CreatHeap لنا واصف كومة ، والذي سيتم استخدامه في العمل. غالبًا ما يكون هناك تدقيقات للنوع في الكود: إذا كان واصف الكومة == 0 ، فاحصل على واصف الكومة ، وإلا استخدم واحدًا بالفعل تمت تهيئته . ولكن في وقت التفريغ ، كان المتغير الذي يحتوي على الواصف المعطى قد قام بتهيئته بالفعل وفي تلك اللحظة كان الواصف صالحًا. عندما نحاول بدء التفريغ ، سيحتوي المتغير مع واصفنا على القيمة القديمة ، أي لا تساوي 0 ، مما يعني أن الاختبار سينجح.

بعد ذلك ، بمجرد أن يحاول البرنامج استخدام هذا الواصف ، سيطرح نظام التشغيل استثناء وسيتعطل البرنامج مع وجود خطأ. لذلك ، لتجنب هذا ، تحتاج إلى صفر هذه المتغيرات. وعادة ما تكون موجودة في قسم قابل للكتابة من البيانات. ربما تقترح فتح هذا القسم في محرر ست عشري واستبدال كل شيء بالأصفار؟ أنت على حق جزئيًا ، ولكن لا يجب عليك اتخاذ إجراءات متهورة. هناك أحصنة طروادة تتحقق من المتغيرات ليس على 0 ، ولكن على DWORD عشوائي. واعتمادًا على ما إذا كان الاختبار قيد الاختبار أم لا ، يتم اتخاذ إجراءات مختلفة. ليس عليك الذهاب بعيداً للحصول على أمثلة. مجرد إلقاء نظرة على Cridex (اختفى مؤخرًا في مكان ما من الرادارات ، على ما يبدو أنه تم ترقيته بالكامل إلى EMOTETA).

لذا ، دعنا ندير العينة (في جهاز افتراضي بالطبع). من المستحسن أيضًا أن تمر حركة المرور التي ستخرج من الجهاز الظاهري عبر VPN.

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

بالنسبة للتفريغ ، نستخدم الأداة الرائعة - عملية تفريغ ، والتي يمكن العثور عليها هنا . هذه الأداة لا تعثر فقط على جميع الوحدات النمطية القابلة للتنفيذ المخفية وتفريغها ، ولكن أيضًا تستعيد جدول الاستيراد نفسه. يجب تشغيل الأداة المساعدة كمسؤول بالطريقة التالية: pd / pid xxxx ، حيث xxxx هو معرف عملية Trojan. بعد ذلك ، ستقوم الأداة بتفريغ جميع وحدات العملية. أزلنا الإضافات وهذا ما تبقى:



اسم الملف القابل للتنفيذ لعملية Trojan هو 1.exe. اتضح أن حصان طروادة غير المعبأ كان موجودًا عند 0x2C0000. فتحه في hiew:



مجرد عين سعيدة! الآن الملف غير معبأ ، يمكن رؤيته بوضوح. تم التعرف على جدول الاستيراد أيضًا. دعونا نفتحه في IDA-PRO.



لقد قمنا بالفعل بإعادة تسمية بعض الوظائف أثناء فرز العينة. أول شيء يبدأ حصان طروادة هو تحديد عنوان تحميل الوحدة النمطية الخاصة به. وحقاً: كيف عرف في أي عنوان كعبه غير معبأ؟ يتم ذلك باستخدام تقنية قديمة مثبتة - قلب صفحة ذاكرة مرة أخرى عند 0x1000 نسبة إلى العنوان الحالي حتى نأتي عبر وحدات البايت "MZ". يعمل هذا لأن الوحدات النمطية القابلة للتنفيذ تقوم دائمًا بتحميل نظام التشغيل على عنوان مضاعف لـ 0x1000. تحقق من ذلك بنفسك. في حالتنا ، تم تعيين حد 100 تجريد.



إذا لم يفهم شخص ما مكان حدوث التقليب ، فهنا هنا:
النتيجة + = 0xFFFFF000 تساوي النتيجة - = 0x1000.

بعد تلقي عنوان تنزيل الوحدة النمطية الخاصة به ، يتلقى حصان طروادة غير المعبأ عناوين الوظائف اللازمة لتشغيله. بادئ ذي بدء ، يتم البحث في عناوين وظيفتين - LoadLibraryA و GetProcAddress. بمعرفة عناوين هذه الوظائف ، يمكنك استخدامها للحصول على الباقي. هذه الوظائف موجودة في مكتبة kernel32. يتم الحصول على عنوانه بقراءة العنصر الأول (صفر - ntdll ، أول kernelbase ، إلخ) من قائمة الحلقات التي تصف جميع الوحدات المحملة في ترتيب التهيئة ببنية _LDR_DATA_TABLE_ENTRY. يتم سحب المؤشر إلى القائمة من PEB.



بعد تلقي العنوان kernel32.dll (بدءًا من Windows 7 - kernelBase.dll) ، يمكن لـ Trojan تحليل جدول التصدير يدويًا والعثور على الدالتين الضروريتين ، والذي يتم تنفيذه بشكل متوقع في روتين sub_EF1E60.



الآن ألق نظرة على الوظيفة التي أطلقنا عليها getHeap.



هنا نلاحظ فقط الوضع الذي تم وصفه أعلاه. في وقت التفريغ ، كان المتغير hHeap يحتوي على قيمة 600000h. لذلك لن يتم استدعاء GetProcessHeap. بدلاً من ذلك ، سينتقل البرنامج إلى تسمية loc_EF11DD ، حيث يتم استدعاء HeapAlloc بمقبض غير صالح ، مما سيسبب لنا خطأ. لذلك ، نأخذ محرر السداسي ونضع هذا الرقم. أحصينا ستة أماكن مماثلة.

بعد ذلك ، يبدأ المرح. يقوم حصان طروادة بإنشاء معرف "عميل" فريد بناءً على الرقم التسلسلي للقرص الثابت وعنوان MAC. المعلومات الواردة هنا:



نحصل أيضًا على ما يلي: عنوان IP وإصدار نظام التشغيل واسم الشبكة واسم المستخدم. بناءً على كل هذا ، يتم إنشاء طلب HTTP إلى لوحة المشرف ، ولم نكن نعرف عنوانه بعد. ليس في السطور (حتى في شكل غير معبأ). لكنها ليست هناك ، لأنها مشفرة في التكوين. يمكن سحب عنوانه من الرمز:



يزن التكوين 0x2008 بايت ولديه التنسيق التالي: أول 8 بايت هي مفتاح RC4 و 0x2000 بايت هي البيانات المشفرة.



تتضح حقيقة استخدام خوارزمية تشفير RC4 من القائمة التالية:



يرجى ملاحظة أن أول 8 بايتات وحدها ليست مفتاح RC4. المفتاح هو تجزئة SHA1 لهذه البايت. تحتاج أيضًا إلى الانتباه إلى الإشارة 0x280011 لوظيفة CryptDeriveKey. لدى MSDN بيان إخلاء مسؤولية بخصوص هذه العلامة:



يتضح من ذلك أن 16 بتة عالية من هذا العلم تحدد حجم المفتاح بالبتات. أي أن حجم المفتاح بالبايت هو: (0x280011 >> 16) / 8 = 5. لذلك ، سيكون المفتاح أول خمس بايت من التجزئة من الثماني بايت الأولى من التكوين. دعنا نتخلص من التهيئة ونكتب نصًا ثعبانيًا لفك تشفيره لنا. يبدو النص كما يلي:



نتيجة عمله كانت ملف config.rc4. فتحه في hiew:



نرى قائمة مشفرة من مناطق الإدارة. الكلمة الأولى هي "19nep07" - رقم البنية. يتم تخصيص 16 بايت لذلك. فيما يلي قائمة بعناوين URL للمشرف مفصولة بعلامة "|".

لذا ، فإن المكالمة الأولى للوحة الإدارة سيكون لها التنسيق التالي:
GUID = 3068075364164635648 & BUILD = 19nep07 & INFO = WIN-56G04BL06SL @ WIN -56G04BL06SL \ Reverse & IP = 35.0.127.52 & TYPE = 1 & WIN = 6.1 (x32



ثم يتم إرسال الطلب الذي تم إنشاؤه أولاً في قائمة لوحة المشرف.



بعد ذلك ، تتم قراءة استجابة المسؤول ، بالطبع ، إذا كانت لا تزال على قيد الحياة. يجب أن تكون الإجابة بترميز base64. إذا لم يكن الأمر كذلك ، فسيتم أخذ المسؤول التالي من القائمة. أحيانًا يعيد المسؤولون المباشرون إجابة غريبة:



إنه مألوف ، أليس كذلك؟ نعم ، هذه هي نفس الأرقام ! في الواقع ، أحد المؤلفين يعرف لماذا يبدأ المشرف في إعادتهم! في شكل عادي ، يعود الأمر. لسوء الحظ ، من المستحيل أن نقول بكل تأكيد ما سيكون تنسيق الاستجابة ، نظرًا لعدم وجود حركة مرور ، فإن جميع المسؤولين قد ماتوا. يتم أيضًا فك ترميز الملف الذي تم فك تشفيره إلى 0x7A:



يجب أن يحتوي الرد على أمر. إذا لم يكن الأمر كذلك ، فهناك نداء إلى لوحة المشرف التالية. يتم ترميز رمز الأمر كـ "x:" ، حيث x هو حرف ترميز أمر معين. هناك 7 منهم: 'r'، 'l'، 'e'، 'b'، 'd'، 'c'، 'n'. خذ بعين الاعتبار الأمرين "b" و "r".

معالجات هذه الأوامر لها نفس الوظيفة. سميناها مثل GetExe. إليك ما يبدو عليه:



أعتقد أن كل شيء واضح هنا. يقوم حصان طروادة بإجراء طلب http ويتم إرجاع الملف القابل للتنفيذ في شكل مضغوط ، ثم يتم فك ضغطه. ثم الاختلافات ممكنة. في حالة الأمر "b" ، يتم تنفيذ الإجراءات الثلاثة التالية:

1. إنشاء عملية svchost في شكل مجمد



2. الحقن في مساحة العنوان لعملية الوحدة النمطية التي تم تنزيلها



3. التحكم في النقل إلى الوحدة المحقونة



في حالة الأمر r ، تحدث الإجراءات الثلاثة التالية:
1. تنزيل الملف القابل للتنفيذ عن طريق استدعاء دالة GetExe.
2. حفظ الملف الذي تم تنزيله في مجلد مؤقت باسم عشوائي.
3. قم بتشغيل ملف تم إسقاطه.



تم

PS في المرة القادمة يمكننا تحليل إما الباندا أو بعض التشفير. اكتب في التعليقات أي البرامج الضارة التي تهتم بها كثيرًا (لأغراض البحث بالطبع).

Source: https://habr.com/ru/post/ar418185/


All Articles