سيتناول هذا التقرير وظائف برمجية Kalim Backdoor الخبيثة.
جدول المحتويات:
- ما هو الباب الخلفي (Backdoor)؟
- التحليل الفني.
- الملخص.
- التكتيكات والتقنيات (MITRE ATT&CK).
- مؤشرات الاختراق (IOCs).
- قاعدة Yara.
ما معنى الباب الخلفي (Backdoor)؟
الباب الخلفي هو طريقة مخفية للوصول إلى نظام تتجاوز طرق المصادقة والتحكم الأمني العادية.
التحليل الفني:
التحليل الثابت الأساسي:
قم أولاً برفع الملف إلى VirusTotal للتحليل الأولي. تشير النتائج إلى أن الملف هو مكتبة ربط ديناميكية (DLL) 64 بت، تم تحديدها ضمن عائلة برمجيات Kalim الخبيثة. بالإضافة إلى ذلك، تشير العديد من الكشوفات إلى ارتباط محتمل بمجموعة التهديد MuddyWater.
كما تقوم البرمجية الخبيثة بإنشاء اتصال شبكي مع النطاق moodleuni[.]com.
وتقوم بإسقاط بعض الملفات:
الآن افتحها في Die (Detect it easy):
تستورد العينة عددًا كبيرًا من واجهات برمجة التطبيقات (APIs) لنظام Windows، مما يشير إلى أنها غير مضغوطة. في المجمل، تستورد دوالًا من ست مكتبات DLL: KERNEL32.dll و USER32.dll و ADVAPI32.dll و SHELL32.dll و ole32.dll و WININET.dll.
على الرغم من استيراد العديد من واجهات برمجة التطبيقات من كل مكتبة DLL، إلا أن العديد من الدوال جديرة بالملاحظة بشكل خاص نظرًا لدورها في سلوك البرمجية الخبيثة.
على وجه التحديد، تقوم العينة باستيراد واجهات برمجة التطبيقات المتعلقة بالشبكات من WININET.dll لإنشاء اتصال مع خادم القيادة والتحكم (C2). كما تستفيد من دوال متعلقة بـ COM من ole32.dll لإنشاء والتفاعل مع كائنات نموذج الكائنات المكونة (COM). بالإضافة إلى ذلك، تستخدم البرمجية الخبيثة SHGetFolderPathW من SHELL32.dll لاسترداد مسارات أدلة النظام المعرفة بقيم CSIDL.
التحليل الثابت المتقدم:
في DllMain، الإجراء الوحيد الذي يتم تنفيذه هو إنشاء خيط جديد. داخل هذا الخيط، يتم تنفيذ دالتين: sub_1800063A0 و StartAddress.
عند تحليل الدالة sub_1800063A0، اكتشفت أنها تتكون من مرحلتين متميزتين. في المرحلة الأولى، تقوم البرمجية الخبيثة بإسقاط نسخة من نفسها في دليل AppData\Roaming. تفعل ذلك عن طريق إنشاء دليل فرعي جديد باسم Updates، متبوعًا بإنشاء ملف قابل للتنفيذ باسم update.exe. يتم الحصول على الحمولة الثنائية المكتوبة في هذا الملف مباشرة من البيانات المضمنة الموجودة في unk_18002AA10. ونتيجة لذلك، يتم كتابة الملف النهائي في المسار التالي: "C:\Users<Username>\AppData\Roaming\Update\update.exe".
في المرحلة الثانية، تقوم البرمجية الخبيثة بتهيئة كائن نموذج الكائنات المكونة (COM) باستخدام RCLSID: {00021401-0000-0000-C000-000000000046}، والذي يتوافق مع كائن ارتباط الاختصار (CLSID_ShellLink) و RIID: {000214F9-0000-0000-C000-000000000046}، والذي يرتبط بواجهة IShellLinkW. من خلال رؤية جدول واجهة COM الكامل للقشرة الذي تنفذه shell32.dll، يمكن تحديد الدوال المستدعاة بدقة. تستدعي البرمجية الخبيثة أربع دوال رئيسية من COM: SetPath و SetDescription و Save و Release. باستخدام هذه الدوال، تقوم بإنشاء اختصار ضار لبدء التشغيل باسم MicrosoftUpdateSerice.lnk داخل دليل بدء تشغيل Windows Startup Directory، وبالتالي إنشاء استمرارية على النظام المصاب.
تحليل دالة StartAddress
تقوم البرمجية الخبيثة بتنفيذ منطق اتصال الشبكة الخاص بها من خلال ثلاث دوال متميزة وتفرّع خيطين منفصلين. أحد الخيطين مسؤول عن إطلاق وإدارة شل أوامر (command shell)، بينما يتولى الخيط الثاني رفع البيانات المجمعة بعد اكتمال تنفيذ البرمجية الخبيثة.
تدير الدوال الثلاث مجتمعةً الاتصال بين المضيف المصاب وخادم القيادة والتحكم (C2) وتنظم في ثلاث طبقات منطقية.
الطبقة الأولى مسؤولة عن جمع معلومات البصمة الخاصة بالمضيف (host fingerprinting) من النظام المخترق. تقوم الطبقة الثانية بمعالجة هذه البيانات عن طريق إجراء التشفير والتلاعب الإضافي لتجهيزها للإرسال. تنشئ الطبقة الثالثة اتصالاً شبكيًا مع نطاق C2 moodleuni[.]com وترسل البيانات المعالجة.
الدالتان الأوليتان المتعلقتان بالشبكة مسؤولتان تحديدًا عن المصادقة وبناء طلب HTTP POST، مما يتيح نقل البيانات بشكل مصادق عليه إلى الخادم البعيد.
الدالة الثالثة مسؤولة عن استقبال الأوامر من خادم C2. بناءً على استجابة الخادم، تحدد البرمجية الخبيثة إجراءها التالي—إما إطلاق شل أوامر مخفي أو رفع البيانات المجمعة بناءً على الأمر المستلم من C2.
تحليل الخيطين لفهم ما يفعلانه بشكل كامل.
في الخيط الأول، تقوم البرمجية الخبيثة بإنشاء كائن وظيفة (job object) بالإضافة إلى أنبوبين آخرين ثم تقوم بتعيين خاصية معينة لهما.
ثم تقوم بإنشاء CMD ببعض الخصائص:
القيمة 1 في الوسيطة الرابعة تعني أن CMD يمكنه أن يرث من مقابض الأنابيب.
القيمة 0x1000200u في الوسيطة الخامسة تعني أن CMD يحتوي على ما يلي:
CREATE_NO_WINDOW = 0x0000000u
CREATE_NEW_PROCESS_GROUP = 0x0000200u
CREATE_UNICODE_ENVIRONMENT = 0x0000400u
وبعض معلومات بدء التشغيل: {حجم الهيكل = 104 بايت، hStdError = hWritePipe، hStdOutput = hWritePipe، hStdInput = hReadPipe2، dwFlags |= 0x100u = STARTF_USESTDHANDLES}. الأنبوب الأول مسؤول عن قراءة المخرجات من الشل والثاني مسؤول عن الكتابة إلى الشل.
ومؤشر إلى PROCESS_INFORMATION
وبعد إنشاء الشل، يتم تعيينه إلى كائن الوظيفة ووضعه في حالة الانتظار لأوامر من C2.
يتحقق الشل من أوامر التحكم المرسلة عبر الذاكرة المشتركة:
Pending: تنفيذ عادي.
Terminate: قتل الشل والتنظيف. يتم تدمير الشل بالكامل وإعادة تعيينه.
Ctrlc: قسريًا قتل أي عملية فرعية متبقية.
في التشغيل العادي، إذا كان هناك أمر موجود، فإنه يكتب الأمر إلى CMD ثم يتحقق من وجود مخرجات باستخدام PeekNamedPipe ثم يخزنها في المخزن المؤقت.
الخيط الثاني.
يبدأ الخيط بإنشاء ملف جديد في المسار المحدد. يُستخدم هذا الملف لتخزين البيانات مؤقتًا قبل رفعها إلى خادم C2. إذا تعذر إنشاء الملف أو حدث خطأ أثناء التهيئة، تقوم الدالة بتعيين سلسلة الحالة "error" في الذاكرة المشتركة والخروج. يتم نقل الملف عبر HTTPS إلى خادم القيادة والتحكم (moodleuni[.]com) باستخدام رؤوس مخصصة ومعرفات جلسة لتقليد حركة المرور المشروعة. بعد اكتمال الرفع، تقوم الدالة بتحديث الذاكرة المشتركة للإشارة إلى النجاح أو الفشل: