Azure Pentesting

Wsparcie dla HackTricks

NADAL BUDUJĘ METODOLOGIĘ AZURE

Podstawowe informacje

Az - Basic Information

Metodologia Pentestera/Red Team w Azure

Aby audytować środowisko AZURE, bardzo ważne jest, aby wiedzieć: które usługi są używane, co jest eksponowane, kto ma dostęp do czego i jak są połączone wewnętrzne usługi Azure oraz usługi zewnętrzne.

Z punktu widzenia Red Team, pierwszym krokiem do skompromitowania środowiska Azure jest uzyskanie jakichś poświadczeń dla Azure AD. Oto kilka pomysłów, jak to zrobić:

  • Wycieki w githubie (lub podobnych) - OSINT

  • Inżynieria społeczna

  • Ponowne użycie haseł (wycieki haseł)

  • Luki w aplikacjach hostowanych w Azure

  • Server Side Request Forgery z dostępem do punktu końcowego metadanych

  • Odczyt lokalnych plików

  • /home/USERNAME/.azure

  • C:\Users\USERNAME\.azure

  • Plik accessTokens.json w az cli przed 2.30 - styczeń 2022 - przechowywał tokeny dostępu w czystym tekście

  • Plik azureProfile.json zawiera informacje o zalogowanym użytkowniku.

  • az logout usuwa token.

  • Starsze wersje Az PowerShell przechowywały tokeny dostępu w czystym tekście w TokenCache.dat. Przechowuje również ServicePrincipalSecret w czystym tekście w AzureRmContext.json. Cmdlet Save-AzContext może być użyty do przechowywania tokenów. Użyj Disconnect-AzAccount, aby je usunąć.

  • Naruszenia przez osoby trzecie

  • Wewnętrzny pracownik

  • Typowe Phishing (poświadczenia lub aplikacja Oauth)

Nawet jeśli nie skompromitowałeś żadnego użytkownika w tenant Azure, który atakujesz, możesz zgromadzić pewne informacje z niego:

Az - Unauthenticated Enum & Initial Entry

Po uzyskaniu poświadczeń musisz wiedzieć do kogo należą te poświadczenia i do czego mają dostęp, więc musisz przeprowadzić podstawową enumerację:

Podstawowa enumeracja

Pamiętaj, że najgłośniejszą częścią enumeracji jest logowanie, a nie sama enumeracja.

SSRF

Jeśli znalazłeś SSRF na maszynie w Azure, sprawdź tę stronę po triki:

Ominięcie warunków logowania

W przypadkach, gdy masz jakieś ważne poświadczenia, ale nie możesz się zalogować, oto kilka powszechnych zabezpieczeń, które mogą być wprowadzone:

  • Biała lista IP -- Musisz skompromitować ważny adres IP

  • Ograniczenia geograficzne -- Znajdź, gdzie mieszka użytkownik lub gdzie znajdują się biura firmy i uzyskaj adres IP z tego samego miasta (lub przynajmniej kraju)

  • Przeglądarka -- Może tylko przeglądarka z określonego systemu operacyjnego (Windows, Linux, Mac, Android, iOS) jest dozwolona. Dowiedz się, z jakiego systemu operacyjnego korzysta ofiara/firmy.

  • Możesz również spróbować skompromitować poświadczenia Service Principal, ponieważ zazwyczaj są mniej ograniczone, a ich logowanie jest mniej kontrolowane.

Po ominięciu tego, możesz być w stanie wrócić do swojego początkowego ustawienia i nadal mieć dostęp.

Przejęcie subdomeny

Whoami

Dowiedz się jak zainstalować az cli, AzureAD i Az PowerShell w sekcji Az - AzureAD.

Jedną z pierwszych rzeczy, które musisz wiedzieć, jest kim jesteś (w jakim środowisku się znajdujesz):

az account list
az account tenant list # Current tenant info
az account subscription list # Current subscription info
az ad signed-in-user show # Current signed-in user
az ad signed-in-user list-owned-objects # Get owned objects by current user
az account management-group list #Not allowed by default

Jednym z najważniejszych poleceń do enumeracji Azure jest Get-AzResource z Az PowerShell, ponieważ pozwala poznać zasoby, które są widoczne dla twojego aktualnego użytkownika.

Możesz uzyskać te same informacje w konsoli internetowej, przechodząc do https://portal.azure.com/#view/HubsExtension/BrowseAll lub wyszukując "Wszystkie zasoby"

Enumeracja AzureAD

Domyślnie każdy użytkownik powinien mieć wystarczające uprawnienia do enumeracji takich rzeczy jak użytkownicy, grupy, role, zasady usług... (sprawdź domyślne uprawnienia AzureAD). Możesz tutaj znaleźć przewodnik:

Az - AzureAD (AAD)

Teraz, gdy masz pewne informacje o swoich poświadczeniach (i jeśli jesteś w red team, miejmy nadzieję, że nie zostałeś wykryty). Czas dowiedzieć się, które usługi są używane w środowisku. W następnej sekcji możesz sprawdzić kilka sposobów na enumerację niektórych powszechnych usług.

Zasada dostępu i tożsamość usługi

Usługa Azure może mieć tożsamość systemową (samej usługi) lub używać tożsamości zarządzanej przypisanej do użytkownika. Ta tożsamość może mieć zasady dostępu do, na przykład, KeyVault w celu odczytu sekretów. Te zasady dostępu powinny być ograniczone (zasada najmniejszych uprawnień), ale mogą mieć więcej uprawnień niż wymagane. Typowo usługa App Service używa KeyVault do pobierania sekretów i certyfikatów.

Dlatego warto zbadać te tożsamości.

App Service SCM

Konsola Kudu do logowania się do 'kontenera' App Service.

Webshell

Użyj portal.azure.com i wybierz powłokę, lub użyj shell.azure.com, aby uzyskać dostęp do bash lub powershell. 'Dysk' tej powłoki jest przechowywany jako plik obrazu w koncie magazynu.

Azure DevOps

Azure DevOps jest oddzielony od Azure. Ma repozytoria, potoki (yaml lub release), tablice, wiki i inne. Grupy zmiennych są używane do przechowywania wartości zmiennych i sekretów.

Narzędzia do automatycznego rekonesansu

cd ROADTools
pipenv shell
roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!"
roadrecon gather
roadrecon gui

Import-Module monkey365
Get-Help Invoke-Monkey365
Get-Help Invoke-Monkey365 -Detailed
Invoke-Monkey365 -IncludeAzureActiveDirectory -ExportTo HTML -Verbose -Debug -InformationAction Continue
Invoke-Monkey365 - Instance Azure -Analysis All -ExportTo HTML

# Start Backend
cd stormspotter\backend\
pipenv shell
python ssbackend.pyz

# Start Front-end
cd stormspotter\frontend\dist\spa\
quasar.cmd serve -p 9091 --history

# Run Stormcollector
cd stormspotter\stormcollector\
pipenv shell
az login -u test@corp.onmicrosoft.com -p Welcome2022!
python stormspotter\stormcollector\sscollector.pyz cli
# This will generate a .zip file to upload in the frontend (127.0.0.1:9091)

# You need to use the Az PowerShell and Azure AD modules:
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ("test@corp.onmicrosoft.com", $passwd)
Connect-AzAccount -Credential $creds

Import-Module AzureAD\AzureAD.psd1
Connect-AzureAD -Credential $creds

# Launch AzureHound
. AzureHound\AzureHound.ps1
Invoke-AzureHound -Verbose

# Simple queries
## All Azure Users
MATCH (n:AZUser) return n.name
## All Azure Applications
MATCH (n:AZApp) return n.objectid
## All Azure Devices
MATCH (n:AZDevice) return n.name
## All Azure Groups
MATCH (n:AZGroup) return n.name
## All Azure Key Vaults
MATCH (n:AZKeyVault) return n.name
## All Azure Resource Groups
MATCH (n:AZResourceGroup) return n.name
## All Azure Service Principals
MATCH (n:AZServicePrincipal) return n.objectid
## All Azure Virtual Machines
MATCH (n:AZVM) return n.name
## All Principals with the ‘Contributor’ role
MATCH p = (n)-[r:AZContributor]->(g) RETURN p

# Advanced queries
## Get Global Admins
MATCH p =(n)-[r:AZGlobalAdmin*1..]->(m) RETURN p
## Owners of Azure Groups
MATCH p = (n)-[r:AZOwns]->(g:AZGroup) RETURN p
## All Azure Users and their Groups
MATCH p=(m:AZUser)-[r:MemberOf]->(n) WHERE NOT m.objectid CONTAINS 'S-1-5' RETURN p
## Privileged Service Principals
MATCH p = (g:AZServicePrincipal)-[r]->(n) RETURN p
## Owners of Azure Applications
MATCH p = (n)-[r:AZOwns]->(g:AZApp) RETURN p
## Paths to VMs
MATCH p = (n)-[r]->(g: AZVM) RETURN p
## Paths to KeyVault
MATCH p = (n)-[r]->(g:AZKeyVault) RETURN p
## Paths to Azure Resource Group
MATCH p = (n)-[r]->(g:AZResourceGroup) RETURN p
## On-Prem users with edges to Azure
MATCH  p=(m:User)-[r:AZResetPassword|AZOwns|AZUserAccessAdministrator|AZContributor|AZAddMembers|AZGlobalAdmin|AZVMContributor|AZOwnsAZAvereContributor]->(n) WHERE m.objectid CONTAINS 'S-1-5-21' RETURN p
## All Azure AD Groups that are synchronized with On-Premise AD
MATCH (n:Group) WHERE n.objectid CONTAINS 'S-1-5' AND n.azsyncid IS NOT NULL RETURN n

# You should use an account with at least read-permission on the assets you want to access
git clone https://github.com/nccgroup/azucar.git
PS> Get-ChildItem -Recurse c:\Azucar_V10 | Unblock-File

PS> .\Azucar.ps1 -AuthMode UseCachedCredentials -Verbose -WriteLog -Debug -ExportTo PRINT
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -CertFilePassword MySuperP@ssw0rd! -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000

# resolve the TenantID for an specific username
PS> .\Azucar.ps1 -ResolveTenantUserName user@company.com

Import-Module .\MicroBurst.psm1
Import-Module .\Get-AzureDomainInfo.ps1
Get-AzureDomainInfo -folder MicroBurst -Verbose

Connect-AzAccount
ipmo C:\Path\To\Powerzure.psd1
Get-AzureTarget

# Reader
$ Get-Runbook, Get-AllUsers, Get-Apps, Get-Resources, Get-WebApps, Get-WebAppDetails

# Contributor
$ Execute-Command -OS Windows -VM Win10Test -ResourceGroup Test-RG -Command "whoami"
$ Execute-MSBuild -VM Win10Test  -ResourceGroup Test-RG -File "build.xml"
$ Get-AllSecrets # AllAppSecrets, AllKeyVaultContents
$ Get-AvailableVMDisks, Get-VMDisk # Download a virtual machine's disk

# Owner
$ Set-Role -Role Contributor -User test@contoso.com -Resource Win10VMTest

# Administrator
$ Create-Backdoor, Execute-Backdoor
Wsparcie HackTricks

Last updated