diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md index e96ca61d3..ade9a054a 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md @@ -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 --tasks ## Look for env vars and secrets used from the task definition aws ecs describe-task-definition --task-definition : ``` -### 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