
हार्डवेयर ब्रेकपॉइंट (DR0-DR7) पर आधारित पैच-रहित यूज़र-मोड हुकिंग और टेलीमेट्री इंस्ट्रूमेंटेशन इंजन (AMSI, WLDP और ETW PoC)।
एक सुरक्षा-अनुसंधान Proof-of-Concept (POC) जो पारंपरिक इन-मेमोरी कोड पैचिंग के विकल्प के रूप में हार्डवेयर-ब्रेकपॉइंट (CPU डीबग रजिस्टर) आधारित फ़ंक्शन हुकिंग का प्रदर्शन करता है।
उद्देश्य और दायरा
यह रिपॉज़िटरी पूर्णतः रक्षात्मक सुरक्षा अनुसंधान, रेड-टीम/पर्पल-टीम शिक्षा, डिटेक्शन इंजीनियरिंग, और Windows आंतरिकीय संरचनाओं के अकादमिक अध्ययन के लिए प्रकाशित की गई है। यह प्रदर्शित करती है कि कैसे एक हमलावर प्रोसेसर डीबग रजिस्टरों का दुरुपयोग करके यूज़र-मोड सुरक्षा टेलीमेट्री को निष्क्रिय कर सकता है — और, उतना ही महत्वपूर्ण, रक्षकों को ऐसी तकनीकों का पता लगाने के लिए क्या निगरानी करनी चाहिए। लेखक इस कोड के किसी भी दुरुपयोग के लिए जिम्मेदार नहीं है। स्पष्ट प्राधिकरण के बिना सिस्टम के विरुद्ध इस तकनीक का उपयोग अवैध है और अधिकांश न्यायक्षेत्रों में प्रासंगिक कंप्यूटर-धोखाधड़ी और दुरुपयोग कानूनों का उल्लंघन करता है। इसे किसी भी ऐसे वातावरण में तैनात न करें जिसका आप स्वामी न हों या जिसके परीक्षण के लिए आपके पास स्पष्ट लिखित अनुमति न हो।
mora_hwbp.c एक DLL को लागू करता है, जो एक बार लक्ष्य प्रक्रिया (जैसे, PowerShell होस्ट) में लोड/इंजेक्ट होने के बाद, प्रक्रिया के प्रत्येक थ्रेड के आर्किटेक्चरल डीबग रजिस्टरों (DR0–DR7) में संग्रहीत CPU हार्डवेयर ब्रेकपॉइंट्स के माध्यम से विशेष रूप से चार यूज़र-मोड फ़ंक्शनों को हुक करता है:
| रजिस्टर | हुक किया गया फ़ंक्शन | मॉड्यूल | उद्देश्य |
|---|---|---|---|
DR0 | AmsiScanBuffer | amsi.dll | AMSI सामग्री स्कैनिंग को निष्क्रिय करें |
DR1 | WldpQueryDynamicCodeTrust | wldp.dll | WLDP डायनामिक-कोड विश्वास को बाध्य करें (Device Guard / WDAC) |
DR2 | WldpIsClassInApprovedList | wldp.dll | WLDP क्लास अनुमोदन को बाध्य करें (Device Guard / WDAC) |
DR3 | NtTraceEvent | ntdll.dll | संपूर्ण यूज़र-मोड ETW स्ट्रीम को काटें |
एक प्रति-प्रक्रिया वेक्टर्ड एक्सेप्शन हैंडलर (VEH) डीबग रजिस्टरों द्वारा उत्पन्न EXCEPTION_SINGLE_STEP (0x80000004) फ़ॉल्ट्स को प्राप्त करता है, एक्सेप्शन कॉन्टेक्स्ट को पुनः लिखकर मूल फ़ंक्शन के सफल रिटर्न पथ का अनुकरण करता है, और निष्पादन को फिर से शुरू करता है — यह सब निष्पादन योग्य मेमोरी के एक भी बाइट को संशोधित किए बिना।
यह तकनीक को आक्रामक और रक्षात्मक दोनों दृष्टिकोणों से विशेष रूप से रोचक बनाती है:
.text सेक्शनों की तलाश करती हैं (क्लासिक इनलाइन हुकिंग, EAT/IAT पैचिंग, या Etwp* स्टबिंग)।GetThreadContext/SetThreadContext सिस्टम कॉल पैटर्न) जिनका उपयोग डिटेक्शन के लिए किया जा सकता है।पारंपरिक यूज़र-मोड हुकिंग दृष्टिकोण — इनलाइन डिटूर (5–14 बाइट ओवरराइट), इम्पोर्ट एड्रेस टेबल (IAT) हुकिंग, और एक्सपोर्ट एड्रेस टेबल (EAT) हुकिंग — एक सामान्य कमज़ोरी साझा करते हैं: वे उस मेमोरी को संशोधित करते हैं जिसे अखंडता स्कैनर और ETW देख सकते हैं।
आधुनिक AV/EDR उत्पाद लागू करते हैं:
pageguard/guard-page ट्रिक्स, VirtualProtect का PAGE_EXECUTE_READWRITE में परिवर्तन, और सेक्शन हैश बेमेल का पता लगाती हैं।हार्डवेयर ब्रेकपॉइंट्स इन सभी को बायपास कर देते हैं:
.text में स्कैन करने के लिए कुछ नहीं है।SetThreadContext के माध्यम से प्रति-थ्रेड आधार पर सेट किए जाते हैं, जो इंटीग्रिटी स्कैनर द्वारा उपयोग किए जाने वाले पारंपरिक "मेमोरी संशोधित" सिग्नल को ट्रिगर नहीं करता है।यह POC AMSI (Antimalware Scan Interface), WLDP (Windows Lockdown Policy), और ETW (Event Tracing for Windows) के विरुद्ध इस तकनीक की प्रभावशीलता और पता लगाने की क्षमता का पता लगाता है — जो आधुनिक Windows सुरक्षा स्टैक में तीन सबसे व्यापक रूप से भरोसेमंद यूज़र-मोड सुरक्षा प्रिमिटिव हैं।
AMSI वह Windows प्लेटफ़ॉर्म इंटीग्रेशन पॉइंट है जो अनुप्रयोगों (PowerShell, Office, VBScript, .NET होस्ट, आदि) को पंजीकृत एंटीमैलवेयर प्रदाताओं से सामग्री स्कैनिंग का अनुरोध करने की अनुमति देता है। रुचि का प्राथमिक एंट्री पॉइंट है:
AmsiScanBuffer(HANDLE hamsiContext, PVOID buffer, ULONG length, LPCWSTR contentName, HANDLE hamsiSession, AMSI_RESULT *pResult)लौटाए गए AMSI_RESULT को AMSI_RESULT_CLEAN (0) पर बाध्य करके, स्क्रिप्ट इंजन मानता है कि सामग्री का निरीक्षण किया गया और वह सौम्य पाई गई, इसलिए निष्पादन बिना रुकावट के जारी रहता है।
WLDP Windows Defender Application Control (WDAC / Device Guard) के लिए पॉलिसी मूल्यांकन लागू करता है। यह POC दो WLDP एंट्री पॉइंट्स को हुक करता है:
WldpIsClassInApprovedList इस बात का उत्तर देता है कि वर्तमान पॉलिसी के अंतर्गत दी गई COM क्लास (GUID द्वारा पहचानी गई) की अनुमति है या नहीं। AMSI आंतरिक रूप से WLDP से परामर्श करता है ताकि यह तय किया जा सके कि कुछ स्क्रिप्ट/सामग्री क्लास "विश्वसनीय" (स्वीकृत सूची में) हैं या नहीं। यदि फ़ंक्शन क्लास को स्वीकृत बताता है, तो AMSI उस सामग्री प्रकार के लिए अतिरिक्त जाँच छोड़ सकता है।WldpQueryDynamicCodeTrust इस बात का उत्तर देता है कि वर्तमान लॉकडाउन पॉलिसी के अंतर्गत गतिशील रूप से उत्पन्न कोड का दिया गया टुकड़ा (जैसे .NET JIT आउटपुट या अन्यथा उत्पन्न निष्पादन योग्य मेमोरी) विश्वसनीय है या नहीं।DLL WldpIsClassInApprovedList के isApproved आउटपुट पैरामीटर (RDX) को TRUE पर सेट करती है और S_OK लौटाती है, तथा WldpQueryDynamicCodeTrust को S_OK (0) लौटाने के लिए बाध्य करती है — जिससे मूल्यांकित सामग्री क्लास और क्वेरी किया गया गतिशील कोड दोनों विश्वसनीय प्रतीत होते हैं।
ntdll.dll में NtTraceEvent ETW सबसिस्टम में सबसे निचला यूज़र-मोड एंट्री पॉइंट है — वस्तुतः सभी ETW इवेंट उत्सर्जन इसके माध्यम से होकर गुज़रता है (जिसमें EtwEventWrite और उच्च-स्तरीय Etw* API शामिल हैं)। इसलिए इसे हुक करना यूज़र मोड से संपूर्ण ETW स्ट्रीम को काट देता है, जिसके सुरक्षा निगरानी से संबंधित व्यापक दुष्प्रभाव होते हैं:
Microsoft-Windows-DotNETRuntime)DLL वास्तविक फ़ंक्शन को निष्पादित किए बिना सरलता से STATUS_SUCCESS (0) लौटाती है।