Azure Pentesting

Support HackTricks

STO ANCORA COSTRUENDO LA METODOLOGIA AZURE

Informazioni di Base

Az - Basic Information

Metodologia Azure Pentester/Red Team

Per auditare un ambiente AZURE è molto importante sapere: quali servizi vengono utilizzati, cosa è esposto, chi ha accesso a cosa e come sono connessi i servizi interni di Azure e i servizi esterni.

Dal punto di vista di un Red Team, il primo passo per compromettere un ambiente Azure è riuscire a ottenere alcune credenziali per Azure AD. Ecco alcune idee su come farlo:

  • Leak in github (o simili) - OSINT

  • Ingegneria Sociale

  • Riutilizzo della Password (leak di password)

  • Vulnerabilità nelle Applicazioni Ospitate su Azure

  • Server Side Request Forgery con accesso all'endpoint dei metadati

  • Lettura di File Locali

  • /home/USERNAME/.azure

  • C:\Users\USERNAME\.azure

  • Il file accessTokens.json in az cli prima della versione 2.30 - Gennaio 2022 - memorizzava token di accesso in chiaro

  • Il file azureProfile.json contiene info sull'utente connesso.

  • az logout rimuove il token.

  • Le versioni precedenti di Az PowerShell memorizzavano token di accesso in chiaro in TokenCache.dat. Memorizza anche il ServicePrincipalSecret in chiaro in AzureRmContext.json. Il cmdlet Save-AzContext può essere utilizzato per memorizzare token. Usa Disconnect-AzAccount per rimuoverli.

  • Terze parti compromesse

  • Dipendente Interno

  • Phishing Comune (credenziali o App Oauth)

Anche se non hai compromesso alcun utente all'interno del tenant Azure che stai attaccando, puoi raccogliere alcune informazioni da esso:

Az - Unauthenticated Enum & Initial Entry

Dopo aver ottenuto le credenziali, devi sapere a chi appartengono quelle credenziali, e a cosa hanno accesso, quindi devi eseguire alcune enumerazioni di base:

Enumerazione di Base

Ricorda che la parte più rumorosa dell'enumerazione è il login, non l'enumerazione stessa.

SSRF

Se hai trovato un SSRF in una macchina all'interno di Azure controlla questa pagina per trucchi:

Bypassare le Condizioni di Login

Nei casi in cui hai alcune credenziali valide ma non riesci a effettuare il login, queste sono alcune protezioni comuni che potrebbero essere in atto:

  • Whitelisting IP -- Devi compromettere un IP valido

  • Restrizioni Geografiche -- Scopri dove vive l'utente o dove si trovano gli uffici dell'azienda e ottieni un IP dalla stessa città (o almeno dallo stesso paese)

  • Browser -- Forse solo un browser di un certo OS (Windows, Linux, Mac, Android, iOS) è consentito. Scopri quale OS utilizza la vittima/azienda.

  • Puoi anche provare a compromettere le credenziali del Service Principal poiché di solito sono meno limitate e il loro login è meno controllato

Dopo averlo bypassato, potresti essere in grado di tornare alla tua configurazione iniziale e avrai ancora accesso.

Subdomain Takeover

Whoami

Learn how to install az cli, AzureAD and Az PowerShell in the Az - AzureAD section.

Una delle prime cose che devi sapere è chi sei (in quale ambiente ti trovi):

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

Uno dei comandi più importanti per enumerare Azure è Get-AzResource da Az PowerShell poiché ti consente di conoscere le risorse di cui il tuo utente attuale ha visibilità.

Puoi ottenere le stesse informazioni nella console web andando su https://portal.azure.com/#view/HubsExtension/BrowseAll o cercando "Tutte le risorse"

Enumerazione AzureAD

Per impostazione predefinita, qualsiasi utente dovrebbe avere sufficienti autorizzazioni per enumerare cose come utenti, gruppi, ruoli, service principals... (controlla autorizzazioni predefinite di AzureAD). Puoi trovare qui una guida:

Az - AzureAD (AAD)

Ora che hai alcune informazioni sulle tue credenziali (e se sei un red team speriamo che non sei stato rilevato). È tempo di scoprire quali servizi vengono utilizzati nell'ambiente. Nella sezione seguente puoi controllare alcuni modi per enumerare alcuni servizi comuni.

Service Principal e Politica di Accesso

Un servizio Azure può avere un'Identità di Sistema (del servizio stesso) o utilizzare un'Identità Gestita Assegnata all'Utente. Questa Identità può avere Politiche di Accesso per, ad esempio, un KeyVault per leggere segreti. Queste Politiche di Accesso dovrebbero essere ristrette (principio del minimo privilegio), ma potrebbero avere più autorizzazioni del necessario. Tipicamente un App Service utilizzerebbe KeyVault per recuperare segreti e certificati.

Quindi è utile esplorare queste identità.

App Service SCM

Console Kudu per accedere al 'container' dell'App Service.

Webshell

Usa portal.azure.com e seleziona la shell, oppure usa shell.azure.com, per un bash o powershell. Il 'disco' di questa shell è memorizzato come un file immagine in un storage-account.

Azure DevOps

Azure DevOps è separato da Azure. Ha repository, pipeline (yaml o release), board, wiki e altro. I Gruppi di Variabili vengono utilizzati per memorizzare valori di variabili e segreti.

Strumenti di Ricognizione Automatizzati

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
Supporta HackTricks

Last updated