
Spartacus: مجموعة أدوات اختطاف DLL/COM
[!CAUTION] هذا المستودع غير مُدار، قم بزيارة https://github.com/sadreck/Spartacus للحصول على أحدث إصدار.
إذا شاهدت فيلم Spartacus من عام 1960، ستتذكر المشهد حيث يطلب الرومان من Spartacus تسليم نفسه. في اللحظة التي وقف فيها Spartacus الحقيقي، وقف العديد من الآخرين أيضًا وادعوا أنه هم باستخدام عبارة "I AM SPARTACUS".
عندما تطلب عملية معرضة لاختطاف DLL تحميل DLL، فإنها تسأل نوعًا ما "من هو VERSION.DLL؟" وتبدأ الدلائل العشوائية في الادعاء "أنا VERSION.DLL" و"لا، أنا VERSION.DLL". وهكذا، Spartacus.
DllMain. هذه التقنية مستوحاة ومنفذة من الشرح الموصوف على https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain، بواسطة Shantanu Khandelwal.[دفاعي] وضع المراقبة الذي يحاول تحديد التطبيقات قيد التشغيل التي تقوم بتوكيل المكالمات، كما في "اختطاف DLL قيد التنفيذ". هذا فقط للحصول على أي نتائج سهلة ولا ينبغي الاعتماد عليه.ابحث عن أحدث إصدار من Spartacus وقم بتنزيله ضمن الإصدارات. بخلاف ذلك، قم ببساطة باستنساخ هذا المستودع وبناء من المصدر.
فيما يلي وصف لكل وضع يدعمه Spartacus.
ملاحظة: تغيرت وسائط سطر الأوامر بشكل كبير من الإصدار 1 إلى الإصدار 2.
الوظيفة الأصلية لـ Spartacus كانت فقط إيجاد ثغرات اختطاف DLL. طريقة عمله هي:
CreateFile..dll.procmon.exe أو procmon64.exe.Drop Filtered Events لضمان الحد الأدنى من حجم إخراج PML.Auto Scroll.ENTER.ENTER.جمع جميع الأحداث وحفظها في C:\Data\logs.pml. سيتم حفظ جميع الـ DLLs المعرضة للخطر في C:\Data\VulnerableDLLFiles.csv وجميع حلول الـ DLL الوكيلة في C:\Data\Solutions.
--mode dll --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose
تحليل ملف سجل أحداث PML موجود، حفظ المخرجات إلى CSV، وإنشاء حلول Visual Studio وكيلة.
--mode dll --existing --pml C:\MyData\SomeBackup.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose


وظيفة جديدة في Spartacus هي تحديد ثغرات اختطاف COM المحلية. طريقة عمله هي:
RegOpenKey.procmon.exe أو procmon64.exe.Drop Filtered Events لضمان الحد الأدنى من حجم إخراج PML.Auto Scroll.ENTER.ENTER.InprocServer32 ونتيجتها هي NAME_NOT_FOUND.HKEY_CURRENT_USER، فابحث عن GUID الخاص به تحت HKEY_CLASSES_ROOT وقم بتضمين تفاصيله في ملف CSV المصدر (إذا تم العثور عليه).بالنسبة لاختطاف COM، يدعم Spartacus أيضًا فحص النظام المحلي للبحث عن إدخالات COM غير المضبوطة:
HKEY_CLASSES_ROOT و HKEY_CURRENT_USER و HKEY_LOCAL_MACHINE.InProcServer أو InProcServer32 أو LocalServer أو LocalServer32.جمع جميع الأحداث وحفظها في C:\Data\logs.pml. سيتم حفظ جميع معلومات COM المعرضة للخطر في C:\Data\VulnerableCOM.csv.
--mode com --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose
معالجة ملف PML موجود لتحديد إدخالات COM المعرضة للخطر.
--mode com --existing --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose
تعداد سجل النظام المحلي لتحديد مكتبات وبرامج COM المفقودة/غير المضبوطة.
--mode com --acl --csv C:\Data\VulnerableCOM.csv --verbose


يدعم Spartacus توليد حلول Visual Studio عن طريق إنشاء مشاريع هيكلية لاستخدامك، بناءً على الـ DLL الذي ترغب في استغلاله.
DllMain.DllMain.version.dll، يمكنك تشغيل الغرسة الخاصة بك من GetFileVersionInfoExW إذا تم استدعاء هذه الدالة بواسطة التطبيق المعرض للخطر.توليد حل يعيد توجيه جميع التصديرات (بدون توكيل الدوال).
--mode proxy --dll C:\Windows\System32\version.dll --solution "C:\data\tmp\refactor-version" --overwrite --verbose --external-resources
من الممكن إدخال عدة DLLs في وقت واحد.
--mode proxy --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\userenv.dll --solution "C:\data\tmp\dll-collection" --overwrite --verbose --external-resources
إنشاء وكلاء لأكبر عدد ممكن من الدوال (بناءً على مخرجات Ghidra).
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose
نفس ما سبق، ولكن استخدام ملفات الأصول الخارجية لتوليد الحل (إذا كنت بحاجة إلى تعديلها).
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources
استخدام نماذج دوال مولدة مسبقًا للدوال التي لم يتمكن Ghidra من استخراج تعريفات دوال لها.
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources --prototypes C:\data\prototypes.csv
توليد وكلاء فقط للدوال GetFileVersionInfoExW و GetFileVersionInfoExA.
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\version.dll --solution C:\Projects\spartacus-version --verbose --overwrite --external-resources --only "GetFileVersionInfoExW, GetFileVersionInfoExA"
توليد قاعدة بيانات لنماذج الدوال من ملفات *.h الموجودة، مما يساعد في إنشاء دوال وكيلة لتلك التي لم يتمكن Ghidra من استخراج تعريف دالتها.
--mode proxy --action prototypes --path "C:\Program Files (x86)\Windows Kits" --csv C:\data\prototypes.csv --verbose
سرد تصديرات DLL والتحقق مما إذا كانت كل دالة تحتوي على نموذج مولَّد مسبقًا.
--mode proxy --action exports --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\amsi.dll --prototypes ./Assets/prototypes.csv
يدعم Spartacus الآن توليد شهادات موقعة ذاتيًا (مع نسخ الخصائص من الملفات الموجودة)، وتوقيع ملفات DLL.
إنشاء شهادة توقيع، باستخدام الخصائص من C:\Windows\System32\version.dll (يجب أن يكون DLL موقعًا).
--mode sign --action generate --pfx "C:\Output\certificate.pfx" --password "Welcome1" --not-before "2022-12-31 00:00:55" --not-after "2026-01-01 00:00:01" --copy-from C:\Windows\System32\version.dll --verbose
توقيع DLL باستخدام شهادة موجودة/مولدة.
--mode sign --action sign --pfx "C:\Output\certificate.pfx" --password "Welcome1" --path "C:\Input\MyFakeVersion.dll" --algorithm SHA256 --verbose
لدى Spartacus أيضًا وضع --detect، والذي يحاول تحديد توكيل DLL النشط. المنطق وراء ذلك هو:
لاستخدام هذه الميزة، قم ببساطة بتشغيل Spartacus مع --detect.
يدعم Spartacus وضع --sign الذي يسمح لك بتوليد شهادات موقعة ذاتيًا، وكذلك توقيع DLLs المترجمة بها.
توليد شهادة موقعة ذاتيًا، مع نسخ المُصدر/الموضوع من ملف موجود:
--mode sign --action generate --pfx "C:\Output\myCertificate.pfx" --password "Welcome1" --not-before "2023-01-01 00:00:04" --not-after "2025-01-01 00:00:42" --copy-from C:\Windows\System32\version.dll --verbose
واستخدام تلك الشهادة لتوقيع ملفك المترجم:
--mode sign --action sign --pfx "C:\Output\myCertificate.pfx" --password "Welcome1" --path "C:\Projects\Spartacus-AMSI\amsi.dll" --algorithm SHA256 --verbose
لتسهيل الأمور عليك، استخدم ملف CommandLineGenerator.html.
سواء كان خطأ إملائيًا، أو خطأ برمجيًا، أو ميزة جديدة، فإن Spartacus منفتح جدًا للمساهمات طالما أننا نتفق على ما يلي:
proxy.| الوضع | الوسيط | الوصف |
|---|
--mode | تحديد الوضع المراد استخدامه، أحد: dll، proxy، com، و detect. | |
الكل | --verbose | تمكين المخرجات التفصيلية. |
الكل | --debug | تمكين مخرجات التصحيح. |
الكل | --external-resources | افتراضيًا، يستخدم Spartacus الموارد المضمنة لتوليد ملفات حلول VS إلخ. إذا كنت بحاجة إلى تعديل القوالب، استخدم هذه الوسيطة لجعل Spartacus يقوم بتحميل جميع الملفات من مجلد ./Assets. |
dll، com | --procmon | موقع (ملف) مراقب عمليات SysInternals procmon.exe أو procmon64.exe |
dll، com | --pml | موقع (ملف) لتخزين ملف سجل أحداث ProcMon. إذا كان الملف موجودًا، فسيتم الكتابة فوقه. عند استخدامه مع --existing، سيشير إلى ملف سجل الأحداث الذي سيتم القراءة منه ولن يتم الكتابة فوقه. |
dll، com | --pmc | تحديد ملف ProcMon (PMC) مخصص لاستخدامه. لن يتم تعديل هذا الملف وسيتم استخدامه كما هو. |
dll، com | --csv | موقع (ملف) لتخزين مخرجات CSV للتنفيذ. |
dll، proxy | --solution | المسار إلى الدليل حيث سيتم تخزين حلول الـ DLLs الوكيلة. |
dll، com | --existing | مفتاح للإشارة إلى أنه يجب على Spartacus معالجة ملف سجل أحداث ProcMon موجود (PML). للإشارة إلى ملف سجل الأحداث، استخدم --pml، مفيد عندما كنت قد قمت بتشغيل ProcMon لساعات أو استخدمته في تسجيل التمهيد. |
dll | --all | افتراضيًا، سيتم تخطي أي DLLs في أدلة Windows أو Program Files. استخدم هذا لتضمين تلك الأدلة في المخرجات. |
proxy | --ghidra | المسار إلى ملف analyzeHeadless.bat الخاص بـ Ghidra. يستخدم عندما تريد توكيل دوال محددة بدلاً من مجرد DllMain. |
proxy | --dll | المسار إلى الـ DLL الذي تريد توكيله، ويمكن تضمين عدة نسخ من هذه الوسيطة. بالإضافة إلى ذلك، يمكن أن يحتوي على أحرف بدل مثل C:\Windows\System32\*.dll - لكن يجب أن تنتهي جميع المسارات بـ *.dll. |
proxy، sign | --overwrite | إذا كان ملف --solution (proxy) أو --pfx (sign) موجودًا بالفعل، استخدم هذه العلامة للكتابة فوقه. |
proxy | --only | توليد دوال وكيلة فقط للدوال المحددة في هذا المتغير. القيم مفصولة بفواصل مثل 'WTSFreeMemory,WTSFreeMemoryExA,WTSSetUserConfigA'. |
proxy | --action | الإجراء الافتراضي هو توليد حل VS. --action prototypes، يأخذ كمدخل مجلد Windows SDK ويقوم بتحليل ملفات *.h من أجل توليد قاعدة بيانات لنماذج الدوال. --action exports يعرض دوال التصدير للـ DLL وعند دمجه مع --prototypes سيعرض ما إذا كان تعريف الدالة قد تم توليده مسبقًا. |
sign | --action | عند استخدام --action مع وحدة sign، فإنه يأخذ أحد خيارين، generate لإنشاء PFX و sign لتوقيع ملف. |
proxy | --path | حاليًا يعمل فقط مع --action prototypes وهو موقع دليل Windows SDK. |
proxy | --prototypes | موقع prototypes.csv (حاليًا داخل مجلد ./Assets). |
com | --acl | تعداد النظام المحلي للبحث عن مكتبات وبرامج COM المفقودة/غير المضبوطة. |
sign | --subject | يستخدم مع --action generate لتحديد موضوع الشهادة. |
sign | --issuer | يستخدم مع --action generate لتحديد مُصدر الشهادة. |
sign | --copy-from | يستخدم مع --action generate لتحديد ملف موقع موجود لنسخ المُصدر والموضوع منه. |
sign | --not-before | يستخدم مع --action generate لتحديد التاريخ الذي ستصبح منه الشهادة الجديدة صالحة، التنسيق هو YYYY-MM-DD HH:MM:SS. |
sign | --not-after | يستخدم مع --action generate لتحديد التاريخ الذي ستظل فيه الشهادة الجديدة صالحة حتى، التنسيق هو YYYY-MM-DD HH:MM:SS. |
sign | --pfx | عند استخدامه مع --action generate، هذا هو المكان الذي سيتم حفظ ملف pfx فيه. عند استخدامه مع --action sign، هذا هو المكان الذي سيتم تحميل ملف pfx منه. |
sign | --password | عند استخدامه مع --action generate، يحدد كلمة المرور لملف --pfx. |
sign | --path | عند استخدامه مع --action sign، يحدد موقع ملف البرنامج القابل للتنفيذ/DLL الذي سيتم توقيعه. |
sign | --algorithm | عند استخدامه مع --action sign، يحدد خوارزمية التجزئة التي سيتم استخدامها للتوقيع. الخيارات هي: MD5، SHA1، SHA256، SHA384، SHA512. |
sign | --timestamp | عند استخدامه مع --action sign، يحدد خادم الطابع الزمني، مثل http://timestamp.sectigo.com أو http://timestamp.digicert.com. |