mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-29 07:00:29 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-services/aws-ecs-
This commit is contained in:
@@ -6,28 +6,28 @@
|
||||
|
||||
### Informazioni di base
|
||||
|
||||
Amazon **Elastic Container Services** o ECS fornisce una piattaforma per **ospitare applicazioni containerizzate nel cloud**. ECS ha due metodi di **distribuzione**, tipo di istanza **EC2** e un'opzione **serverless**, **Fargate**. Il servizio **rende molto facile e senza problemi eseguire container nel cloud**.
|
||||
Amazon **Elastic Container Services** o ECS fornisce una piattaforma per **ospitare applicazioni containerizzate nel cloud**. ECS ha due metodi di **deployment**, il tipo di istanza **EC2** e un'opzione **serverless**, **Fargate**. Il servizio **rende l'esecuzione dei container nel cloud molto facile e senza problemi**.
|
||||
|
||||
ECS opera utilizzando i seguenti tre elementi fondamentali: **Cluster**, **Servizi** e **Definizioni di Task**.
|
||||
ECS opera usando i seguenti tre blocchi fondamentali: **Clusters**, **Services** e **Task Definitions**.
|
||||
|
||||
- **Cluster** sono **gruppi di container** che stanno girando nel cloud. Come già accennato, ci sono due tipi di avvio per i container, EC2 e Fargate. AWS definisce il tipo di avvio **EC2** come che consente ai clienti “di eseguire \[le loro\] applicazioni containerizzate su un cluster di istanze Amazon EC2 che \[essi\] **gestiscono**”. **Fargate** è simile e viene definito come “\[consentendo\] di eseguire le proprie applicazioni containerizzate **senza la necessità di fornire e gestire** l'infrastruttura di backend”.
|
||||
- **Servizi** vengono creati all'interno di un cluster e sono responsabili per **eseguire i task**. All'interno di una definizione di servizio **si definisce il numero di task da eseguire, l'auto scaling, il fornitore di capacità (Fargate/EC2/Esterno),** informazioni di **networking** come VPC, subnet e gruppi di sicurezza.
|
||||
- **Clusters** sono **gruppi di container** che stanno girando nel cloud. Come detto in precedenza, ci sono due launch types per i container, EC2 e Fargate. AWS definisce il launch type **EC2** come quello che permette ai clienti “di eseguire \[le loro] applicazioni containerizzate su un cluster di istanze Amazon EC2 che \[loro] **gestiscono**”. **Fargate** è simile ed è definito come “\[che consente] di eseguire le tue applicazioni containerizzate **senza la necessità di provisionare e gestire** l'infrastruttura backend”.
|
||||
- **Services** vengono creati all'interno di un cluster e sono responsabili di **eseguire i tasks**. All'interno di una definizione di service **definisci il numero di tasks da eseguire, auto scaling, capacity provider (Fargate/EC2/External),** informazioni di **networking** come VPC, subnet e security groups.
|
||||
- Ci sono **2 tipi di applicazioni**:
|
||||
- **Servizio**: Un gruppo di task che gestisce un lavoro di calcolo a lungo termine che può essere interrotto e riavviato. Ad esempio, un'applicazione web.
|
||||
- **Task**: Un task autonomo che viene eseguito e termina. Ad esempio, un lavoro batch.
|
||||
- Tra le applicazioni di servizio, ci sono **2 tipi di pianificatori di servizio**:
|
||||
- [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): La strategia di pianificazione replica posiziona e **mantiene il numero desiderato** di task nel tuo cluster. Se per qualche motivo un task si spegne, ne viene avviato uno nuovo nello stesso o in un nodo diverso.
|
||||
- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Distribuisce esattamente un task su ciascuna istanza di container attiva che ha i requisiti necessari. Non è necessario specificare un numero desiderato di task, una strategia di posizionamento dei task o utilizzare le politiche di Auto Scaling del Servizio.
|
||||
- **Definizioni di Task** sono responsabili per **definire quali container verranno eseguiti** e i vari parametri che verranno configurati con i container come **mappature delle porte** con l'host, **variabili d'ambiente**, **entrypoint** di Docker...
|
||||
- Controlla **le variabili d'ambiente per informazioni sensibili**!
|
||||
- **Service**: Un gruppo di tasks che gestisce un carico di lavoro computazionale a lunga durata che può essere fermato e riavviato. Per esempio, un'applicazione web.
|
||||
- **Task**: Un task autonomo che viene eseguito e termina. Per esempio, un batch job.
|
||||
- Tra le applicazioni di service, ci sono **2 tipi di service schedulers**:
|
||||
- [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): La strategia di scheduling replica posiziona e **mantiene il numero desiderato** di tasks nel tuo cluster. Se per qualche motivo un task si arresta, ne viene avviato uno nuovo nello stesso nodo o in un nodo diverso.
|
||||
- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Distribuisce esattamente un task su ogni container instance attiva che abbia i requisiti necessari. Non è necessario specificare un numero desiderato di tasks, una task placement strategy o usare le policy di Service Auto Scaling.
|
||||
- **Task Definitions** sono responsabili di **definire quali container verranno eseguiti** e i vari parametri che saranno configurati con i container, come **port mappings** con l'host, **env variables**, Docker **entrypoint**...
|
||||
- Controlla le **env variables per info sensibili**!
|
||||
|
||||
### Dati sensibili nelle Definizioni di Task
|
||||
### Dati sensibili nelle Task Definitions
|
||||
|
||||
Le definizioni di task sono responsabili per **configurare i container effettivi che verranno eseguiti in ECS**. Poiché le definizioni di task definiscono come verranno eseguiti i container, una miriade di informazioni può essere trovata al loro interno.
|
||||
Le task definitions sono responsabili di **configurare i container effettivi che verranno eseguiti in ECS**. Poiché le task definitions definiscono come i container verranno eseguiti, al loro interno si può trovare una grande quantità di informazioni.
|
||||
|
||||
Pacu può enumerare ECS (list-clusters, list-container-instances, list-services, list-task-definitions), può anche estrarre le definizioni di task.
|
||||
Pacu può enumerare ECS (list-clusters, list-container-instances, list-services, list-task-definitions), può anche fare il dump delle task definitions.
|
||||
|
||||
### Enumerazione
|
||||
### Enumeration
|
||||
```bash
|
||||
# Clusters info
|
||||
aws ecs list-clusters
|
||||
@@ -51,7 +51,40 @@ aws ecs describe-tasks --cluster <cluster> --tasks <tasks>
|
||||
## Look for env vars and secrets used from the task definition
|
||||
aws ecs describe-task-definition --task-definition <TASK_NAME>:<VERSION>
|
||||
```
|
||||
### Accesso non autenticato
|
||||
### Enumerazione On-Host tramite il database di stato dell'ECS Agent (`agent.db`)
|
||||
|
||||
Quando hai **shell access su un ECS container instance** , oppure hai **escaped da un container con un host bind-mount di `/var/lib/ecs`** (una comune misconfiguration quando i task girano privileged o con `volumesFrom` che espone la directory dati dell'host), l'ECS agent lascia `agent.db` su disco che può essere letto **senza alcuna chiamata alle AWS API**, **senza alcun permesso IAM**, e **senza attivare CloudTrail**.
|
||||
```
|
||||
/var/lib/ecs/data/agent.db
|
||||
```
|
||||
(o, quando si legge da un container che ha l'host montato su `/host`, `/host/var/lib/ecs/data/agent.db`).
|
||||
```bash
|
||||
# Most useful one-liner — dumps everything readable
|
||||
strings /var/lib/ecs/data/agent.db
|
||||
|
||||
# From inside a container with the host mounted at /host
|
||||
strings /host/var/lib/ecs/data/agent.db
|
||||
|
||||
# Filter for the highest-value artefacts
|
||||
strings /var/lib/ecs/data/agent.db | grep -aE 'arn:aws:|AKIA|ASIA|"secret|password|TOKEN|credentials|taskRoleArn|executionRoleArn'
|
||||
|
||||
# Save the outcome from strings for offline analysis
|
||||
strings /host/var/lib/ecs/data/agent.db >> /tmp/agent.txt
|
||||
tr -s '{}[],:"\\' '\n' < /tmp/agent.txt | sed 's/^[[:space:]]*//; s/[[:space:]]*$//' | awk 'NF && length($0)>2 && !/^[0-9.]+$/' | sort -u
|
||||
```
|
||||
#### Cosa puoi recuperare
|
||||
|
||||
A seconda dell'età del cluster e del churn del workload, `strings` su `agent.db` in genere restituisce:
|
||||
|
||||
- **ARN delle IAM role di task ed execution** (`taskRoleArn`, `executionRoleArn`) per ogni task eseguito dall'agent — target utili per [credential retrieval via the task metadata endpoint](https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.html) (`169.254.170.2`).
|
||||
- **Definizioni complete dei task** — image URI (spesso repository ECR private), command, entrypoint, port mappings, mount points, log configuration e **variabili d'ambiente in plaintext** che spesso includono database URL, API token e secret di terze parti.
|
||||
- **Riferimenti ai secret** — blocchi `secretOptions` e `secrets` che puntano a path di SSM Parameter Store e ARN di Secrets Manager (ottima lista di pivot).
|
||||
- **ARN dell'container instance, ARN del cluster e registration token** — conferma il nome del cluster e il contesto account/region senza alcuna API call.
|
||||
- **Metadati ENI** — IP privati, indirizzi MAC, subnet ID e security group ID assegnati in modalità `awsvpc` (utili per pianificare lateral movement).
|
||||
- **Credenziali di image pull** — quando la definizione del task usa `repositoryCredentials`, l'ARN di Secrets Manager referenziato è qui; sugli agent più vecchi anche i blob di auth per private registry (`ECS_ENGINE_AUTH_DATA`) possono essere cached.
|
||||
- **Container di task recentemente fermati** — inclusi nomi, ID, exit code e label, a volte molto dopo che la corrispondente chiamata `aws ecs describe-tasks` li ha rimossi dalla risposta API.
|
||||
|
||||
### Unauthenticated Access
|
||||
|
||||
{{#ref}}
|
||||
../aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md
|
||||
@@ -59,7 +92,7 @@ aws ecs describe-task-definition --task-definition <TASK_NAME>:<VERSION>
|
||||
|
||||
### Privesc
|
||||
|
||||
Nella pagina seguente puoi controllare come **abusare delle autorizzazioni ECS per escalare i privilegi**:
|
||||
Nella pagina seguente puoi vedere come **abuse ECS permissions to escalate privileges**:
|
||||
|
||||
{{#ref}}
|
||||
../aws-privilege-escalation/aws-ecs-privesc/README.md
|
||||
@@ -71,7 +104,7 @@ Nella pagina seguente puoi controllare come **abusare delle autorizzazioni ECS p
|
||||
../aws-post-exploitation/aws-ecs-post-exploitation/README.md
|
||||
{{#endref}}
|
||||
|
||||
### Persistenza
|
||||
### Persistence
|
||||
|
||||
{{#ref}}
|
||||
../aws-persistence/aws-ecs-persistence/README.md
|
||||
|
||||
Reference in New Issue
Block a user