
مولد ماكرو (XLM) Excel 4.0 لحقن ملفات DLL و EXE في الذاكرة.
| \ / / | | | _ __ | || _ \ ___ _ __ _ | | | | \ / | | | | | | ' | | | | |/ _ | ' | | | | | | | / \ || || |__| | | | || || | () | | | | || | | |_____//__|||| ||_|____/ _/|| ||_,|__| by @JoeLeonJr (@FortyNorthSec)
EXCELntDonut هو مولد ماكرو XLM (Excel 4.0). ابدأ بكود مصدر C# (EXE) وانتهِ بماكرو XLM (Excel 4.0) سينفذ كودك في الذاكرة. يمكن حفظ ماكرو XLM (Excel 4.0) في ملفات .XLS.
chmod +x install.sh
./install.sh
ماذا يتم تثبيته؟
إذا كنت ترغب في تشغيل EXCELntDonut كسكريبت بايثون فقط، فستحتاج إلى إعداد بيئة افتراضية تحتوي على حزمتين "pandas" و "donut-shellcode". بالإضافة إلى ذلك، ستحتاج إلى تثبيت mono-complete من خلال apt-get واستدعاء سكريبت drive.py باستخدام python3. نوصي باستخدام سكريبت ./install.sh bash فقط، لكن الأمر لك.
Usage:
$ EXCELntDonut -f exe_source.cs -r System.Windows.Forms.dll --sandbox --obfuscate
Flags:
(required)
-f path to file containing your C# soure code (exe only)
-r References needed to compile your C# code (same ones for when using mcs to compile on Linux)
(ex: -r 'System.Management')
(optional)
-o output filename
--sandbox
Perform basic sandbox checks. This will be updated as new approaches are discovered.
--obfuscate
Perform basic macro obfuscation.
تقوم بتقديم ملف C# يحتوي على حمولتك (مثل EXE مع طريقة رئيسية تنفذ حمولة منارة Cobalt Strike). يتم تجميع ملف C# هذا باستخدام MCS إلى تجميعين .NET: x86 و x64. بعد التجميع، تقوم الأدوات الرائعة Donut (لـ x86) و CLRvoyance (لـ x64) بتحويل كل تجميع إلى شيفرة مستقلة عن الموقع (shellcode). بعد ذلك، يتم إزالة جميع النول بايتات، لأن ماكرو XLM (Excel 4.0) لا يتعامل بشكل جيد مع النول بايتات ويتم تجزئة الحمولة إلى أسطر لا تحتوي على أكثر من 255 حرفًا (لـ x86) أو 10 أحرف (لـ x64).
بمجرد تحضير الشيفرة، يتم دمجها مع وظائف حقن العملية الأساسية (VirtualAlloc و WriteProcessMemory و CreateThread) بالإضافة إلى وظيفة فحص البنية لتحديد أي حمولة (x86 أو x64) سيتم تشغيلها على النظام الهدف. إذا اخترت تنفيذ فحوصات الصندوق الرملي أو التعتيم الأساسي، فستقوم تلك الوظائف بتحديث الماكرو الخاص بك. أخيرًا، يتم وضع المخرجات في ملف CSV (محفوظ كـ .txt).
بمجرد الحصول على ملف المخرجات من EXCELntDonut، افتح ملف المخرجات في محرر نصوص وانسخه بالكامل (Ctrl-A, Ctrl-C). افتح Excel على جهاز Windows VM، وانقر بزر الماوس الأيمن على "Sheet 1" واختر "Insert". اختر "MS Excel 4.0 Macro". انتقل إلى الخلية A1 والصق مخرجات EXCELntDonut. من المحتمل أن يتم لصق جميع البيانات في عمود واحد. البيانات مفصولة بفاصلة منقوطة ";". انتقل إلى علامة التبويب "Data" ثم انقر على "Text-to-columns". اختر "Delimited" وفي الشاشة التالية اختر "Semicolon" ثم انقر على "Finish". سينتشر الماكرو عبر الأعمدة والصفوف المناسبة.
(ملاحظة - إذا اخترت العلم "--obfuscate"، فستحتاج إلى التمرير أفقيًا كثيرًا للعثور على الكود الفعلي، لأن جزءًا من منطق التعتيم ينقل الماكرو إلى قسم عشوائي من ورقة العمل).
نوصي بأمرين في هذه المرحلة:
احفظ الملف (.xls) وحاول فتحه. يجب أن ينفذ حمولتك تلقائيًا.
تعتمد هذه الفحوصات على ما يستخدمه المهاجمون الفعليون في برامجهم الضارة.
=FORMULA(D3&D23&D54&D23&D44,E45)
تسمح لنا وظيفة FORMULA بوضع صيغة، يمكن تنفيذها لاحقًا، في خلية أخرى. لذا في هذه الحالة، نضع تعليمات حقن العملية ثم نستخدم وظيفة FORMULA لوضع الوظيفة الفعلية في خلية أخرى ليتم تنفيذها. هذا يتجنب قيام المدافعين بإجراء تحليل ثابت ورؤية أشياء مثل "VirtualAlloc".
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs
_______ ______ _____ _ _ ____ _
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
by @JoeLeonJr (@FortyNorthSec)
[i] Generating your x86 .NET assembly.
warning CS8001: SDK path could not be resolved
test.cs(2,14): error CS0234: The type or namespace name `Management' does not exist in the namespace `System'. Are you missing an assembly reference?
هذا الخطأ يعني على الأرجح أنك تفتقد إلى تجميع مرجعي أثناء التجميع باستخدام mono. لإصلاح ذلك، ما عليك سوى تمرير مساحة الاسم المذكورة في العلم -r. في هذه الحالة، سنضيف -r 'System.Management' إلى سطر الأوامر. سيكون الأمر الجديد:
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r 'System.Management'
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r System.Management
_______ ______ _____ _ _ ____ _
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
by @JoeLeonJr (@FortyNorthSec)
[i] Generating your x86 .NET assembly.
warning CS8001: SDK path could not be resolved
error CS0006: Metadata file `System.Management' could not be found
[x] Error in generating x86 .NET assembly using MCS. See error message above.
لا ينبغي أن يظهر هذا الخطأ إلا إذا قمت بتشغيل EXCELntDonut دون استخدام سكريبت install.sh bash. في هذه الحالة، ستحتاج إلى تثبيت mono-complete يدويًا. سيقوم ذلك بتنزيل التبعيات ذات الصلة. يمكنك تثبيته باستخدام apt كما يلي:
apt-get install mono-complete
root@kali:~/Desktop# EXCELntDonut -f test.cs
_______ ______ _____ _ _ ____ _
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
by @JoeLeonJr (@FortyNorthSec)
[i] Generating your x86 .NET assembly.
error CS5001: Program `_excelntdonut_GJAoNuVPMcX.exe' does not contain a static `Main' method suitable for an entry point
[x] Error in generating x86 .NET assembly using MCS. See error message above.
في الوقت الحالي، يسمح EXCELntDonut فقط بملفات C# التي تحتوي على حمولات في الوظيفة Main.
إليك بعض قواعد Yara للبدء بها من @InQuest:
ابحث عن ورقة مخفية جدًا
https://github.com/InQuest/yara-rules/blob/master/Excel_Hidden_Macro_Sheet.rule
ابحث عن السلسلة Auto_Open
https://github.com/Neo23x0/signature-base/blob/master/yara/general_officemacros.yar
هناك الكثير من المقالات حول استخدام OLEDUMP.py لمراجعة ملفات XLM. فكر في هذه المقالة:
https://clickallthethings.wordpress.com/2020/04/06/covid-19-excel-4-0-macros-and-sandbox-detection/
لن يكون هذا حتى على رادارنا لولا العمل الرائع الذي قام به الأشخاص في Outflank (@outflanknl). شكر خاص لـ @StanHacked على بصيرته خلال هذا المشروع. أيضًا، بنفس القدر، لم يكن هذا المشروع ممكنًا بدون Donut (بواسطة @TheWover و @odzhan) ومكتبة بايثون ذات الصلة (بواسطة @byt3bl33d3r). بالإضافة إلى ذلك، قام فريق Accenture بإنشاء CLRvoyance، الذي حل بعض مشكلات x64 التي لم نتمكن من حلها مع Donut وماكرو XLM 4.0. أخيرًا، شكرًا لفيليب تسوكرمان من Cybereason على البحث الرائع حول جعل ماكرو XLM متوافقًا مع إصدارات 64 بت من Excel.
نحن لسنا مسؤولين عن سوء استخدام هذه الأداة. تم إنشاء هذه الأداة للأغراض التعليمية والاختبار المصرح به لإظهار كيفية حقن كود C# المصدر في الذاكرة باستخدام ماكرو XLM (Excel 4.0). الهدف النهائي من هذا المشروع هو (1) تزويد فريق red teamers بخيار حمولة تصيد آخر لمحاكاة ما يستخدمه الخصوم الفعليون حاليًا، و (2) تزويد المدافعين بإطار مرجعي لبناء التحليلات والتخفيف. بدون أداة لتوليد هذا النوع من الحمولات بسرعة، نعتقد أن المدافعين لن يكونوا مستعدين بشكل كافٍ لما هو قادم. يرجى التصرف بمسؤولية.
يرجى الاطلاع على ملف الترخيص في هذا المجلد. يرجى ملاحظة أن هذه الأداة تتضمن أداتين مفتوحتين المصدر أخريين بما في ذلك Donut و CLRvoyance.