
في الآونة الأخيرة ، اكتشف متخصصو PT ESC وثيقة تنسيق Publisher تسمى "دعوة 29-30 نوفمبر 2018.pub" (1edd5b6a02ec82cec381c1a1ec74a67e). في هذه المقالة ، سوف نخبرك بكيفية تحول المستند ذي الشكل العادي إلى حصان طروادة ، مما يسمح للمهاجم بالتقاط صورة من كاميرات الويب أو تسجيل الصوت عن طريق الأمر أو عند اكتشاف نافذة Skype أو تشغيل البرامج النصية PowerShell أو التقاط لقطات شاشة أو نسخ الملفات من أجهزة الوسائط.
لذلك ، عند فتح المستند ، تظهر نافذة ذات كعب ضبابي للوثيقة وطلب تضمين البرنامج النصي Microsoft Publisher.

بعد قيام المستخدم بتشغيله ، يتم تشغيل البرنامج النصي المدمج في المستند في JavaScript. يبدو مثل هذا:

ستكون نتيجة البرنامج النصي هي فك تشفير ملفين ، PDF و EXE ، من Base64. سيتم كتابة كلا الملفين إلى C: \ Users \ {اسم المستخدم} \ AppData \ Roaming \ DBFUpdate. وفقًا لذلك ، سيتم تنفيذ كلا الملفين ، وسيشاهد المستخدم مثل هذا كعب الروتين على شاشة الوثيقة:

الكنز هنتر RAT
يستخدم المهاجمون RAT متعدد الوحدات مع مجموعة كبيرة من الوظائف التي توفر الوصول الكامل إلى الجهاز المصاب.
ميزات الرمز:
- كُتب بالكامل بلغة C ++ مع عدد كبير من تصميمات STL المستخدمة داخليًا.
- تطبيق مكتبة دفعة ، ولا سيما JSON والأرشيف.
- وظائف تصحيح الأخطاء (المزيد في القسم الموجود على stager).
طروادة الرئيسية
طروادة الرئيسية مثبتة على آلة الضحية وهي عبارة عن منصة يتم تحميل الوحدات الخبيثة عليها من C2.
أولاً ، يقوم stager بتهيئة دليل العمل ، والذي سيقوم لاحقًا بتخزين المعلومات التي تم جمعها بواسطة الوحدات النمطية والأدوات المساعدة اللازمة لعمل الوحدات ، إلخ.

فيما يلي تهيئة المسارات لإنشاء دليل العمل:

بعد إنشاء الدلائل اللازمة ، يقوم حصان طروادة الرئيسي بجمع معلومات حول الجهاز المصاب ويرسله إلى خادم التحكم.
ترويان مهتم بهذه البيانات:
- معرف إصدار نظام التشغيل الذي يعمل عليه حصان طروادة الرئيسي ؛
- لغة الواجهة الافتراضية
- رقم الإصدار الرئيسي لنظام التشغيل Service Pack ؛
- اسم الكمبيوتر ومعرف الجهاز (للحصول على تفاصيل حول الحصول على معرف الجهاز ، انظر القسم الموجود في بروتوكول الشبكة).
هذه هي الطريقة التي يتم بها جمع المعلومات حول الجهاز المصاب:

بعد ذلك ، يتم إصلاح طروادة الرئيسية على الجهاز المصاب من خلال تعديل القيمة في التسجيل في HKCU \ Environment \ UserInitMprLogonScript. هذا هو اسم الملف القابل للتنفيذ الذي تم تخصيصه أثناء تهيئة دليل العمل ، وفي هذه الحالة يساوي "DCTHOST.exe". تم توضيح هذه الطريقة
في مدونة Hexacorn ، كما تم استخدامها من قبل APT28 ومجموعة الكوبالت في ComDLLDroper الخاص بهم.

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

في النهاية ، يبدأ موضوعان. أحد سلاسل العمليات يبدأ مؤقت ، والذي يستيقظ افتراضيًا كل ثانية ويحاول طلب أمر من C2.

تحميل الدفق الثاني مكتبات إضافية والوحدات النمطية. تحتوي المكتبات ، مثل الوحدات النمطية ، على معرّف ، ولكن على عكس الوحدات النمطية ، تكون معرّفات المكتبات سالبة ، ابدأ بـ -1 ، وتنمو باتجاه أرقام أقل. فيما يلي قائمة بالمكتبات التي تم تنزيلها من C2.

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

بروتوكول الشبكة
يحدث التبادل بين البرنامج و C2 باستخدام بروتوكول ثنائي مكتوب ذاتيًا. يتم وصف كل رسالة باستخدام BinPackage (الاسم مأخوذ من RTTI). كل BinPackage هو عبارة عن غلاف على std :: vector ، والذي يخزن مجموعة PackageRecord (اخترع الاسم). PackageRecord هو الحد الأدنى لوحدة تخزين البيانات.
struct PackageRecord { _DWORD dataId; _DWORD datatype; _DWORD szData; char[] data; };
المزيد عن مجالات هذا الهيكل:
- dataId - يشير إلى نوع السجل. إما أن يكون الإدخال هو معرف الوحدة النمطية أو معرف الأمر أو الحمولة النافعة.
- szData - حجم البيانات المخزنة في السجل.
- نوع البيانات هو نوع البيانات.
في المجموع ، تم تسجيل استخدام ثلاثة أنواع من البيانات:
- تعني قيمة "0" أنه يجب تفسير البيانات المخزنة في السجل على أنها DWORD.
- يجب تفسير القيمة "1" - البيانات المخزنة في السجل كسلسلة ASCIIZ.
- يجب تفسير القيمة "2" - البيانات المخزنة في السجل على أنها بيانات مشفرة / مخزن مؤقت خام.
عند إرسال BinPackage إلى خادم التحكم ، تتم إضافة معرف الجهاز إليه. المعرف هو المعرف الفريد العمومي للقسم الذي يتم منه قطع جميع الأحرف الخاصة. في الشكل - الحصول على معرف الجهاز:

قبل الإرسال ، يتم تجميع جميع السجلات المخزنة في BinPackage بالتتابع في مخزن مؤقت واحد ويتم تشفيرها. للتشفير ، يتم
استخدام مكتبة
WinAES ، وتحديدا AES-128-CBC.
باستخدام CryptoAPI Windows ، يتم إنشاء صفيفين عشوائية زائفة 16 بايت. واحد للرابع ، والآخر للمفتاح. يتم إجراء التشفير وتتم إضافة البيانات المشفرة مرة أخرى إلى BinPackage ، والذي يحتوي على الحزمة المشفرة ويتكون من ثلاثة إدخالات:
- سجل بالمعرف 0x777 - يحتوي على المفتاح المستخدم للتشفير ؛
- سجل بالمعرف 0x555 - يحتوي على IV المستخدم للتشفير ؛
- السجل ذو المعرف 0x999 - يحتوي على بيانات مشفرة (بشكل عام ، يشير السجل بهذا المعرف إلى حمولة ويستخدم فقط لتخزين البيانات المشفرة).
بعد انتهاء عملية التشفير ، يتم جمع BinPackage الذي تم إنشاؤه مرة أخرى في مخزن مؤقت واحد ويتم إرساله عبر طلب HTTP POST إلى خادم الإدارة 151.80.237.222.

فيما يلي مثال لحزمة تحتوي على معلومات الجهاز:

وهذا مثال على حزمة مشفرة بمعلومات النظام:

وحدات
يتم تحميل كل وحدة ، باستثناء Core ، من خادم التحكم. يمكن تقسيم جميع الوحدات النمطية إلى فئتين - الوحدات النمطية التي يتم تحميلها تلقائيًا ، والوحدات النمطية التي يتم تحميلها عند الطلب من خادم التحكم.
مثال على حزمة تطلب وحدة نمطية:

استجابة لطلب الوحدة:

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

علاوة على ذلك ، يتم إعطاء أسماء الوحدات النمطية في النموذج الذي توجد به في RTTI كأسماء فئة.
وحدة CCore
هذه الوحدة تمثل الوظائف الأساسية وهي مدمجة مباشرة في طروادة الرئيسية. يمكن رؤية منشئه في الجدول أدناه:
معرف الوحدة | معرف الفريق | الوصف |
---|
0 | 0 | في الأساس ، فإن حصان طروادة بدلاً من أمر هو روتين ، ولا يمكن تحديد الغرض الدقيق منه |
1 | تعديل تكوين الوحدة |
2 | طلب معلومات الكمبيوتر |
3 | قم بتنزيل الأداة المساعدة من خادم التحكم |
4 | طلب سرد دليل يحتوي على أدوات مساعدة |
5 | قم بتنزيل الوحدة وتنفيذها |
وحدة شيل
توفر هذه الوحدة شلًا بعيدًا لجهاز مصاب. عند تهيئة الوحدة النمطية ، يتم إنشاء عملية cmd.exe ، حيث يتم إرفاق أنبوبين: واحد للإدخال القياسي والآخر للإخراج القياسي ، يتم من خلاله تلقي الأوامر وإرسالها من خادم التحكم والعكس. أيضًا في هذه اللحظة ، يبدأ مؤشر ترابط ، يأخذ تلقائيًا كل المخرجات ويرسلها إلى خادم التحكم. يوضح الشكل تهيئة وحدة CShell.

معرف الوحدة | معرف الفريق | الوصف |
---|
2 | 0 | إرسال قيادة لقذيفة |
1 | اطبع الملف. تتم قراءة الملف ، والمسار الذي يتم نقله من خادم التحكم ، ويتم تحميل محتويات هذا الملف إلى خادم التحكم |
2 | الحصول على قائمة بجميع الأقراص الموجودة في النظام. يتم إرسال البيانات إلى خادم التحكم بتنسيق JSON |
3 | قم بتنزيل الملف من خادم التحكم. المسار الذي سيتم حفظ الملف به ، ويتم استلام البيانات من خادم التحكم |
وحدة CFileSystemBrowser
هذه وحدة نمطية غير فعالة تسمح لك عند الطلب بتلقي معلومات حول بنية نظام الملفات. هذا هو كيفية حدوث تهيئة الوحدة النمطية CFileSystemBrowser:

معرف الوحدة | معرف الفريق | الوصف |
---|
3 | 0 | الحصول على قائمة بجميع الأقراص الموجودة في النظام. يتم إرسال البيانات إلى C2 بتنسيق JSON |
1 | الحصول على قائمة الدليل. يتم إنشاء قائمة بتنسيق JSON |
2 | اطبع الملف. تتم قراءة الملف ، والمسار الذي يتم نقله من C2 ، ويتم تحميل محتويات هذا الملف إلى C2 |
3 | حذف الملف. يتم نقل المسار إلى الملف من C2 |
وحدة CScreenShot
تسمح لك هذه الوحدة بالتقاط لقطات شاشة أو التقاط صور من كاميرا ويب. يمكنه القيام بذلك عند الطلب ومع فترة محددة في المؤقت.

معرف الوحدة | معرف الفريق | الوصف |
---|
4 | 0 | التقط لقطة شاشة وأرسلها إلى خادم التحكم |
1 | قم بتشغيل مؤقت ، وبعد ذلك يتم أخذ لقطة شاشة من شاشة الجهاز. يتم حزم لقطات الشاشة الناتجة في BinPackage وحفظها في مجلد السجلات. يتم إنشاء أسماء الملفات باستخدام GetTempFileName API مع البادئة "MS_". |
2 | احصل على مقاطع فيديو للأجهزة المتوفرة على جهاز مصاب |
3 | التقط إطارًا من كاميرا الويب وأرسله إلى خادم التحكم |
وحدة CSender
لم يتم تنشيط هذه الوحدة في البداية. يقوم بتحميل محتويات مجلد السجلات إلى خادم التحكم. يتم تنشيطه عندما يأتي طلب لتغيير التكوين ، والذي يحتوي على فترة التحقق.

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

وحدة CDictaphone
تقوم هذه الوحدة بتسجيل الصوت حسب الأوامر أو عند الكشف عن نافذة Skype. عند بدء التشغيل ، يبدأ مؤشر ترابط يسرد جميع الإطارات والإطارات الفرعية الخاصة به في النظام ويبحث عن النافذة بين الفئات التي يكون اسم صفها هو TLiveConv Conversation أو TCallMonitorControl. إذا تم العثور على مثل هذه النافذة ، يبدأ التسجيل. أدناه هو تهيئة وحدة CDictaphone:

و سكايب نافذة البحث

يتم التسجيل عبر MCI عن طريق إرسال أوامر خاصة. هكذا تبدو دورة الكتابة في وحدة CDictaphone:

بعد إغلاق النافذة أو تلقي أمر لإكمال التسجيل ، يتم حفظ البيانات المستلمة في مجلد مؤقت ، وبعد ذلك يتم تشفيرها بواسطة أداة ترميز MP3 العرجاء (تعتبر أداة مساعدة ويجب تحميلها بالفعل ، لم يكن من الممكن الحصول عليها من خادم التحكم). يتم حفظ الملف المشفر في مجلد السجلات. إنشاء اسم مجلد يشبه إنشاء أسماء لقطات.
معرف الوحدة | معرف الفريق | الوصف |
---|
7 | 0 | ابدأ التسجيل وأكمله بعد 15 دقيقة |
1 | توقف عن التسجيل |
2 | التحقق من الحالة: يتم التسجيل قيد التقدم |
CProcessesManager الوحدة النمطية
هذه وحدة نمطية غير فعالة ، قادرة على إرجاع قائمة العمليات عند الطلب أو الإنهاء بواسطة PID الذي تم تمريره إليها.

معرف الوحدة | معرف الفريق | الوصف |
---|
8 | 0 | إرجاع قائمة العمليات: أسمائهم ومعرف PID واسم المستخدم الذي يملك العملية. |
1 | اكتمال عملية PID |
وحدة CDownloader
تم تصميم الوحدة النمطية لتحميل الملفات الكبيرة إلى خادم التحكم. ينفذ نقل البيانات عن طريق القطع ، التي يتم تحديد حجمها من خلال التكوين الخاص بها. تقوم الوحدة النمطية بقراءة البيانات من ملف ، والمسار الذي تتلقاه من خادم التحكم ، وحزم الأجزاء في BinPackage. لكل BinPackage يحتوي على قطعة ، تتم إضافة إدخال مع معرف 0x888 ، بما في ذلك المسار إلى الملف. بعد اجتياز كل قطعة ، يتم النوم لمدة 5 ثوان.

معرف الوحدة | معرف الفريق | الوصف |
---|
9 | 0 | فشل كعب الروتين في تحديد القيمة الدقيقة |
1 | ينفذ نقل كمية كبيرة من البيانات (0x500000 بايت) ، وبعد ذلك يقيس الوقت الذي يقضيه في النقل ، ويرسل هذه القيمة إلى C2 |
2 | قم بتنزيل ملف من الجهاز |
وحدة CPS
هذه الوحدة تسمح لك بتشغيل البرامج النصية PowerShell.

معرف الوحدة | معرف الفريق | الوصف |
---|
10 | 0 | يستقبل البرنامج النصي PowerShell من C2 وينفذه |
وحدة CDeviceMonitor
وحدة نمطية سلبية تراقب أجهزة الوسائط المتصلة ونسخ الملفات منها. يستخدم رسائل البث WM_DEVICECHANGE للكشف عن اتصال الجهاز. بعد توصيل الجهاز بخادم التحكم ، يتم إرسال المعلومات حول وقت توصيل الجهاز ، وتسمية وحدة التخزين والمسار إلى الجهاز. يشبه هذا الرمز المستخدم للحصول على المسار إلى الجهاز. يتم نسخ جميع الملفات إلى مجلد السجلات. يتم إنشاء الأسماء بنفس طريقة لقطات الشاشة. يتم إنشاء ملف fsIndex.dat بشكل منفصل ، حيث يوجد القاموس المتسلسل مع دفعة :: archive. يخزن هذا القاموس المسارات الأصلية للملفات التي تم نسخها وتجزئة MD5 الخاصة بها. أدناه هو استلام DevicePath:

كخاتم ، العديد من التوصيات:
- لا حاجة لفتح مرفقات في رسائل من مستلمين مجهولين ، أقل بكثير تشمل برنامج نصي Microsoft Publisher.
- لا تقل خطورة النقر على الروابط الموجودة في رسائل مرسلين غير معروفين. يمكن للموقع الذي تذهب إليه استضافة برامج ضارة سيتم تنزيلها تلقائيًا على جهاز الكمبيوتر الخاص بك.
- يجب عليك تحديث البرنامج بانتظام ، خاصة Microsoft Windows و Microsoft Office ، مما سيغلق الوصول إلى مجموعة واسعة من البرامج الضارة.