
विंडोज़ इवेंट लॉग किलर

Svchost तथाकथित साझा सेवा प्रक्रियाओं (shared service processes) के कार्यान्वयन में आवश्यक है, जहाँ कई सेवाएँ संसाधन खपत को कम करने के लिए एक प्रक्रिया साझा कर सकती हैं। कई सेवाओं को एक ही प्रक्रिया में समूहित करने से कम्प्यूटिंग संसाधनों की बचत होती है, और यह विचार एनटी डिज़ाइनरों के लिए विशेष चिंता का विषय था क्योंकि विंडोज प्रक्रियाएँ बनाने में अन्य ऑपरेटिंग सिस्टमों, जैसे यूनिक्स परिवार, की तुलना में अधिक समय लगता है और अधिक मेमोरी खपत होती है।1
इसका सीधा अर्थ है कि; विंडोज ऑपरेटिंग सिस्टम पर, svchost.exe सेवाओं का प्रबंधन करता है और सेवाएँ वास्तव में svchost.exe के अंतर्गत थ्रेड के रूप में चलती हैं। Phant0m इवेंट लॉग सेवा को लक्षित करता है और इवेंट लॉग सेवा के लिए जिम्मेदार प्रक्रिया का पता लगाकर, वह उन थ्रेड्स को पहचानता और मारता है जो इवेंट लॉग सेवा के लिए जिम्मेदार हैं। इस प्रकार, जबकि इवेंट लॉग सेवा सिस्टम में चल रही प्रतीत होती है (क्योंकि Phant0m ने प्रक्रिया को नहीं मारा), वास्तव में यह नहीं चलती (क्योंकि Phant0m ने थ्रेड्स को मार दिया) और सिस्टम लॉग एकत्र नहीं करता।

Phant0m इवेंट लॉग सेवा की प्रक्रिया आईडी (PID) का पता लगाने के लिए दो अलग-अलग विकल्पों का उपयोग करता है। पहला है 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 इवेंट लॉग सेवा के थ्रेड्स का पता लगाने और उन्हें मारने के लिए दो अलग-अलग विकल्पों का उपयोग करता है।
जब विंडोज विस्टा या बाद के संस्करण चलाने वाली मशीन पर प्रत्येक सेवा पंजीकृत होती है, तो सर्विस कंट्रोल मैनेजर (SCM) सेवा को एक अद्वितीय संख्यात्मक टैग (आरोही क्रम में) प्रदान करता है। फिर, सेवा निर्माण के समय, टैग मुख्य सेवा थ्रेड के TEB को सौंपा जाता है। यह टैग बाद में मुख्य सेवा थ्रेड द्वारा बनाए गए प्रत्येक थ्रेड में प्रसारित हो जाता है। उदाहरण के लिए, यदि Foo सेवा थ्रेड एक RPC वर्कर थ्रेड बनाता है (नोट: RPC वर्कर थ्रेड थ्रेड पूल मैकेनिज्म का उपयोग नहीं करते, इस पर बाद में और अधिक), तो उस थ्रेड में Foo सेवा का सर्विस टैग होगा।2
इसलिए, इस तकनीक में Phant0m NtQueryInformationThread API का उपयोग करके थ्रेड के TEB पते को प्राप्त करता है और TEB से SubProcessTag को पढ़कर इवेंट लॉग सेवा के थ्रेड्स का पता लगाता है। फिर यह इवेंट लॉग सेवा से संबंधित थ्रेड्स को मार देता है। इस तकनीक के कोड technique_1.h फ़ाइल में हैं।
इस तकनीक में, Phant0m थ्रेड्स से जुड़ी DLL के नामों का पता लगाता है। विंडोज इवेंट लॉग सेवा wevtsvc.dll का उपयोग करती है। पूरा पथ %WinDir%\System32\wevtsvc.dll है। यदि थ्रेड उस DLL का उपयोग कर रहा है, तो वह विंडोज इवेंट लॉग सेवा का थ्रेड है और फिर Phant0m थ्रेड को मार देता है। इस तकनीक के कोड technique_2.h फ़ाइल में हैं।
आप Phant0m का उपयोग स्टैंडअलोन EXE और रिफ्लेक्टिव DLL दोनों के रूप में कर सकते हैं। माइक्रोसॉफ्ट विजुअल स्टूडियो में प्रोजेक्ट खोलें, सेटिंग्स करें (डिटेक्शन और किल तकनीकों का चयन करें) और कम्पाइल करें। आप रिफ्लेक्टिव DLL संस्करण का उपयोग Cobalt Strike के साथ भी कर सकते हैं, इसके लिए रिपॉजिटरी में एक Aggressor स्क्रिप्ट फ़ाइल (phant0m.cna) है।

Cobalt Strike के लिए Aggressor स्क्रिप्ट (phant0m.cna) के निष्पादन प्रकार में bdllspawn के साथ फोर्क और इंजेक्ट विधि का उपयोग किया गया था। यदि आप Phant0m को अपनी मौजूदा प्रक्रिया में इंजेक्ट करके चलाना चाहते हैं, तो आप इस प्रोजेक्ट (https://github.com/rxwx/cs-rdll-ipc-example) की समीक्षा कर सकते हैं और इसे आसानी से कर सकते हैं। आप कोड को DLL और फिर Donut के साथ शेलकोड में भी बदल सकते हैं।
नोट: प्रोजेक्ट केवल x64 आर्किटेक्चर का समर्थन करता है।