
केरबरोस टिकटों का दुरुपयोग करके विंडोज UAC को बायपास करें और tgtdeleg ट्रिक और SCM एक्सेस का लाभ उठाकर सेवा टिकटों में नकली MachineID इंजेक्ट करके SYSTEM विशेषाधिकार प्राप्त करें।
यह POC जेम्स फोरशॉ (@tiraniddo) से प्रेरित है, जिसे उन्होंने BlackHat USA 2022 में “Taking Kerberos To The Next Level” शीर्षक में साझा किया था, उन्होंने UAC को बायपास करने के लिए Kerberos टिकटों के दुरुपयोग का एक डेमो साझा किया। सेवा टिकट में KERB-AD-RESTRICTION-ENTRY जोड़कर, लेकिन नकली MachineID भरकर, हम आसानी से UAC को बायपास कर सकते हैं और SCM तक पहुँचकर एक सिस्टम सेवा बनाकर SYSTEM विशेषाधिकार प्राप्त कर सकते हैं। जेम्स फोरशॉ ने इसके पीछे के तर्क को “Bypassing UAC in the most Complex Way Possible!” नामक ब्लॉग पोस्ट में समझाया, जिसमें मेरी बहुत रुचि थी। हालाँकि उन्होंने पूरा एक्सप्लॉइट कोड प्रदान नहीं किया, मैंने Rubeus पर आधारित एक POC बनाया। कच्चे Kerberos इंटरैक्शन और टिकट दुरुपयोग के लिए C# टूलसेट के रूप में, Rubeus एक आसान इंटरफ़ेस प्रदान करता है जो हमें आसानी से Kerberos अनुरोध शुरू करने और Kerberos टिकटों में हेरफेर करने की अनुमति देता है।
आप मेरे ब्लॉग "Revisiting a UAC Bypass By Abusing Kerberos Tickets" में KRBUACBypass के बारे में संबंधित लेख देख सकते हैं, जिसमें पृष्ठभूमि सिद्धांत और इसे कैसे लागू किया गया है, शामिल है। जैसा कि लेख में कहा गया है, यह लेख @tiraniddo के "Taking Kerberos To The Next Level" से प्रेरित था (उनके साझा किए बिना मैं ऐसा नहीं कर पाता) और मैंने इसे कॉलेज से स्नातक होने से पहले एक उपकरण के रूप में लागू किया।
हम मैन्युअल रूप से TGT उत्पन्न नहीं कर सकते क्योंकि हमारे पास वर्तमान उपयोगकर्ता के क्रेडेंशियल नहीं हैं और उन तक पहुँच नहीं है। हालाँकि, बेंजामिन डेल्पी (@gentilkiwi) ने अपने Kekeo में एक ट्रिक (tgtdeleg) जोड़ी थी जो आपको अप्रतिबंधित प्रत्यायोजन का दुरुपयोग करके सत्र कुंजी के साथ एक स्थानीय TGT प्राप्त करने की अनुमति देती है।
Tgtdeleg होस्ट पर उन्नत विशेषाधिकार प्राप्त किए बिना वर्तमान उपयोगकर्ता के लिए उपलब्ध TGT प्राप्त करने के लिए Kerberos GSS-API का दुरुपयोग करता है। यह विधि वर्तमान उपयोगकर्ता के लिए Kerberos सुरक्षा क्रेडेंशियल हैंडल प्राप्त करने के लिए AcquireCredentialsHandle फ़ंक्शन का उपयोग करती है, और ISC_REQ_DELEGATE फ़्लैग और लक्ष्य SPN HOST/DC.domain.com के लिए InitializeSecurityContext फ़ंक्शन को कॉल करके डोमेन कंट्रोलर को भेजने के लिए छद्म-प्रत्यायोजन संदर्भ तैयार करती है। इससे GSS-API आउटपुट में KRB_AP-REQ में प्रमाणितकर्ता चेकसम में KRB_CRED शामिल हो जाता है। फिर सेवा टिकट की सत्र कुंजी स्थानीय Kerberos कैश से निकाली जाती है और प्रमाणितकर्ता में KRB_CRED को डिक्रिप्ट करने के लिए उपयोग की जाती है, ताकि एक उपयोग योग्य TGT प्राप्त हो सके। Rubeus टूलसेट भी इस तकनीक को शामिल करता है। विवरण के लिए, कृपया “Rubeus – Now With More Kekeo” देखें।
इस TGT के साथ, हम अपना स्वयं का सेवा टिकट उत्पन्न कर सकते हैं, और संभावित संचालन प्रक्रिया इस प्रकार है:
KERB-AD-RESTRICTION-ENTRY जोड़ें, लेकिन नकली MachineID भरें।एक बार जब आपके पास सेवा टिकट हो, तो आप HOST/HOSTNAME या RPC/HOSTNAME SPN के माध्यम से सेवा नियंत्रण प्रबंधक (SCM) नामित पाइप या TCP तक पहुँचने के लिए Kerberos प्रमाणीकरण का उपयोग कर सकते हैं। ध्यान दें कि SCM का Win32 API हमेशा Negotiate प्रमाणीकरण का उपयोग करता है। जेम्स फोरशॉ ने एक सरल POC बनाया: SCMUACBypass.cpp, दो API HOOK AcquireCredentialsHandle और InitializeSecurityContextW के माध्यम से, SCM द्वारा कॉल किए गए प्रमाणीकरण पैकेज का नाम (pszPack age) Kerberos में बदल दिया जाता है ताकि SCM स्थानीय रूप से प्रमाणीकरण करते समय Kerberos का उपयोग कर सके।
अधिक विवरण के लिए कृपया पढ़ें:
अब आइए चलने के प्रभाव को देखें, जैसा कि नीचे दिए गए चित्र में दिखाया गया है। पहले asktgs फ़ंक्शन के माध्यम से वर्तमान सर्वर की HOST सेवा के लिए एक टिकट का अनुरोध करें, और फिर SYSTEM विशेषाधिकार प्राप्त करने के लिए krbscm के माध्यम से एक सिस्टम सेवा बनाएं।
KRBUACBypass.exe asktgs
KRBUACBypass.exe krbscm
