# AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum

{{#include ../../../../banners/hacktricks-training.md}}

## VPC & Réseautage

Apprenez ce qu'est un VPC et ses composants dans :

{{#ref}}
aws-vpc-and-networking-basic-information.md
{{#endref}}

## EC2

Amazon EC2 est utilisé pour initier des **serveurs virtuels**. Il permet la configuration de la **sécurité** et du **réseautage** ainsi que la gestion du **stockage**. La flexibilité d'Amazon EC2 est évidente dans sa capacité à faire évoluer les ressources à la hausse et à la baisse, s'adaptant efficacement aux variations des besoins ou aux pics de popularité. Cette fonctionnalité réduit la nécessité de prévisions de trafic précises.

Choses intéressantes à énumérer dans EC2 :

- Machines Virtuelles
- Clés SSH
- Données Utilisateur
- EC2/AMIs/Snapshots existants
- Réseautage
- Réseaux
- Sous-réseaux
- IPs Publiques
- Ports ouverts
- Connexions intégrées avec d'autres réseaux en dehors d'AWS

### Profils d'Instance

Utiliser des **rôles** pour accorder des permissions aux applications qui s'exécutent sur des **instances EC2** nécessite un peu de configuration supplémentaire. Une application s'exécutant sur une instance EC2 est abstraite d'AWS par le système d'exploitation virtualisé. En raison de cette séparation supplémentaire, vous devez effectuer une étape supplémentaire pour attribuer un rôle AWS et ses permissions associées à une instance EC2 et les rendre disponibles pour ses applications.

Cette étape supplémentaire est la **création d'un** [_**profil d'instance**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) attaché à l'instance. Le **profil d'instance contient le rôle et** peut fournir les identifiants temporaires du rôle à une application qui s'exécute sur l'instance. Ces identifiants temporaires peuvent ensuite être utilisés dans les appels API de l'application pour accéder aux ressources et limiter l'accès uniquement à celles que le rôle spécifie. Notez que **seul un rôle peut être attribué à une instance EC2** à la fois, et toutes les applications sur l'instance partagent le même rôle et les mêmes permissions.

### 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.

{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
{{#endref}}

### Énumération
```bash
# Get EC2 instances
aws ec2 describe-instances
aws ec2 describe-instance-status #Get status from running instances

# Get user data from each ec2 instance
for instanceid in $(aws ec2 describe-instances --profile <profile> --region us-west-2 | grep -Eo '"i-[a-zA-Z0-9]+' | tr -d '"'); do
echo "Instance ID: $instanceid"
aws ec2 describe-instance-attribute --profile <profile> --region us-west-2 --instance-id "$instanceid" --attribute userData | jq ".UserData.Value" | tr -d '"' | base64 -d
echo ""
echo "-------------------"
done

# Instance profiles
aws iam list-instance-profiles
aws iam list-instance-profiles-for-role --role-name <name>

# Get tags
aws ec2 describe-tags

# Get volumes
aws ec2 describe-volume-status
aws ec2 describe-volumes

# Get snapshots
aws ec2 describe-snapshots --owner-ids self

# Scheduled instances
aws ec2 describe-scheduled-instances

# Get custom images
aws ec2 describe-images --owners self

# Get Elastic IPs
aws ec2 describe-addresses

# Get current output
aws ec2 get-console-output --instance-id [id]

# Get VPN customer gateways
aws ec2 describe-customer-gateways
aws ec2 describe-vpn-gateways
aws ec2 describe-vpn-connections

# List conversion tasks to upload/download VMs
aws ec2 describe-conversion-tasks
aws ec2 describe-import-image-tasks

# Get Bundle Tasks
aws ec2 describe-bundle-tasks

# Get Classic Instances
aws ec2 describe-classic-link-instances

# Get Dedicated Hosts
aws ec2 describe-hosts

# Get SSH Key Pairs
aws ec2 describe-key-pairs

# Get Internet Gateways
aws ec2 describe-internet-gateways

# Get NAT Gateways
aws ec2 describe-nat-gateways

# Get subnetworks
aws ec2 describe-subnets

# Get FW rules
aws ec2 describe-network-acls

# Get security groups
aws ec2 describe-security-groups

# Get interfaces
aws ec2 describe-network-interfaces

# Get routes table
aws ec2 describe-route-tables

# Get VPCs
aws ec2 describe-vpcs
aws ec2 describe-vpc-peering-connections
```
### Accès non authentifié

{{#ref}}
../../aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md
{{#endref}}

### Privesc

Dans la page suivante, vous pouvez vérifier comment **abuser des permissions EC2 pour élever les privilèges** :

{{#ref}}
../../aws-privilege-escalation/aws-ec2-privesc.md
{{#endref}}

### Post-Exploitation

{{#ref}}
../../aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/
{{#endref}}

## 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.

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.

### Privesc

Dans la page suivante, vous pouvez vérifier comment **abuser des permissions EBS pour élever les privilèges** :

{{#ref}}
../../aws-privilege-escalation/aws-ebs-privesc.md
{{#endref}}

## 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.

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.

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.

### Énumération
```bash
aws ssm describe-instance-information
aws ssm describe-parameters
aws ssm describe-sessions --state [Active|History]
aws ssm describe-instance-patches --instance-id <id>
aws ssm describe-instance-patch-states --instance-ids <id>
aws ssm describe-instance-associations-status --instance-id <id>
```
Vous pouvez vérifier dans une instance EC2 si Systems Manager est en cours d'exécution simplement en exécutant :
```bash
ps aux | grep amazon-ssm
```
### Privesc

Dans la page suivante, vous pouvez vérifier comment **abuser des permissions SSM pour escalader les privilèges** :

{{#ref}}
../../aws-privilege-escalation/aws-ssm-privesc.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.

### Enumeration
```bash
# List internet-facing ELBs
aws elb describe-load-balancers
aws elb describe-load-balancers | jq '.LoadBalancerDescriptions[]| select( .Scheme | contains("internet-facing"))|.DNSName'

# DONT FORGET TO CHECK VERSION 2
aws elbv2 describe-load-balancers
aws elbv2 describe-load-balancers | jq '.LoadBalancers[].DNSName'
aws elbv2 describe-listeners --load-balancer-arn <load_balancer_arn>
```
## Modèles de lancement et groupes d'autoscaling

### Énumération
```bash
# Launch templates
aws ec2 describe-launch-templates
aws ec2 describe-launch-templates --launch-template-id <launch_template_id>
## Get details, like user data
aws ec2 describe-launch-template-versions --launch-template-id <launch_template_id>

# Autoscaling
aws autoscaling describe-auto-scaling-groups
aws autoscaling describe-auto-scaling-instances
aws autoscaling describe-launch-configurations
aws autoscaling describe-load-balancer-target-groups
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.

Get more information and how to enumerate it from:

{{#ref}}
aws-nitro-enum.md
{{#endref}}

## VPN

Un VPN permet de connecter votre **réseau sur site (site-to-site VPN)** ou les **ordinateurs portables des travailleurs (Client VPN)** avec un **AWS VPC** afin que les services puissent être accessibles sans avoir besoin de les exposer à Internet.

#### Composants de base d'AWS VPN

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**:
- 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**:
- 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**:
- 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.
- 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).

### Enumeration
```bash
# VPN endpoints
## Check used subnetwork, authentication, SGs, connected...
aws ec2 describe-client-vpn-endpoints

## Get AWS network info related to the vpn endpoint
aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id <id>

## Get AWS subnet & ip range the VPN iconnected to
aws ec2 describe-client-vpn-routes --client-vpn-endpoint-id <id>

## Check authorization rules
aws ec2 describe-client-vpn-authorization-rules --client-vpn-endpoint-id <id>

## Get current connections to the VPN endpoint
aws ec2 describe-client-vpn-connections --client-vpn-endpoint-id <id>

# Get VPN gateways and check with which VPC each is connected
aws ec2 describe-vpn-gateways

# Get VPN site-to-site connections
aws ec2 describe-vpn-connections
```
### Énumération Locale

**Identifiants Temporaires Locaux**

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).

**Fichiers de configuration opvn**

Si une **connexion VPN a été établie**, vous devriez rechercher des fichiers de configuration **`.opvn`** dans le système. De plus, un endroit où vous pourriez trouver les **configurations** est dans **`$HOME/.config/AWSVPNClient/OpenVpnConfigs`**

#### **Post Exploitation**

{{#ref}}
../../aws-post-exploitation/aws-vpn-post-exploitation.md
{{#endref}}

## Références

- [https://docs.aws.amazon.com/batch/latest/userguide/getting-started-ec2.html](https://docs.aws.amazon.com/batch/latest/userguide/getting-started-ec2.html)

{{#include ../../../../banners/hacktricks-training.md}}
