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
|
||||
|
||||
### 基本情報
|
||||
### Basic Information
|
||||
|
||||
Amazon **Elastic Container Services**(ECS)は、**クラウドでコンテナ化されたアプリケーションをホストするためのプラットフォーム**を提供します。ECSには、**EC2**インスタンスタイプと**サーバーレス**オプションである**Fargate**の2つの**デプロイメント**方法があります。このサービスは、**クラウドでコンテナを実行するのを非常に簡単かつストレスフリーにします**。
|
||||
Amazon **Elastic Container Services** or ECS は、**クラウド上でコンテナ化されたアプリケーションをホストする**ためのプラットフォームを提供します。ECS には 2 つの**デプロイ**方式があり、**EC2** インスタンスタイプと、**serverless** オプションの **Fargate** があります。このサービスにより、**クラウド上でコンテナを非常に簡単かつストレスなく実行**できます。
|
||||
|
||||
ECSは、以下の3つのビルディングブロックを使用して動作します:**クラスター**、**サービス**、および**タスク定義**。
|
||||
ECS は、次の 3 つの構成要素で動作します: **Clusters**、**Services**、および **Task Definitions**。
|
||||
|
||||
- **クラスター**は、**クラウドで実行されているコンテナのグループ**です。前述のように、コンテナにはEC2とFargateの2つの起動タイプがあります。AWSは、**EC2**起動タイプを「顧客が「自分の」コンテナ化されたアプリケーションを、顧客が**管理する**Amazon EC2インスタンスのクラスターで実行できるようにする」と定義しています。**Fargate**は似ており、「**バックエンドインフラストラクチャをプロビジョニングおよび管理する必要なく**、コンテナ化されたアプリケーションを実行できる」と定義されています。
|
||||
- **サービス**はクラスター内に作成され、**タスクを実行する**責任があります。サービス定義内では、**実行するタスクの数、自動スケーリング、キャパシティプロバイダー(Fargate/EC2/External)、** **ネットワーキング**情報(VPC、サブネット、セキュリティグループなど)を定義します。
|
||||
- **アプリケーションの種類は2つ**あります:
|
||||
- **サービス**:停止および再起動可能な長時間実行される計算作業を処理するタスクのグループ。例えば、ウェブアプリケーション。
|
||||
- **タスク**:実行されて終了するスタンドアロンのタスク。例えば、バッチジョブ。
|
||||
- サービスアプリケーションの中には、**2種類のサービススケジューラー**があります:
|
||||
- [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html):レプリカスケジューリング戦略は、クラスター全体で**希望する数**のタスクを配置および**維持**します。何らかの理由でタスクがシャットダウンした場合、新しいタスクが同じまたは異なるノードで起動されます。
|
||||
- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html):必要な要件を持つ各アクティブコンテナインスタンスに正確に1つのタスクをデプロイします。希望するタスクの数、タスク配置戦略、またはサービス自動スケーリングポリシーを指定する必要はありません。
|
||||
- **タスク定義**は、**実行されるコンテナを定義する**責任があります。また、**ポートマッピング**、**環境変数**、Dockerの**エントリポイント**など、コンテナに設定されるさまざまなパラメータも含まれます。
|
||||
- **機密情報のために環境変数を確認してください**!
|
||||
- **Clusters** は、クラウド上で実行されている**コンテナのグループ**です。前述のとおり、コンテナの起動タイプには EC2 と Fargate の 2 種類があります。AWS は **EC2** 起動タイプを、顧客が「**管理**する Amazon EC2 インスタンスの cluster 上でコンテナ化されたアプリケーションを実行する」ことを可能にするものと定義しています。**Fargate** も同様で、「バックエンドインフラを**プロビジョニングおよび管理する必要なく**、コンテナ化されたアプリケーションを実行できる」ものと定義されています。
|
||||
- **Services** は cluster 内で作成され、**task の実行**を担当します。Service 定義の中では、**実行する task 数、自動スケーリング、capacity provider (Fargate/EC2/External)、** VPC、subnets、security groups などの**networking** 情報を定義します。
|
||||
- **2 種類のアプリケーション**があります:
|
||||
- **Service**: 停止と再起動が可能な長時間実行の計算処理を扱う task のグループ。たとえば web application。
|
||||
- **Task**: 実行して終了する standalone な task。たとえば batch job。
|
||||
- Service アプリケーションには、**2 種類の service schedulers** があります:
|
||||
- [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): replica scheduling strategy は、cluster 全体に task を配置し、**希望する数を維持**します。何らかの理由で task が停止した場合、同じ node または別の node で新しい task が起動します。
|
||||
- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): 必要な要件を満たすすべての active container instance に、ちょうど 1 つの task を配置します。desired number of tasks、task placement strategy、Service Auto Scaling policies を指定する必要はありません。
|
||||
- **Task Definitions** は、**どの container を実行するか**と、container に対して設定される各種パラメータ、たとえば host との **port mappings**、**env variables**、Docker **entrypoint** などを定義します...
|
||||
- **env variables に sensitive info がないか確認**してください!
|
||||
|
||||
### タスク定義における機密データ
|
||||
### Sensitive Data In Task Definitions
|
||||
|
||||
タスク定義は、**ECSで実行される実際のコンテナを構成する**責任があります。タスク定義はコンテナの実行方法を定義するため、多くの情報が含まれています。
|
||||
Task definitions は、ECS で実際に実行される **containers を設定**する役割を持ちます。Task definitions が container の動作を定義するため、そこには非常に多くの情報が含まれている可能性があります。
|
||||
|
||||
PacuはECSを列挙できます(list-clusters、list-container-instances、list-services、list-task-definitions)、またタスク定義をダンプすることもできます。
|
||||
Pacu は ECS を列挙できます (list-clusters, list-container-instances, list-services, list-task-definitions)。また、task definitions をダンプすることもできます。
|
||||
|
||||
### 列挙
|
||||
### 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>
|
||||
```
|
||||
### 認証されていないアクセス
|
||||
### ECS Agent State DB (`agent.db`) を使った On-Host Enumeration
|
||||
|
||||
**shell access** を ECS container instance 上で持っている場合、または **`/var/lib/ecs` の host bind-mount を持つ container から escaped した場合**(tasks が privileged で実行されている、または `volumesFrom` により host data dir が露出している場合によくある misconfiguration)、ECS agent は disk 上に `agent.db` を残します。これは **AWS API call なし**、**IAM permission なし**、**CloudTrail を trigger せずに** 読み取れます。
|
||||
```
|
||||
/var/lib/ecs/data/agent.db
|
||||
```
|
||||
(または、ホストが `/host` にマウントされている container から読む場合は、`/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
|
||||
```
|
||||
#### 何を回収できるか
|
||||
|
||||
クラスターの経過時間と workload churn によっては、`agent.db` に対する `strings` で通常以下が得られます。
|
||||
|
||||
- **Task と execution の IAM role ARN**(`taskRoleArn`, `executionRoleArn`): agent が実行した全 task 分が含まれます。`[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`)を使った credential 取得の対象として有用です。
|
||||
- **完全な task definition** — image URI(多くは private ECR repo)、command、entrypoint、port mappings、mount points、log configuration、そして **plaintext environment variables**。これらには database URL、API token、third-party secret が頻繁に含まれます。
|
||||
- **Secrets reference** — `secretOptions` と `secrets` ブロックで、SSM Parameter Store の path や Secrets Manager の ARN を指しています(pivot list として非常に有用です)。
|
||||
- **Container instance ARN、cluster ARN、registration token** — API call なしで cluster 名と account/region の文脈を確認できます。
|
||||
- **ENI metadata** — `awsvpc` mode で割り当てられた private IP、MAC address、subnet ID、security group ID(lateral movement の計画に有用です)。
|
||||
- **Image pull credential** — task definition が `repositoryCredentials` を使う場合、参照されている Secrets Manager ARN がここにあります。古い agent では private-registry auth blob(`ECS_ENGINE_AUTH_DATA`)もキャッシュされていることがあります。
|
||||
- **最近停止した task container** — name、ID、exit code、label を含み、対応する `aws ecs describe-tasks` call で API response から消えた後でも残っていることがあります。
|
||||
|
||||
### Unauthenticated Access
|
||||
|
||||
{{#ref}}
|
||||
../aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum/README.md
|
||||
{{#endref}}
|
||||
|
||||
### 権限昇格
|
||||
### Privesc
|
||||
|
||||
次のページでは、**ECSの権限を悪用して権限を昇格させる方法**を確認できます:
|
||||
次のページでは、**ECS permissions を悪用して privilege を escalate する方法**を確認できます:
|
||||
|
||||
{{#ref}}
|
||||
../aws-privilege-escalation/aws-ecs-privesc/README.md
|
||||
{{#endref}}
|
||||
|
||||
### ポストエクスプロイト
|
||||
### Post Exploitation
|
||||
|
||||
{{#ref}}
|
||||
../aws-post-exploitation/aws-ecs-post-exploitation/README.md
|
||||
{{#endref}}
|
||||
|
||||
### 永続性
|
||||
### Persistence
|
||||
|
||||
{{#ref}}
|
||||
../aws-persistence/aws-ecs-persistence/README.md
|
||||
|
||||
Reference in New Issue
Block a user