Files
hacktricks-cloud/src/pentesting-cloud/azure-security

Azure Pentesting

{{#include ../../banners/hacktricks-training.md}}

Grundinformationen

{{#ref}} az-basic-information/ {{#endref}}

Azure Pentester/Red Team Methodik

Um eine AZURE-Umgebung zu auditieren, ist es sehr wichtig zu wissen: welche Dienste verwendet werden, was exponiert ist, 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, um eine Azure-Umgebung zu kompromittieren, die Beschaffung von Anmeldeinformationen für Azure AD. Hier sind einige Ideen, wie man das erreichen kann:

  • Leaks in github (oder ähnlichem) - OSINT
  • Soziale Ingenieurkunst
  • Passwort-Wiederverwendung (Passwort-Leaks)
  • Schwachstellen in Azure-gehosteten Anwendungen
  • Server Side Request Forgery mit Zugriff auf den Metadaten-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. 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.
  • 3rd Party gehackt
  • Interner Mitarbeiter
  • Häufiges Phishing (Anmeldeinformationen oder Oauth-App)
  • Gerätekode-Authentifizierungsphishing
  • Azure Password Spraying

Selbst wenn Sie keinen Benutzer innerhalb des Azure-Mandanten, den Sie angreifen, kompromittiert haben, können Sie einige Informationen daraus sammeln:

{{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}}

Note

Nachdem Sie Anmeldeinformationen erhalten haben, müssen Sie wissen, wem diese Anmeldeinformationen gehören und auf was sie Zugriff haben, daher müssen Sie eine grundlegende Enumeration durchführen:

Grundlegende Enumeration

Note

Denken Sie daran, dass der lauteste Teil der Enumeration das Login ist, nicht die Enumeration selbst.

SSRF

Wenn Sie ein SSRF auf einem Rechner innerhalb von Azure gefunden haben, überprüfen Sie diese Seite auf Tricks:

{{#ref}} https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html {{#endref}}

Umgehung von Anmeldebedingungen

In Fällen, in denen Sie einige gültige Anmeldeinformationen haben, aber sich nicht anmelden können, sind dies einige gängige Schutzmaßnahmen, die vorhanden sein könnten:

  • IP-Whitelist -- Sie müssen eine gültige IP kompromittieren
  • Geo-Beschrä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 von bestimmten Betriebssystemen (Windows, Linux, Mac, Android, iOS) erlaubt. Finden Sie heraus, welches OS das Opfer/das Unternehmen verwendet.
  • Sie können auch versuchen, Service Principal-Anmeldeinformationen zu kompromittieren, da diese normalerweise weniger eingeschränkt sind und deren Anmeldung weniger überprüft wird.

Nachdem Sie dies umgangen haben, sollten Sie in der Lage sein, zu Ihrem ursprünglichen Setup zurückzukehren und weiterhin Zugriff zu haben.

Subdomain-Übernahme

Whoami

Caution

Lernen Sie, wie man az cli, AzureAD und Az PowerShell im Abschnitt Az - Entra ID installiert.

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

{{#tabs }} {{#tab name="az cli" }}

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

{{#endtab }}

{{#tab name="AzureAD" }}

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

{{#endtab }}

{{#tab name="Az PowerShell" }}

# 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

{{#endtab }} {{#endtabs }}

Caution

Eines der wichtigsten Befehle zur Auflistung von Azure ist Get-AzResource aus Az PowerShell, da er Ihnen zeigt, über welche Ressourcen 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.

Entra ID Auflistung

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

{{#ref}} az-services/az-azuread.md {{#endref}}

Note

Jetzt, da Sie einige Informationen über Ihre Anmeldeinformationen haben (und wenn Sie ein Rote-Team sind, hoffen wir, dass Sie 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 überprüfen, um einige gängige Dienste aufzulisten.

App Service SCM

Kudu-Konsole, um sich im 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. Der 'Disk' dieser Shell wird als Bilddatei in einem Speicherkonto gespeichert.

Azure DevOps

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

{{#include ../../banners/hacktricks-training.md}}