Translated ['', 'src/pentesting-cloud/aws-security/aws-services/aws-ecs-

This commit is contained in:
Translator
2026-05-03 08:46:57 +00:00
parent f99231a940
commit 5f3e8d89c3
@@ -4,30 +4,30 @@
## ECS
### Podstawowe informacje
### Basic Information
Amazon **Elastic Container Services** lub ECS zapewnia platformę do **hostowania aplikacji kontenerowych w chmurze**. ECS ma dwie **metody wdrożenia**, typ instancji **EC2** oraz opcję **serverless**, **Fargate**. Usługa **umożliwia łatwe i bezproblemowe uruchamianie kontenerów w chmurze**.
Amazon **Elastic Container Services** lub ECS zapewnia platformę do **hostowania aplikacji kontenerowych w cloud**. ECS ma dwa **deployment** methods, typ **EC2** i opcję **serverless**, **Fargate**. Ta usługa **bardzo ułatwia uruchamianie kontenerów w cloud i sprawia, że jest to bezbolesne**.
ECS działa na podstawie trzech podstawowych elementów: **Klasterów**, **Usług** i **Definicji zadań**.
ECS działa, używając następujących trzech building blocks: **Clusters**, **Services** i **Task Definitions**.
- **Klastry** to **grupy kontenerów**, które działają w chmurze. Jak wcześniej wspomniano, istnieją dwa typy uruchamiania kontenerów, EC2 i Fargate. AWS definiuje typ uruchamiania **EC2** jako umożliwiający klientom „uruchamianie \[ich\] aplikacji kontenerowych na klastrze instancji Amazon EC2, które \[oni\] **zarządzają**”. **Fargate** jest podobny i definiowany jest jako „\[umożliwiający\] uruchamianie aplikacji kontenerowych **bez potrzeby provisionowania i zarządzania** infrastrukturą zaplecza”.
- **Usługi** są tworzone wewnątrz klastra i odpowiedzialne za **uruchamianie zadań**. W definicji usługi **definiujesz liczbę zadań do uruchomienia, automatyczne skalowanie, dostawcę pojemności (Fargate/EC2/Zewnętrzny),** **informacje o sieci** takie jak VPC, podsieci i grupy zabezpieczeń.
- Istnieją **2 typy aplikacji**:
- **Usługa**: Grupa zadań obsługujących długoterminową pracę obliczeniową, którą można zatrzymać i wznowić. Na przykład aplikacja internetowa.
- **Zadanie**: Samodzielne zadanie, które działa i kończy się. Na przykład zadanie wsadowe.
- Wśród aplikacji usługowych istnieją **2 typy harmonogramów usług**:
- [**REPLIKA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Strategia harmonogramu repliki umieszcza i **utrzymuje pożądaną liczbę** zadań w całym klastrze. Jeśli z jakiegoś powodu zadanie zostanie zamknięte, uruchamiane jest nowe w tym samym lub innym węźle.
- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Uruchamia dokładnie jedno zadanie na każdej aktywnej instancji kontenera, która ma wymagane wymagania. Nie ma potrzeby określania pożądanej liczby zadań, strategii umieszczania zadań ani korzystania z polityk automatycznego skalowania usług.
- **Definicje zadań** są odpowiedzialne za **definiowanie, jakie kontenery będą uruchamiane** oraz różne parametry, które będą konfigurowane z kontenerami, takie jak **mapowania portów** z hostem, **zmienne środowiskowe**, Docker **entrypoint**...
- Sprawdź **zmienne środowiskowe pod kątem wrażliwych informacji**!
- **Clusters** to **grupy kontenerów** działających w cloud. Jak wspomniano wcześniej, istnieją dwa launch types dla kontenerów, EC2 i Fargate. AWS definiuje launch type **EC2** jako pozwalający klientom „uruchamiać \[their] aplikacje kontenerowe na klastrze instancji Amazon EC2, którymi \[they] **manage**”. **Fargate** jest podobny i jest definiowany jako „\[allowing] you uruchamiać aplikacje kontenerowe **bez potrzeby provision i manage** infrastruktury backendowej”.
- **Services** są tworzone wewnątrz klastra i odpowiadają za **uruchamianie tasks**. W definicji usługi **określasz liczbę tasks do uruchomienia, auto scaling, capacity provider (Fargate/EC2/External),** informacje **networking** takie jak VPCs, subnets i security groups.
- Istnieją **2 types of applications**:
- **Service**: Grupa tasks obsługująca długotrwałą pracę obliczeniową, którą można zatrzymać i uruchomić ponownie. Na przykład aplikacja webowa.
- **Task**: Samodzielne zadanie, które uruchamia się i kończy. Na przykład job wsadowy.
- Wśród aplikacji service istnieją **2 types of service schedulers**:
- [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Strategia planowania replica rozmieszcza i **utrzymuje wymaganą liczbę** tasks w całym klastrze. Jeśli z jakiegoś powodu task zostanie wyłączony, nowy jest uruchamiany na tym samym lub innym node.
- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Wdraża dokładnie jeden task na każdej aktywnej instancji kontenera, która ma wymagane requirements. Nie ma potrzeby określania wymaganej liczby tasks, strategii rozmieszczenia tasków ani używania polityk Service Auto Scaling.
- **Task Definitions** odpowiadają za **określanie, które kontenery będą uruchamiane** oraz różnych parametrów, które będą konfigurowane dla kontenerów, takich jak **port mappings** z hostem, **env variables**, Docker **entrypoint**...
- Sprawdź **env variables pod kątem sensitive info**!
### Wrażliwe dane w definicjach zadań
### Sensitive Data In Task Definitions
Definicje zadań są odpowiedzialne za **konfigurowanie rzeczywistych kontenerów, które będą działać w ECS**. Ponieważ definicje zadań definiują, jak będą działać kontenery, można znaleźć w nich wiele informacji.
Task definitions odpowiadają za **konfigurowanie rzeczywistych kontenerów, które będą uruchamiane w ECS**. Ponieważ task definitions określają, jak kontenery będą działać, można w nich znaleźć mnóstwo informacji.
Pacu może enumerować ECS (list-clusters, list-container-instances, list-services, list-task-definitions), może również zrzucać definicje zadań.
Pacu can enumerate ECS (list-clusters, list-container-instances, list-services, list-task-definitions), it can also dump task definitions.
### Enumeracja
### Enumeration
```bash
# Clusters info
aws ecs list-clusters
@@ -51,27 +51,60 @@ 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>
```
### Nieautoryzowany dostęp
### Enumeracja na hoście przez ECS Agent State DB (`agent.db`)
Gdy masz **shell access na ECS container instance** , albo **uciekłeś z kontenera z host bind-mount `/var/lib/ecs`** (częsta misconfiguration, gdy taski działają privileged lub z `volumesFrom` wystawiającym host data dir), ECS agent оставляет `agent.db` na dysku, który można odczytać **bez żadnego AWS API call**, **bez żadnych IAM permission** i **bez uruchamiania CloudTrail**.
```
/var/lib/ecs/data/agent.db
```
(lub podczas odczytu z kontenera, który ma zamontowany host w `/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
```
#### Co możesz odzyskać
W zależności od wieku klastra i churn workload, `strings` na `agent.db` zwykle zwraca:
- **ARN-y ról IAM task i execution** (`taskRoleArn`, `executionRoleArn`) dla każdego task, który uruchomił agent — przydatne cele do [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`).
- **Pełne definicje task** — URI obrazów (często prywatne repozytoria ECR), command, entrypoint, port mappings, mount points, log configuration oraz **plaintext environment variables**, które często zawierają database URLs, API tokens i sekrety usług zewnętrznych.
- **Odwołania do secrets** — bloki `secretOptions` i `secrets` wskazujące ścieżki w SSM Parameter Store oraz ARN-y Secrets Manager (świetna lista do pivot).
- **Container instance ARN, cluster ARN i registration token** — potwierdza nazwę klastra oraz kontekst account/region bez wywoływania API.
- **Metadane ENI** — prywatne IP, adresy MAC, subnet ID i security group ID przypisane w trybie `awsvpc` (przydatne do planowania lateral movement).
- **Poświadczenia do pobierania image** — gdy task definition używa `repositoryCredentials`, odpowiedni ARN Secrets Manager jest tutaj; na starszych agentach bloby uwierzytelnienia do prywatnych registry (`ECS_ENGINE_AUTH_DATA`) mogą być też cache'owane.
- **Ostatnio zatrzymane kontenery task** — w tym nazwy, ID, kody wyjścia i etykiety, czasem długo po tym, jak odpowiadające im wywołanie `aws ecs describe-tasks` zostało już usunięte z odpowiedzi API.
### Unauthenticated Access
{{#ref}}
../aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md
{{#endref}}
### Podwyższenie uprawnień
### Privesc
Na poniższej stronie możesz sprawdzić, jak **wykorzystać uprawnienia ECS do podwyższenia uprawnień**:
Na poniższej stronie możesz sprawdzić, jak **abuse ECS permissions to escalate privileges**:
{{#ref}}
../aws-privilege-escalation/aws-ecs-privesc/README.md
{{#endref}}
### Po eksploatacji
### Post Exploitation
{{#ref}}
../aws-post-exploitation/aws-ecs-post-exploitation/README.md
{{#endref}}
### Utrzymywanie dostępu
### Persistence
{{#ref}}
../aws-persistence/aws-ecs-persistence/README.md