المؤلفون: ديكسيت بانشال وفيبهاف كروشنا بيلاد
جدول المحتويات:
- مقدمة:
- الأهداف الرئيسية:
- سلسلة العدوى:
- النتائج الأولية حول الحملة:
- تحليل الطعم:
- التحليل الفني:
- المرحلة 1: تحليل ملف LNK.
- المرحلة الثانية: تحليل حمولة HTA/JavaScript
- المرحلة 3: تحليل ملف DLL الخاص بمحمل المرحلة 1
- المرحلة الرابعة: تحليل ملف DLL الخاص بمحمل المرحلة الثانية ورمز Shellcode
- المرحلة الخامسة: تحليل XenoRAT.
- العناصر البنيوية ونسب الجهات الفاعلة في التهديدات.
- الخلاصة: هل هي عملية زينوفيسكال؟
- Seqrite تغطية:
- الشركات الأولمبية الدولية:
- MITRE ATT&CK:
مقدمة:
Seqrite تُجري مختبراتنا رصدًا دقيقًا لحملات التصيد الاحتيالي الموجهة في جميع أنحاء العالم، ولديها سجل حافل في تتبع مجموعة SideCopy APT، وهي مجموعة تهديد مرتبطة بباكستان وتعمل تحت مظلة Transparent Tribe / APT36 الأوسع نطاقًا. واستكمالًا لجهود التتبع هذه، رصدنا حملة مُستهدفة استهدفت وزارة المالية الأفغانية، بأساليب وتقنيات وتقنيات تتداخل مع SideCopy بدرجة ثقة متوسطة إلى عالية.
تبدأ الحملة بتسليم ملف تصيد احتيالي موجه - وهو عبارة عن ملف مضغوط يحتوي على ملف LNK خبيث يحمل اسم ملف مكتوب بعناية بلغة البشتو:
د_هغو_کارکوونکو_لېست_چې_د_فکري_او_رواني_جګړې_سیمینار_ته_ورپېژندل_شوي_وو12.pdf.lnk ("قائمة الموظفين الذين تم تعريفهم بندوة الحرب الفكرية والنفسية")
إن اختيار لغة البشتو مقصود. فهي اللغة السائدة في جميع مؤسسات الحكومة الأفغانية، واللغة الأساسية للأهداف المقصودة - وهم مسؤولو المالية في المحافظات الأفغانية الأربع والثلاثين. ومن خلال ربط عملية الإغراء بندوة حول الحرب النفسية والفكرية، أظهر الفاعل معرفة دقيقة بالسياق العملياتي والإداري لأهدافه.
ما يلي في هذا التقرير هو تحليل فني كامل للحملة - من سلسلة تنفيذ LNK إلى زرع XenoRAT وإرسال إشارات إلى البنية التحتية الأوروبية المحصنة - إلى جانب تحولات البنية التحتية، وتحليل المستندات الوهمية، ورسم خرائط الإسناد مقابل خط الأساس المعروف لـ SideCopy TTP.
الأهداف الرئيسية:
- وزارة المالية، إمارة أفغانستان الإسلامية.
- مديريات الإيرادات والمالية الإقليمية (المستوفيات).
- مسؤولون حكوميون يتحدثون لغة البشتو.
- موظفو الحكومة على مستوى المقاطعات، وليس الوزارة المركزية
سلسلة العدوى:

النتائج الأولية حول الحملة:
خلال تحليلنا، لاحظنا أن الجهة المهاجمة بدأت الهجوم من خلال ملف مضغوط ZIP تم تسليمه عبر عملية تصيد احتيالي، يحتوي على ملف LNK خبيث مصمم بلغة البشتو - وهو اختيار متعمد يعكس معرفة عميقة بالبيئة المستهدفة.
بمجرد تنفيذه، يستغل LNK بصمت mshta.exe لجلب حمولة HTA عن بعد من نطاق تعليمي أفغاني مخترق، والذي يقوم بفك تشفير جافا سكريبت المشفر في الذاكرة، وينشئ استمرارية قائمة على السجل مموهة كإدخال Microsoft Edge، وفي النهاية ينشر XenoRAT 1.8.7 - إرسال إشارات خارجية إلى بنية تحتية أوروبية محصنة تمامًا منفصلة عن طبقة التسليم، مما يضمن المرونة على المدى الطويل.
تحليل الطعم:
الوثيقة المزيفة التي تم إسقاطها أثناء التنفيذ هي دليل موظفي وزارة المالية الأفغانية على مستوى المقاطعات، ويشمل جميع المقاطعات الـ 34، ويسرد أسماء مديري المالية، ورؤساء الإيرادات، والمسؤولين الماليين، والسكرتيرين إلى جانب أرقام هواتفهم المحمولة المباشرة - مكتوبة بالكامل باللغتين الدارية والبشتوية.

يشير مستوى التفاصيل التنظيمية إلى قيام الجهة المهاجمة بجمع معلومات استخباراتية مسبقة. ودورها في الهجوم بسيط: فبينما يقرأ الضحية ما يبدو أنه وثيقة حكومية داخلية روتينية، يكون البرنامج الخبيث قد أكمل تثبيته بالفعل في الخلفية دون أن يشعر.
التحليل الفني:
المرحلة الأولى: تحليل ملف LNK.
يعمل ملف LNK كناقل العدوى الأولي ومحفز التنفيذ ضمن سلسلة الهجوم. على الرغم من تمويهه برمز PDF واسم ملف مضلل ليظهر كمستند شرعي، إلا أن فحص خصائص اختصاره يكشف أنه يُشغّل أداة ويندوز mshta.exe من المسار C:\Windows\System32. يشير الأمر المُضمّن في الاختصار إلى مورد PHP خبيث عن بُعد مُستضاف عبر HTTPS ( hxxp[:]//< abimj.edu.af >/index.php )، مما يُمكّن المهاجم من تنفيذ محتوى البرامج النصية المُستضافة خارجيًا مباشرةً في الذاكرة دون الحاجة إلى إنشاء ملف تنفيذي على القرص. من خلال استغلال mshta.exe - وهو ملف تنفيذي شرعي من مايكروسوفت يرتبط عادةً بتنفيذ تطبيقات HTML (HTA).

يستغل المهاجم تقنية "الملف الثنائي المُستغل" (LOLBIN) للتحايل على آليات الكشف التقليدية وتجاوز شكوك المستخدم. كما يشير استخدام التشفير المفرط للفواصل في بنية عنوان URL إلى محاولة لعرقلة التحليل الثابت والكشف القائم على التوقيعات.
المرحلة الثانية: تحليل حمولة HTA/JavaScript
تحتوي حمولة PHP البعيدة التي يتم استرجاعها عبر mshta.exe على شيفرة JavaScript مُشفرة بشكل مُعقد، مُصممة لتنفيذ منطق خبيث ضمن سياق مُحرك HTA. يُظهر الفحص الأولي وجود مصفوفات سلاسل مُشفرة مثل _$_f1bf=[“\x55\x33\x6…”]، وهي طريقة تشفير شائعة تُستخدم لإخفاء أسماء الدوال، وعناوين URL، والأوامر، أو الحمولات الثانوية عن المُحللين وأدوات الأمان. كما يُعرّف البرنامج النصي نصًا مُضللًا في نافذة النظام، مثل "خطأ في ملف Windows"، لمحاكاة سلوك النظام المشروع، وربما لتشتيت انتباه الضحية أثناء التنفيذ. تُعد هذه المرحلة بمثابة طبقة التنفيذ والتسليم الرئيسية للحملة، حيث يُرجح فك تشفير شيفرة JavaScript المُشفرة ديناميكيًا لتنفيذ إجراءات لاحقة، مثل استرجاع الحمولة، وتنفيذ الأوامر، وإنشاء اتصال دائم، أو تسريب البيانات.

تحليل جافا سكريبت مُبهم
أظهر التحليل أن ملف .js عبارة عن برنامج تحميل برمجيات خبيثة مُشفرة بشدة، مبنية على لغة جافا سكريبت، ومصممة للتنفيذ في بيئة Windows Script Host (WSH) أو متصفح إنترنت إكسبلورر القديم مع تفعيل دعم ActiveX. يتضمن البرنامج النصي تقنيات خبيثة متعددة، منها التنفيذ عبر ActiveX، وفك تشفير حمولة Base64 مخصصة، وفك تسلسل BinaryFormatter الخاص بـ .NET ، وتنفيذ الحمولة في الذاكرة.
تبدأ المرحلة الأولى من البرمجية الخبيثة بمصفوفة جافا سكريبت كبيرة ومُشفرة، تُعرَّف عادةً كمتغير مثل _$_f1bf، وتحتوي على العديد من أجزاء السلاسل النصية المُشفَّرة بنظام العد الست عشري والتي تُمثل حمولة مُضمَّنة. تُدمج هذه الأجزاء لاحقًا وتُمرَّر إلى دالة فك تشفير مُخصصة. وبدلًا من الاعتماد على واجهات برمجة تطبيقات فك تشفير Base64 الأصلية، يُنفِّذ البرنامج النصي روتين فك تشفير Base64 خاصًا به لإخفاء الحمولة وإعاقة التحليل.

تقوم الدالة المخصصة بإعادة بناء مجموعة أحرف Base64 القياسية (A–Z، a–z، 0–9، +، /) ديناميكيًا باستخدام String.fromCharCode، ثم تعالج البيانات المشفرة على دفعات مع إعادة بناء دفق البايتات الأصلي من خلال سلسلة من العمليات المنطقية. وبفضل معالجة عملية فك التشفير يدويًا، يتجنب البرنامج الخبيث المؤشرات المشبوهة مثل atob() أو مكتبات فك التشفير الشائعة، مما يجعل الكشف الثابت والتحليل القائم على التوقيع أكثر صعوبة.

إعادة بناء الحمولة باستخدام كائنات COM في .NET
في المرحلة الثانية، يحوّل البرنامج الخبيث الحمولة المُفكّكة إلى كائن تنفيذي في الذاكرة، مستفيدًا من عدة فئات .NET مُنشأة عبر ActiveXObject. يُنشئ البرنامج النصي System.Text.ASCIIEncoding لتحويل السلسلة المُفكّكة إلى مصفوفة بايت، ثم يستخدم System.Security.Cryptography.FromBase64Transform لإجراء تحويل Base64 إضافي على الحمولة. يُكتب دفق البايت الناتج في كائن System.IO.MemoryStream، ما يُعيد بناء الحمولة المُسلسلة بالكامل في الذاكرة دون الحاجة إلى القرص. يُستخدم هذا النهج المرحلي عادةً في البرامج الخبيثة عديمة الملفات، لأنه يسمح للمهاجمين بإعداد كائنات .NET خبيثة للتنفيذ مع تقليل الأدلة الجنائية الرقمية وخفض احتمالية اكتشافها بواسطة منتجات الأمان التقليدية القائمة على الملفات.

بعد فك تشفير الحمولة المضمنة، يبدأ البرنامج النصي مرحلة التنفيذ بإنشاء كائن ActiveX من نوع WScript.Shell ، مما يتيح الوصول إلى عمليات التسجيل ومتغيرات البيئة ووظائف أخرى على مستوى النظام. ثم يتحقق البرنامج النصي من تثبيت إصدار .NET Framework v4.0.30319 من خلال الاستعلام عن مسار التسجيل HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 . في حال عدم توفر وقت التشغيل الأحدث، يتم الرجوع إلى .NET v2.0.50727. بعد ذلك، يقوم البرنامج الخبيث بتعيين متغير البيئة COMPLUS_Version لإجبار العملية على تحميل إصدار محدد من وقت تشغيل CLR، مما يضمن التوافق مع حمولة .NET DLL المضمنة.
أثناء التنفيذ، يستغل البرنامج الخبيث مكونات إلغاء التسلسل الموثوقة في .NET، بما في ذلك أدوات WPF XAML مثل ObjectDataProvider وResourceDictionary، بالإضافة إلى كائنات تسلسل Windows Forms مثل AxHost وPropertyBagBinary. تساعد هذه المكونات في الحفاظ على سلسلة أدوات إلغاء التسلسل وتُفعّل التنفيذ أثناء إعادة بناء الكائن.
وأخيرًا، تتم معالجة الكائن التسلسلي الخبيث المخزن داخل كائن MemoryStream من خلال .NET BinaryFormatter.Deserialize_2() ، مما يتيح تنفيذ DLL الخفي في الذاكرة مع تقليل الآثار الجنائية وتجاوز آليات الكشف التقليدية القائمة على الملفات.
المرحلة 3: تحليل ملف DLL الخاص بمحمل المرحلة 1 (المحمل الأولي)
هذا ملف DLL لتحميل .NET مسؤول عن تنفيذ الحمولة في المرحلة التالية، واستمراريتها، وتجهيز المكونات التالية لسلسلة الهجوم في الذاكرة.

عند بدء التشغيل، تقوم الدالة `openthefile()` بتنزيل وفتح ملف PDF وهمي من الرابط `hxxp[:]//abimj.edu.af/institute/cloudiyaf/document.pdf`. تستخرج الدالة اسم الملف من الرابط، ثم تحفظ الملف المُنزّل في مجلد الملفات المؤقتة لنظام ويندوز باستخدام `WebClient.DownloadFile()`. قبل بدء التنزيل، يُفعّل البرنامج الخبيث بروتوكول TLS 1.2 صراحةً عبر `ServicePointManager.SecurityProtocol`، مما يضمن التوافق مع اتصالات HTTPS/TLS الآمنة. بعد تنزيل الملف، يتوقف البرنامج الخبيث عن العمل لمدة خمس ثوانٍ، ثم يُشغّل ملف PDF المُنزّل عبر إجراء تنفيذ أوامر مخفي.

تُستخدم الدالة RunProcessWithHiddenCmd() لتنفيذ الملفات أو الأوامر عبر cmd.exe. تُنشئ هذه الدالة وسيطة سطر أوامر باستخدام /c، والتي تُوجه cmd.exe لتنفيذ مسار الملف المُحدد ثم إنهاء العملية. تُهيئ الدالة مثيل عملية جديد، وتُعين cmd.exe كملف تنفيذي، وتُمرر سلسلة الوسيطة المُنشأة إلى العملية. بمجرد بدء العملية، يُنفذ مُفسر الأوامر الملف أو الأمر المُحدد، ثم يُنهي العملية تلقائيًا بعد اكتمال التنفيذ.

بعد فتح المستند الوهمي، يُنشئ البرنامج الخبيث مجلدًا باسم USOShared-1de48789-1285 ضمن المسار C:\Users\Public\ لتخزين حمولة HTA للمرحلة التالية (zuidrt.hta). ثم يستدعي الدالة RegWorkExePathFromPublic() التي تحتوي على أوامر تسجيل مشفرة بنظام Base64، والتي يتم فك تشفيرها أثناء التشغيل باستخدام روتين فك تشفير Base64 BSDSD94() . بمجرد فك التشفير، يُنشئ الأمر إدخالًا جديدًا ضمن مفتاح التسجيل HKCU\Software\Microsoft\Windows\CurrentVersion\Run بقيمة Edgre. يُنفذ إدخال التسجيل ما يلي:
cmd /C start C:\Users\Public\USOShared-1de48789-1285\zuidrt.hta
لضمان التخفي والبقاء لفترة أطول، يقوم البرنامج الخبيث بكتابة الأمر المُفكَّك في ملف دفعي باسم noway.bat في مجلد المستخدم المؤقت، ثم يُنفِّذه عبر عملية مخفية. يُضبط التنفيذ بحيث يُخفي جميع النوافذ الظاهرة، مانعًا ظهور أي موجه أوامر للمستخدم. هذا يضمن تشغيل حمولة HTA تلقائيًا عند تسجيل دخول المستخدم، مما يُحافظ على بقائها في النظام.

تتولى الدالة CopyExeToUsersPublic() مسؤولية استرجاع وإعادة بناء حمولة HTA للمرحلة التالية (zuidrt.hta) في الدليل C:\Users\Public\USOShared-1de48789-1285\. تتحقق الدالة أولاً من وجود الدليل المستهدف، وفي حال عدم وجوده، تقوم بإنشائه باستخدام الدالة Directory.CreateDirectory()، ثم تقوم بتنزيل الحمولة المشفرة من:
hxxp[:]//abimj.edu.af/institute/cloudiya/

يتم تخزين حمولة zuidrt.hta التي تم تنزيلها بتنسيق مضغوط ومشفر بنظام Base64 لتجنب اكتشافها. يقوم البرنامج الخبيث لاحقًا بفك ضغط البيانات وفك تشفيرها لإعادة بناء حمولة HTA النهائية، والتي يتم تنفيذها من خلال RunProcessWithHiddenCmd()، الذي يقوم بدوره بتشغيل cmd.exe /c start C:\Users\Public\USOShared-1de48789-1285\zuidrt.hta ، مستفيدًا من ربط الملفات في نظام ويندوز لاستدعاء mshta.exe لتنفيذ HTA.
تنفيذ حمولة HTA (zuidrt.hta)
يتبع ملف zuidrt.hta بنية مشابهة لحمولة HTA الأولية، ولكنه يحتوي على مكونات مضمنة مُعدّلة ومنطق تنفيذ مُحدّث. ويستمر في سلسلة الهجوم من خلال إعادة استخدام إجراءات التمويه وفك التشفير لإخفاء وظائفه وتجنب التحليل. يُعيد البرنامج النصي تهيئة مسارات التنفيذ القائمة على ActiveX للحفاظ على التنفيذ داخل بيئة HTA، ويعيد بناء الحمولة المُسلسلة المضمنة في الذاكرة.
على غرار مرحلة HTA الأولية، تستخدم الحمولة مكونات إلغاء التسلسل في .NET وسلاسل الأدوات لتشغيل تنفيذ ملف DLL الخاص بالمحمل المضمن في المرحلة الثانية داخل الذاكرة. تعمل هذه المرحلة كطبقة تنفيذ ثانوية ضمن سلسلة العدوى، مما يضمن استمرارية سير عمل الهجوم ويسهل الانتقال إلى ملف DLL الخاص بالمرحلة التالية المسؤول عن تسليم الحمولة النهائية وتنفيذها.
المرحلة الرابعة: تحليل ملف DLL الخاص بمحمل المرحلة الثانية ورمز Shellcode
بعد فك التشفير أثناء التشغيل، يتم تمرير مسار التنفيذ إلى مكتبة DLL خبيثة.

ملف DLL هو مُحمِّل شيفرة خبيثة مبني على بيئة .NET، وهو مسؤول عن استرجاع حمولة المرحلة التالية وفك تشفيرها وضغطها وتنفيذها بالكامل في الذاكرة. يستخدم البرنامج الخبيث طبقات متعددة من التجهيز والتنفيذ أثناء التشغيل للتحايل على آليات الأمان التقليدية وتقليل حجم الملفات المخزنة على القرص.
يعمل ملف DLL كأداة تحميل وسيطة بين مرحلة HTA القائمة على JavaScript وحمولة Xeno RAT النهائية.
إعداد البيئة واسترجاع الحمولة
عند التشغيل، يقوم ملف DLL بتهيئة بيئة وسيطة مصممة لتخزين ومعالجة حمولة المرحلة التالية مع تقليل الشكوك. يقوم البرنامج الخبيث أولاً بفك تشفير سلسلة مشفرة بنظام Base64 ( ZmlyZWZ4LTFkZTg3ZWVjOC0xMjQx ) باستخدام روتين BSDSD94() المخصص ، مما ينتج عنه اسم الدليل firefx-1de87eec8-1241. ثم يقوم بإنشاء دليل عمل ضمن مسار Windows المتاح للعامة.
- C:\Users\Public\firefx-1de87eec8-1241

يُمكّن استخدام المسار C:\Users\Public\ البرمجية الخبيثة من تجاوز قيود الكتابة المتعلقة بالصلاحيات، مع الاندماج في أنشطة نظام الملفات المشروعة. يُحاكي اصطلاح تسمية المجلدات مجلدات ذاكرة التخزين المؤقت أو ملفات تعريف المستخدمين التي تُنشئها التطبيقات، مما يُقلل من شكوك المستخدمين ويُجنّبها الكشف عن طريق مؤشرات الاختراق الأساسية. كما تُعرّف البرمجية الخبيثة أسماء ملفات مؤقتة للحمولة، مثل ayui.vmxx و ayhui.vmxx ، والتي تُخفى عمدًا باستخدام امتدادات غير قياسية لتجنب التعرف عليها فورًا كمحتوى قابل للتنفيذ.
بعد إنشاء دليل التخزين المؤقت، يبدأ ملف DLL بالاتصال مع البنية التحتية التي يتحكم بها المهاجم لاسترداد حمولة المرحلة التالية. يحتوي البرنامج الخبيث على عناوين URL متعددة مُضمنة في الكود، بما في ذلك:
- hxxps[:]//abimj[.]edu[.]af/institute/10/
- hxxps[:]//abimj[.]edu[.]af/institute/7/
ويختار البرنامج نقطة التنزيل ديناميكيًا بناءً على إصدار نظام تشغيل الضحية. يتم إعادة توجيه الأنظمة التي تعمل بنظام Windows 7 (الإصدار 6.1) إلى موقع بديل للحمولة، مما يشير إلى تسليم الحمولة مع مراعاة التوافق.

باستخدام دالة WebClient.DownloadFile() في .NET مع تفعيل بروتوكولات TLS/TLS1.1/TLS1.2 بشكل صريح، يقوم البرنامج الخبيث بتنزيل الحمولة المشفرة وتخزينها محليًا باسم ayui.vmxx . لا يمكن تنفيذ المحتوى الذي تم تنزيله مباشرةً؛ بل يعمل ككتلة وسيطة مشفرة ومضغوطة تخضع لمزيد من فك تشفير Base64 وفك ضغط GZIP قبل بدء تنفيذ الشيفرة الخبيثة في الذاكرة.
فك تشفير الحمولة وإعادة بناء الشفرة الخبيثة
بعد تنزيل حمولة المرحلة الثانية بنجاح، يقوم ملف DLL بتخزين البيانات المسترجعة في مجلد التخزين المؤقت كملف مُقنّع باسم ayui.vmxx. وبدلاً من نشر ملف تنفيذي محمول (PE) مباشرةً على القرص، يستخدم البرنامج الخبيث آليات تشفير وضغط متعددة الطبقات لإخفاء محتويات الحمولة الفعلية وتجنب محركات الكشف الثابتة. يحتوي الملف على بيانات مُشفّرة بنظام Base64 ومضغوطة بصيغة GZIP، ما يجعلها تبدو غير قابلة للتنفيذ عند الفحص السطحي. تُقلل هذه التقنية بشكل كبير من إمكانية رصد التوقيعات من قِبل برامج مكافحة الفيروسات، وتُعقّد التحليل اليدوي بمنع المحللين من تحديد تنسيق الحمولة فورًا. بعد ذلك، يقرأ البرنامج الخبيث الملف بأكمله في الذاكرة باستخدام الدالة File.ReadAllBytes() ، ويبدأ في إعادة بناء الحمولة المُضمّنة ديناميكيًا أثناء التشغيل.

تُدار عملية إعادة البناء عبر دالة decompressdata() المُخصصة ، والتي تُنفذ عمليات فك تشفير وضغط متعددة بالكامل في الذاكرة. تبدأ الدالة بفك تشفير بيانات Base64 الثنائية، واستخراج رأس الحجم بعد فك الضغط، ثم تستخدم فئة GZipStream من .NET لاستعادة مخزن البيانات الأصلي. بعد اكتمال فك الضغط، تُمرر البيانات الناتجة مرة أخرى عبر دالة Convert.FromBase64String() لاستعادة بايتات الشيفرة الخبيثة الخام. تُكتب البيانات المُعاد بناؤها بالكامل محليًا باسم ayhui.vmxx ، والذي يعمل كحاوية وسيطة للشيفرة الخبيثة قبل التنفيذ. من خلال الجمع بين فك التشفير المرحلي والضغط وإعادة بناء البيانات أثناء التشغيل، يتجنب البرنامج الخبيث كشف الشيفرة الخبيثة النهائية كنص عادي على القرص، متجاوزًا بذلك آليات فحص الملفات التقليدية وآليات الكشف القائمة على المحتوى، مع تجهيز البيانات لتنفيذها في الذاكرة.

تنفيذ Shellcode:
بعد إعادة بناء الحمولة، ينتقل ملف DLL إلى مرحلة التنفيذ النهائية، حيث يعمل كمُحمِّل لشفرة shellcode في الذاكرة. بدلاً من تشغيل ملف تنفيذي تقليدي من القرص، يقوم البرنامج الخبيث بتخصيص ذاكرة قابلة للتنفيذ مباشرةً ضمن العملية الحالية باستخدام واجهة برمجة تطبيقات Windows، VirtualAlloc() . يستخدم طلب التخصيص علامة MEM_COMMIT إلى جانب أذونات الذاكرة PAGE_EXECUTE_READWRITE (RWX) ، مما يُنشئ منطقة ذاكرة قادرة على تخزين وتنفيذ أي شفرة برمجية. يُعد نمط تخصيص RWX هذا مؤشرًا معروفًا لتنفيذ شفرة shellcode وتحميل البرامج الخبيثة الانعكاسية. بعد تخصيص الذاكرة، ينسخ البرنامج الخبيث مخزن شفرة shellcode المُعاد بناؤه إلى المنطقة المُخصصة باستخدام Marshal.Copy() ، مما يُؤدي فعليًا إلى وضع الحمولة بالكامل داخل ذاكرة العملية دون الاعتماد على مُحمِّل Windows PE.

بمجرد تحميل الشيفرة الخبيثة إلى الذاكرة التنفيذية، ينقل البرنامج الخبيث التنفيذ إلى المخزن المؤقت المُحقن عبر واجهة برمجة التطبيقات CreateThread() ، مستخدمًا عنوان الذاكرة المُخصصة كنقطة دخول للخيط. تُمكّن هذه التقنية الشيفرة الخبيثة من التنفيذ مباشرةً من الذاكرة، متجاوزةً بذلك مراقبة التنفيذ التقليدية القائمة على القرص، ومُقللةً بشكلٍ كبير من الأدلة الجنائية الرقمية. ثم يستدعي ملف DLL الدالة WaitForSingleObject() بقيمة مهلة غير محدودة للحفاظ على تزامن الخيوط وضمان استمرار تنفيذ الشيفرة الخبيثة دون انقطاع. تتوافق منهجية التنفيذ هذه مع أساليب البرامج الخبيثة الحديثة عديمة الملفات، حيث يتم فك تشفير الحمولات وإطلاقها ديناميكيًا في الذاكرة للتهرب من محركات مكافحة الفيروسات القائمة على التوقيعات، وآليات التحكم في التطبيقات، وتقنيات المسح الثابت. تعمل الشيفرة الخبيثة لاحقًا كأداة تحميل لحمولة Xeno RAT النهائية، مما يُتيح استمرارية النظام المُخترق، والتحكم فيه، والوصول إليه عن بُعد من قِبل المُهاجم.
يعمل الكود البرمجي كأداة تحميل في الذاكرة مسؤولة عن إعداد وإطلاق حمولة Xeno RAT النهائية.

أثناء التنفيذ، يقوم عادةً بالتحقق من صحة البيئة، وحلّ واجهات برمجة التطبيقات الديناميكية، وتعديل أذونات الذاكرة باستخدام واجهات برمجة تطبيقات مثل VirtualProtect() و GetProcAddress() . في مُحمِّلات Donut، يتجاوز الكود البرمجي الآليات الأمنية عن طريق تعديل وظائف مثل AmsiScanBuffer() لتعطيل فحص AMSI وتقليل إمكانية الوصول إلى المحتوى المُحمَّل ديناميكيًا.
نظرًا لأن الحمولة النهائية عبارة عن تجميعة .NET مُدارة، يقوم رمز الاستغلال بتهيئة بيئة تشغيل اللغة العامة (CLR) لـ .NET عن طريق تحميل مكونات مثل clr.dll و mscoree.dll. ثم يتم فك تشفير الحمولة المضمنة وتحميلها مباشرةً من الذاكرة باستخدام تقنيات انعكاسية مثل Assembly.Load(byte[]) ، مما يتجنب النشر على القرص تمامًا. بمجرد التحميل، يتم تنفيذ حمولة Xeno RAT في الذاكرة، مما يتيح التحكم عن بُعد، والبقاء، ووصول المهاجم عن بُعد إلى النظام المخترق.

المرحلة الخامسة: تحليل XenoRAT.
الحمولة النهائية التي تم تحديدها في سلسلة العدوى هي Xeno RAT ، وهو حصان طروادة للوصول عن بعد (RAT) مفتوح المصدر ومتاح للجمهور على GitHub ويستخدم بشكل شائع من قبل الجهات الفاعلة في مجال التهديدات للوصول عن بعد المستمر والمراقبة والأنشطة اللاحقة للاستغلال.

عند التشغيل، يقوم البرنامج الخبيث بإنشاء قناة اتصال آمنة للتحكم والسيطرة باستخدام عنوان IP ثابت (185.235.137.106) وتكوين منفذ محدد، مما يسمح بالاتصال المباشر بالبنية التحتية التي يتحكم بها المهاجم. وللحفاظ على تشغيل نسخة واحدة فقط ومنع عمليات التشغيل المتعددة، يستخدم البرنامج الخبيث أيضًا آلية قفل متبادل ("clouda") ، مما يضمن تشغيل نسخة واحدة فقط من البرنامج على النظام المصاب في كل مرة. تلي خطوات التهيئة هذه عملية استمرارية وإعادة اتصال مستمرة للحفاظ على الوصول طويل الأمد إلى الجهاز المخترق.

الآن، سنلقي نظرة على بعض الوظائف المثيرة للاهتمام ونحلل وظائفها.
تتولى الدالة ConnectAndSetupAsync مسؤولية إنشاء وتهيئة اتصال تحكم وسيطرة (C2) قائم على بروتوكول TCP بين العميل والخادم البعيد. تقوم هذه الدالة بإنشاء مثيل جديد من نوع Node باستخدام SocketHandler مُهيأ بالمقبس ومفتاح التشفير المُقدمين، مما يُتيح الاتصال المُشفّر عبر هذا الاتصال. بعد التهيئة، تُجري الدالة عملية مصافحة مصادقة غير متزامنة باستخدام AuthenticateAsync للتحقق من صحة الاتصال بناءً على قيم النوع والمعرّف المُقدمة. في حال فشل المصادقة أو حدوث استثناء أثناء الإعداد، تُرجع الدالة قيمة null، مما يُشير إلى تعذر إنشاء قناة اتصال C2 بنجاح. في الحالات الأخرى، تُرجع الدالة كائن Node مُهيأ ومُصادق عليه بالكامل وجاهز لتبادل البيانات بشكل آمن.

تتولى دالة DllNodeHandler إدارة التحميل والتنفيذ الديناميكي لوحدات DLL الخارجية المُستلمة عبر اتصال Node بعيد. تستقبل الدالة أولًا اسم DLL من العميل المتصل، ثم تتحقق مما إذا كان التجميع مُحملًا بالفعل في الذاكرة. في حال عدم وجود DLL، تطلب الدالة البيانات الثنائية من الطرف البعيد، وتُحمّلها ديناميكيًا باستخدام Assembly.Load ، وتُخزّنها في قاموس Assemblies لإعادة استخدامها؛ وإلا، تُبلغ العميل بأن DLL موجود بالفعل. بعد التحميل، تُنشئ الدالة نسخة من فئة مُحددة من التجميع باستخدام الانعكاس، ثم تستدعي دالة Run العامة الخاصة بها بشكل غير متزامن، مُمرّرةً اتصال Node النشط كوسيط.

تقوم الدالة SendAsync بإرسال البيانات بشكل غير متزامن عبر معالج المقبس، وتتحقق من نجاح الإرسال، وتفصل العقدة في حال فشل عملية الإرسال. وبالمثل، تسترجع الدالة ReceiveAsync البيانات المشفرة والمنسقة من معالج المقبس الأساسي، وتعيد دفق البايتات المُعالج إلى المُستدعي؛ وفي حال فشل العملية أو إرجاع قيمة فارغة (null)، يتم فصل العقدة تلقائيًا للحفاظ على حالة اتصال سليمة. توفر هاتان الدالتان معًا اتصالًا موثوقًا به بين العميل والخادم (C2) قائمًا على بروتوكول TCP، مع إدارة اتصال متكاملة وتنظيف تلقائي أثناء أخطاء الإرسال.
بالإضافة إلى ذلك، يتم ضغط بيانات الحمولة باستخدام واجهات برمجة تطبيقات ضغط RTL الأصلية لنظام التشغيل Windows (RtlCompressBuffer) قبل الإرسال ويتم فك ضغطها باستخدام RtlDecompressBuffer عند الاستقبال بناءً على حجم الرأس الأصلي، مما يحسن كفاءة النقل مع الحفاظ على سلامة البيانات، بينما يتم فرض أمان البيانات باستخدام تشفير AES، حيث يتم تشفير البيانات الأولية بمفتاح مشترك ومتجه تهيئة ثابت عبر CryptoStream، مما يضمن اتصالاً آمناً أثناء الإرسال.

تتولى طرق إضافية داخل الفئة إدارة عمليات الشبكات الأخرى، بما في ذلك فصل المقبس (Disconnect)، وإنشاء اتصالات فرعية ثانوية (ConnectSubSockAsync)، والتحقق من حالة الاتصال النشط (Connected)، والحفاظ على علاقات العقدة الفرعية (AddSubNode).
تقوم الدالة AddToStartupAdmin بإنشاء مهمة مجدولة في نظام ويندوز باسم " XenoUpdateManager " ، والتي تُشغّل الملف التنفيذي المحدد تلقائيًا عند تسجيل دخول المستخدم إلى النظام بصلاحيات إدارية كاملة. تُنشئ الدالة تعريفًا للمهمة بصيغة XML، وتكتبه في ملف مؤقت، ثم تستخدم schtasks.exe لتسجيل المهمة في جدولة مهام ويندوز. بعد تنفيذ الأمر، تتحقق الدالة من المخرجات للتأكد من إنشاء المهمة بنجاح، ثم تُعيد النتيجة.

تقوم وظيفة AddToStartupNonAdmin بإضافة الملف القابل للتنفيذ إلى بدء تشغيل Windows الخاص بالمستخدم الحالي عن طريق كتابته في مفتاح التسجيل HKCU\Software\Microsoft\Windows\CurrentVersion\Run ، بحيث يتم تشغيله تلقائيًا عند تسجيل الدخول بدون حقوق المسؤول، وتعيد ما إذا كانت العملية قد نجحت.

تسترجع دالة GetAntivirus معلومات مكافحة الفيروسات من النظام باستخدام أداة إدارة Windows (WMI) عن طريق الاستعلام عن فئة AntivirusProduct الموجودة ضمن root\SecurityCenter2. وتجمع قيم displayName التي تم إرجاعها بواسطة هذا الاستعلام، والتي تمثل منتجات مكافحة الفيروسات المثبتة المستخدمة لتحديد النظام.

تقوم وظيفة RemoveStartup بإزالة تطبيق من قائمة بدء تشغيل نظام ويندوز عن طريق حذف أي إدخالات مطابقة من كلٍّ من المهام المجدولة (باستخدام schtasks.exe) ومفتاح التسجيل HKCU\Software\Microsoft\Windows\CurrentVersion\Run. تتحقق الوظيفة أولًا من وجود صلاحيات المسؤول لإزالة المهام المجدولة، ثم تفحص وتحذف أي مهمة تشير إلى مسار الملف التنفيذي المحدد. وأخيرًا، تزيل أي إدخال بدء تشغيل مطابق في سجل النظام للمستخدم الحالي.

تقوم وظيفة إلغاء التثبيت بإزالة آليات استمرارية التطبيق ثم تُنهي البرنامج تلقائيًا. وتستدعي أولًا وظيفة RemoveStartup لحذف أي إدخالات بدء تشغيل (مهام مجدولة أو سجل النظام) مرتبطة بالملف التنفيذي الحالي.

يقوم البرنامج بتشغيل عملية cmd.exe مخفية باستخدام أمر مُفكّك ترميز Base64 (/C choice /CY /N /DY /T 3 & Del) تنتظر لبضع ثوانٍ ثم تحذف الملف التنفيذي قيد التشغيل من القرص. وأخيرًا، يقوم البرنامج بإنهاء العملية الحالية قسرًا، مما يضمن خروج التطبيق فورًا بعد عملية التنظيف.
قدرات زينو-رات
يكشف برنامج Xeno RAT عن معلومات مهمة حول سلوكه التشغيلي وقدراته بعد الاختراق. واستنادًا إلى الكود المُحلل، والنشاط الملحوظ، والوظائف المتاحة في مشروعه مفتوح المصدر على GitHub، يُظهر البرنامج الخبيث مجموعة واسعة من الميزات المرتبطة عادةً ببرامج الوصول عن بُعد المتقدمة (RATs).
- يراقب نشاط الضحية ويجمع معلومات استطلاع المضيف.
- يقوم بإنشاء اتصال تحكم وقيادة مشفر قائم على بروتوكول TCP.
- يدعم تقنية النفق الشبكي القائمة على بروكسي SOCKS5.
- يقوم بتحميل التجميعات الخارجية ديناميكيًا في الذاكرة باستخدام Assembly.Load.
- ينفذ أوامر عشوائية صادرة عن المهاجم عن بعد.
- يوفر وظائف إدارة الملفات بما في ذلك التحميل والتنزيل والحذف.
- يقوم بتسجيل ضغطات المفاتيح، والتقاط الشاشة، ومراقبة الحافظة، ومراقبة كاميرا الويب/الميكروفون.
- يرسل تحديثات دورية عن الحالة ونبضات القلب إلى خادم C2.
- يستخدم حركة مرور الشبكة المشفرة والمضغوطة لعرقلة التحليل.
- يحافظ على استمرارية البيانات باستخدام المهام المجدولة ومفاتيح تشغيل التسجيل.
- يمكنه إضافة نفسه أو إزالته من مواقع بدء تشغيل نظام التشغيل ويندوز.
- يعمل سراً للحفاظ على الوصول غير المصرح به على المدى الطويل.
- يتضمن البرنامج وظيفة إلغاء التثبيت الذاتي والحذف الذاتي لتنظيف النظام بعد التنفيذ.
العناصر البنيوية ونسب الجهات الفاعلة في التهديد:
استنادًا إلى تحليلنا وسجل تتبع هذه السلسلة وTPPs مع كل تلك الأدلة، فقد صنفنا هذه الحملة ضمن مجموعة SideCopy بمستوى ثقة متوسط إلى عالٍ كما ذكرنا سابقًا. أثناء تحليل البنية التحتية، تم حل نطاق التسليم abimj[.]edu[.]af إلى عنواني IP - 103.132.98.224 و103.132.98.226 - وكلاهما يقع ضمن نطاق 103.132.98.0/23 المنسوب إلى AS58469، وزارة الاتصالات وتكنولوجيا المعلومات الأفغانية.

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


وبالانتقال إلى خادم C2 الخاص بـ RAT 185.235.137.106، تبين وجود مضيف يعمل بنظام Windows ويشغل HTTP وHTTPS ومنفذ RDP غير قياسي - وهو ما يتوافق مع جهاز C2 مخصص يديره المشغل.

يتم استضافة الخادم على AS59711 (HZ Hosting Ltd)، وهو مزود خدمة مسجل في بلغاريا وله مقر فعلي في فرانكفورت، وقد تم توثيق ذلك سابقًا في تقارير البنية التحتية لـ SideCopy بواسطة Seqrite.

تم حل ثلاث مجموعات نطاقات إلى عنوان IP هذا في وقت التحليل، بما في ذلك نطاقات تم تسجيلها بواسطة جهات فاعلة عبر نطاقات المستوى الأعلى .xyz و .live و .online، إلى جانب نطاق بنية تحتية للبريد الإلكتروني تم تكوينه بالكامل - مما يشير إلى أن الخادم نفسه كان يخدم اتصالات RAT وعمليات تسليم التصيد الاحتيالي في وقت واحد.

تُعدّ سلسلة الهجوم - المتمثلة في قيام LNK بتشغيل mshta.exe لجلب ملف HTA عن بُعد عبر نقطة نهاية index.php - سمةً مميزةً لأسلوب وتقنية SideCopy، موثقةً باستمرار منذ عام 2019، ولا تزال واحدةً من أكثر المؤشرات الموثوقة التي تُحدد هوية المجموعة. ويُعزز استخدام XenoRAT هذا التحديد بشكلٍ خاص، حيث Seqrite أكدت مختبرات في ديسمبر 2024 أن SideCopy قد اعتمدت رسميًا نسخًا معدلة من XenoRAT كجزء من مجموعة أدواتها المحدثة، وذلك على غرار اعتماد برامج التحكم عن بُعد مفتوحة المصدر الذي شوهد سابقًا مع AsyncRAT. ويتوافق استمرار عمل البرنامج في سجل النظام من خلال مفتاح تشغيل يحمل اسم عملية مُنتحلة صفة تطبيق ويندوز شرعي، مع سلوك SideCopy الموثق بعد الاختراق.
على مستوى البنية التحتية، تم تسجيل نطاق التسليم عبر AFGNIC ووضعه على نفس نطاق عناوين IP الخاص بالبنية التحتية الحكومية الأفغانية الشرعية - وهي تقنية دمج متعمدة تتوافق مع النمط الموثق لشركة SideCopy. ويؤكد ذلك أيضًا خادم التحكم والسيطرة عن بُعد (RAT C2) على HZ Hosting (AS59711)، حيث ظهر نفس المزود في مجموعات البنية التحتية السابقة لشركة SideCopy التي تم تتبعها بواسطة Seqriteوالجدير بالذكر أن اتساق التسمية بين مسار التسليم (cloudiyaf) واسم بدء التشغيل المضمن في RAT (clouda) يشير إلى وجود مشغل واحد يدير كلا طبقتي البنية التحتية - مما يربط طبقتي التسليم وما بعد الاستغلال بنفس الجهة الفاعلة.
الخلاصة: لماذا عملية زينوفيسكال؟
يُستمد الاسم مباشرةً من سمتين أساسيتين لهذه الحملة: XenoRAT، وهي أداة الوصول عن بُعد مفتوحة المصدر التي تم نشرها كحمولة نهائية، وFiscal، التي تعكس الاستهداف الدقيق لشبكة وزارة المالية الأفغانية على مستوى المحافظات. يشكل هذان العنصران معًا اسمًا رمزيًا واحدًا يُلخص السلاح والضحية في كلمة واحدة. إن اختيار الجهة المُهاجمة المتعمد لنشر طُعم ذي طابع مالي ضد وزارة المالية، بالإضافة إلى أداة وصول عن بُعد قادرة على المراقبة الصامتة طويلة الأمد، جعل هذا الجمع أمرًا لا مفر منه. XENOFISCAL ليس مجرد اسم، بل هو مُلخص للعملية بأكملها في ثمانية أحرف.
Seqrite تغطية:
- Link.Downloader.50744.GC
- Script.Netloader.50745.GC
- Trojan.LoaderCiR
- Trojan.YakbeexMSIL.ZZ4
- cld.script.trojan.1779477414
الشركات الأولمبية الدولية:
| اسم الملف | SHA256 |
| سستة | 194B912C242604D6F9A79369F22338C58A13CE0CC2ED280CE505075808BC2F14 |
| LNK | 3B4194BDFE40D94031A94B30397FFD8A4B09D0A4057668E897B8BDCD1703DD01 |
| ملف PDF للتمويه | DF9173A28C0B0B878C10A53D35CD7CE6F6ED66D207B6B7C4FF723721F1C027AB |
| ugayt.hta | A63E90EE57A1F213A8FE76EF1A6CFF5AE9ED7EBCEDA258431533825E648C0C67 |
| noway.bat | 5833917BD137804F5A021D2CB37ADFE5C4B7B67DBB06D59C3B9C5CF393835E45 |
| zuidrt.hta | 99127C8C67D90E2776BEEB85281F9C68399BF4567B07A6B638D68B760212E88D |
| WayBroad.dll | 8F2D979EF33B2900351C94C7335275A9342C75189E1A901998E90A539E944A1A |
| Aotestpass.dll | 0019212F25EB04BBB33BB194879C095265DB7855D6003BDD777CF0CBB90EB772 |
| زينو رات | 9AE3D785486022AF82EA92E51B26E3F55C1BBA88A7BE2AD9790F4240E8499D14 |
MITRE ATT&CK:
| تكتيك | اسم التقنية | معرف التقنية |
| الوصول الأولي | مرفق التصيد الرمحي | T1566.001 |
| التنفيذ | تنفيذ وكيل أدوات المطور الموثوقة: mshta | T1218.005 |
| مترجم الأوامر والبرمجة: Windows Command Shell | T1059.003 | |
| مترجم الأوامر والبرمجة: JavaScript | T1059.007 | |
| الوحدات المشتركة | T1129 | |
| API الأصلي | T1106 | |
| إصرار | مفاتيح تشغيل التسجيل / مجلد بدء التشغيل | T1547.001 |
| مهمة مجدولة | T1053.005 | |
| التصعيد امتياز | مهمة مجدولة | |
| التهرب الدفاعي | ملفات أو معلومات مبهمة | T1053.005 |
| فك تشفير / فك تشفير الملفات أو المعلومات | T1027 | |
| التخزين/التنفيذ بدون ملفات | T1140 | |
| تحميل رمز عاكس | T1027.011 | |
| العيش على الأرض: الثنائيات والنصوص (LOLBAS) | T1620 | |
| الملفات والمجلدات المخفية | T1218 | |
| حقن العمليات / التنفيذ في الذاكرة | T1564.001 | |
| تجاوز AMSI | T1055 | |
| إزالة المؤشر على المضيف: حذف الملف | T1562.001 | |
| الاكتشاف | سجل الاستعلام | T1070.004 |
| اكتشاف معلومات النظام | T1012 | |
| اكتشاف البرامج | T1082 | |
| اكتشاف برامج الأمان | T1518 | |
| التشكيلات | ال keylogging | T1518.001 |
| القبض على الشاشة | T1056.001 | |
| بيانات الحافظة | T1113 | |
| التقاط الصوت | T1115 | |
| لقطة فيديو | T1123 | |
| القيادة والتحكم | بروتوكول طبقة التطبيق: بروتوكولات الويب | T1125 |
| بروتوكول طبقة غير التطبيق | T1071.001 | |
| قناة مشفرة | T1095 | |
| الوكيل: الوكيل الخارجي | T1573 | |
| القرار الديناميكي | T1090.002 | |
| تنمية الموارد | اكتساب البنية التحتية: المجالات | T1568 |
| البنية التحتية للاختراق | T1583.001 |



