Az - Arc vulnerable GPO Deploy Script

हैकट्रिक्स का समर्थन करें

मुद्दों की पहचान

एज़्यूर आर्क नए आंतरिक सर्वरों (शामिल डोमेन सर्वर) को एज़्यूर आर्क में शामिल करने की अनुमति देता है जीपीओ ऑब्जेक्ट विधि का उपयोग करके। इसको सुविधाजनक बनाने के लिए, माइक्रोसॉफ्ट उस प्रक्रिया की आरंभ करने के लिए आवश्यक डिप्लॉयमेंट टूलकिट प्रदान करता है। ArcEnableServerGroupPolicy.zip फ़ाइल के अंदर, निम्नलिखित स्क्रिप्ट मिल सकते हैं: DeployGPO.ps1, EnableAzureArc.ps1, और AzureArcDeployment.psm1।

जब यह स्क्रिप्ट चलाया जाता है, तो DeployGPO.ps1 स्क्रिप्ट निम्नलिखित क्रियाएँ करता है:

  1. स्थानीय डोमेन में एज़्यूर आर्क सर्वर्स ऑनबोर्डिंग जीपीओ बनाता है।

  2. ऑनबोर्डिंग प्रक्रिया के लिए निर्धारित नेटवर्क शेयर में EnableAzureArc.ps1 ऑनबोर्डिंग स्क्रिप्ट की प्रतिलिपि करता है, जिसमें Windows स्थापक पैकेज भी होता है।

इस स्क्रिप्ट को चलाते समय, सिस्टम व्यवस्थापकों को दो मुख्य पैरामीटर प्रदान करने की आवश्यकता होती है: ServicePrincipalId और ServicePrincipalClientSecret। इसके अतिरिक्त, डोमेन, शेयर करने वाले सर्वर के FQDN, और शेयर का नाम जैसे अन्य पैरामीटर भी आवश्यक होते हैं। स्क्रिप्ट को आवश्यक जानकारी जैसे tenant ID, संसाधन समूह, और अन्य आवश्यक जानकारी भी प्रदान करनी होती है।

एक एन्क्रिप्टेड गुप्त सीक्रेट निर्दिष्ट शेयर पर AzureArcDeploy निर्देशिका में DPAPI-NG एन्क्रिप्शन का उपयोग करके उत्पन्न किया जाता है। एन्क्रिप्टेड सीक्रेट को एन्क्रिप्ट करने के लिए DeployGPO.ps1 स्क्रिप्ट में साक्षात्कार किया जाता है, जहां एन्क्रिप्शन को $descriptor और $ServicePrincipalSecret के साथ ProtectBase64 को कॉल करके किया जाता है। डिस्क्रिप्टर में डोमेन कंप्यूटर और डोमेन कंट्रोलर समूह SIDs शामिल होते हैं, जिससे सुनिश्चित होता है कि सेवा प्रिंसिपल सीक्रेट को केवल डोमेन कंट्रोलर्स और डोमेन कंप्यूटर सुरक्षा समूह ही डिक्रिप्ट कर सकते हैं, जैसा स्क्रिप्ट टिप्पणियों में उल्लेख किया गया है।

# Encrypting the ServicePrincipalSecret to be decrypted only by the Domain Controllers and the Domain Computers security groups
$DomainComputersSID = "SID=" + $DomainComputersSID
$DomainControllersSID = "SID=" + $DomainControllersSID
$descriptor = @($DomainComputersSID, $DomainControllersSID) -join " OR "
Import-Module $PSScriptRoot\AzureArcDeployment.psm1
$encryptedSecret = [DpapiNgUtil]::ProtectBase64($descriptor, $ServicePrincipalSecret)

शात्रुता

हमारे पास निम्नलिखित स्थितियाँ हैं:

  1. हमने आंतरिक नेटवर्क में सफलतापूर्वक प्रवेश किया है।

  2. हमें किसी कंप्यूटर खाते को बनाने या नियंत्रण में लेने की क्षमता है जो एक्टिव डायरेक्टरी के अंदर है।

  3. हमने एज़्यूरआर्कडिप्लॉय निर्देशिका को समेत करने वाला नेटवर्क शेयर खोज लिया है।

एडी वातावरण के अंदर एक मशीन खाता प्राप्त करने के लिए कई विधियाँ हैं। उनमें से एक सबसे सामान्य मशीन खाता कोटा का शात्रुता उपयोग करना है। दूसरा विधि विभिन्न अनुरोधित ACLs या विभिन्न अन्य गलत विन्यासों के माध्यम से एक मशीन खाते को क्षति पहुंचाना है।

Import-MKodule powermad
New-MachineAccount -MachineAccount fake01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose

एक मशीन अकाउंट प्राप्त होने के बाद, इस अकाउंट का उपयोग करके प्रमाणीकरण संभव है। हम नेटनली फ्लैग के साथ runas.exe कमांड का उपयोग कर सकते हैं या Rubeus.exe के साथ पास-द-टिकट का उपयोग कर सकते हैं।

runas /user:fake01$ /netonly powershell
.\Rubeus.exe asktgt /user:fake01$ /password:123456 /prr

हमारे कंप्यूटर खाते के लिए TGT को मेमोरी में स्टोर करके, हम निम्नलिखित स्क्रिप्ट का उपयोग करके सेवा प्रिंसिपल सीक्रेट को डिक्रिप्ट कर सकते हैं।

Import-Module .\AzureArcDeployment.psm1

$encryptedSecret = Get-Content "[shared folder path]\AzureArcDeploy\encryptedServicePrincipalSecret"

$ebs = [DpapiNgUtil]::UnprotectBase64($encryptedSecret)
$ebs

वैकल्पिक रूप से, हम SecretManagement.DpapiNG का उपयोग कर सकते हैं।

इस बिंदु पर, हम Azure से कनेक्ट करने के लिए आवश्यक शेष जानकारी एकत्र कर सकते हैं ArcInfo.json फ़ाइल से, जो encryptedServicePrincipalSecret फ़ाइल के साथ समान नेटवर्क शेयर पर स्टोर है। इस फ़ाइल में विवरण होता है जैसे: TenantId, servicePrincipalClientId, ResourceGroup, और अधिक। इस जानकारी के साथ, हम Azure CLI का उपयोग करके कंप्रोमाइज़्ड सेवा प्रिंसिपल के रूप में प्रमाणित कर सकते हैं।

संदर्भ

Last updated