
केवल NTAPI फ़ंक्शन का उपयोग करके WDigest.dll को पैच करके Credential Guard को बायपास करें
NativeBypassCredGuard एक उपकरण है जिसे केवल NTAPI फ़ंक्शनों (ntdll.dll द्वारा निर्यातित) का उपयोग करके WDigest.dll को पैच करके Credential Guard को बायपास करने के लिए डिज़ाइन किया गया है। यह दो रूपों में उपलब्ध है: C# और C++।
यह उपकरण डिस्क पर WDigest.dll फ़ाइल में पैटर्न "39 ?? ?? ?? ?? 00 8b ?? ?? ?? ?? 00" ढूंढता है (जैसा कि References अनुभाग में पहली पोस्ट में समझाया गया है, यह पैटर्न सभी Windows संस्करणों में इस फ़ाइल में मौजूद है), फिर आवश्यक मेमोरी पते की गणना करता है, और अंत में WDigest.dll के भीतर दो चरों के मान पैच करता है: g_fParameter_UseLogonCredential (को 1) और g_IsCredGuardEnabled (को 0)।
यह प्लेनटेक्स्ट क्रेडेंशियल भंडारण को मेमोरी में मजबूर करता है, यह सुनिश्चित करता है कि अब से जब भी उपयोगकर्ता लॉग इन करें, क्रेडेंशियल क्लियरटेक्स्ट में संग्रहीत हों। परिणामस्वरूप, अगली बार जब LSASS प्रक्रिया डंप की जाए, तो उसमें पासवर्ड प्लेनटेक्स्ट में हो सकते हैं।
उपयोग किए गए NTAPI फ़ंक्शन हैं:

केवल NTAPI फ़ंक्शनों का उपयोग करके, उपयोगकर्ता-मोड हुक और सुरक्षा तंत्रों को बायपास करने के लिए ntdll.dll लाइब्रेरी को रीमैप करना संभव है, जो इस उपकरण की एक वैकल्पिक सुविधा है। यदि उपयोग किया जाता है, तो ntdll.dll की एक स्वच्छ प्रति सस्पेंडेड मोड में बनाई गई प्रक्रिया से प्राप्त की जाती है।
NativeBypassCredGuard.exe <OPTION> <REMAP-NTDLL>
विकल्प (आवश्यक):
ntdll रीमैप करें (वैकल्पिक):
मान पढ़ें (ntdll रीमैपिंग के बिना):
NativeBypassCredGuard.exe check

मान पैच करें (ntdll रीमैपिंग के साथ):
NativeBypassCredGuard.exe patch true

यह उपकरण 64-बिट सिस्टम के लिए डिज़ाइन किया गया है, इसलिए इसे 64-बिट बाइनरी के रूप में संकलित किया जाना चाहिए
यह काम नहीं करेगा यदि lsass का हैंडल खोलना संभव नहीं है या PEB संरचना पठनीय नहीं है। बाद के संबंध में आप WDigest.dll का बेस पता प्राप्त करने के लिए lsass प्रक्रिया से ntdll!NtReadVirtualMemory और ntdll!NtQueryInformationProcess का उपयोग करने के बजाय, अपनी प्रक्रिया में WDigest.dll लोड करने के लिए kernel32!LoadLibrary का उपयोग करना चुन सकते हैं (इसका कोड C संस्करण में टिप्पणी के रूप में है)। लेकिन आप ntdll.dll द्वारा नहीं बल्कि kernel32.dll द्वारा निर्यातित फ़ंक्शन का उपयोग कर रहे होंगे, और यह शायद अजीब है कि कोई प्रक्रिया उस DLL को लोड करे :)
0x3rhy ने इस प्रोजेक्ट पर आधारित एक BOF फ़ाइल बनाई है: BypassCredGuard-BOF
Revisiting a Credential Guard Bypass द्वारा itm4n - एक बेहतरीन विश्लेषण जिससे मैंने DLL के .text अनुभाग को खोजने के लिए पैटर्न लिया
WDigest: Digging the dead from the grave द्वारा neuralhax - एक अद्भुत ब्लॉग जो साबित करता है कि g_fParameter_UseLogonCredential के लिए अन्य मानों का उपयोग करना संभव है, मैंने अभी तक इसका परीक्षण नहीं किया है लेकिन आप useLogonCredential_Value चर के साथ खेल सकते हैं
Exploring Mimikatz - Part 1 - WDigest द्वारा xpn - WDigest क्रेडेंशियल कैशिंग को रिवर्स-इंजीनियरिंग और समझाने वाली शानदार ब्लॉग पोस्ट