
C# उपकरण जो Active Directory Certificate Services (AD CS) में गलत कॉन्फ़िगरेशन की गणना और शोषण करने के लिए है, जिससे सर्टिफिकेट टेम्पलेट दुरुपयोग, विशेषाधिकार वृद्धि और डोमेन स्थायित्व सक्षम होता है।
Certify एक C# टूल है जो Active Directory Certificate Services (AD CS) में गलत कॉन्फ़िगरेशन को सूचीबद्ध और दुरुपयोग करने के लिए है।
@harmj0y और @tifkin_ Certify और संबंधित AD CS शोध के प्रमुख लेखक हैं (ब्लॉग और श्वेतपत्र)।
कमांड का अवलोकन और विस्तृत उपयोग विवरण विकी पर पाया जा सकता है।
Certify को Black Hat 2021 में हमारी "Certified Pre-Owned: Abusing Active Directory Certificate Services" वार्ता में जारी किया गया था।
रोकथाम और पहचान मार्गदर्शन के लिए हमारा श्वेतपत्र देखें।
हम Certify के लिए बाइनरी जारी करने की योजना नहीं बना रहे हैं, इसलिए आपको स्वयं संकलन करना होगा :)
Certify .NET 4.7.2 के विरुद्ध बनाया गया है और Visual Studio 2022 Community Edition के साथ संगत है। बस प्रोजेक्ट .sln खोलें, "Release" चुनें, और बिल्ड करें।
यदि आप PowerShell रैपर के माध्यम से मेमोरी में Certify चलाना चाहते हैं, तो पहले Certify को संकलित करें और परिणामी असेंबली को base64-एनकोड करें:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\Temp\Certify.exe")) | Out-File -Encoding ASCII C:\Temp\Certify.txt
Certify को निम्नलिखित के साथ PowerShell स्क्रिप्ट में लोड किया जा सकता है (जहाँ "aa..." को base64-एनकोडेड Certify असेंबली स्ट्रिंग से बदल दिया गया है):
$CertifyAssembly = [System.Reflection.Assembly]::Load([Convert]::FromBase64String("aa..."))
Main() विधि और किसी भी तर्क को फिर इस प्रकार आह्वान किया जा सकता है:
[Certify.Program]::Main("enum-templates --filter-enabled --filter-vulnerable".Split())
PSRemoting जिस तरह से आउटपुट को संभालता है, उसके कारण हमें stdout को एक स्ट्रिंग में पुनर्निर्देशित करने और उसके स्थान पर वापस करने की आवश्यकता है। सौभाग्य से, Certify में इसमें मदद करने के लिए एक फ़ंक्शन है।
यदि आप Certify.ps1 बनाने के लिए पार्श्व नोट: PowerShell के माध्यम से Certify चलाना के निर्देशों का पालन करते हैं, तो स्क्रिप्ट में कुछ इस प्रकार जोड़ें:
[Certify.Program]::MainString("enum-templates --filter-enabled --filter-vulnerable")
फिर आप कुछ इस प्रकार PSRemoting के ऊपर Certify चला पाएंगे:
$s = New-PSSession dc.theshire.local
Invoke-Command -Session $s -FilePath C:\Temp\Certify.ps1
वैकल्पिक रूप से, Certify का /outfile:C:\FILE.txt तर्क सभी आउटपुट स्ट्रीम को निर्दिष्ट फ़ाइल पर पुनर्निर्देशित करेगा।
सार्वजनिक प्रकटीकरण के विषय पर, हमने अपने आक्रामक टूलींग (Certify और ForgeCert) के रिलीज़ को लगभग 45 दिनों के लिए स्वयं-प्रतिबंधित किया, जब हमने अपना श्वेतपत्र प्रकाशित किया, ताकि संगठनों को Active Directory Certificate Services के आसपास के मुद्दों को समझने का मौका मिले। हमने दोनों परियोजनाओं के लिए कुछ Yara नियम/IOCs भी पूर्व-निवारक रूप से जारी किए और श्वेतपत्र के साथ रक्षा-केंद्रित PSPKIAudit PowerShell परियोजना भी जारी की। हालाँकि, हमने पाया है कि संगठनों और विक्रेताओं ने ऐतिहासिक रूप से अक्सर "सैद्धांतिक" हमलों के लिए मुद्दों को ठीक नहीं किया है या पहचान नहीं बनाई है जब तक कि कोई प्रूफ ऑफ कॉन्सेप्ट के साथ कुछ संभव साबित नहीं करता।
Certify ने ऑनलाइन पाए गए कुछ संसाधनों का संदर्भ और प्रेरणा के रूप में उपयोग किया:
AD CS कार्य कई अन्य लोगों के कार्य पर आधारित था। श्वेतपत्र में पूरी जानकारी है, लेकिन संक्षेप में: