Translated ['src/pentesting-cloud/aws-security/aws-services/aws-cognito-

This commit is contained in:
Translator
2025-01-26 14:51:56 +00:00
parent 7c329ec800
commit ca8dd17888
3 changed files with 29 additions and 29 deletions

View File

@@ -78,7 +78,7 @@ Für weitere Informationen siehe https://github.com/padok-team/cognito-scanner
Das einzige, was ein Angreifer wissen muss, um **AWS-Anmeldeinformationen** in einer Cognito-App als unauthentifizierter Benutzer zu **erhalten**, ist die **Identity Pool ID**, und diese **ID muss im Web-/Mobilanwendung** fest codiert sein, damit sie verwendet werden kann. Eine ID sieht so aus: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (sie ist nicht bruteforcebar).
> [!TIP]
> Die **IAM Cognito unautorisierte Rolle, die erstellt wurde, heißt** standardmäßig `Cognito_<Identity Pool name>Unauth_Role`
> Die **IAM Cognito unauthentifizierte Rolle, die über erstellt wurde, heißt** standardmäßig `Cognito_<Identity Pool name>Unauth_Role`
Wenn Sie eine Identity Pools ID finden, die fest codiert ist und unauthentifizierte Benutzer zulässt, können Sie AWS-Anmeldeinformationen mit:
```python
@@ -112,13 +112,13 @@ aws cognito-identity get-id --identity-pool-id <identity_pool_id> --no-sign
aws cognito-identity get-credentials-for-identity --identity-id <identity_id> --no-sign
```
> [!WARNING]
> Beachten Sie, dass ein nicht authentifizierter cognito **Benutzer standardmäßig KEINE Berechtigungen hat, selbst wenn diese über eine Richtlinie zugewiesen wurden**. Überprüfen Sie den folgenden Abschnitt.
> Beachten Sie, dass ein nicht authentifizierter Cognito **Benutzer standardmäßig KEINE Berechtigungen hat, selbst wenn diese über eine Richtlinie zugewiesen wurden**. Überprüfen Sie den folgenden Abschnitt.
### Verbesserter vs. Basis-Authentifizierungsfluss
Der vorherige Abschnitt folgte dem **standardmäßigen verbesserten Authentifizierungsfluss**. Dieser Fluss setzt eine **einschränkende** [**Sitzungsrichtlinie**](../../aws-basic-information/#session-policies) für die generierte IAM-Rollen-Sitzung. Diese Richtlinie erlaubt es der Sitzung nur, [**die Dienste aus dieser Liste zu nutzen**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (auch wenn die Rolle Zugriff auf andere Dienste hatte).
Der vorherige Abschnitt folgte dem **standardmäßigen verbesserten Authentifizierungsfluss**. Dieser Fluss setzt eine **einschränkende** [**Sitzungsrichtlinie**](../../aws-basic-information/index.html#session-policies) für die generierte IAM-Rollen-Sitzung. Diese Richtlinie erlaubt es der Sitzung nur, [**die Dienste aus dieser Liste zu nutzen**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (auch wenn die Rolle Zugriff auf andere Dienste hatte).
Es gibt jedoch eine Möglichkeit, dies zu umgehen. Wenn der **Identitätspool den "Basis (Klassisch) Fluss" aktiviert hat**, kann der Benutzer eine Sitzung mit diesem Fluss erhalten, die **nicht über diese einschränkende Sitzungsrichtlinie verfügt**.
Es gibt jedoch eine Möglichkeit, dies zu umgehen. Wenn der **Identitätspool den "Basis (Klassischen) Fluss" aktiviert hat**, kann der Benutzer eine Sitzung mit diesem Fluss erhalten, die **nicht über diese einschränkende Sitzungsrichtlinie verfügt**.
```bash
# Get auth ID
aws cognito-identity get-id --identity-pool-id <identity_pool_id> --no-sign
@@ -135,7 +135,7 @@ aws sts assume-role-with-web-identity --role-arn "arn:aws:iam::<acc_id>:role/<ro
> `An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.`
Wenn Sie über ein Set von IAM-Anmeldeinformationen verfügen, sollten Sie [überprüfen, auf welchen Zugriff Sie haben](../../#whoami) und versuchen, [Berechtigungen zu eskalieren](../../aws-privilege-escalation/).
Wenn Sie über ein Set von IAM-Anmeldeinformationen verfügen, sollten Sie [überprüfen, auf welchen Zugriff Sie haben](../../index.html#whoami) und versuchen, [Privilegien zu eskalieren](../../aws-privilege-escalation/index.html).
### Authentifiziert
@@ -144,32 +144,32 @@ Wenn Sie über ein Set von IAM-Anmeldeinformationen verfügen, sollten Sie [übe
Es könnten auch **Rollen** für **authentifizierte Benutzer, die auf den Identity Pool zugreifen**, verfügbar sein.
Dafür müssen Sie möglicherweise Zugriff auf den **Identitätsanbieter** haben. Wenn es sich um einen **Cognito User Pool** handelt, können Sie möglicherweise das Standardverhalten ausnutzen und **selbst einen neuen Benutzer erstellen**.
Dafür müssen Sie möglicherweise Zugriff auf den **Identitätsanbieter** haben. Wenn das ein **Cognito User Pool** ist, können Sie möglicherweise das Standardverhalten ausnutzen und **selbst einen neuen Benutzer erstellen**.
> [!TIP]
> Die **IAM Cognito authentifizierte Rolle, die erstellt wurde, heißt** standardmäßig `Cognito_<Identity Pool name>Auth_Role`
> Die **IAM Cognito authentifizierte Rolle, die erstellt wird, heißt** standardmäßig `Cognito_<Identity Pool name>Auth_Role`
Jedenfalls erwartet das **folgende Beispiel**, dass Sie sich bereits in einem **Cognito User Pool** angemeldet haben, der verwendet wird, um auf den Identity Pool zuzugreifen (vergessen Sie nicht, dass auch andere Arten von Identitätsanbietern konfiguriert sein könnten).
<pre class="language-bash"><code class="lang-bash">aws cognito-identity get-id \
--identity-pool-id &#x3C;identity_pool_id> \
--logins cognito-idp.&#x3C;region>.amazonaws.com/&#x3C;YOUR_USER_POOL_ID>=&#x3C;ID_TOKEN>
--identity-pool-id <identity_pool_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
# Holen Sie sich die identity_id aus der vorherigen Befehlsantwort
aws cognito-identity get-credentials-for-identity \
--identity-id &#x3C;identity_id> \
--logins cognito-idp.&#x3C;region>.amazonaws.com/&#x3C;YOUR_USER_POOL_ID>=&#x3C;ID_TOKEN>
--identity-id <identity_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
# Im IdToken finden Sie Rollen, auf die ein Benutzer aufgrund von Benutzerpoolgruppen Zugriff hat
# Verwenden Sie die --custom-role-arn, um Anmeldeinformationen für eine bestimmte Rolle zu erhalten
aws cognito-identity get-credentials-for-identity \
--identity-id &#x3C;identity_id> \
<strong> --custom-role-arn &#x3C;role_arn> \
</strong> --logins cognito-idp.&#x3C;region>.amazonaws.com/&#x3C;YOUR_USER_POOL_ID>=&#x3C;ID_TOKEN>
--identity-id <identity_id> \
<strong> --custom-role-arn <role_arn> \
</strong> --logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
</code></pre>
> [!WARNING]
> Es ist möglich, **verschiedene IAM-Rollen je nach Identitätsanbieter** zu konfigurieren, bei dem der Benutzer angemeldet ist, oder sogar nur abhängig **vom Benutzer** (unter Verwendung von Ansprüchen). Daher könnte es **lohnenswert sein, sich anzumelden und auf die IAM-Rollen von allen zuzugreifen**.
> Es ist möglich, **verschiedene IAM-Rollen zu konfigurieren, abhängig von dem Identitätsanbieter**, bei dem der Benutzer angemeldet ist, oder sogar nur abhängig **vom Benutzer** (unter Verwendung von Ansprüchen). Daher könnte es **lohnenswert sein, sich anzumelden und auf die IAM-Rollen von allen zuzugreifen**.
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -12,7 +12,7 @@ az-azure-network.md
## Grundinformationen zu VMs
Azure Virtuelle Maschinen (VMs) sind flexible, bedarfsorientierte **cloudbasierte Server, die es Ihnen ermöglichen, Windows- oder Linux-Betriebssysteme auszuführen**. Sie ermöglichen die Bereitstellung von Anwendungen und Workloads, ohne physische Hardware verwalten zu müssen. Azure VMs können mit verschiedenen CPU-, Speicher- und Speicheroptionen konfiguriert werden, um spezifische Anforderungen zu erfüllen und sich in Azure-Dienste wie virtuelle Netzwerke, Speicher und Sicherheitstools zu integrieren.
Azure Virtuelle Maschinen (VMs) sind flexible, bedarfsorientierte **cloudbasierte Server, die es Ihnen ermöglichen, Windows- oder Linux-Betriebssysteme auszuführen**. Sie ermöglichen die Bereitstellung von Anwendungen und Workloads, ohne physische Hardware verwalten zu müssen. Azure VMs können mit verschiedenen CPU-, Speicher- und Speicheroptionen konfiguriert werden, um spezifische Anforderungen zu erfüllen und sich in Azure-Dienste wie virtuelle Netzwerke, Speicher und Sicherheitswerkzeuge zu integrieren.
### Sicherheitskonfigurationen
@@ -28,7 +28,7 @@ Azure Virtuelle Maschinen (VMs) sind flexible, bedarfsorientierte **cloudbasiert
- **Keine**: Öffnet im Grunde jeden Port
- **Basis**: Ermöglicht das einfache Öffnen der eingehenden Ports HTTP (80), HTTPS (443), SSH (22), RDP (3389)
- **Erweitert**: Wählen Sie eine Sicherheitsgruppe aus
- **Backup**: Es ist möglich, **Standard**-Backup (einmal täglich) und **Erweitert** (mehrmals täglich) zu aktivieren
- **Backup**: Es ist möglich, **Standard**-Backups (einmal täglich) und **Erweiterte** (mehrmals täglich) zu aktivieren
- **Patch-Orchestrierungsoptionen**: Dies ermöglicht das automatische Anwenden von Patches in den VMs gemäß der ausgewählten Richtlinie, wie in den [**docs**](https://learn.microsoft.com/en-us/azure/virtual-machines/automatic-vm-guest-patching) beschrieben.
- **Benachrichtigungen**: Es ist möglich, automatisch Benachrichtigungen per E-Mail oder mobile App zu erhalten, wenn etwas in der VM passiert. Standardregeln:
- Prozentsatz CPU ist größer als 80%
@@ -48,7 +48,7 @@ Azure Virtuelle Maschinen (VMs) sind flexible, bedarfsorientierte **cloudbasiert
- Es ist möglich, **eine Festplatte an 2 oder mehr VMs anzuhängen**
- Standardmäßig ist jede Festplatte **verschlüsselt** mit einem Plattformschlüssel.
- Gleiches gilt für Snapshots
- Standardmäßig ist es möglich, **die Festplatte aus allen Netzwerken zu teilen**, aber sie kann auch auf bestimmte **private Zugriffe** oder auf **vollständige Deaktivierung** des öffentlichen und privaten Zugriffs **beschränkt** werden.
- Standardmäßig ist es möglich, **die Festplatte aus allen Netzwerken zu teilen**, aber sie kann auch auf bestimmte **private Zugriffe** **beschränkt** oder der öffentliche und private Zugriff **vollständig deaktiviert** werden.
- Gleiches gilt für Snapshots
- Es ist möglich, eine **SAS-URI** (maximal 60 Tage) zu **generieren, um die Festplatte zu exportieren**, die so konfiguriert werden kann, dass sie eine Authentifizierung erfordert oder nicht
- Gleiches gilt für Snapshots
@@ -79,7 +79,7 @@ Get-AzDisk -Name <DiskName> -ResourceGroupName <ResourceGroupName>
Ein **VM-Image** ist eine Vorlage, die das Betriebssystem, die Anwendungseinstellungen und das Dateisystem enthält, die benötigt werden, um **eine neue virtuelle Maschine (VM)** zu **erstellen**. Der Unterschied zwischen einem Image und einem Festplattensnapshot besteht darin, dass ein Festplattensnapshot eine schreibgeschützte, zeitpunktbezogene Kopie einer einzelnen verwalteten Festplatte ist, die hauptsächlich für Backup oder Fehlersuche verwendet wird, während ein Image **mehrere Festplatten enthalten kann und als Vorlage für die Erstellung neuer VMs** dient.\
Bilder können im **Bilder-Bereich** von Azure oder in **Azure-Compute-Galerien** verwaltet werden, die es ermöglichen, **Versionen** zu erstellen und das Image tenantübergreifend zu **teilen** oder sogar öffentlich zu machen.
Ein **Wiederherstellungspunkt** speichert die VM-Konfiguration und **zeitpunktbezogene** anwendungskonsistente **Snapshots aller verwalteten Festplatten**, die an die VM angeschlossen sind. Er ist mit der VM verbunden und hat den Zweck, diese VM auf den Zustand zu bringen, in dem sie sich zu diesem spezifischen Zeitpunkt befand.
Ein **Wiederherstellungspunkt** speichert die VM-Konfiguration und **zeitpunktbezogene** anwendungs-konsistente **Snapshots aller verwalteten Festplatten**, die an die VM angeschlossen sind. Er ist mit der VM verbunden und hat den Zweck, diese VM auf den Zustand zu bringen, in dem sie zu diesem spezifischen Zeitpunkt war.
{{#tabs}}
{{#tab name="az cli"}}
@@ -148,11 +148,11 @@ Aus den [**Docs**](https://learn.microsoft.com/en-us/azure/site-recovery/site-re
## Azure Bastion
Azure Bastion ermöglicht sicheren und nahtlosen **Remote Desktop Protocol (RDP)** und **Secure Shell (SSH)** Zugriff auf Ihre virtuellen Maschinen (VMs) direkt über das Azure-Portal oder über einen Jump-Box. Durch **die Eliminierung der Notwendigkeit für öffentliche IP-Adressen** auf Ihren VMs.
Azure Bastion ermöglicht sicheren und nahtlosen **Remote Desktop Protocol (RDP)** und **Secure Shell (SSH)** Zugriff auf Ihre virtuellen Maschinen (VMs) direkt über das Azure-Portal oder über eine Jump-Box. Durch **die Eliminierung der Notwendigkeit für öffentliche IP-Adressen** auf Ihren VMs.
Der Bastion implementiert ein Subnetz namens **`AzureBastionSubnet`** mit einer `/26` Netzmaske im VNet, in dem er arbeiten muss. Dann ermöglicht es, **eine Verbindung zu internen VMs über den Browser** unter Verwendung von `RDP` und `SSH`, wodurch Ports der VMs nicht ins Internet exponiert werden. Es kann auch als **Jump-Host** fungieren.
Um alle Azure Bastion-Hosts in Ihrem Abonnement aufzulisten und über sie eine Verbindung zu VMs herzustellen, können Sie die folgenden Befehle verwenden:
Um alle Azure Bastion-Hosts in Ihrem Abonnement aufzulisten und über diese eine Verbindung zu VMs herzustellen, können Sie die folgenden Befehle verwenden:
{{#tabs}}
{{#tab name="az cli"}}
@@ -551,7 +551,7 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
<summary>DesiredStateConfiguration (DSC)</summary>
Dies ist eine **VM-Erweiterung**, die zu Microsoft gehört und PowerShell DSC verwendet, um die Konfiguration von Azure Windows-VMs zu verwalten. Daher kann sie verwendet werden, um **beliebige Befehle** in Windows-VMs über diese Erweiterung auszuführen:
Dies ist eine **VM-Erweiterung**, die zu Microsoft gehört und PowerShell DSC verwendet, um die Konfiguration von Azure Windows-VMs zu verwalten. Daher kann sie verwendet werden, um **willkürliche Befehle** in Windows-VMs über diese Erweiterung auszuführen:
```bash
# Content of revShell.ps1
Configuration RevShellConfig {
@@ -617,17 +617,17 @@ az sig list --resource-group <res-group> --output table
# List all apps in a fallery
az sig gallery-application list --gallery-name <gallery-name> --resource-group <res-group> --output table
```
Diese sind die Pfade, wo die Anwendungen im Dateisystem heruntergeladen werden:
Dies sind die Pfade, wo die Anwendungen im Dateisystem heruntergeladen werden:
- Linux: `/var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<appname>/<app version>`
- Windows: `C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<appname>\<app version>`
Überprüfen Sie, wie man neue Anwendungen installiert in [https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli](https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli)
Überprüfen Sie, wie Sie neue Anwendungen installieren können in [https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli](https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli)
> [!CAUTION]
> Es ist möglich, **einzelne Apps und Galerien mit anderen Abonnements oder Mandanten zu teilen**. Was sehr interessant ist, da es einem Angreifer ermöglichen könnte, eine Anwendung zu hintertüren und zu anderen Abonnements und Mandanten zu pivotieren.
Aber es **gibt keinen "Marktplatz" für VM-Apps** wie es für Erweiterungen gibt.
Aber es **gibt keinen "Marktplatz" für VM-Apps** wie für Erweiterungen.
Die erforderlichen Berechtigungen sind:
@@ -725,13 +725,13 @@ Dies sind **persistente Daten**, die jederzeit vom Metadaten-Endpunkt abgerufen
### Benutzerspezifische Daten
Es ist möglich, einige Daten an die VM zu übergeben, die an den erwarteten Pfaden gespeichert werden:
Es ist möglich, einige Daten an die VM zu übergeben, die an erwarteten Pfaden gespeichert werden:
- In **Windows** werden benutzerspezifische Daten in `%SYSTEMDRIVE%\AzureData\CustomData.bin` als Binärdatei abgelegt und nicht verarbeitet.
- In **Linux** wurden sie in `/var/lib/waagent/ovf-env.xml` gespeichert und jetzt werden sie in `/var/lib/waagent/CustomData/ovf-env.xml` gespeichert.
- **Linux-Agent**: Er verarbeitet benutzerspezifische Daten standardmäßig nicht, ein benutzerdefiniertes Image mit aktivierten Daten ist erforderlich.
- **cloud-init:** Standardmäßig verarbeitet es benutzerspezifische Daten, und diese Daten können in [**verschiedenen Formaten**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html) vorliegen. Es könnte ein Skript einfach ausführen, indem man nur das Skript in den benutzerspezifischen Daten sendet.
- Ich habe versucht, dass sowohl Ubuntu als auch Debian das Skript ausführen, das Sie hier eingeben.
- Ich habe versucht, dass sowohl Ubuntu als auch Debian das Skript ausführen, das Sie hier platzieren.
- Es ist auch nicht erforderlich, Benutzerdaten zu aktivieren, damit dies ausgeführt wird.
```bash
#!/bin/sh
@@ -739,7 +739,7 @@ echo "Hello World" > /var/tmp/output.txt
```
### **Befehl ausführen**
Dies ist der grundlegendste Mechanismus, den Azure bereitstellt, um **willkürliche Befehle in VMs auszuführen**. Die benötigte Berechtigung ist `Microsoft.Compute/virtualMachines/runCommand/action`.
Dies ist der grundlegendste Mechanismus, den Azure bereitstellt, um **willkürliche Befehle in VMs auszuführen**. Die erforderliche Berechtigung ist `Microsoft.Compute/virtualMachines/runCommand/action`.
{{#tabs }}
{{#tab name="Linux" }}
@@ -793,7 +793,7 @@ Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt
## Unauthentifizierter Zugriff
{{#ref}}
../../az-unauthenticated-enum-and-initial-entry/az-vms-unath.md
../../az-unauthenticated-enum-and-initial-entry/az-vms-unauth.md
{{#endref}}
## Post-Exploitation