يعد Svchost ضروريًا في تنفيذ ما يسمى بعمليات الخدمة المشتركة، حيث يمكن لعدد من الخدمات مشاركة عملية ما من أجل تقليل استهلاك الموارد. يؤدي تجميع خدمات متعددة في عملية واحدة إلى الحفاظ على موارد الحوسبة، وكان هذا الاعتبار موضع اهتمام خاص لمصممي NT لأن إنشاء عمليات Windows يستغرق وقتًا أطول ويستهلك ذاكرة أكبر من أنظمة التشغيل الأخرى، على سبيل المثال، عائلة Unix. 1
وهذا يعني باختصار أن؛ في أنظمة تشغيل Windows، يقوم ملف svchost.exe بإدارة الخدمات والخدمات التي تعمل فعليًا ضمن ملف svchost.exe كسلاسل رسائل. يستهدف Phant0m خدمة سجل الأحداث ويبحث عن العملية المسؤولة عن خدمة سجل الأحداث، فهو يكتشف ويقتل الخيوط المسؤولة عن خدمة سجل الأحداث. وبالتالي، بينما يبدو أن خدمة سجل الأحداث تعمل في النظام (لأن Phant0m لم يوقف العملية)، إلا أنها لا تعمل فعليًا (لأن Phant0m قتلت الخيوط) ولا يقوم النظام بتجميع السجلات.
يستخدم Phant0m خيارين مختلفين للكشف عن معرف العملية لخدمة سجل الأحداث. الأول هو الاكتشاف عبر SCM (إدارة التحكم في الخدمة) والثاني هو الاكتشاف عبر WMI (Windows Management Instrumentation). باستخدام الطريقة التي تريد من 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 سلاسل عمليات خدمة سجل الأحداث باستخدام NtQueryInformationThread API للحصول على عنوان TEB الخاص بمؤشر الترابط وقراءة SubProcessTag من TEB. ثم يقوم بقتل المواضيع المتعلقة بخدمة سجل الأحداث. رموز هذه التقنية موجودة في الملف the technique_1.h .
في هذه التقنية، يكتشف Phant0m أسماء مكتبات الارتباط الحيوي (DLL) المرتبطة بسلاسل الرسائل. تستخدم خدمة سجل أحداث Windows wevtsvc.dll . المسار الكامل هو %WinDir%System32wevtsvc.dll . إذا كان مؤشر الترابط يستخدم ملف DLL هذا، فهو مؤشر ترابط خدمة سجل أحداث Windows ثم يقوم Phant0m بقتل مؤشر الترابط. رموز هذه التقنية موجودة في الملف the technique_2.h .
يمكنك استخدام Phant0m كملف EXE مستقل وكملف DLL عاكس. افتح المشروع في Microsoft Visual Studio، وقم بإجراء الإعدادات (حدد تقنيات الكشف والقتل) ثم قم بالتجميع. يمكنك أيضًا استخدام إصدار DLL العاكس مع Cobalt Strike، ولهذا يوجد ملف Aggressor Script (phant0m.cna) في المستودع.
تم استخدام طريقة الشوكة والحقن مع bdllspawn في نوع تنفيذ Aggressor Script (phant0m.cna) لـ Cobalt Strike. إذا كنت تريد إدخال Phant0m في عمليتك الحالية وتشغيلها، فيمكنك مراجعة هذا المشروع (https://github.com/rxwx/cs-rdll-ipc-example) ويمكنك القيام بذلك بسهولة. يمكنك أيضًا تحويل الكود إلى DLL ثم إلى Shellcode باستخدام Donut.
ملاحظة: المشروع يدعم بنية x64 فقط.