1 पॉइंट द्वारा GN⁺ 2025-05-13 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 टिप्पणियां

 
GN⁺ 2025-05-13
Hacker News राय
  • Defender को disable करने का सबसे ताकतवर लेकिन invasive तरीका यह है कि live Linux USB से boot करें, "C:\ProgramData\Microsoft\Windows Defender" फ़ोल्डर का नाम बदल दें, और उसकी जगह एक खाली file बना दें
    • Group Policy इतना अच्छी तरह काम करती है कि मैंने homelab में एक controller रखकर ऐसा local domain environment बनाया, जो सभी users के लिए Defender policy अपने-आप बदल देता है
    • यह अजीब है कि Windows के पास ऐसे tampering को detect करने वाला कोई signed manifest नहीं है
    • लोकप्रिय products भी असल में यही करते हैं, और एक बार तो इंटरनेट के लगभग 25% हिस्से को down भी कर चुके हैं
  • project काफ़ी चर्चा में रहा और लगभग 1.5k stars भी मिले, लेकिन उसके बाद जिस antivirus का मैं इस्तेमाल कर रहा था उसके developer ने DMCA request भेज दी। समझ नहीं आया कि "जिस antivirus का मैं इस्तेमाल कर रहा था" वह कौन-सा था, और यह व्यक्ति DMCA क्यों भेज रहा है। शायद author ने किसी दूसरे antivirus का reverse engineering करके उसे open source में डाल दिया, या कम-से-कम WinDefend की नकल करने से जुड़ा कुछ किया। लगता है copyright issue था
    • मेरी समझ से इसमें किसी दूसरे antivirus tool के shell का इस्तेमाल करके signature requirement को bypass किया गया। यह transformative होने के कारण शायद उचित माना जा सकता है (मैं कानूनी विशेषज्ञ नहीं हूँ), लेकिन यह grey area है
    • हाँ, इसमें एक मौजूदा antivirus program के कुछ हिस्सों को copy किया गया था, इसलिए copyright law का उल्लंघन हुआ। ठीक ऊपर उद्धृत paragraph में भी कहा गया है कि project ने किसी मौजूदा antivirus के third-party code का उपयोग करके AV को WSC में register कराया
  • जानकारी के लिए, WSC का मतलब Windows Security Center है
    • मदद के लिए धन्यवाद। जब कोई acronym पहली बार आए और उसे समझाया न जाए, तो बहुत झुंझलाहट होती है
  • यह सच में बहुत अजीब है: https://github.com/es3n1n/defendnot/… अगर जानना हो कि वास्तव में क्या हो रहा है, तो यहाँ देखें: https://github.com/es3n1n/defendnot/…
    • जानना चाहता हूँ कि CPP magic को अच्छी तरह समझाने वाला कोई व्यक्ति बता सकता है कि यह code अजीब क्यों है
    • मुझे इसमें कुछ भी अजीब नहीं लग रहा। मैं यह pattern कई जगह code में अच्छे से इस्तेमाल करता हूँ। call site पर signature अलग है, लेकिन वह personal preference है। वैसे D language में scope exit पर trigger होने वाला syntax built-in है
    • समय की कमी के कारण सभी COM elements के लिए खुद RAII pattern implement करना झंझट लगा। अगली update में इसे बदलने वाला हूँ
    • "Code is how you treat your colleagues" - Michael Feather संक्षेप में, यह AI नहीं है यह code किसी object का scope समाप्त होने पर function call को defer करने का काम करता है। यह C macros का इस्तेमाल करके जटिल C lambdas/anonymous function definitions और unique variable names बनाना आसान करता है। लेकिन macro को uppercase में नहीं लिखा गया और वह function call जैसा दिखता है, इसलिए जो लोग परिचित नहीं हैं वे भ्रमित हो सकते हैं। कुछ लोगों के लिए यह pattern इतना उपयोगी है कि इसे idiomatic माना जाता है। तकनीकी व्याख्या दूसरे comment के link में देखी जा सकती है
  • पिछले साल Windows के virtual desktop का reverse engineering करते हुए मेरी छुट्टियाँ बहुत मज़ेदार गुज़रीं, और वह शानदार याद है। reverse engineering सच में बहुत मज़ेदार है। मैंने बहुत-सी दिलचस्प बातें सीखीं, जैसे कि Windows RPC के अंदर undocumented message-passing mechanism मौजूद है: https://csandker.io/2022/05/24/Offensive-Windows-IPC-3-ALPC.html
  • मैंने हाल ही में https://nostarch.com/windows-security-internals पढ़ी, और इससे यह लेख और भी relatable लगा। Windows में backend कैसे काम करता है, इसका मुझे कुछ अंदाज़ा था, लेकिन उस किताब का आख़िरी chapter tokens और SID पर उतनी ही detail से बात करता है जितनी author ने की है
  • जिज्ञासा है कि कोई WSC को disable क्यों करना चाहेगा
    • performance, malware development, hacking वगैरह वजहें हो सकती हैं
    • अगर आप threat actor हैं, तो शायद आपकी किस्मत अच्छी हो और कोई दूसरा EDR (endpoint detection and response) product installed न हो। लेकिन अगर है, तो लगभग तय है कि आप block हो जाएँगे। अगर आप EDR vendor हैं, तो इसे Windows firewall को disable करने के लिए obfuscated API call की तरह इस्तेमाल किया जा सकता है। CrowdStrike जैसे products अपनी खुद की firewall इस्तेमाल करते हैं या Windows firewall को replace कर सकते हैं
    • हर antivirus software कम-से-कम powervirus तो है ही। मुझे यह पसंद नहीं कि कोई यह निगरानी करे कि netcat.exe इस्तेमाल नहीं करना चाहिए वगैरह
    • यह मेरा hardware है, मैं इसे अपनी मर्ज़ी से इस्तेमाल करूँगा। वजह सीधी है
    • समझ नहीं आता कि कोई अपने ही system में rootkit क्यों डालना चाहेगा
  • मेरे लिए इससे भी बुरा यह है कि Check Point Harmony, Defender के लिए बने interface का बिल्कुल उपयोग नहीं करता, बल्कि knowledge base document में users को Defender सीधे disable करने के लिए कहता है
  • अगर किसी को जानना हो: WSC का मतलब Windows Security Center है। मुझे भी इसे खोजकर देखना पड़ा
    • article में यह वाक्य शामिल है: "यह सब manage करने वाला Windows Security Center-WSC है"
  • "मैं arm64 macbook पर काम कर रहा हूँ, इसलिए अभी arm macbook पर x86 Windows को emulate करने का कोई ठीक-ठाक तरीका नहीं है" इस बात पर किसी ने UTM के बारे में पूछा और यह भी कहा कि Parallels ने हाल ही में Intel VM support शुरू किया है
    • मैंने UTM इस्तेमाल किया है, और x86 Windows पर यह लगभग बेकार था। command-line Linux को शायद स्वीकार्य स्तर की धीमी speed पर चलाया जा सकता है, लेकिन GUI environment में यह संभव नहीं है। arm64 Windows ठीक चलता है, लेकिन वह x86 Windows नहीं है, इसलिए x86 system components के reverse engineering में कोई काम का नहीं
    • QEMU का dynamic recompilation system Windows या macOS (Rosetta 2) की native systems जितना efficient नहीं है। UTM में x86 Windows चल तो जाता है, लेकिन performance बहुत खराब है। व्यवहार में ARM Windows VM में Windows के dynamic recompiler से x86 apps चलाना, या native code-based subsystem इस्तेमाल करने वाला WINE बेहतर लगता है। जल्दी में कुछ साधारण काम के लिए यह ठीक हो सकता है। अगर OP के "ठीक-ठाक" कहने में performance भी शामिल है, तो उनकी बात समझ में आती है
    • अगर मैं ग़लत हूँ तो सुधार दें, लेकिन ऐसा लगता है कि MMU वाले CPU की emulation मूल रूप से धीमी ही होती है और उसे optimize करना कठिन है। Apple की Rosetta और Microsoft की संबंधित तकनीक तेज़ इसलिए हैं क्योंकि वे सिर्फ user-space code चलाती हैं। वे पूरे system की MMU emulation से बचती हैं