Azure Pentesting

Unterstütze HackTricks

ICH BAUE NOCH AN DER AZURE-METHODOLOGIE

Grundlegende Informationen

Az - Basic Information

Azure Pentester/Red Team Methodologie

Um eine AZURE-Umgebung zu prüfen, ist es sehr wichtig zu wissen: welche Dienste verwendet werden, was exponiert wird, wer Zugriff auf was hat und wie interne Azure-Dienste und externe Dienste verbunden sind.

Aus der Sicht eines Red Teams ist der erste Schritt, eine Azure-Umgebung zu kompromittieren, einige Anmeldeinformationen für Azure AD zu erhalten. Hier sind einige Ideen, wie man das erreichen kann:

  • Leaks in GitHub (oder ähnliches) - OSINT

  • Social Engineering

  • Passwort-Wiederverwendung (Passwort-Leaks)

  • Schwachstellen in Azure-gehosteten Anwendungen

  • Server Side Request Forgery mit Zugriff auf den Metadata-Endpunkt

  • Lokales Datei-Lesen

  • /home/USERNAME/.azure

  • C:\Users\USERNAME\.azure

  • Die Datei accessTokens.json in az cli vor 2.30 - Jan2022 - speicherte Zugriffstoken im Klartext

  • Die Datei azureProfile.json enthält Informationen über den angemeldeten Benutzer.

  • az logout entfernt das Token.

  • Ältere Versionen von Az PowerShell speicherten Zugriffstoken im Klartext in TokenCache.dat. Sie speicherten auch ServicePrincipalSecret im Klartext in AzureRmContext.json. Das Cmdlet Save-AzContext kann verwendet werden, um Token zu speichern. Verwende Disconnect-AzAccount, um sie zu entfernen.

  • 3rd Parties kompromittiert

  • Interner Mitarbeiter

  • Common Phishing (Anmeldeinformationen oder Oauth-App)

Auch wenn du keinen Benutzer innerhalb des Azure-Mandanten, den du angreifst, kompromittiert hast, kannst du einige Informationen daraus sammeln:

Az - Unauthenticated Enum & Initial Entry

Nachdem du Anmeldeinformationen erhalten hast, musst du wissen, zu wem diese Anmeldeinformationen gehören und worauf sie Zugriff haben, daher musst du einige grundlegende Aufzählungen durchführen:

Grundlegende Aufzählung

Denke daran, dass der lauteste Teil der Aufzählung das Login ist, nicht die Aufzählung selbst.

SSRF

Wenn du eine SSRF in einer Maschine innerhalb von Azure gefunden hast, überprüfe diese Seite für Tricks:

Login-Bedingungen umgehen

In Fällen, in denen du einige gültige Anmeldeinformationen hast, dich aber nicht anmelden kannst, sind dies einige häufige Schutzmaßnahmen, die vorhanden sein könnten:

  • IP-Whitelisting -- Du musst eine gültige IP kompromittieren

  • Geo-Beschränkungen -- Finde heraus, wo der Benutzer lebt oder wo die Büros des Unternehmens sind und besorge dir eine IP aus derselben Stadt (oder zumindest aus dem Land)

  • Browser -- Vielleicht ist nur ein Browser von einem bestimmten Betriebssystem (Windows, Linux, Mac, Android, iOS) erlaubt. Finde heraus, welches Betriebssystem das Opfer/Unternehmen verwendet.

  • Du kannst auch versuchen, Service Principal-Anmeldeinformationen zu kompromittieren, da diese normalerweise weniger eingeschränkt sind und deren Login weniger überprüft wird

Nachdem du es umgangen hast, kannst du möglicherweise zu deinem ursprünglichen Setup zurückkehren und hast weiterhin Zugriff.

Subdomain-Übernahme

Whoami

Lerne wie man az cli, AzureAD und Az PowerShell in der Az - AzureAD Sektion installiert.

Eines der ersten Dinge, die du wissen musst, ist wer du bist (in welcher Umgebung du dich befindest):

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

Einer der wichtigsten Befehle zur Aufzählung von Azure ist Get-AzResource aus Az PowerShell, da er Ihnen ermöglicht, die Ressourcen zu kennen, über die Ihr aktueller Benutzer Sichtbarkeit hat.

Sie können die gleichen Informationen in der Webkonsole erhalten, indem Sie zu https://portal.azure.com/#view/HubsExtension/BrowseAll gehen oder nach "Alle Ressourcen" suchen.

AzureAD-Aufzählung

Standardmäßig sollte jeder Benutzer ausreichende Berechtigungen haben, um Dinge wie Benutzer, Gruppen, Rollen, Dienstprinzipale usw. aufzulisten (siehe Standard AzureAD-Berechtigungen). Hier finden Sie eine Anleitung:

Az - AzureAD (AAD)

Nun, da Sie einige Informationen über Ihre Anmeldeinformationen haben (und wenn Sie ein Red Team sind, hoffentlich nicht entdeckt wurden). Es ist an der Zeit herauszufinden, welche Dienste in der Umgebung verwendet werden. Im folgenden Abschnitt können Sie einige Möglichkeiten zur Aufzählung einiger gängiger Dienste überprüfen.

Dienstprinzipal und Zugriffsrichtlinie

Ein Azure-Dienst kann eine Systemidentität (des Dienstes selbst) haben oder eine Benutzerzugewiesene Verwaltete Identität verwenden. Diese Identität kann eine Zugriffsrichtlinie haben, um beispielsweise auf einen KeyVault zuzugreifen, um Geheimnisse zu lesen. Diese Zugriffsrichtlinien sollten eingeschränkt sein (Prinzip des geringsten Privilegs), könnten jedoch mehr Berechtigungen haben als erforderlich. Typischerweise würde ein App-Dienst KeyVault verwenden, um Geheimnisse und Zertifikate abzurufen.

Daher ist es nützlich, diese Identitäten zu erkunden.

App Service SCM

Kudu-Konsole, um sich beim App Service 'Container' anzumelden.

Webshell

Verwenden Sie portal.azure.com und wählen Sie die Shell aus, oder verwenden Sie shell.azure.com für eine Bash- oder PowerShell. Die 'Festplatte' dieser Shell wird als Image-Datei in einem Speicher-Account gespeichert.

Azure DevOps

Azure DevOps ist getrennt von Azure. Es hat Repositories, Pipelines (yaml oder Release), Boards, Wiki und mehr. Variable Groups werden verwendet, um Variablenwerte und Geheimnisse zu speichern.

Automatisierte Recon-Tools

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
Unterstütze HackTricks

Last updated