
चुराए गए प्रमाणपत्र प्राधिकरण (CA) की निजी कुंजियों का उपयोग करके Active Directory प्रमाणीकरण के लिए प्रमाणपत्र जाली बनाएं, जिससे जाली .pfx फ़ाइलों के साथ लगातार डोमेन पहुँच सक्षम होती है।
ForgeCert, BouncyCastle C# API का उपयोग करके और एक चुराए गए प्रमाणपत्र प्राधिकरण (CA) प्रमाणपत्र + निजी कुंजी का उपयोग करके, एक्टिव डायरेक्ट्री में प्रमाणीकरण में सक्षम मनमाने उपयोगकर्ताओं के लिए प्रमाणपत्र जाली बनाता है।
यह आक्रमण हमारे "Certified Pre-Owned" श्वेतपत्र में DPERSIST1 के रूप में संहिताबद्ध है। यह कोड बेस श्वेतपत्र प्रकाशित होने के ~45 दिन बाद जारी किया गया था।
@tifkin_ ForgeCert का प्रमुख लेखक है।
@tifkin_ और @harmj0y संबंधित एक्टिव डायरेक्ट्री प्रमाणपत्र सेवा अनुसंधान (ब्लॉग और श्वेतपत्र) के प्रमुख लेखक हैं।
जैसा कि हमारे श्वेतपत्र के Background और Forging Certificates with Stolen CA Certificates - DPERSIST1 अनुभागों में वर्णित है, प्रमाणपत्र प्राधिकरण के CA प्रमाणपत्र की निजी कुंजी CA सर्वर पर DPAPI या हार्डवेयर (HSM/TPM) के माध्यम से सुरक्षित रखी जाती है। इसके अतिरिक्त, प्रमाणपत्र (निजी कुंजी के बिना) NTAuthCertificates फ़ॉरेस्ट ऑब्जेक्ट पर प्रकाशित किया जाता है, जो उन CA प्रमाणपत्रों को परिभाषित करता है जो AD में प्रमाणीकरण सक्षम करते हैं। एक साथ मिलाकर, एक CA जिसका प्रमाणपत्र NTAuthCertificates में मौजूद है, अनुरोध करने वाले क्लाइंट से प्रमाणपत्र साइनिंग अनुरोधों (CSRs) पर हस्ताक्षर करने के लिए अपनी निजी कुंजी का उपयोग करता है। यह ग्राफिक प्रक्रिया का सारांश प्रस्तुत करता है:

CA की निजी कुंजी की सुरक्षा सर्वोपरि है। जैसा कि उल्लेख किया गया है, यदि निजी कुंजी TPM या HSM जैसे हार्डवेयर समाधान द्वारा सुरक्षित नहीं है, तो कुंजी डेटा प्रोटेक्शन API (DPAPI) से एन्क्रिप्ट की जाएगी और CA सर्वर पर डिस्क पर संग्रहीत की जाएगी। यदि कोई हमलावर CA सर्वर से समझौता करने में सक्षम है, तो वे @gentilkiwi के Mimikatz या GhostPack के SharpDPAPI प्रोजेक्ट का उपयोग करके हार्डवेयर द्वारा संरक्षित नहीं किए गए किसी भी CA प्रमाणपत्र की निजी कुंजी निकाल सकते हैं। श्वेतपत्र में THEFT3 मशीन प्रमाणपत्रों के लिए इस प्रक्रिया का वर्णन करता है।
चूँकि जारी किए गए प्रमाणपत्रों पर हस्ताक्षर करने के लिए उपयोग की जाने वाली एकमात्र कुंजी सामग्री CA की निजी कुंजी है, यदि कोई हमलावर ऐसी कुंजी चुरा लेता है (जो NTAuthCertificates में किसी प्रमाणपत्र के लिए है), तो वे डोमेन प्रमाणीकरण में सक्षम प्रमाणपत्र जाली बना सकते हैं। ये जाली प्रमाणपत्र डोमेन में किसी भी प्रिंसिपल के लिए हो सकते हैं (हालांकि प्रमाणीकरण संभव होने के लिए खाते को "सक्रिय" होना आवश्यक है, इसलिए krbtgt जैसे खाते काम नहीं करेंगे) और प्रमाणपत्र तब तक मान्य रहेंगे जब तक CA प्रमाणपत्र मान्य है (आमतौर पर डिफ़ॉल्ट रूप से 5 वर्ष, लेकिन लंबा भी सेट किया जा सकता है)।
साथ ही, चूँकि ये प्रमाणपत्र सामान्य जारी करने की प्रक्रिया का उत्पाद नहीं हैं, CA को इस बात की जानकारी नहीं होती कि ये बनाए गए थे। इस प्रकार, इन प्रमाणपत्रों को रद्द नहीं किया जा सकता।
नोट: NTAuthCertificates में किसी भी CA प्रमाणपत्र (रूट या अधीनस्थ CA) की निजी कुंजी का उपयोग फ़ॉरेस्ट में प्रमाणीकरण में सक्षम प्रमाणपत्र जाली बनाने के लिए किया जा सकता है। यदि प्रमाणपत्र/कुंजी किसी अधीनस्थ CA से है, तो प्रमाणपत्र श्रृंखला के सत्यापन के लिए एक वैध CRL प्रदान किया जाना चाहिए।
ForgeCert, जालसाजी करने के लिए BouncyCastle's X509V3CertificateGenerator का उपयोग करता है।
C:\Temp>ForgeCert.exe
ForgeCert 1.0.0.0
Copyright c 2021
ERROR(S):
Required option 'CaCertPath' is missing.
Required option 'SubjectAltName' is missing.
Required option 'NewCertPath' is missing.
Required option 'NewCertPassword' is missing.
--CaCertPath Required. CA private key as a .pfx or .p12 file
--CaCertPassword Password to the CA private key file
--Subject (Default: CN=User) Subject name in the certificate
--SubjectAltName Required. UPN of the user to authenticate as
--NewCertPath Required. Path where to save the new .pfx certificate
--NewCertPassword Required. Password to the .pfx file
--CRL ldap path to a CRL for the forged certificate
--help Display this help screen.
--version Display version information.
नोट: CA निजी कुंजी चुराने और प्रमाणीकरण प्रमाणपत्र जाली बनाने की पूरी वॉकथ्रू के लिए, श्वेतपत्र में DPERSIST1 देखें।
संदर्भ:
ca.pfx है, जो Password123! पासवर्ड से एन्क्रिप्ट किया गया है।[email protected] है।localadmin.pfx के रूप में सहेजा जाएगा, जो NewPassword123! पासवर्ड से एन्क्रिप्ट किया गया है।C:\Tools\ForgeCert>ForgeCert.exe --CaCertPath ca.pfx --CaCertPassword "Password123!" --Subject "CN=User" --SubjectAltName "[email protected]" --NewCertPath localadmin.pfx --NewCertPassword "NewPassword123!"
CA Certificate Information:
Subject: CN=theshire-DC-CA, DC=theshire, DC=local
Issuer: CN=theshire-DC-CA, DC=theshire, DC=local
Start Date: 1/4/2021 10:48:02 AM
End Date: 1/4/2026 10:58:02 AM
Thumbprint: 187D81530E1ADBB6B8B9B961EAADC1F597E6D6A2
Serial: 14BFC25F2B6EEDA94404D5A5B0F33E21
Forged Certificate Information:
Subject: CN=User
SubjectAltName: [email protected]
Issuer: CN=theshire-DC-CA, DC=theshire, DC=local
Start Date: 7/26/2021 3:38:45 PM
End Date: 7/26/2022 3:38:45 PM
Thumbprint: C5789A24E91A40819EFF7CFD77150595F8B9878D
Serial: 3627A48F90F6869C3215FF05BC3B2E42
Done. Saved forged certificate to localadmin.pfx with the password 'NewPassword123!'
यह जालसाजी हमलावर-नियंत्रित सिस्टम पर की जा सकती है, और परिणामी प्रमाणपत्र का उपयोग TGT का अनुरोध करने (और/या उपयोगकर्ता का NTLM प्राप्त करने) के लिए Rubeus के साथ किया जा सकता है।
वर्तमान ForgeCert कोडबेस का TypeRefHash b26b451ff2c947ae5904f962e56facbb45269995fbb813070386472f307cfcf0 है।
ForgeCert का TypeLib GUID bd346689-8ee6-40b3-858b-4ed94f08d40a है। यह इस रिपॉजिटरी में वर्तमान Yara नियमों में परिलक्षित होता है।
रोकथाम और पहचान मार्गदर्शन के लिए हमारा श्वेतपत्र में PREVENT1, DETECT3, और DETECT5 देखें।
Fabian Bader ने माइक्रोसॉफ्ट OCSP पर ट्वीक के माध्यम से "गोल्डन सर्टिफिकेट" के कई उपयोगों को कम करने के तरीके पर एक बेहतरीन पोस्ट प्रकाशित की。 हालांकि ध्यान दें कि अंतिम विचार अनुभाग में वे उल्लेख करते हैं यह विधि बिल्कुल भी अभेद्य नहीं है। चूंकि हमलावर प्रमाणपत्र निर्माण प्रक्रिया का प्रभारी है, वह सीरियल नंबर को एक वैध में बदल सकता है। यह उनके PR में लागू किया गया था, हालांकि याद रखें कि डिफ़ॉल्ट रूप से सीरियल नंबर यादृच्छिक होगा, जिसका अर्थ है कि OSCP रोकथाम कई मामलों में काम करनी चाहिए और हमारी राय में इसे लागू करना उचित है।
हमारा मानना है कि इस परियोजना द्वारा उत्पादित जाली प्रमाणपत्रों के प्रकारों के लिए Yara/अन्य पहचान नियम बनाने के अवसर हो सकते हैं - यदि कोई रक्षात्मक शोधकर्ता इन फ़ाइलों को हस्ताक्षरित करने का कोई अच्छा तरीका ढूंढता है, तो कृपया हमें बताएं और हम Yara नियमों/रक्षात्मक मार्गदर्शन को यहां अपडेट करेंगे।
"गोल्डन टिकट" (जाली TGT) और इन "गोल्डन सर्टिफिकेट" (जाली AD CS प्रमाणपत्र) के बीच एक स्पष्ट समानता है। krbtgt हैश और CA निजी कुंजी दोनों ही एक्टिव डायरेक्ट्री वातावरण की सुरक्षा के लिए महत्वपूर्ण क्रिप्टोग्राफिक सामग्री हैं, और दोनों का उपयोग मनमाने उपयोगकर्ताओं के लिए प्रमाणक जाली बनाने के लिए किया जा सकता है। हालांकि, जहाँ krbtgt हैश को DCSync के माध्यम से दूरस्थ रूप से प्राप्त किया जा सकता है, वहीं CA निजी कुंजी को (कम से कम हमारी जानकारी के अनुसार) CA मशीन पर ही कोड निष्पादन के माध्यम से पुनर्प्राप्त किया जाना चाहिए। जबकि krbtgt हैश को अपेक्षाकृत आसानी से घुमाया जा सकता है, CA निजी कुंजी को घुमाना काफी कठिन है।
सार्वजनिक प्रकटीकरण के विषय पर, हमने अपने श्वेतपत्र को प्रकाशित करने के बाद लगभग 45 दिनों के लिए अपने आक्रामक टूलिंग (ForgeCert और Certify दोनों) की रिलीज़ पर स्व-प्रतिबंध लगाया, ताकि संगठनों को एक्टिव डायरेक्ट्री प्रमाणपत्र सेवाओं से संबंधित मुद्दों पर नियंत्रण पाने का मौका मिल सके। हालांकि, हमने पाया है कि संगठन और विक्रेता अक्सर ऐतिहासिक रूप से "सैद्धांतिक" हमलों के लिए मुद्दों को ठीक नहीं करते या पहचान नहीं बनाते जब तक कोई प्रूफ ऑफ कॉन्सेप्ट के साथ कुछ संभव साबित नहीं करता।
यह कुछ लोगों की अनुसंधान पर प्रतिक्रिया में परिलक्षित होता है: यह तो बेवकूफी है, बिल्कुल आप CA निजी कुंजी से प्रमाणपत्र जाली बना सकते हैं। जिसके लिए हम कहते हैं, हाँ, बहुत सी चीज़ें संभव हैं, लेकिन PoC||GTFO