mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-06-12 19:11:44 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-services/aws-ecs-
This commit is contained in:
@@ -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 VPC’s, 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
|
||||
|
||||
Reference in New Issue
Block a user