# Azure Pentesting {{#include ../../banners/hacktricks-training.md}} ## Grundinformationen Lernen Sie die Grundlagen von Azure und Entra ID auf der folgenden Seite: {{#ref}} az-basic-information/ {{#endref}} ## Azure Pentester/Red Team Methodologie 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**, einen **Fuß in die Tür** zu bekommen. ### Externe Enumeration & Erster Zugriff Der erste Schritt besteht natürlich darin, Informationen über den Mandanten, den Sie angreifen, zu enumerieren und zu versuchen, einen Fuß in die Tür zu bekommen. Basierend auf dem Domainnamen ist es möglich zu wissen, **ob das Unternehmen Azure verwendet**, die **Mandanten-ID** zu erhalten, andere **gültige Domains** im selben Mandanten (falls vorhanden) zu finden und **relevante Informationen** wie ob SSO aktiviert ist, Mail-Konfigurationen, gültige Benutzer-E-Mails... Überprüfen Sie die folgende Seite, um zu lernen, wie man die **externe Enumeration** durchführt: {{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}} Mit diesen Informationen sind die häufigsten Möglichkeiten, um einen Fuß in die Tür zu bekommen: - **OSINT**: Überprüfen Sie auf **Leaks** in Github oder einer anderen Open-Source-Plattform, die **Anmeldeinformationen** oder interessante Informationen enthalten könnte. - **Passwort**-Wiederverwendung, Leaks oder [Password Spraying](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) - Anmeldeinformationen von einem Mitarbeiter kaufen - [**Häufiges Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (Anmeldeinformationen oder Oauth-App) - [Device Code Authentication Phishing](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md) - 3rd Party **verletzte** - Schwachstellen in Azure-gehosteten Anwendungen - [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) mit Zugriff auf den Metadaten-Endpunkt - **Subdomain-Übernahmen** wie in [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/) - **Andere Azure-Dienste Fehlkonfigurationen** - Wenn ein Entwickler-Laptop kompromittiert ist ([WinPEAS und LinPEAS](https://github.com/peass-ng/PEASS-ng) können diese Informationen finden): - Innerhalb von **`/.Azure`** - **`azureProfile.json`** enthält Informationen über angemeldete Benutzer aus der Vergangenheit - **`clouds.config` enthält** Informationen über Abonnements - **`service_principal_entries.json`** enthält Anwendungsanmeldeinformationen (Mandanten-ID, Clients und Geheimnis). Nur in Linux & macOS - **`msal_token_cache.json`** enthält Zugriffstoken und Aktualisierungstoken. Nur in Linux & macOS - **`service_principal_entries.bin`** und msal_token_cache.bin werden in Windows verwendet und sind mit DPAPI verschlüsselt - **`msal_http_cache.bin`** ist ein Cache von HTTP-Anfragen - Laden Sie es: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)` - **`AzureRmContext.json`** enthält Informationen über frühere Anmeldungen mit Az PowerShell (aber keine Anmeldeinformationen) - Innerhalb von **`C:\Users\\AppData\Local\Microsoft\IdentityCache\*`** befinden sich mehrere `.bin`-Dateien mit **Zugriffstoken**, ID-Token und Kontoinformationen, die mit dem DPAPI des Benutzers verschlüsselt sind. - Es ist möglich, weitere **Zugriffstoken** in den `.tbres`-Dateien innerhalb von **`C:\Users\\AppData\Local\Microsoft\TokenBroken\Cache\`** zu finden, die ein base64 mit DPAPI verschlüsseltes Zugriffstoken enthalten. - In Linux und macOS können Sie **Zugriffstoken, Aktualisierungstoken und ID-Token** von Az PowerShell (falls verwendet) erhalten, indem Sie `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"` ausführen. - In Windows generiert dies nur ID-Token. - Es ist möglich zu sehen, ob Az PowerShell in Linux und macOS verwendet wurde, indem überprüft wird, ob `$HOME/.local/share/.IdentityService/` existiert (obwohl die enthaltenen Dateien leer und nutzlos sind). Finden Sie **andere Azure-Dienste Fehlkonfigurationen**, die zu einem Fuß in die Tür führen können, auf der folgenden Seite: {{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}} > [!NOTE] > Denken Sie daran, dass normalerweise der **lauteste** Teil der Enumeration das **Login** ist, nicht die Enumeration selbst. ### Azure & Entra ID Tools Die folgenden Tools sind sehr nützlich, um sowohl Entra ID-Mandanten als auch Azure-Umgebungen langsam (um Erkennung zu vermeiden) oder automatisch (um Zeit zu sparen) zu enumerieren: {{#ref}} az-enumeration-tools.md {{#endref}} ### Umgehung von Zugriffsrichtlinien
In Fällen, in denen Sie über gültige Anmeldeinformationen verfügen, sich jedoch nicht anmelden können, sind dies einige gängige Schutzmaßnahmen, die vorhanden sein könnten: - **IP-Whitelisting** -- 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 Betriebssystem 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 Ihrer ursprünglichen Konfiguration zurückzukehren und weiterhin Zugriff zu haben. Überprüfen Sie: {{#ref}} az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md {{#endref}} ### Wer bin ich > [!CAUTION] > Lernen Sie, **wie man** az cli, AzureAD und Az PowerShell im [**Az - Entra ID**](az-services/az-azuread.md) Abschnitt 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" }} ```bash 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="Az" }} ```bash # 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 ``` {{#endtab }} {{#tab name="Mg" }} ```bash #Get the current session Get-MgContext ``` {{#endtab }} {{#tab name="AzureAD" }} ```bash #Get the current session state Get-AzureADCurrentSessionInfo #Get details of the current tenant Get-AzureADTenantDetail ``` {{#endtab }} {{#endtabs }} ### Entra ID Enumeration & Privesc Standardmäßig sollte jeder Benutzer **über ausreichende Berechtigungen verfügen, um** Dinge wie Benutzer, Gruppen, Rollen, Dienstprinzipale... aufzulisten (siehe [Standard AzureAD-Berechtigungen](az-basic-information/index.html#default-user-permissions)).\ Hier finden Sie einen Leitfaden: {{#ref}} az-services/az-azuread.md {{#endref}} Überprüfen Sie die **Post-Exploitation-Tools**, um Tools zur Eskalation von Berechtigungen in Entra ID wie **AzureHound** zu finden: {{#ref}} az-enumeration-tools.md#automated-post-exploitation-tools {{#endref}} ### Azure Enumeration Sobald Sie wissen, wer Sie sind, können Sie beginnen, die **Azure-Dienste, auf die Sie Zugriff haben**, aufzulisten. Sie sollten herausfinden, über welche **Berechtigungen Sie verfügen** für die Ressourcen. Dazu: 1. **Finden Sie die Ressource, auf die Sie Zugriff haben**: > [!TIP] > Dies erfordert keine speziellen Berechtigungen. Der Az PowerShell-Befehl **`Get-AzResource`** ermöglicht es Ihnen, **die Ressourcen zu erfahren, über die Ihr aktueller Benutzer Sichtbarkeit hat**. Darüber hinaus können Sie die gleichen Informationen in der **Webkonsole** erhalten, indem Sie zu [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) gehen oder nach "Alle Ressourcen" suchen oder folgendes ausführen: ```bash az rest --method GET --url "https://management.azure.com/subscriptions//resources?api-version=2021-04-01" ``` 2. **Finden Sie die Berechtigungen, die Sie über die Ressourcen haben, die Sie sehen können**: > [!TIP] > Dies erfordert keine speziellen Berechtigungen. Durch die Kommunikation mit der API **`https://management.azure.com/{resource_id}/providers/Microsoft.Authorization/permissions?api-version=2022-04-01`** können Sie die Berechtigungen abrufen, die Sie über die angegebene Ressource im **`resource_id`** haben. Daher können Sie, **indem Sie jede der Ressourcen überprüfen, auf die Sie Zugriff haben**, die Berechtigungen abrufen, die Sie über sie haben. > [!WARNING] > Sie können diese Aufzählung automatisieren, indem Sie das Tool **[Find_My_Az_Management_Permissions](https://github.com/carlospolop/Find_My_Az_Management_Permissions)** verwenden.
Berechtigungen mit **`Microsoft.Authorization/roleAssignments/read`** auflisten > [!TIP] > Beachten Sie, dass Sie die Berechtigung **`Microsoft.Authorization/roleAssignments/read`** benötigen, um diese Aktion auszuführen. - Mit ausreichenden Berechtigungen kann die Rolle **`Get-AzRoleAssignment`** verwendet werden, um **alle Rollen** im Abonnement oder die Berechtigung über eine bestimmte Ressource aufzulisten, indem Sie sie wie folgt angeben: ```bash Get-AzRoleAssignment -Scope /subscriptions//resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4 ``` Es ist auch möglich, diese Informationen zu erhalten, indem man Folgendes ausführt: ```bash az rest --method GET --uri "https://management.azure.com//providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value" ``` Bitte geben Sie den Text an, den Sie übersetzen möchten. ```bash az rest --method GET --uri "https://management.azure.com//subscriptions//resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value" ``` - Eine weitere Option ist, **die Rollen abzurufen, die dir in Azure zugewiesen sind**. Dies erfordert ebenfalls die Berechtigung **`Microsoft.Authorization/roleAssignments/read`**: ```bash az role assignment list --assignee "" --all --output table ``` Oder führen Sie Folgendes aus (Wenn die Ergebnisse leer sind, könnte es daran liegen, dass Sie nicht die Berechtigung haben, sie abzurufen): ```bash az rest --method GET --uri 'https://management.azure.com/subscriptions//providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '' ``` - **Finden Sie die granularen Berechtigungen der Ihnen zugewiesenen Rollen**: Um die granularen Berechtigungen zu erhalten, können Sie **`(Get-AzRoleDefinition -Id "").Actions`** ausführen. Oder rufen Sie die API direkt mit ```bash az rest --method GET --uri "https://management.azure.com//subscriptions//providers/Microsoft.Authorization/roleDefinitions/?api-version=2022-04-01" | jq ".properties" ```
In dem folgenden Abschnitt finden Sie **Informationen über die gängigsten Azure-Dienste und wie man sie auflistet**: {{#ref}} az-services/ {{#endref}} ### Privilegieneskalation, Post-Exploitation & Persistenz Sobald Sie wissen, wie die Azure-Umgebung strukturiert ist und welche Dienste verwendet werden, können Sie nach Möglichkeiten suchen, um **Privilegien zu eskalieren, lateral zu bewegen, andere Post-Exploitation-Angriffe durchzuführen und Persistenz aufrechtzuerhalten**. Im folgenden Abschnitt finden Sie Informationen darüber, wie man Privilegien in den gängigsten Azure-Diensten eskaliert: {{#ref}} az-privilege-escalation/ {{#endref}} Im folgenden Abschnitt finden Sie Informationen darüber, wie man Post-Exploitation-Angriffe in den gängigsten Azure-Diensten durchführt: {{#ref}} az-post-exploitation/ {{#endref}} Im folgenden Abschnitt finden Sie Informationen darüber, wie man Persistenz in den gängigsten Azure-Diensten aufrechterhält: {{#ref}} az-persistence/ {{#endref}} {{#include ../../banners/hacktricks-training.md}}