
Windows Event Log Killer

يُعتبر Svchost أساسياً في تنفيذ ما يُسمى بعمليات الخدمة المشتركة، حيث يمكن لعدة خدمات مشاركة عملية واحدة لتقليل استهلاك الموارد. يؤدي تجميع خدمات متعددة في عملية واحدة إلى الحفاظ على موارد الحوسبة، وكان هذا الاعتبار ذا أهمية خاصة لمصممي NT لأن إنشاء عمليات ويندوز يستغرق وقتاً أطول ويستهلك ذاكرة أكثر مقارنة بأنظمة التشغيل الأخرى، مثل عائلة يونكس.1
هذا يعني باختصار أنه؛ في أنظمة تشغيل ويندوز، يدير svchost.exe الخدمات والخدمات تعمل فعلياً كخيوط تحت svchost.exe. يستهدف Phant0m خدمة سجل الأحداث، وبالعثور على العملية المسؤولة عن خدمة سجل الأحداث، يكتشف ويقتل الخيوط المسؤولة عن خدمة سجل الأحداث. وبالتالي، بينما تبدو خدمة سجل الأحداث قيد التشغيل في النظام (لأن Phant0m لم يقتل العملية)، إلا أنها لا تعمل فعلياً (لأن Phant0m قتل الخيوط) ولا يقوم النظام بجمع السجلات.

يستخدم Phant0m خيارين مختلفين لكشف معرف العملية (Process ID) لخدمة سجل الأحداث. الأول هو الكشف عبر SCM (مدير التحكم بالخدمات) والثاني هو الكشف عبر WMI (أداة إدارة ويندوز). لتحديد الطريقة التي تريد أن يكتشف بها Phant0m معرف العملية لخدمة سجل الأحداث، قم بتغيير الأسطر التالية في ملف main.cpp.
على سبيل المثال، إذا كنت تريد الكشف عن معرف العملية عبر SCM، فيجب تعديله كالتالي. (لا تقم بتعيين جميع القيم في نفس الوقت، قم بتعيين التقنية التي تريدها فقط.)
// PID detection techniques configuration section.
#define PID_FROM_SCM 1 // If you set it to 1, the PID of the Event Log service is obtained from the Service Manager.
#define PID_FROM_WMI 0 // If you set it to 1, the PID of the Event Log service is obtained from the WMI.
على سبيل المثال، إذا كنت تريد قتل الخيوط باستخدام التقنية-1، فيجب تعديله كالتالي. (لا تقم بتعيين جميع القيم في نفس الوقت، قم بتعيين التقنية التي تريدها فقط.)
// TID detection and kill techniques configuration section.
#define KILL_WITH_T1 1 // If you set it to 1, Technique-1 will be use. For more information; https://github.com/hlldz/Phant0m
#define KILL_WITH_T2 0 // If you set it to 1, Technique-2 will be use. For more information; https://github.com/hlldz/Phant0m
يستخدم Phant0m خيارين مختلفين لكشف وقتل خيوط خدمة سجل الأحداث.
عند تسجيل كل خدمة على جهاز يعمل بنظام Windows Vista أو أحدث، يقوم مدير التحكم بالخدمات (SCM) بتعيين علامة رقمية فريدة للخدمة (بترتيب تصاعدي). بعد ذلك، في وقت إنشاء الخدمة، يتم تعيين العلامة إلى TEB لخيط الخدمة الرئيسي. سيتم بعد ذلك نشر هذه العلامة إلى كل خيط تم إنشاؤه بواسطة خيط الخدمة الرئيسي. على سبيل المثال، إذا قام خيط خدمة Foo بإنشاء خيط عمل RPC (ملاحظة: خيوط عمل RPC لا تستخدم آلية تجمع الخيوط، المزيد لاحقاً)، فسيحصل هذا الخيط على علامة الخدمة الخاصة بخدمة Foo.2
لذا، في هذه التقنية سيكتشف Phant0m خيوط خدمة سجل الأحداث باستخدام API NtQueryInformationThread للحصول على عنوان TEB للخيط وقراءة SubProcessTag من TEB. ثم يقتل الخيوط المتعلقة بخدمة سجل الأحداث. توجد أكواد هذه التقنية في ملف the technique_1.h.
في هذه التقنية، يكتشف Phant0m أسماء DLLs المرتبطة بالخيوط. تستخدم خدمة سجل أحداث ويندوز wevtsvc.dll. المسار الكامل هو %WinDir%\System32\wevtsvc.dll. إذا كان الخيط يستخدم هذا DLL، فهو خيط خدمة سجل أحداث ويندوز ثم يقتل Phant0m الخيط. توجد أكواد هذه التقنية في ملف the technique_2.h.
يمكنك استخدام Phant0m كملف EXE مستقل وكـ Reflective DLL. افتح المشروع في Microsoft Visual Studio، وقم بالإعدادات (اختيار تقنيات الكشف والقتل) وقم بالتجميع. يمكنك أيضاً استخدام إصدار Reflective DLL مع Cobalt Strike، ولهذا يوجد ملف Aggressor Script (phant0m.cna) في المستودع.

تم استخدام طريقة fork and inject مع bdllspawn في نوع التنفيذ لـ Aggressor Script (phant0m.cna) لـ Cobalt Strike. إذا كنت تريد حقن Phant0m في عمليتك الحالية وتشغيلها، يمكنك مراجعة هذا المشروع (https://github.com/rxwx/cs-rdll-ipc-example) ويمكنك القيام بذلك بسهولة. يمكنك أيضاً تحويل الكود إلى DLL ثم إلى Shellcode باستخدام Donut.
ملاحظة: المشروع يدعم فقط بنية x64.