- Windows Security Center(WSC) सेवा API को सीधे इस्तेमाल करके Windows Defender को निष्क्रिय करने वाले defendnot टूल के विकास अनुभव को साझा किया गया है
- यह प्रोजेक्ट पिछले no-defender प्रोजेक्ट की तकनीकी सीमाओं और कानूनी समस्याओं को पार करने की प्रक्रिया में शुरू हुआ
- खास माहौल (MacBook arm64, remote debugging, high latency) जैसी कई बाधाओं के बीच reverse engineering और debugging की गई
- Defender registration bypass और process verification mechanism का विश्लेषण किया गया, और कई असफलताओं व प्रयासों के बाद इसे स्थिर रूप से काम करने लायक बनाया गया
- अंत में autorun feature भी लागू कर दिया गया, और साथ ही प्रोजेक्ट की प्रक्रिया को पलटकर देखते हुए कठिनाइयों को स्वीकार किया गया
परिचय
- Windows Defender को निष्क्रिय करने वाले defendnot टूल की implementation journey का अनुभव साझा किया गया है
- मुख्य तकनीकी विवरण समझाने के बजाय, इसे वास्तविक माहौल में झेली गई समस्याओं और trial-and-error के अनुभवों पर केंद्रित करके व्यवस्थित किया गया है
- औपचारिक documentation और तकनीकी विवरण बाद में अलग से प्रकाशित किए जाएंगे
1 साल पहले की याद
- लगभग 1 साल पहले no-defender नाम का एक प्रोजेक्ट जारी किया गया था, जो WSC API के जरिए Windows Defender के निष्क्रिय होने वाली संरचना का उपयोग करता था
- इस प्रोजेक्ट ने antivirus vendor के third-party code का संदर्भ लेकर सिस्टम को ऐसे भ्रमित किया जैसे कोई दूसरा antivirus रजिस्टर हो गया हो
- रिलीज़ के बाद इसे काफी ध्यान मिला और लगभग 1,500 Star मिले, लेकिन संबंधित antivirus vendor के DMCA takedown request के कारण source हटाने और प्रोजेक्ट बंद करने का निर्णय लिया गया
प्रोजेक्ट शुरू करने की वजह
- यह लेख लिखते समय लेखक सियोल में Airbnb में ठहरा हुआ था
- मुख्य development environment M4Pro MacBook था, और ज़रूरी x86 reverse engineering डिवाइस अलग से साथ नहीं लाया गया था
- CTF प्रतियोगिता और यात्रा शेड्यूल की वजह से x86 डिवाइस के बिना काम करना पड़ा
- no-defender प्रोजेक्ट को "सामान्य" तरीके से लागू किया जा सकता है या नहीं, और AV से स्वतंत्र standalone implementation संभव है या नहीं, इसकी खोज शुरू की गई
शुरुआती जांच (दिन 1)
- एक दोस्त की मदद से wsc binary प्राप्त की गई और पुराने प्रोजेक्ट जैसी संरचना में WSC registration को फिर से लागू करने की कोशिश की गई
- WSC के COM API का उपयोग करके implementation की गई, लेकिन Access Denied त्रुटि आई
- त्रुटि का कारण WSC द्वारा API call करने वाली process की signature verification और authentication प्रक्रिया में पाया गया
- AV process में module inject करके registration की कोशिश करने पर AV सफलतापूर्वक register हो गया
AV binary replacement और अतिरिक्त प्रयोग (दिन 1)
- signed system process (cmd.exe आदि) के जरिए टूल चलाने की कोशिश की गई, लेकिन PPL(Protected Process Light) verification में विफलता मिली
- विश्लेषण के लिए विस्तृत disassembly और tracing बाद में करने का तय करके काम अस्थायी रूप से रोक दिया गया
environment setup (दिन 2)
- arm64 MacBook वातावरण की सीमाओं के कारण x86 Windows debugging बहुत कठिन थी
- अमेरिका में रहने वाले एक दोस्त के PC को remote (Parasec, Anydesk आदि) से उपयोग करके high-latency environment में debugging और प्रयोग किए गए
- code build और VM debugging के जटिल रूप से बारी-बारी आने की प्रक्रिया में slowdown और confusion का अनुभव हुआ
WSC service debugging (दिन 2)
- यह पुष्टि हुई कि WSC service svchost द्वारा चलाई जाने वाली DLL संरचना में है
- PPL protection हटाने के लिए एक विशेष driver से bypass लागू किया गया, और debugger से function entry की पुष्टि की गई
- यह समझ में आया कि service के अंदर WinDefend SID token check किया जा रहा है
- WinDefend SID वाले process की नकल करके authentication प्रक्रिया को bypass करने का सिद्धांत बनाया गया
WinDefend SID imitation (दिन 2)
- Windows के token structure और उसके काम करने के तरीके के बारे में अतिरिक्त अध्ययन किया गया
- WinDefend SID imitation code को लागू और चलाने के बाद, सभी COM call में SUCCESS लौट रहा था, लेकिन वास्तव में AV registration नहीं हो रही थी
verification algorithm का पुनर्निर्माण (दिन 3)
- AV binary में SID check वास्तव में pass हो रहा है या नहीं, इसका सावधानी से दोबारा विश्लेषण किया गया
- SID check fail होने पर service द्वारा privilege escalation state, binary signature, और PE के DllCharacteristics flag (ForceIntegrity) जैसी अतिरिक्त चीजें जांचे जाने का पता चला
- इस संरचना को संभालने वाले function को दोबारा बनाया गया और system के core binary पर लागू करके प्रयोग किए गए
Taskmgr process का उपयोग (दिन 3)
- Taskmgr.exe को target process बनाकर फिर से प्रयोग किया गया, लेकिन name passing प्रक्रिया की त्रुटि और IPC bug की वजह से WSC ने request अस्वीकार कर दी
- file path inference और AV name pass करने के तरीके में सुधार के बाद सही तरह से काम करना पुष्टि हुआ
code cleanup (दिन 3)
- functionality को व्यवस्थित किया गया और autorun feature लागू करने की कोशिश की गई
- autorun management में बीच-बीच में विफलता आई, और कारण पता करने के लिए code और environment की बार-बार जांच की गई
autorun implementation (दिन 4)
- Task Scheduler के विकल्पों में यह पाया गया कि जब laptop AC power से connected न हो तब task न चलने वाला checkbox सक्षम होने से समस्या हो रही थी
- उस setting को हटाने के बाद autorun सामान्य रूप से काम करने लगा
- अंत में code cleanup और testing की गई
निष्कर्ष
- सीमित और असुविधाजनक माहौल में reverse engineering का काम मानसिक और शारीरिक रूप से बहुत कठिन अनुभव था
- आगे WSC implementation पर अधिक विस्तृत दस्तावेज़ अलग से प्रकाशित किए जाएंगे
आभार
- Pindos: रात में PC उपलब्ध कराकर debugging में मदद करने और कमरा गर्म रखने वाले दोस्त
- MrBruh: प्रोजेक्ट की खोज शुरू करने के लिए प्रेरित करने और ideas पर feedback देने वाले सहयोगी
- प्रोजेक्ट के दौरान लगातार संपर्क में रहकर हौसला बढ़ाने वाले परिचितों का भी धन्यवाद
- किमची के प्रति अपने प्रेम का इज़हार
- हमारी दीवार पर graffiti छोड़ने वाले कलाकार का भी धन्यवाद
1 टिप्पणियां
Hacker News राय
"C:\ProgramData\Microsoft\Windows Defender"फ़ोल्डर का नाम बदल दें, और उसकी जगह एक खाली file बना देंnetcat.exeइस्तेमाल नहीं करना चाहिए वगैरह