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

This commit is contained in:
Translator
2026-05-03 08:46:59 +00:00
parent 5a36fd3aed
commit 85824c31f9
@@ -4,30 +4,30 @@
## ECS
### Temel Bilgiler
### Basic Information
Amazon **Elastic Container Services** veya ECS, **konteynerleştirilmiş uygulamaları bulutta barındırmak için bir platform** sağlar. ECS'nin iki **dağıtım** yöntemi vardır: **EC2** örnek türü ve **sunucusuz** seçenek olan **Fargate**. Bu hizmet, **bulutta konteyner çalıştırmayı çok kolay ve sorunsuz hale getirir**.
Amazon **Elastic Container Services** veya ECS, **bulutta containerized applications barındırmak** için bir platform sağlar. ECS'nin iki **deployment** yöntemi vardır: **EC2** instance type ve bir **serverless** seçenek olan **Fargate**. Bu servis, bulutta container çalıştırmayı çok kolay ve sorunsuz hale getirir.
ECS, aşağıdaki üç yapı taşını kullanarak çalışır: **Küme**, **Hizmetler** ve **Görev Tanımları**.
ECS, aşağıdaki üç yapı taşıyla çalışır: **Clusters**, **Services** ve **Task Definitions**.
- **Kümeler**, bulutta çalışan **konteyner gruplarıdır**. Daha önce belirtildiği gibi, konteynerler için iki başlatma türü vardır: EC2 ve Fargate. AWS, **EC2** başlatma türünü, müşterilerin “**yönetilen** bir Amazon EC2 örnekleri kümesinde \[konteynerleştirilmiş uygulamalarını] çalıştırmalarına izin veren bir tür olarak tanımlar. **Fargate** benzer şekilde tanımlanır ve “\[konteynerleştirilmiş uygulamalarınızı **arka uç altyapısını sağlama ve yönetme ihtiyacı olmadan** çalıştırmanıza] izin verir” şeklindedir.
- **Hizmetler**, bir küme içinde oluşturulur ve **görevleri çalıştırmaktan** sorumludur. Bir hizmet tanımı içinde **çalıştırılacak görev sayısını, otomatik ölçeklendirmeyi, kapasite sağlayıcısını (Fargate/EC2/Dış),** **** bilgilerini, VPC'ler, alt ağlar ve güvenlik grupları gibi tanımlarsınız.
- **2 tür uygulama** vardır:
- **Hizmet**: Durdurulup yeniden başlatılabilen uzun süreli bir hesaplama işini yöneten görevler grubudur. Örneğin, bir web uygulaması.
- **Görev**: Çalışan ve sona eren bağımsız bir görevdir. Örneğin, bir toplu iş.
- Hizmet uygulamaları arasında **2 tür hizmet zamanlayıcı** vardır:
- [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Replica zamanlama stratejisi, kümeniz genelinde **istenen görev sayısını** yerleştirir ve **korur**. Eğer bir görev herhangi bir nedenle kapatılırsa, aynı veya farklı bir düğümde yeni bir görev başlatılır.
- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Gerekli gereksinimlere sahip her aktif konteyner örneğinde tam olarak bir görev dağıtır. İstenen görev sayısını, görev yerleştirme stratejisini belirtmeye veya Hizmet Otomatik Ölçeklendirme politikalarını kullanmaya gerek yoktur.
- **Görev Tanımları**, **çalışacak konteynerlerin ne olacağını tanımlamaktan** sorumludur ve konteynerlerle yapılandırılacak çeşitli parametreleri içerir, örneğin **port eşlemeleri**, **env değişkenleri**, Docker **giriş noktası**...
- Hassas bilgiler için **env değişkenlerini kontrol edin**!
- **Clusters**, bulutta çalışan **container gruplarıdır**. Daha önce de belirtildiği gibi, containerlar için iki launch type vardır: EC2 ve Fargate. AWS, **EC2** launch type’ını müşterilerin “\[\] containerized applications on a cluster of Amazon EC2 instances that \[they\] **manage** çalıştırmasına izin veren bir yapı olarak tanımlar. **Fargate** benzerdir ve “\[\] backend infrastructure’ı **provision etme ve manage etme gereği olmadan** containerized applications çalıştırmanıza izin verir” şeklinde tanımlanır.
- **Services**, bir cluster içinde oluşturulur ve **tasks çalıştırmaktan** sorumludur. Bir service tanımı içinde **çalıştırılacak task sayısını, auto scaling, capacity provider (Fargate/EC2/External),** **networking** bilgilerini; örneğin VPCs, subnets ve security groupsu tanımlarsınız.
- **2 tür application** vardır:
- **Service**: Uzun süre çalışan, durdurulup yeniden başlatılabilen bir computing worki yöneten task grubudur. Örneğin bir web application.
- **Task**: Çalışıp sonlanan bağımsız bir tasktır. Örneğin bir batch job.
- Service applications arasında **2 tür service scheduler** vardır:
- [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Replica scheduling strategy, cluster genelinde istenen sayıda taski yerleştirir ve **sürdürür**. Herhangi bir nedenle bir task kapanırsa, aynı veya farklı bir node üzerinde yenisi başlatılır.
- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Gerekli şartları karşılayan her aktif container instance üzerinde tam olarak bir task dağıtır. İstenen task sayısını belirtmeye, task placement strategy tanımlamaya veya Service Auto Scaling policies kullanmaya gerek yoktur.
- **Task Definitions**, **hangi containerların çalışacağını** ve containerlarla yapılandırılacak çeşitli parametreleri; örneğin host ile **port mappings**, **env variables**, Docker **entrypoint**... tanımlar.
- **Hassas bilgi için env variables** kontrol edin!
### Görev Tanımlarında Hassas Veriler
### Sensitive Data In Task Definitions
Görev tanımları, **ECS'de çalışacak gerçek konteynerleri yapılandırmaktan** sorumludur. Görev tanımları, konteynerlerin nasıl çalışacağını tanımladığından, içinde çok sayıda bilgi bulunabilir.
Task definitions, ECS içinde **gerçekte çalışacak containerları yapılandırmaktan** sorumludur. Task definitions containerların nasıl çalışacağını tanımladığı için, içinde çok sayıda bilgi bulunabilir.
Pacu, ECS'yi listeleyebilir (list-clusters, list-container-instances, list-services, list-task-definitions), ayrıca görev tanımlarını da dökebilir.
Pacu ECSyi enumerate edebilir (list-clusters, list-container-instances, list-services, list-task-definitions), ayrıca task definitions dump edebilir.
### Sayım
### 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>
```
### Kimlik Doğrulama Olmadan Erişim
### ECS Agent State DB (`agent.db`) üzerinden On-Host Enumeration
Bir **ECS container instance** üzerinde **shell access** sahibi olduğunuzda, ya da **`/var/lib/ecs` için host bind-mount** ile bir containerdan **escape ettiğinizde** (taskler privileged çalıştığında veya `volumesFrom` host data diri expose ettiğinde görülen yaygın bir misconfiguration), ECS agent diskte `agent.db` bırakır; bu dosya **hiçbir AWS API call olmadan**, **hiçbir IAM permission olmadan** ve **CloudTrail tetiklemeden** okunabilir.
```
/var/lib/ecs/data/agent.db
```
(veya, host'un `/host` altında mount edildiği bir container'dan okurken, `/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
```
#### Neleri kurtarabilirsiniz
Cluster'ın yaşı ve workload churn'a bağlı olarak, `agent.db` üzerinde `strings` genellikle şunları verir:
- Her task için agent'ın çalıştırdığı **Task ve execution IAM role ARN'leri** (`taskRoleArn`, `executionRoleArn`) — [task metadata endpoint](https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.html) (`169.254.170.2`) üzerinden credential retrieval için kullanışlı hedefler.
- **Tam task definitions** — image URI'leri (çoğu zaman private ECR repos), command, entrypoint, port mappings, mount points, log configuration ve sık sık database URL'leri, API token'ları ve third-party secret'ları içeren **plaintext environment variables**.
- **Secrets referansları** — SSM Parameter Store yollarına ve Secrets Manager ARN'lerine işaret eden `secretOptions` ve `secrets` blokları (harika pivot listesi).
- **Container instance ARN, cluster ARN ve registration token** — API call olmadan cluster adını ve account/region bağlamını doğrular.
- **ENI metadata** — `awsvpc` modunda atanmış private IP'ler, MAC adresleri, subnet ID'leri ve security group ID'leri (lateral movement planlaması için kullanışlı).
- **Image pull credentials** — task definition `repositoryCredentials` kullanıyorsa, ilgili Secrets Manager ARN burada olur; eski agent'larda private-registry auth blob'ları (`ECS_ENGINE_AUTH_DATA`) da cache'lenmiş olabilir.
- **Yakın zamanda durmuş task container'ları** — isimler, ID'ler, exit code'lar ve label'lar dahil; bazen ilgili `aws ecs describe-tasks` çağrısı API response'tan bunları düşürmüş olduktan çok sonra bile.
### Unauthenticated Access
{{#ref}}
../aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md
{{#endref}}
### Yetki Yükseltme
### Privesc
Aşağıdaki sayfada **ECS izinlerini kötüye kullanarak yetki yükseltme** yöntemini kontrol edebilirsiniz:
Aşağıdaki sayfada **ECS permissions'larını abuse ederek privileges yükseltmeyi** nasıl yapabileceğinizi kontrol edebilirsiniz:
{{#ref}}
../aws-privilege-escalation/aws-ecs-privesc/README.md
{{#endref}}
### Sonrası İstismar
### Post Exploitation
{{#ref}}
../aws-post-exploitation/aws-ecs-post-exploitation/README.md
{{#endref}}
### Süreklilik
### Persistence
{{#ref}}
../aws-persistence/aws-ecs-persistence/README.md