Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-p

This commit is contained in:
Translator
2025-07-24 06:56:33 +00:00
parent 9118754068
commit 5121124ee5
4 changed files with 49 additions and 27 deletions

View File

@@ -230,7 +230,7 @@
- [AWS - SNS Persistence](pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md)
- [AWS - Secrets Manager Persistence](pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md)
- [AWS - SQS Persistence](pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md)
- [AWS - SSM Perssitence](pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md)
- [AWS - SSM Perssitence](pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence.md)
- [AWS - Step Functions Persistence](pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md)
- [AWS - STS Persistence](pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md)
- [AWS - Post Exploitation](pentesting-cloud/aws-security/aws-post-exploitation/README.md)

View File

@@ -12,7 +12,7 @@ Pour plus d'informations, consultez :
### Utilisation de ssm:CreateAssociation pour la persistance
Un attaquant ayant la permission ssm:CreateAssociation peut créer une association de gestion d'état pour exécuter automatiquement des commandes sur des instances EC2 gérées par SSM. Ces associations peuvent être configurées pour s'exécuter à intervalles fixes, les rendant adaptées à une persistance de type backdoor sans sessions interactives.
Un attaquant ayant la permission **`ssm:CreateAssociation`** peut créer une association de gestion d'état pour exécuter automatiquement des commandes sur des instances EC2 gérées par SSM. Ces associations peuvent être configurées pour s'exécuter à intervalles réguliers, les rendant adaptées à une persistance de type backdoor sans sessions interactives.
```bash
aws ssm create-association \
--name SSM-Document-Name \

View File

@@ -45,14 +45,14 @@ aws ssm describe-sessions --state Active
aws ssm start-session --target "$INSTANCE_ID"
```
> [!CAUTION]
> Pour démarrer une session, vous devez avoir le **SessionManagerPlugin** installé : [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html)
> Pour commencer une session, vous devez avoir le **SessionManagerPlugin** installé : [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html)
**Impact potentiel :** Privesc direct vers les rôles IAM EC2 attachés aux instances en cours d'exécution avec des agents SSM en cours d'exécution.
**Impact potentiel :** Privesc direct aux rôles IAM EC2 attachés aux instances en cours d'exécution avec des agents SSM en cours d'exécution.
#### Privesc vers ECS
#### Privesc à ECS
Lorsque les **tâches ECS** s'exécutent avec **`ExecuteCommand` activé**, les utilisateurs ayant suffisamment de permissions peuvent utiliser `ecs execute-command` pour **exécuter une commande** à l'intérieur du conteneur.\
Selon [**la documentation**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/), cela se fait en créant un canal sécurisé entre l'appareil que vous utilisez pour initier la commande “_exec_“ et le conteneur cible avec SSM Session Manager. (Plugin SSM Session Manager nécessaire pour que cela fonctionne)\
Selon [**la documentation**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/), cela se fait en créant un canal sécurisé entre l'appareil que vous utilisez pour initier la commande “_exec_“ et le conteneur cible avec SSM Session Manager. (Le plugin SSM Session Manager est nécessaire pour que cela fonctionne)\
Par conséquent, les utilisateurs avec `ssm:StartSession` pourront **obtenir un shell à l'intérieur des tâches ECS** avec cette option activée en exécutant simplement :
```bash
aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID"
@@ -63,7 +63,7 @@ aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID"
### `ssm:ResumeSession`
Un attaquant ayant la permission **`ssm:ResumeSession`** peut re-**démarrer une session semblable à SSH dans des instances** exécutant l'agent Amazon SSM avec un état de session SSM **déconnecté** et **compromettre le rôle IAM** s'exécutant à l'intérieur.
Un attaquant ayant la permission **`ssm:ResumeSession`** peut re-**démarrer une session similaire à SSH dans des instances** exécutant l'agent Amazon SSM avec un état de session SSM **déconnecté** et **compromettre le rôle IAM** s'exécutant à l'intérieur.
```bash
# Check for configured instances
aws ssm describe-sessions
@@ -72,11 +72,11 @@ aws ssm describe-sessions
aws ssm resume-session \
--session-id Mary-Major-07a16060613c408b5
```
**Impact potentiel :** Privesc direct aux rôles IAM EC2 attachés aux instances en cours d'exécution avec des agents SSM en cours d'exécution et des sessions déconnectées.
**Impact potentiel :** Privesc direct vers les rôles IAM EC2 attachés aux instances en cours d'exécution avec des agents SSM en cours d'exécution et des sessions déconnectées.
### `ssm:DescribeParameters`, (`ssm:GetParameter` | `ssm:GetParameters`)
Un attaquant avec les permissions mentionnées va pouvoir lister les **paramètres SSM** et **les lire en texte clair**. Dans ces paramètres, vous pouvez fréquemment **trouver des informations sensibles** telles que des clés SSH ou des clés API.
Un attaquant avec les permissions mentionnées sera capable de lister les **paramètres SSM** et **de les lire en texte clair**. Dans ces paramètres, vous pouvez fréquemment **trouver des informations sensibles** telles que des clés SSH ou des clés API.
```bash
aws ssm describe-parameters
# Suppose that you found a parameter called "id_rsa"
@@ -95,7 +95,7 @@ aws ssm list-commands
### `ssm:GetCommandInvocation`, (`ssm:ListCommandInvocations` | `ssm:ListCommands`)
Un attaquant avec ces autorisations peut lister toutes les **commandes** envoyées et **lire la sortie** générée en espérant trouver des **informations sensibles** dessus.
Un attaquant avec ces autorisations peut lister toutes les **commandes** envoyées et **lire la sortie** générée, espérant trouver des **informations sensibles** à ce sujet.
```bash
# You can use any of both options to get the command-id and instance id
aws ssm list-commands
@@ -105,6 +105,20 @@ aws ssm get-command-invocation --command-id <cmd_id> --instance-id <i_id>
```
**Impact potentiel :** Trouver des informations sensibles dans la sortie des lignes de commande.
### Utilisation de ssm:CreateAssociation
Un attaquant ayant la permission **`ssm:CreateAssociation`** peut créer une association de gestion d'état pour exécuter automatiquement des commandes sur des instances EC2 gérées par SSM. Ces associations peuvent être configurées pour s'exécuter à intervalles réguliers, les rendant adaptées à une persistance de type backdoor sans sessions interactives.
```bash
aws ssm create-association \
--name SSM-Document-Name \
--targets Key=InstanceIds,Values=target-instance-id \
--parameters commands=["malicious-command"] \
--schedule-expression "rate(30 minutes)" \
--association-name association-name
```
> [!NOTE]
> Cette méthode de persistance fonctionne tant que l'instance EC2 est gérée par Systems Manager, que l'agent SSM est en cours d'exécution et que l'attaquant a la permission de créer des associations. Elle ne nécessite pas de sessions interactives ni de permissions explicites ssm:SendCommand. **Important :** Le paramètre `--schedule-expression` (par exemple, `rate(30 minutes)`) doit respecter l'intervalle minimum de 30 minutes d'AWS. Pour une exécution immédiate ou unique, omettez complètement `--schedule-expression` — l'association s'exécutera une fois après sa création.
### Codebuild
Vous pouvez également utiliser SSM pour accéder à un projet codebuild en cours de construction :

View File

@@ -35,7 +35,7 @@ Cette étape supplémentaire est la **création d'un** [_**profil d'instance**_]
### Point de terminaison des métadonnées
Les métadonnées AWS EC2 sont des informations sur une instance Amazon Elastic Compute Cloud (EC2) qui sont disponibles pour l'instance à l'exécution. Ces métadonnées sont utilisées pour fournir des informations sur l'instance, telles que son ID d'instance, la zone de disponibilité dans laquelle elle s'exécute, le rôle IAM associé à l'instance et le nom d'hôte de l'instance.
Les métadonnées EC2 d'AWS sont des informations sur une instance Amazon Elastic Compute Cloud (EC2) qui sont disponibles pour l'instance à l'exécution. Ces métadonnées sont utilisées pour fournir des informations sur l'instance, telles que son ID d'instance, la zone de disponibilité dans laquelle elle s'exécute, le rôle IAM associé à l'instance et le nom d'hôte de l'instance.
{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
@@ -149,13 +149,13 @@ Dans la page suivante, vous pouvez vérifier comment **abuser des permissions EC
## EBS
Les **snapshots** **EBS** (Elastic Block Store) d'Amazon sont essentiellement des **sauvegardes** statiques des volumes EBS AWS. En d'autres termes, ce sont des **copies** des **disques** attachés à une instance **EC2** à un moment donné. Les snapshots EBS peuvent être copiés entre régions et comptes, ou même téléchargés et exécutés localement.
Amazon **EBS** (Elastic Block Store) **snapshots** sont essentiellement des **sauvegardes** statiques des volumes AWS EBS. En d'autres termes, ce sont des **copies** des **disques** attachés à une **instance EC2** à un moment donné. Les snapshots EBS peuvent être copiés entre régions et comptes, ou même téléchargés et exécutés localement.
Les snapshots peuvent contenir des **informations sensibles** telles que **du code source ou des clés API**, donc, si vous en avez l'occasion, il est recommandé de les vérifier.
### Différence AMI & EBS
Une **AMI** est utilisée pour **lancer une instance EC2**, tandis qu'un **Snapshot** EC2 est utilisé pour **sauvegarder et récupérer des données stockées sur un volume EBS**. Bien qu'un Snapshot EC2 puisse être utilisé pour créer une nouvelle AMI, ce n'est pas la même chose qu'une AMI, et il n'inclut pas d'informations sur le système d'exploitation, le serveur d'application ou d'autres logiciels nécessaires pour exécuter une application.
Une **AMI** est utilisée pour **lancer une instance EC2**, tandis qu'un **snapshot EC2** est utilisé pour **sauvegarder et récupérer des données stockées sur un volume EBS**. Bien qu'un snapshot EC2 puisse être utilisé pour créer une nouvelle AMI, ce n'est pas la même chose qu'une AMI, et il n'inclut pas d'informations sur le système d'exploitation, le serveur d'application ou d'autres logiciels nécessaires pour exécuter une application.
### Privesc
@@ -167,11 +167,11 @@ Dans la page suivante, vous pouvez vérifier comment **abuser des permissions EB
## SSM
**Amazon Simple Systems Manager (SSM)** permet de gérer à distance des flottes d'instances EC2 pour faciliter leur administration. Chacune de ces instances doit exécuter le **service SSM Agent, car c'est ce service qui recevra les actions et les exécutera** via l'API AWS.
**Amazon Simple Systems Manager (SSM)** permet de gérer à distance des flottes d'instances EC2 pour faciliter leur administration. Chacune de ces instances doit exécuter le **service SSM Agent car c'est ce service qui recevra les actions et les exécutera** via l'API AWS.
Le **SSM Agent** permet à Systems Manager de mettre à jour, gérer et configurer ces ressources. L'agent **traite les demandes du service Systems Manager dans le Cloud AWS**, puis les exécute comme spécifié dans la demande.
**SSM Agent** permet à Systems Manager de mettre à jour, gérer et configurer ces ressources. L'agent **traite les demandes du service Systems Manager dans le Cloud AWS**, puis les exécute comme spécifié dans la demande.
Le **SSM Agent est** [**préinstallé dans certaines AMIs**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html) ou vous devez [**les installer manuellement**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html) sur les instances. De plus, le rôle IAM utilisé à l'intérieur de l'instance doit avoir la politique **AmazonEC2RoleforSSM** attachée pour pouvoir communiquer.
L'**agent SSM est** [**préinstallé dans certaines AMIs**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html) ou vous devez [**les installer manuellement**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html) sur les instances. De plus, le rôle IAM utilisé à l'intérieur de l'instance doit avoir la politique **AmazonEC2RoleforSSM** attachée pour pouvoir communiquer.
### Énumération
```bash
@@ -194,9 +194,17 @@ Dans la page suivante, vous pouvez vérifier comment **abuser des permissions SS
../../aws-privilege-escalation/aws-ssm-privesc.md
{{#endref}}
### Perssistence
Dans la page suivante, vous pouvez vérifier comment **abuser des permissions SSM pour atteindre la persistance** :
{{#ref}}
../../aws-persistence/aws-ssm-persistence.md
{{#endref}}
## ELB
**Elastic Load Balancing** (ELB) est un **service de répartition de charge pour les déploiements Amazon Web Services** (AWS). ELB distribue automatiquement **le trafic des applications entrantes** et ajuste les ressources pour répondre aux demandes de trafic.
**Elastic Load Balancing** (ELB) est un **service de répartition de charge pour les déploiements Amazon Web Services** (AWS). ELB distribue automatiquement **le trafic d'application entrant** et ajuste les ressources pour répondre aux demandes de trafic.
### Enumeration
```bash
@@ -228,9 +236,9 @@ aws autoscaling describe-load-balancers
```
## Nitro
AWS Nitro est une suite de **technologies innovantes** qui forme la plateforme sous-jacente pour les instances AWS EC2. Introduit par Amazon pour **améliorer la sécurité, la performance et la fiabilité**, Nitro utilise des **composants matériels personnalisés et un hyperviseur léger**. Il abstrait une grande partie de la fonctionnalité de virtualisation traditionnelle vers du matériel et des logiciels dédiés, **minimisant la surface d'attaque** et améliorant l'efficacité des ressources. En déchargeant les fonctions de virtualisation, Nitro permet aux instances EC2 de fournir une **performance proche du bare-metal**, ce qui est particulièrement bénéfique pour les applications gourmandes en ressources. De plus, la puce de sécurité Nitro garantit spécifiquement la **sécurité du matériel et du firmware**, renforçant ainsi son architecture robuste.
AWS Nitro est une suite de **technologies innovantes** qui forme la plateforme sous-jacente pour les instances AWS EC2. Introduit par Amazon pour **améliorer la sécurité, la performance et la fiabilité**, Nitro tire parti de **composants matériels personnalisés et d'un hyperviseur léger**. Il abstrait une grande partie de la fonctionnalité de virtualisation traditionnelle vers du matériel et des logiciels dédiés, **minimisant la surface d'attaque** et améliorant l'efficacité des ressources. En déchargeant les fonctions de virtualisation, Nitro permet aux instances EC2 de fournir une **performance proche du bare-metal**, ce qui est particulièrement bénéfique pour les applications gourmandes en ressources. De plus, la puce de sécurité Nitro garantit spécifiquement la **sécurité du matériel et du firmware**, renforçant ainsi son architecture robuste.
Get more information and how to enumerate it from:
Obtenez plus d'informations et comment l'énumérer à partir de :
{{#ref}}
aws-nitro-enum.md
@@ -242,28 +250,28 @@ Un VPN permet de connecter votre **réseau sur site (site-to-site VPN)** ou les
#### Composants de base d'AWS VPN
1. **Customer Gateway**:
1. **Customer Gateway** :
- Un Customer Gateway est une ressource que vous créez dans AWS pour représenter votre côté d'une connexion VPN.
- C'est essentiellement un dispositif physique ou une application logicielle de votre côté de la connexion Site-to-Site VPN.
- Vous fournissez des informations de routage et l'adresse IP publique de votre dispositif réseau (comme un routeur ou un pare-feu) à AWS pour créer un Customer Gateway.
- Il sert de point de référence pour établir la connexion VPN et n'entraîne pas de frais supplémentaires.
2. **Virtual Private Gateway**:
2. **Virtual Private Gateway** :
- Un Virtual Private Gateway (VPG) est le concentrateur VPN du côté Amazon de la connexion Site-to-Site VPN.
- Il est attaché à votre VPC et sert de cible pour votre connexion VPN.
- VPG est le point de terminaison du côté AWS pour la connexion VPN.
- Il gère la communication sécurisée entre votre VPC et votre réseau sur site.
3. **Site-to-Site VPN Connection**:
3. **Site-to-Site VPN Connection** :
- Une connexion Site-to-Site VPN connecte votre réseau sur site à un VPC via un tunnel VPN IPsec sécurisé.
- Ce type de connexion nécessite un Customer Gateway et un Virtual Private Gateway.
- Il est utilisé pour une communication sécurisée, stable et cohérente entre votre centre de données ou réseau et votre environnement AWS.
- Typiquement utilisé pour des connexions régulières et à long terme, et est facturé en fonction de la quantité de données transférées via la connexion.
4. **Client VPN Endpoint**:
- Typiquement utilisé pour des connexions régulières et à long terme, et est facturé en fonction de la quantité de données transférées sur la connexion.
4. **Client VPN Endpoint** :
- Un point de terminaison Client VPN est une ressource que vous créez dans AWS pour activer et gérer les sessions VPN client.
- Il est utilisé pour permettre à des dispositifs individuels (comme des ordinateurs portables, des smartphones, etc.) de se connecter en toute sécurité aux ressources AWS ou à votre réseau sur site.
- Il diffère du Site-to-Site VPN en ce sens qu'il est conçu pour des clients individuels plutôt que pour connecter des réseaux entiers.
- Il diffère du Site-to-Site VPN en ce sens qu'il est conçu pour des clients individuels plutôt que de connecter des réseaux entiers.
- Avec Client VPN, chaque dispositif client utilise un logiciel client VPN pour établir une connexion sécurisée.
You can [**find more information about the benefits and components of AWS VPNs here**](aws-vpc-and-networking-basic-information.md#vpn).
Vous pouvez [**trouver plus d'informations sur les avantages et les composants des VPN AWS ici**](aws-vpc-and-networking-basic-information.md#vpn).
### Enumeration
```bash
@@ -295,7 +303,7 @@ aws ec2 describe-vpn-connections
Lorsque le client VPN AWS est utilisé pour se connecter à un VPN, l'utilisateur se **connecte généralement à AWS** pour accéder au VPN. Ensuite, certains **identifiants AWS sont créés et stockés** localement pour établir la connexion VPN. Ces identifiants sont **stockés dans** `$HOME/.config/AWSVPNClient/TemporaryCredentials/<region>/temporary-credentials.txt` et contiennent une **AccessKey**, une **SecretKey** et un **Token**.
Les identifiants appartiennent à l'utilisateur `arn:aws:sts::<acc-id>:assumed-role/aws-vpn-client-metrics-analytics-access-role/CognitoIdentityCredentials` (TODO : rechercher davantage sur les permissions de ces identifiants).
Les identifiants appartiennent à l'utilisateur `arn:aws:sts::<acc-id>:assumed-role/aws-vpn-client-metrics-analytics-access-role/CognitoIdentityCredentials` (TODO : rechercher plus sur les permissions de ces identifiants).
**Fichiers de configuration opvn**