mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-31 07:00:38 -08:00
Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes
This commit is contained in:
@@ -48,7 +48,7 @@ Mit diesen Informationen sind die häufigsten Möglichkeiten, um einen Fuß in d
|
||||
- **`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 vorherige Anmeldungen mit Az PowerShell (aber keine Anmeldeinformationen)
|
||||
- **`AzureRmContext.json`** enthält Informationen über frühere Anmeldungen mit Az PowerShell (aber keine Anmeldeinformationen)
|
||||
- Innerhalb von **`C:\Users\<username>\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\<username>\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.
|
||||
@@ -80,7 +80,7 @@ In Fällen, in denen Sie einige gültige Anmeldeinformationen haben, aber sich n
|
||||
|
||||
- **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** -- Vielleicht ist nur ein Browser von bestimmten Betriebssystemen (Windows, Linux, Mac, Android, iOS) erlaubt. Finden Sie heraus, welches Betriebssystem das Opfer/das Unternehmen verwendet.
|
||||
- **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.
|
||||
@@ -94,7 +94,7 @@ az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-by
|
||||
### Wer bin ich
|
||||
|
||||
> [!CAUTION]
|
||||
> Lernen Sie, **wie man** az cli, AzureAD und Az PowerShell im Abschnitt [**Az - Entra ID**](az-services/az-azuread.md) installiert.
|
||||
> 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):
|
||||
|
||||
@@ -161,10 +161,74 @@ az-enumeration-tools.md#automated-post-exploitation-tools
|
||||
|
||||
Sobald Sie wissen, wer Sie sind, können Sie beginnen, die **Azure-Dienste, auf die Sie Zugriff haben**, aufzulisten.
|
||||
|
||||
Sie sollten herausfinden, welche **Berechtigungen Sie** über die Ressourcen haben. Dazu:
|
||||
Sie sollten herausfinden, welche **Berechtigungen Sie über die Ressourcen haben**. Dazu:
|
||||
|
||||
1. **Finden Sie die Ressource, auf die Sie Zugriff haben**:
|
||||
|
||||
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,
|
||||
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/<subscription-id>/resources?api-version=2021-04-01"
|
||||
```
|
||||
2. **Finden Sie die Berechtigungen, die Sie für die Ressourcen haben, auf die Sie Zugriff haben, und finden Sie die Ihnen zugewiesenen Rollen**:
|
||||
|
||||
Beachten Sie, dass Sie die Berechtigung **`Microsoft.Authorization/roleAssignments/read`** benötigen, um diese Aktion auszuführen.
|
||||
|
||||
Darüber hinaus kann mit ausreichenden Berechtigungen 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/<subscription-id>/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/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"
|
||||
```
|
||||
Bitte geben Sie den Text an, den Sie übersetzen möchten.
|
||||
```bash
|
||||
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"
|
||||
```
|
||||
Eine weitere Möglichkeit besteht darin, die Ihnen in Azure zugewiesenen Rollen mit folgendem Befehl abzurufen:
|
||||
```bash
|
||||
az role assignment list --assignee "<email>" --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/<subscription-id>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '<user-id>'
|
||||
```
|
||||
3. **Finden Sie die granularen Berechtigungen der Ihnen zugewiesenen Rollen**:
|
||||
|
||||
Um die granularen Berechtigungen zu erhalten, können Sie **`(Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions`** ausführen.
|
||||
|
||||
Oder rufen Sie die API direkt mit
|
||||
```bash
|
||||
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2020-08-01-preview" | jq ".properties"
|
||||
```
|
||||
In der folgenden Sektion 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**.
|
||||
|
||||
In der folgenden Sektion finden Sie Informationen darüber, wie man Privilegien in den gängigsten Azure-Diensten eskaliert:
|
||||
|
||||
{{#ref}}
|
||||
az-privilege-escalation/
|
||||
{{#endref}}
|
||||
|
||||
In der nächsten finden Sie Informationen darüber, wie man Post-Exploitation-Angriffe in den gängigsten Azure-Diensten durchführt:
|
||||
|
||||
{{#ref}}
|
||||
az-post-exploitation/
|
||||
{{#endref}}
|
||||
|
||||
In der nächsten 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}}
|
||||
|
||||
@@ -2,32 +2,40 @@
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Grundinformationen
|
||||
## Grundlegende Informationen
|
||||
|
||||
Azure Conditional Access-Richtlinien sind Regeln, die in Microsoft Azure eingerichtet sind, um Zugriffskontrollen für Azure-Dienste und -Anwendungen basierend auf bestimmten **Bedingungen** durchzusetzen. Diese Richtlinien helfen Organisationen, ihre Ressourcen zu sichern, indem sie die richtigen Zugriffskontrollen unter den richtigen Umständen anwenden.\
|
||||
Conditional Access-Richtlinien **definieren** im Wesentlichen **Wer** auf **Was** von **Wo** und **Wie** zugreifen kann.
|
||||
Conditional Access-Richtlinien **definieren** im Grunde **Wer** auf **Was** von **Wo** und **Wie** zugreifen kann.
|
||||
|
||||
Hier sind ein paar Beispiele:
|
||||
|
||||
1. **Anmelderisiko-Richtlinie**: Diese Richtlinie könnte so eingestellt werden, dass sie eine Multi-Faktor-Authentifizierung (MFA) erfordert, wenn ein Anmelderisiko erkannt wird. Zum Beispiel, wenn das Anmeldeverhalten eines Benutzers im Vergleich zu seinem regulären Muster ungewöhnlich ist, wie z.B. das Anmelden aus einem anderen Land, kann das System zusätzliche Authentifizierung anfordern.
|
||||
2. **Geräte-Compliance-Richtlinie**: Diese Richtlinie kann den Zugriff auf Azure-Dienste nur auf Geräte beschränken, die den Sicherheitsstandards der Organisation entsprechen. Beispielsweise könnte der Zugriff nur von Geräten erlaubt werden, die über aktuelle Antivirensoftware verfügen oder eine bestimmte Version des Betriebssystems ausführen.
|
||||
1. **Anmelderisiko-Richtlinie**: Diese Richtlinie könnte so eingestellt werden, dass sie eine Multi-Faktor-Authentifizierung (MFA) erfordert, wenn ein Anmelderisiko erkannt wird. Zum Beispiel, wenn das Anmeldeverhalten eines Benutzers im Vergleich zu seinem regulären Muster ungewöhnlich ist, wie z.B. das Anmelden aus einem anderen Land, kann das System zur zusätzlichen Authentifizierung auffordern.
|
||||
2. **Geräte-Compliance-Richtlinie**: Diese Richtlinie kann den Zugriff auf Azure-Dienste nur auf Geräte beschränken, die den Sicherheitsstandards der Organisation entsprechen. Zum Beispiel könnte der Zugriff nur von Geräten erlaubt werden, die über aktuelle Antivirensoftware verfügen oder eine bestimmte Version des Betriebssystems ausführen.
|
||||
|
||||
## Umgehungen von Conditional Access-Richtlinien
|
||||
## Aufzählung
|
||||
```bash
|
||||
# Get all the policies from Azure without needing any special permission with (idea from https://github.com/LuemmelSec/APEX/blob/main/APEX.ps1)
|
||||
az rest --method GET --uri 'https://graph.windows.net/<tenant-id>/policies?api-version=1.61-internal' | jq '.value[] | select(.policyType == 18) | {displayName, policyDetail: (.policyDetail[] | fromjson)}'
|
||||
|
||||
Es ist möglich, dass eine Conditional Access-Richtlinie **einige Informationen überprüft, die leicht manipuliert werden können, was eine Umgehung der Richtlinie ermöglicht**. Und wenn beispielsweise die Richtlinie MFA konfiguriert hat, kann der Angreifer diese umgehen.
|
||||
# You need Policy.Read.ConditionalAccess or Policy.Read.All permission in Entra ID
|
||||
az rest --method get --uri "https://graph.microsoft.com/beta/identity/conditionalAccess/policies"
|
||||
```
|
||||
## Conditional Access Policies Bypasses
|
||||
|
||||
Bei der Konfiguration einer Conditional Access-Richtlinie ist es erforderlich, die **betroffenen Benutzer** und **Zielressourcen** (wie alle Cloud-Apps) anzugeben.
|
||||
Es ist möglich, dass eine bedingte Zugriffsrichtlinie **einige Informationen überprüft, die leicht manipuliert werden können, was eine Umgehung der Richtlinie ermöglicht**. Und wenn beispielsweise die Richtlinie MFA konfiguriert hat, kann der Angreifer diese umgehen.
|
||||
|
||||
Bei der Konfiguration einer bedingten Zugriffsrichtlinie ist es erforderlich, die **betroffenen Benutzer** und **Zielressourcen** (wie alle Cloud-Apps) anzugeben.
|
||||
|
||||
Es ist auch notwendig, die **Bedingungen** zu konfigurieren, die die Richtlinie **auslösen**:
|
||||
|
||||
- **Netzwerk**: IP, IP-Bereiche und geografische Standorte
|
||||
- Kann umgangen werden, indem man sich über ein VPN oder Proxy mit einem Land verbindet oder es schafft, sich von einer erlaubten IP-Adresse anzumelden
|
||||
- **Microsoft-Risiken**: Benutzer-Risiko, Anmelderisiko, Insider-Risiko
|
||||
- **Microsoft-Risiken**: Benutzer-Risiko, Anmelde-Risiko, Insider-Risiko
|
||||
- **Geräteplattformen**: Jedes Gerät oder Auswahl von Android, iOS, Windows Phone, Windows, macOS, Linux
|
||||
- Wenn „Jedes Gerät“ nicht ausgewählt ist, aber alle anderen Optionen ausgewählt sind, ist es möglich, dies mit einem zufälligen User-Agent, der nicht mit diesen Plattformen in Verbindung steht, zu umgehen
|
||||
- **Client-Apps**: Optionen sind „Browser“, „Mobile Apps und Desktop-Clients“, „Exchange ActiveSync-Clients“ und „Andere Clients“
|
||||
- Um die Anmeldung mit einer nicht ausgewählten Option zu umgehen
|
||||
- **Filter für Geräte**: Es ist möglich, eine Regel zu erstellen, die sich auf das verwendete Gerät bezieht
|
||||
- **Filter für Geräte**: Es ist möglich, eine Regel in Bezug auf das verwendete Gerät zu erstellen
|
||||
- **Authentifizierungsflüsse**: Optionen sind „Gerätescodefluss“ und „Authentifizierungsübertragung“
|
||||
- Dies wird einen Angreifer nicht betreffen, es sei denn, er versucht, einen dieser Protokolle in einem Phishing-Versuch zu missbrauchen, um auf das Konto des Opfers zuzugreifen
|
||||
|
||||
@@ -35,7 +43,7 @@ Die möglichen **Ergebnisse** sind: Zugriff blockieren oder gewähren mit potenz
|
||||
|
||||
### Geräteplattformen - Gerätebedingung
|
||||
|
||||
Es ist möglich, eine Bedingung basierend auf der **Geräteplattform** (Android, iOS, Windows, macOS...) festzulegen, jedoch basiert dies auf dem **User-Agent**, sodass es leicht umgangen werden kann. Selbst wenn **alle Optionen MFA erzwingen**, wenn Sie einen **User-Agent verwenden, der nicht erkannt wird,** können Sie die MFA oder Blockierung umgehen:
|
||||
Es ist möglich, eine Bedingung basierend auf der **Geräteplattform** (Android, iOS, Windows, macOS...) festzulegen, jedoch basiert dies auf dem **User-Agent**, sodass es leicht zu umgehen ist. Selbst wenn **alle Optionen MFA erzwingen**, wenn Sie einen **User-Agent verwenden, der nicht erkannt wird,** können Sie MFA oder die Blockierung umgehen:
|
||||
|
||||
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -48,18 +56,18 @@ Oder verwenden Sie eine [Browsererweiterung wie diese](https://chromewebstore.go
|
||||
|
||||
### Standorte: Länder, IP-Bereiche - Gerätebedingung
|
||||
|
||||
Wenn dies in der Conditional Access-Richtlinie festgelegt ist, könnte ein Angreifer einfach ein **VPN** im **erlaubten Land** verwenden oder versuchen, einen Weg zu finden, um von einer **erlaubten IP-Adresse** aus auf diese Bedingungen zuzugreifen.
|
||||
Wenn dies in der bedingten Richtlinie festgelegt ist, könnte ein Angreifer einfach ein **VPN** im **erlaubten Land** verwenden oder versuchen, einen Weg zu finden, um von einer **erlaubten IP-Adresse** aus auf diese Bedingungen zuzugreifen.
|
||||
|
||||
### Cloud-Apps
|
||||
|
||||
Es ist möglich, **Conditional Access-Richtlinien zu konfigurieren, um zu blockieren oder zu erzwingen**, beispielsweise MFA, wenn ein Benutzer versucht, auf eine **spezifische App** zuzugreifen:
|
||||
Es ist möglich, **Bedingte Zugriffsrichtlinien zu konfigurieren, um zu blockieren oder zu erzwingen**, beispielsweise MFA, wenn ein Benutzer versucht, auf eine **spezifische App** zuzugreifen:
|
||||
|
||||
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Um diesen Schutz zu umgehen, sollten Sie prüfen, ob Sie **nur in eine Anwendung** gelangen können.\
|
||||
Um zu versuchen, diesen Schutz zu umgehen, sollten Sie sehen, ob Sie **nur in eine beliebige Anwendung** gelangen können.\
|
||||
Das Tool [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) hat **Dutzende von Anwendungs-IDs fest codiert** und wird versuchen, sich bei ihnen anzumelden und Ihnen Bescheid geben und Ihnen sogar das Token geben, wenn es erfolgreich ist.
|
||||
|
||||
Um **spezifische Anwendungs-IDs in spezifischen Ressourcen zu testen**, könnten Sie auch ein Tool wie verwenden:
|
||||
Um **spezifische Anwendungs-IDs in spezifischen Ressourcen zu testen**, könnten Sie auch ein Tool wie folgendes verwenden:
|
||||
```bash
|
||||
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout
|
||||
|
||||
@@ -69,7 +77,7 @@ Darüber hinaus ist es auch möglich, die Anmeldemethode zu schützen (z. B. wen
|
||||
|
||||
Das Tool [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) könnte ebenfalls für ähnliche Zwecke verwendet werden, obwohl es unmaintained aussieht.
|
||||
|
||||
Das Tool [**ROPCI**](https://github.com/wunderwuzzi23/ropci) kann ebenfalls verwendet werden, um diese Schutzmaßnahmen zu testen und zu sehen, ob es möglich ist, MFAs oder Sperren zu umgehen, aber dieses Tool funktioniert aus einer **whitebox** Perspektive. Zuerst müssen Sie die Liste der im Mandanten erlaubten Apps herunterladen und dann wird versucht, sich bei ihnen anzumelden.
|
||||
Das Tool [**ROPCI**](https://github.com/wunderwuzzi23/ropci) kann ebenfalls verwendet werden, um diese Schutzmaßnahmen zu testen und zu sehen, ob es möglich ist, MFAs oder Sperren zu umgehen, aber dieses Tool funktioniert aus einer **whitebox** Perspektive. Zuerst müssen Sie die Liste der im Mandanten erlaubten Apps herunterladen und dann wird es versuchen, sich bei ihnen anzumelden.
|
||||
|
||||
## Andere Az MFA Umgehungen
|
||||
|
||||
@@ -116,14 +124,14 @@ roadrecon plugin policies
|
||||
```
|
||||
### [Invoke-MFASweep](https://github.com/dafthack/MFASweep)
|
||||
|
||||
MFASweep ist ein PowerShell-Skript, das versucht, **sich bei verschiedenen Microsoft-Diensten mit einem bereitgestellten Satz von Anmeldeinformationen anzumelden und zu überprüfen, ob MFA aktiviert ist**. Je nachdem, wie die bedingten Zugriffsrichtlinien und andere Einstellungen zur Multi-Faktor-Authentifizierung konfiguriert sind, können einige Protokolle als Einzelfaktor verbleiben. Es gibt auch eine zusätzliche Überprüfung der ADFS-Konfigurationen und kann versuchen, sich beim lokalen ADFS-Server anzumelden, wenn dieser erkannt wird.
|
||||
MFASweep ist ein PowerShell-Skript, das versucht, **sich mit einem bereitgestellten Satz von Anmeldeinformationen bei verschiedenen Microsoft-Diensten anzumelden und zu überprüfen, ob MFA aktiviert ist**. Je nachdem, wie die bedingten Zugriffsrichtlinien und andere Einstellungen zur Multi-Faktor-Authentifizierung konfiguriert sind, können einige Protokolle als Einzelfaktor verbleiben. Es gibt auch eine zusätzliche Überprüfung der ADFS-Konfigurationen und kann versuchen, sich beim lokalen ADFS-Server anzumelden, wenn dieser erkannt wird.
|
||||
```bash
|
||||
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
|
||||
Invoke-MFASweep -Username <username> -Password <pass>
|
||||
```
|
||||
### [ROPCI](https://github.com/wunderwuzzi23/ropci)
|
||||
|
||||
Dieses Tool hat dabei geholfen, MFA-Umgehungen zu identifizieren und dann APIs in mehreren Produktions-AAD-Mandanten auszunutzen, in denen AAD-Kunden glaubten, dass MFA durchgesetzt sei, aber die Authentifizierung basierend auf ROPC erfolgreich war.
|
||||
Dieses Tool hat dabei geholfen, MFA-Umgehungen zu identifizieren und dann APIs in mehreren Produktions-AAD-Mandanten auszunutzen, in denen AAD-Kunden glaubten, dass MFA durchgesetzt war, aber die Authentifizierung basierend auf ROPC erfolgreich war.
|
||||
|
||||
> [!TIP]
|
||||
> Sie müssen die Berechtigungen haben, um alle Anwendungen aufzulisten, um die Liste der Apps zu generieren, die brute-forced werden sollen.
|
||||
|
||||
Reference in New Issue
Block a user