# AWS - ECS Enum

{{#include ../../../banners/hacktricks-training.md}}

## ECS

### Informations de base

Amazon **Elastic Container Services** ou ECS fournit une plateforme pour **héberger des applications conteneurisées dans le cloud**. ECS a deux **méthodes de déploiement**, le type d'instance **EC2** et une option **sans serveur**, **Fargate**. Le service **facilite grandement l'exécution de conteneurs dans le cloud**.

ECS fonctionne en utilisant les trois blocs de construction suivants : **Clusters**, **Services** et **Définitions de tâches**.

- **Clusters** sont des **groupes de conteneurs** qui fonctionnent dans le cloud. Comme mentionné précédemment, il existe deux types de lancement pour les conteneurs, EC2 et Fargate. AWS définit le type de lancement **EC2** comme permettant aux clients “d'exécuter \[leurs] applications conteneurisées sur un cluster d'instances Amazon EC2 que \[ils] **gèrent**”. **Fargate** est similaire et est défini comme “\[permettant] d'exécuter vos applications conteneurisées **sans avoir besoin de provisionner et de gérer** l'infrastructure backend”.
- **Services** sont créés à l'intérieur d'un cluster et sont responsables de **l'exécution des tâches**. Dans une définition de service, **vous définissez le nombre de tâches à exécuter, l'auto-scaling, le fournisseur de capacité (Fargate/EC2/Externe),** les informations de **réseau** telles que les VPC, sous-réseaux et groupes de sécurité.
- Il y a **2 types d'applications** :
- **Service** : Un groupe de tâches gérant un travail informatique de longue durée qui peut être arrêté et redémarré. Par exemple, une application web.
- **Tâche** : Une tâche autonome qui s'exécute et se termine. Par exemple, un travail par lots.
- Parmi les applications de service, il y a **2 types de planificateurs de service** :
- [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html) : La stratégie de planification des répliques place et **maintient le nombre désiré** de tâches dans votre cluster. Si pour une raison quelconque une tâche s'arrête, une nouvelle est lancée dans le même ou un autre nœud.
- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html) : Déploie exactement une tâche sur chaque instance de conteneur active qui a les exigences nécessaires. Il n'est pas nécessaire de spécifier un nombre désiré de tâches, une stratégie de placement de tâches, ou d'utiliser des politiques d'auto-scaling de service.
- **Définitions de tâches** sont responsables de **définir quels conteneurs seront exécutés** et les divers paramètres qui seront configurés avec les conteneurs tels que **mappages de ports** avec l'hôte, **variables d'environnement**, Docker **entrypoint**...
- Vérifiez **les variables d'environnement pour des informations sensibles** !

### Données sensibles dans les définitions de tâches

Les définitions de tâches sont responsables de **configurer les conteneurs réels qui seront exécutés dans ECS**. Puisque les définitions de tâches définissent comment les conteneurs fonctionneront, une pléthore d'informations peut y être trouvée.

Pacu peut énumérer ECS (list-clusters, list-container-instances, list-services, list-task-definitions), il peut également extraire les définitions de tâches.

### Énumération
```bash
# Clusters info
aws ecs list-clusters
aws ecs describe-clusters --clusters <cluster>

# Container instances
## An Amazon ECS container instance is an Amazon EC2 instance that is running the Amazon ECS container agent and has been registered into an Amazon ECS cluster.
aws ecs list-container-instances --cluster <cluster>
aws ecs describe-container-instances --cluster <cluster> --container-instances <container_instance_arn>

# Services info
aws ecs list-services --cluster <cluster>
aws ecs describe-services --cluster <cluster> --services <services>
aws ecs describe-task-sets --cluster <cluster> --service <service>

# Task definitions
aws ecs list-task-definition-families
aws ecs list-task-definitions
aws ecs list-tasks --cluster <cluster>
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>
```
### Accès non authentifié

{{#ref}}
../aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md
{{#endref}}

### Privesc

Dans la page suivante, vous pouvez vérifier comment **abuser des permissions ECS pour escalader les privilèges** :

{{#ref}}
../aws-privilege-escalation/aws-ecs-privesc.md
{{#endref}}

### Post Exploitation

{{#ref}}
../aws-post-exploitation/aws-ecs-post-exploitation.md
{{#endref}}

### Persistance

{{#ref}}
../aws-persistence/aws-ecs-persistence.md
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}
