Azure Pentesting

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

ICH BAUE IMMER NOCH AN DER AZURE-METHODOLOGIE

Grundlegende Informationen

pageAz - Basic Information

Azure Pentester/Red-Team-Methodik

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

Aus der Sicht eines Red Teams ist der erste Schritt zur Kompromittierung einer Azure-Umgebung, einige Anmeldeinformationen für Azure AD zu erhalten. Hier sind einige Ideen, wie Sie das erreichen können:

  • Lecks in GitHub (oder ähnlich) - OSINT

  • Social Engineering

  • Passwort-Wiederverwendung (Passwortlecks)

  • Schwachstellen in Azure-gehosteten Anwendungen

  • Serverseitige Anfragenfälschung mit Zugriff auf Metadaten-Endpunkt

  • Lokales Dateilesen

  • /home/BENUTZERNAME/.azure

  • C:\Benutzer\BENUTZERNAME\.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. Es speichert auch ServicePrincipalSecret im Klartext in AzureRmContext.json. Das Cmdlet Save-AzContext kann verwendet werden, um Token zu speichern. Verwenden Sie Disconnect-AzAccount, um sie zu entfernen.

  • Von Dritten gehackt

  • Interne Mitarbeiter

  • Gängiges Phishing (Anmeldeinformationen oder Oauth-App)

Auch wenn Sie keinen Benutzer innerhalb des von Ihnen angegriffenen Azure-Mandanten kompromittiert haben, können Sie einige Informationen daraus sammeln:

pageAz - Unauthenticated Enum & Initial Entry

Nachdem Sie es geschafft haben, Anmeldeinformationen zu erhalten, müssen Sie wissen, wem diese Anmeldeinformationen gehören, und worüber sie Zugriff haben, daher müssen Sie eine grundlegende Aufzählung durchführen:

Grundlegende Aufzählung

Denken Sie daran, dass der lauteste Teil der Aufzählung der Anmeldevorgang ist, nicht die Aufzählung selbst.

SSRF

Wenn Sie einen SSRF in einer Maschine innerhalb von Azure gefunden haben, überprüfen Sie diese Seite auf Tricks:

Umgehung von Anmeldebedingungen

In Fällen, in denen Sie gültige Anmeldeinformationen haben, sich jedoch nicht anmelden können, könnten diese gängigen Schutzmaßnahmen vorhanden sein:

  • IP-Whitelisting -- Sie müssen eine gültige IP kompromittieren

  • Geografische Einschränkungen -- Finden Sie heraus, wo der Benutzer lebt oder wo sich die Büros des Unternehmens befinden, und erhalten Sie eine IP aus derselben Stadt (oder zumindest demselben Land)

  • Browser -- Möglicherweise ist nur ein Browser aus einem bestimmten Betriebssystem (Windows, Linux, Mac, Android, iOS) zugelassen. Finden Sie heraus, welches Betriebssystem das Opfer/Unternehmen verwendet.

  • Sie können auch versuchen, Service-Principal-Anmeldeinformationen zu kompromittieren, da sie normalerweise weniger eingeschränkt sind und deren Anmeldung weniger überprüft wird

Nachdem Sie es umgangen haben, könnten Sie zu Ihrem ursprünglichen Setup zurückkehren und immer noch Zugriff haben.

Subdomain Takeover

Wer bin ich

Erfahren Sie, wie Sie az cli, AzureAD und Az PowerShell in der Az - AzureAD Sektion installieren.

Eine der ersten Dinge, die Sie wissen müssen, ist, wer Sie sind (in welcher Umgebung Sie sich befinden):

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

Azure AD Enumeration

User Enumeration

Azure AD user enumeration can be performed using the Graph API. By making requests to the /users endpoint, an attacker can gather information about users in the Azure AD tenant. This information can include user IDs, usernames, email addresses, and other details that can be useful for further attacks.

Group Enumeration

Similarly, group enumeration can be done by querying the /groups endpoint in the Graph API. This can provide an attacker with a list of groups in the Azure AD tenant, including group names, IDs, and members. Understanding the group structure can help an attacker identify high-privileged groups or groups with sensitive information.

Application Enumeration

By querying the /applications endpoint in the Graph API, an attacker can enumerate applications registered in the Azure AD tenant. This can reveal details about the applications, such as IDs, names, owners, and permissions. Understanding the applications in use can help an attacker identify potential entry points or misconfigurations.

Service Principal Enumeration

Service principals represent the applications and services that are authorized to access resources in a specific Azure AD tenant. By querying the /servicePrincipals endpoint, an attacker can enumerate these service principals and gather information about their permissions and configurations. This can help identify potential misconfigurations or weak points in the Azure AD tenant.

Device Enumeration

Querying the /devices endpoint in the Graph API allows an attacker to enumerate devices registered in the Azure AD tenant. This can include information about device IDs, names, types, and owners. Understanding the devices registered in the tenant can help an attacker identify potential targets for attacks, such as compromised or high-privileged devices.

Recommendations

  • Implement strong access controls and least privilege principles to limit the exposure of sensitive information.

  • Regularly review and audit Azure AD configurations, including users, groups, applications, service principals, and devices.

  • Monitor Azure AD logs for suspicious activities, such as multiple failed enumeration attempts or unauthorized access to sensitive resources.

  • Enable multi-factor authentication (MFA) for all users to add an extra layer of security to Azure AD accounts.

  • Keep all Azure AD components, including applications and service principals, up to date with the latest security patches and configurations.

#Get the current session state
Get-AzureADCurrentSessionInfo
#Get details of the current tenant
Get-AzureADTenantDetail

Azure PowerShell

Azure PowerShell ist ein leistungsstarkes Skripting-Tool, das es Ihnen ermöglicht, Azure-Ressourcen zu verwalten und zu automatisieren. Es bietet eine Vielzahl von Cmdlets, mit denen Sie verschiedene Aufgaben in Ihrer Azure-Umgebung ausführen können. Sie können Azure PowerShell verwenden, um virtuelle Maschinen bereitzustellen, Ressourcengruppen zu verwalten, Netzwerkeinstellungen zu konfigurieren und vieles mehr.

Installation von Azure PowerShell

Um Azure PowerShell zu verwenden, müssen Sie es zuerst installieren. Sie können es entweder über den PowerShell Gallery oder das Web Platform Installer installieren. Stellen Sie sicher, dass Sie die neueste Version von Azure PowerShell verwenden, um von den neuesten Funktionen und Verbesserungen zu profitieren.

Verbindung mit Ihrem Azure-Konto

Sobald Azure PowerShell installiert ist, können Sie eine Verbindung mit Ihrem Azure-Konto herstellen, um auf Ihre Azure-Ressourcen zuzugreifen. Verwenden Sie das Connect-AzAccount-Cmdlet, um sich anzumelden und eine Verbindung herzustellen. Geben Sie Ihre Anmeldeinformationen ein, um sich bei Ihrem Azure-Konto anzumelden.

Verwalten von Azure-Ressourcen

Nachdem Sie eine Verbindung hergestellt haben, können Sie mit Azure PowerShell verschiedene Aktionen ausführen, z. B. das Erstellen neuer Ressourcen, das Aktualisieren von Konfigurationen und das Überwachen des Status Ihrer Ressourcen. Verwenden Sie die verfügbaren Cmdlets, um Ihre Azure-Ressourcen effizient zu verwalten.

Azure PowerShell ist ein nützliches Tool für die Automatisierung von Azure-Aufgaben und die Verwaltung Ihrer Cloud-Ressourcen. Lernen Sie die verschiedenen Cmdlets und Funktionen kennen, um das Beste aus Azure PowerShell herauszuholen.

# Get the information about the current context (Account, Tenant, Subscription etc.)
Get-AzContext
# List all available contexts
Get-AzContext -ListAvailable
# Enumerate subscriptions accessible by the current user
Get-AzSubscription
#Get Resource group
Get-AzResourceGroup
# Enumerate all resources visible to the current user
Get-AzResource
# Enumerate all Azure RBAC role assignments
Get-AzRoleAssignment # For all users
Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user

Einer der wichtigsten Befehle zur Auflistung von Azure ist Get-AzResource von Az PowerShell, da er es Ihnen ermöglicht, die Ressourcen zu kennen, die Ihr aktueller Benutzer sehen kann.

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

AzureAD Enumeration

Standardmäßig sollte jeder Benutzer ausreichende Berechtigungen haben, um Dinge wie Benutzer, Gruppen, Rollen, Dienstprinzipale usw. aufzulisten (überprüfen Sie Standardberechtigungen von AzureAD). Hier finden Sie eine Anleitung:

pageAz - AzureAD (AAD)

Nun, da Sie einige Informationen zu Ihren Anmeldeinformationen haben (und wenn Sie ein Red-Team sind, hoffentlich nicht entdeckt wurden), ist es an der Zeit herauszufinden, welche Dienste in der Umgebung verwendet werden. Im folgenden Abschnitt können Sie einige Möglichkeiten finden, um einige gängige Dienste aufzulisten.

Service Principal 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 minimalen Rechts), 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 am App-Dienst-'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 Bilddatei in einem Speicherkonto gespeichert.

Azure DevOps

Azure DevOps ist separat von Azure. Es verfügt über Repositories, Pipelines (YAML oder Release), Boards, Wiki und mehr. Variable Gruppen werden verwendet, um Variablenwerte und Geheimnisse zu speichern.

Automatisierte Rekognoszierungs-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

Azucar ist ein Tool, das entwickelt wurde, um Sicherheitsprüfungen in Azure-Umgebungen durchzuführen. Es kann verwendet werden, um Sicherheitslücken in Azure-Implementierungen zu identifizieren und zu überprüfen. Das Tool bietet verschiedene Module, die spezifische Schwachstellen und Konfigurationsfehler abdecken. Es ist ein nützliches Werkzeug für Sicherheitsexperten, die Azure-Plattformen auf Schwachstellen überprüfen möchten.

# 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
Erlernen Sie das Hacken von AWS von Null auf Heldenniveau mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated