mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-services/aws-ecs-
This commit is contained in:
@@ -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ış),** **ağ** 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, container’lar 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 VPC’s, subnets ve security groups’u tanımlarsınız.
|
||||
- **2 tür application** vardır:
|
||||
- **Service**: Uzun süre çalışan, durdurulup yeniden başlatılabilen bir computing work’i yöneten task grubudur. Örneğin bir web application.
|
||||
- **Task**: Çalışıp sonlanan bağımsız bir task’tı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 task’i 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 container’ların çalışacağını** ve container’larla 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 container’ları yapılandırmaktan** sorumludur. Task definitions container’ları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 ECS’yi 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 container’dan **escape ettiğinizde** (task’ler privileged çalıştığında veya `volumesFrom` host data dir’i 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
|
||||
|
||||
Reference in New Issue
Block a user