في منشور ما ، سوف نصف كيف استخدمت مجموعة OceanLotus cybergroup (APT32 و APT-C-00) مؤخرًا أحد الاستغلالات العامة لـ
CVE-2017-11882 ،
مشكلة عدم حصانة تلف الذاكرة في Microsoft Office ، وكيف توفر البرامج الضارة للمجموعة الثبات في الأنظمة
المشكوك فيها دون أن تترك أي آثار . بعد ذلك ، وصفنا كيف استخدمت المجموعة ، منذ بداية عام 2019 ، محفوظات الاستخراج الذاتي لتشغيل الشفرة.
OceanLotus متخصصة في التجسس الإلكتروني ، مع الأهداف ذات الأولوية في جنوب شرق آسيا. يقوم المهاجمون بتزوير المستندات التي تجذب انتباه الضحايا المحتملين من أجل إقناعهم بأداء مستتر ، وكذلك العمل على تطوير الأدوات. تختلف الطرق المستخدمة لإنشاء الأفخاخ في هجمات مختلفة - من الملفات ذات "الامتداد المزدوج" ، والمحفوظات التي يتم استخراجها ذاتيًا ، والمستندات ذات وحدات الماكرو إلى عمليات الاستغلال المعروفة.
باستخدام استغلال في محرر المعادلات Microsoft
في منتصف عام 2018 ، أطلقت OceanLotus حملة باستخدام الضعف CVE-2017-11882. تم تحليل إحدى الوثائق الخبيثة لمجموعة cybergroup من قبل خبراء مركز 360 Threat Intelligence (
دراسة باللغة الصينية ) ، بما في ذلك وصف مفصل للاستغلال. في المنشور أدناه ، نظرة عامة على هذا المستند الضار.
المرحلة الاولى
FW Report on demonstration of former CNRP in Republic of Korea.doc
(SHA-1:
D1357B284C951470066AAA7A8228190B88A5C7C3
) بما ورد في الدراسة المذكورة أعلاه. من المثير للاهتمام أنه يستهدف المستخدمين المهتمين بالسياسة الكمبودية (CNRP - حزب الخلاص الوطني الكمبودي ، المنحل في نهاية عام 2017). على الرغم من الامتداد .doc ، يحتوي المستند على تنسيق RTF (انظر الشكل أدناه) ، ويحتوي على رمز غير هام ، كما أنه مشوه.
الشكل 1. القمامة في RTFعلى الرغم من وجود عناصر مشوهة ، يفتح Word ملف RTF هذا بنجاح. كما يتضح من الشكل 2 ، إليك بنية EQNOLEFILEHDR مع إزاحة 0xC00 ، متبوعة برأس MTEF ، ثم إدخال MTEF (الشكل 3) للخط.
الشكل 2. FONT سجل القيم
الشكل 3. شكل تسجيل FONTمن الممكن حدوث تجاوز في حقل
الاسم ، لأنه لم يتم تحديد حجمه قبل النسخ. اسم طويل للغاية يؤدي إلى ثغرة أمنية. كما يتضح من محتويات ملف RTF (الإزاحة 0xC26 في الشكل 2) ، يتم تعبئة المخزن المؤقت برمز shell ، متبوعًا بأمر وهمية (
0x90
) وعنوان المرسل
0x402114
. العنوان عنصر حوار في
EQNEDT32.exe
يشير إلى عبارة
RET
. يؤدي هذا إلى EIP للإشارة إلى بداية حقل
الاسم الذي يحتوي على كود القشرة.
الشكل 4. بداية استغلال shellcodeيخزن العنوان
0x45BD3C
حتى يصل إلى مؤشر إلى بنية
MTEFData
المحملة حاليًا. هنا هو بقية كود القشرة.
الغرض من كود shell هو تنفيذ الجزء الثاني من كود shell المضمن في وثيقة مفتوحة. أولاً ، يحاول shellcode المصدر العثور على واصف الملف للمستند المفتوح ،
NtQuerySystemInformation
على جميع واصفات النظام (
NtQuerySystemInformation
مع وسيطة
SystemExtendedHandleInformation
) والتحقق مما إذا كانت واصف
PID وعملية
WinWord
NtQuerySystemInformation
مع
PID وما إذا كان قد تم فتح المستند باستخدام قناع الوصول -
0x12019F
.
لتأكيد الكشف عن واصف الصحيح (وليس واصف مستند مفتوح آخر) ، يتم عرض محتويات الملف باستخدام دالة
CreateFileMapping
، والتحقق من رمز shell لمعرفة ما إذا كانت وحدات البايت الأربع الأخيرة من المستند تتوافق مع "
yyyy
" (طريقة صيد البيض). بمجرد العثور على تطابق ، يتم نسخ المستند إلى مجلد مؤقت (
GetTempPath
) كـ
ole.dll
. ثم تتم قراءة آخر 12 بايت من المستند.
الشكل 5. علامات نهاية الوثيقةالقيمة 32 بت بين علامات
AABBCCDD
و
yyyy
هي إزاحة
AABBCCDD
التالي. يطلق عليه باستخدام الدالة
CreateThread
. استخرج رمز القشرة نفسه المستخدم من قبل OceanLotus من قبل.
لا يزال سيناريو محاكاة بيثون الذي أصدرناه في مارس 2018 يعمل على تفريغ المرحلة الثانية.
المرحلة الثانية
استخراج المكونات
يتم تحديد أسماء الملفات والدليل بشكل حيوي. تحديد رمز بشكل عشوائي اسم ملف قابل للتنفيذ أو DLL في
C:\Windows\system32
. ثم يقدم طلبًا إلى موارده ويسترجع حقل
FileDescription
لاستخدامه كاسم للمجلد. إذا لم ينجح هذا ، فإن الرمز يحدد بشكل عشوائي اسم المجلد من دلائل
%ProgramFiles%
أو
C:\Windows
(من GetWindowsDirectoryW). إنه يتجنب استخدام اسم قد يتعارض مع الملفات الموجودة ، ويضمن أنه لا يحتوي على الكلمات التالية:
windows
أو
Microsoft
أو
desktop
أو
system
أو
system32
أو
syswow64
. إذا كان الدليل موجودًا بالفعل ، تتم إضافة "NLS_ {6 أحرف}" إلى الاسم.
0x102
تحليل المورد
0x102
ويتم تفريغ الملفات في
%ProgramFiles%
أو
%AppData%
، إلى مجلد محدد بشكل عشوائي. تم تغيير وقت الإنشاء ليكون له نفس قيم
kernel32.dll
.
على سبيل المثال ، إليك مجلد وقائمة بالملفات التي تم إنشاؤها عن طريق تحديد الملف القابل للتنفيذ
C:\Windows\system32\TCPSVCS.exe
كمصدر للبيانات.
الشكل 6. استخراج المكونات المختلفةبنية المورد
0x102
في القطارة معقدة للغاية. باختصار ، يحتوي على:
- أسماء الملفات
- حجم ومحتوى الملفات
- تنسيق الضغط (
COMPRESSION_FORMAT_LZNT1
المستخدمة من قبل وظيفة
RtlDecompressBuffer
)
تتم إعادة تعيين الملف الأول كـ
TCPSVCS.exe
، وهو
AcroTranscoder.exe
الشرعي (وفقًا
FileDescription
، SHA-1:
2896738693A8F36CC7AD83EF1FA46F82F32BE5A3
).
ربما لاحظت أن بعض ملفات DLL أكبر من 11 ميغابايت. وهذا بسبب وجود مخزن مؤقت كبير من البيانات العشوائية داخل الملف القابل للتنفيذ. من الممكن أن تكون هذه طريقة لتجنب الكشف بواسطة بعض منتجات الأمان.
ضمان استمرار
يحتوي المورد
0x101
في القطارة على عدد صحيحين 32 بت يحددان كيفية الحفاظ على الثبات. تشير قيمة الأولى إلى كيفية الحفاظ على استمرار البرامج الضارة دون حقوق المسؤول.
جدول 1. آلية الثبات بدون حقوق المسؤولتشير قيمة العدد الصحيح الثاني إلى الطريقة التي يجب أن تضمن بها البرامج الضارة الثبات أثناء العمل كمسؤول.
جدول 2. آلية الثبات مع حقوق المسؤولاسم الخدمة هو اسم ملف بدون امتداد ؛ اسم العرض هو اسم المجلد ، ولكن إذا كان موجودًا بالفعل ، تتم إضافة السلسلة "
Revision 1
" إليه (يزيد العدد حتى يتم العثور على اسم غير مستخدم). تأكد المشغلون من أن الثبات خلال الخدمة كان مستقرًا - في حالة حدوث عطل ، يجب إعادة تشغيل الخدمة بعد ثانية واحدة. ثم ، يتم تعيين قيمة
WOW64
لمفتاح تسجيل الخدمة الجديد إلى 4 ، مما يشير إلى أنها خدمة 32 بت.
يتم إنشاء المهمة المجدولة من خلال عدة واجهات COM:
ITask
و
ITaskTrigger
و
ITaskTrigger
و
IPersistFile
و
ITaskScheduler
. في جوهره ، يقوم البرنامج الضار بإنشاء مهمة مخفية ، ويقوم بتعيين معلومات الحساب إلى جانب معلومات حول المستخدم أو المسؤول الحالي ، ثم يقوم بتعيين المشغل.
هذه مهمة يومية مدتها 24 ساعة وفواصل زمنية بين شوطين مدة كل منهما 10 دقائق ، مما يعني أنه سيتم تنفيذها بشكل مستمر.
قليلا الخبيثة
في المثال الخاص بنا ، الملف القابل للتنفيذ
TCPSVCS.exe
(
AcroTranscoder.exe
) هو برنامج شرعي يقوم بتنزيل ملفات DLL التي تم إلقاؤها بها. في هذه الحالة ، يعد
Flash Video Extension.dll
موضع اهتمام.
دالة
DLLMain
به ببساطة استدعاء دالة أخرى. بعض التوقعات غامضة موجودة:
الشكل 7. يتنبأ غامضبعد هذه الاختبارات المضللة ، تتلقى التعليمة البرمجية القسم
TCPSVCS.exe
ملف
TCPSVCS.exe
، وتغيير حمايتها إلى
TCPSVCS.exe
، مضيفة إرشادات وهمية:
الشكل 8. تسلسل التعليماتفي النهاية ، تتم إضافة تعليمة
CALL
إلى عنوان الدالة
FLVCore::Uninitialize(void)
التي يتم تصديرها بواسطة
Flash Video Extension.dll
. هذا يعني أنه بعد تحميل ملف DLL الضار ، عندما يستدعي وقت التشغيل
WinMain
في
TCPSVCS.exe
،
TCPSVCS.exe
مؤشر التعليمات إلى NOP ، مما يؤدي إلى استدعاء
FLVCore::Uninitialize(void)
، الخطوة التالية.
تقوم الوظيفة ببساطة بإنشاء مزامنة تبدأ بـ
{181C8480-A975-411C-AB0A-630DB8B0A221}
متبوعة باسم المستخدم الحالي. ثم تقوم بقراءة الملف الذي تم تفريغه بملحق * .db3 ، والذي يحتوي على رمز مستقل عن الموضع ، ويستخدم
CreateThread
لتنفيذ المحتويات.
محتويات ملف * .db3 هي كود القشرة الذي تستخدمه عادة مجموعة OceanLotus. مرة أخرى ، نجحنا في تفريغ حمولتها باستخدام البرنامج النصي
للمحاكي الذي نشرناه على GitHub .
يسترد البرنامج النصي المرحلة النهائية. هذا المكون هو الباب الخلفي الذي قمنا بتحليله بالفعل في
دراسة سابقة لـ OceanLotus . يمكن تحديد ذلك بواسطة GUID
{A96B020F-0000-466F-A96D-A91BBF8EAC96}
الملف الثنائي. لا يزال يتم تشفير تكوين البرامج الضارة في مورد PE. لديه نفس التكوين تقريبًا ، ولكن خوادم C&C مختلفة عن سابقاتها:
- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz
يوضح OceanLotus مرة أخرى مجموعة من التقنيات المختلفة لتجنب الاكتشاف. عادوا مع مخطط "المكرر" لعملية العدوى. عن طريق اختيار أسماء عشوائية وملء الملفات القابلة للتنفيذ ببيانات عشوائية ، فإنها تقلل من عدد نقاط Io الموثوقة (استنادًا إلى التجزئة وأسماء الملفات). علاوة على ذلك ، وبفضل استخدام تحميل DLL لجهة خارجية ، لا يحتاج المهاجمون إلا إلى إزالة
AcroTranscoder
الثنائي الشرعي.
المحفوظات استخراج ذاتي
بعد ملفات RTF ، تحولت المجموعة إلى أرشيفات الاستخراج الذاتي (SFX) بأيقونات مستندات شائعة لزيادة إرباك المستخدم. كتب هذا بواسطة Threatbook (
الرابط باللغة الصينية ). بعد البدء ، يتم تفريغ ملفات RAR ذات الاستخراج الذاتي ويتم تنفيذ DLL مع الملحق .ocx ، وقد تم توثيق الحمولة النهائية الخاصة بها سابقًا
{A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
. منذ منتصف يناير 2019 ، أعادت OceanLotus استخدام هذه التقنية ، ولكن بمرور الوقت ، تغيرت بعض التكوينات. في هذا القسم سنتحدث عن التكنولوجيا والتغييرات.
خلق الطعم
تم
THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE
المستند
THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE
(SHA-1:
AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB
) لأول مرة في عام 2018. تم إنشاء ملف SFX بحكمة - يقول الوصف (
معلومات الإصدار ) أن هذه صورة بتنسيق JPEG. البرنامج النصي SFX كالتالي:
الشكل 9. أوامر SFXإعادة تعيين البرامج الضارة
{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx
(SHA-1:
EFAC23B0E6395B1178BCF7086F72344B24C04DCC
) ، وكذلك الصورة
2018 thich thong lac.jpg.
صورة الطعم هي كما يلي:
الشكل 10. صورة الطعمربما لاحظت أن أول سطرين في البرنامج النصي SFX يستدعي ملف OSX مرتين ، لكن هذا ليس خطأ.
{9ec60ada-a200-4159-b310-8071892ed0c3} .ocx (ShLd.dll)
يتشابه تدفق التحكم في ملف OSX مع مكونات OceanLotus الأخرى - فهناك العديد من تسلسل أوامر
JZ/JNZ
و
PUSH/RET
بالتناوب مع التعليمات البرمجية غير الهامة.
الشكل 11. رمز غامضبعد تصفية الكود غير
DllRegisterServer
يبدو تصدير
DllRegisterServer
يطلق عليه
regsvr32.exe
كما يلي:
الشكل 12. رمز المثبت الأساسيفي الواقع ، في المرة الأولى التي
DllRegisterServer
استدعاء
DllRegisterServer
التصدير بتعيين قيمة التسجيل
HKCU\SOFTWARE\Classes\CLSID\{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}\Model
المشفرة في DLL (
0x10001DE0
).
عندما يتم استدعاء وظيفة للمرة الثانية ، فإنها تقرأ نفس القيمة وتعمل على هذا العنوان. من هنا ، يتم قراءة المورد وتنفيذه والعديد من الإجراءات في ذاكرة الوصول العشوائي.
رمز القشرة هو محمل PE نفسه المستخدم في حملات OceanLotus السابقة. يمكن محاكاته باستخدام
برنامجنا النصي . نتيجة لذلك ، قام بتفريغ
db293b825dcc419ba7dc2c49fa2757ee.dll
في الذاكرة وتشغيل
DllEntry
.
DLL استخراج محتويات مورده ، فك تشفير (AES-256-CBC) و unpacks (LZMA) عليه. يحتوي المورد على تنسيق محدد يسهل فك ترجمته.
الشكل 13. بنية تكوين برنامج التثبيت (KaitaiStruct Visualizer)يتم تعيين التكوين بشكل صريح - وفقًا لمستوى الامتياز ، ستتم كتابة البيانات الثنائية على
%appdata%\Intel\logs\BackgroundUploadTask.cpl
أو
%windir%\System32\BackgroundUploadTask.cpl
(أو
SysWOW64
للأنظمة 64 بت).
يتم ضمان الاستمرارية من خلال إنشاء مهمة باسم
BackgroundUploadTask[junk].job
، حيث
[junk]
عبارة عن مجموعة من البايتات
0x9D
و
0xA0
.
اسم تطبيق المهمة هو
%windir%\System32\control.exe
، وقيمة المعلمة هي المسار إلى الملف الثنائي الذي تم إلغاء تحميله. المهمة الخفية تعمل كل يوم.
من الناحية الهيكلية ، يكون ملف CPL عبارة عن DLL يحمل الاسم الداخلي
ac8e06de0a6c4483af9837d96504127e.dll
، الذي يقوم بتصدير وظيفة
CPlApplet
. يقوم هذا الملف بفك تشفير
{A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
الوحيد
{A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
، ثم تحميل DLL هذا
DllEntry
تصدير
DllEntry
الوحيد الخاص به.
ملف التكوين مستتر
تكوين الباب الخلفي مشفر ومضمّن في موارده. تشبه بنية ملف التكوين إلى حد كبير البنية السابقة.
الشكل 14. هيكل التكوين مستتر (KaitaiStruct متخيل)على الرغم من البنية المماثلة ، تم تحديث قيم العديد من الحقول مقارنة بالبيانات الواردة في
تقريرنا القديم .
يحتوي العنصر الأول للصفيف الثنائي على DLL (
HttpProv.dll
MD5:
2559738D1BD4A999126F900C7357B759
)
المحدد بواسطة Tencent . ولكن نظرًا لأن اسم التصدير قد تمت إزالته من الملف الثنائي ، فلا تتطابق التجزئة.
بحث إضافي
جمع العينات ، ولفت الانتباه إلى بعض الخصائص. ظهرت العينة الموصوفة للتو في حوالي يوليو 2018 ، وآخرون أعجبوا بها مؤخرًا ، في منتصف يناير - أوائل فبراير 2019. تم استخدام أرشيف SFX كناقل للعدوى ، حيث تم إلقاء وثيقة طعم شرعية وملف OSX ضار.
على الرغم من أن OceanLotus يستخدم طوابع زمنية مزيفة ، إلا أننا لاحظنا أن الطوابع الزمنية لملفات SFX و OCX هي نفسها دائماً (
0x57B0C36A
(
0x57B0C36A
@ 7:15 مساءً بالتوقيت العالمي المنسق) و
0x498BE80F
(02/06/2009 @ 7:34 بالتوقيت العالمي المنسق ) على التوالي). ربما يشير هذا إلى أن المؤلفين لديهم "مُنشئ" معين يستخدم نفس القوالب ويغير ببساطة بعض الخصائص.
من بين الوثائق التي درسناها منذ بداية عام 2018 ، هناك العديد من الأسماء التي تشير إلى البلدان التي تهم الهجوم:
- معلومات الاتصال الجديدة من Cambodia Media (جديد) .xls.exe
- 李建 香 (个人 简历) .exe (ملف pdf وهمية لسيرة ذاتية)
- ردود الفعل ، رالي في الولايات المتحدة الأمريكية من 28-29 يوليو ، 2018.exeمنذ اكتشاف الباب الخلفي
{A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
ونشر تحليله من قبل العديد من الباحثين ، لاحظنا بعض التغييرات في بيانات تكوين البرامج الضارة.
أولاً ، بدأ المؤلفون في إزالة الأسماء من DLL DLL المساعدة (
DNSprov.dll
من
HttpProv.dll
). ثم توقف المشغلون عن حزم ملف DLL الثالث (الإصدار الثاني من
HttpProv.dll
) ، واختيار تضمين واحد فقط.
ثانياً ، تم تغيير العديد من حقول التكوين مستتر ، ربما لتجنب الكشف ، كما أصبح العديد من IoCs المتاحة. من بين المجالات المهمة التي عدّلها المؤلفون ما يلي:
- تم تغيير مفتاح التسجيل AppX (انظر IoCs)
- سلسلة ترميز mutex ("def" ، "abc" ، "ghi")
- رقم المنفذ
أخيرًا ، في جميع الإصدارات الجديدة التي تم تحليلها ، يتم سرد C & Cs جديدة في قسم IoCs.
النتائج
يستمر OceanLotus في التطور. تركز cybergroup على صقل وتوسيع الأدوات والسحر. يخفي المؤلفون الحمولات الخبيثة بمساعدة مستندات جذب الانتباه ذات الصلة بالضحايا المزعومين. يطورون تصميمات جديدة ويستخدمون أيضًا الأدوات المتاحة للجمهور ، مثل استغلال محرر المعادلات. علاوة على ذلك ، فهي تعمل على تحسين الأدوات اللازمة لتقليل عدد القطع الأثرية المتبقية على الأجهزة الضحية ، وبالتالي تقليل فرصة الكشف بواسطة برنامج مكافحة الفيروسات.
مؤشرات التسوية
تتوفر مؤشرات التسوية بالإضافة إلى سمات
MITER ATT & CK
على Welivesecurity وعلى
GitHub .