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

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

## VPC & Networking

Leer wat 'n VPC is en oor die komponente daarvan in:

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

## EC2

Amazon EC2 word gebruik om **virtuele bedieners** te begin. Dit maak dit moontlik om **sekuriteit** en **netwerking** te konfigureer en die bestuur van **berging** te hanteer. Die buigbaarheid van Amazon EC2 blyk uit sy vermoë om hulpbronne beide op- en af te skaal, wat dit effektief maak om by wisselende vereistes of skielike toename in gewildheid aan te pas. Hierdie funksie verminder die behoefte aan presiese verkeersvoorspellings.

Interessante dinge om in EC2 te enumereer:

- Virtual Machines
- SSH Keys
- User Data
- Existing EC2s/AMIs/Snapshots
- Networking
- Networks
- Subnetworks
- Public IPs
- Open ports
- Integrated connections with other networks outside AWS

### Instance Profiles

Om **roles** te gebruik om toestemmings te gee aan toepassings wat op **EC2 instances** loop, vereis 'n bietjie ekstra konfigurasie. 'n Toepassing wat op 'n EC2 instance loop, word deur die gevirtualiseerde bedryfstelsel van AWS geabstraheer. Vanweë hierdie ekstra skeiding benodig jy 'n addisionele stap om 'n AWS role en die daarmee geassosieerde permissies aan 'n EC2 instance toe te ken en dit aan die toepassings beskikbaar te stel.

Hierdie ekstra stap is die **skepping van 'n** [_**instance profile**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) wat aan die instance geheg is. Die **instance profile bevat die role en** kan die role se tydelike credentials aan 'n toepassing wat op die instance loop voorsien. Daardie tydelike credentials kan dan in die toepassing se API-oproepe gebruik word om hulpbronne te benader en om toegang te beperk tot slegs daardie hulpbronne wat deur die role gespesifiseer word. Let daarop dat **slegs een role op 'n EC2 instance toegeken kan word** op 'n slag, en alle toepassings op die instance deel dieselfde role en permissies.

### Metadata Endpoint

AWS EC2 metadata is inligting oor 'n Amazon Elastic Compute Cloud (EC2) instance wat beskikbaar is vir die instance tydens runtime. Hierdie metadata word gebruik om inligting oor die instance te verskaf, soos die instance ID, die availability zone waarin dit loop, die IAM role wat met die instance geassosieer is, en die instance se hostname.

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

### Enumeration
```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 a JPG-format screenshot of a running instance
aws ec2 get-console-screenshot --instance [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
```
### Ongeauthentiseerde Toegang

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

### Privesc

Op die volgende bladsy kan jy sien hoe om EC2-magtigings te misbruik om bevoegdhede te eskaleer:

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

### Post-Exploitation

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

## EBS

Amazon **EBS** (Elastic Block Store) **snapshots** is basies statiese **backups** van AWS EBS-volumes. Met ander woorde, dit is **kopies** van die **skywe** wat op 'n spesifieke tydstip aan 'n **EC2**-instansie aangeheg is. EBS snapshots kan oor streke en rekeninge gekopieer word, of selfs afgelaai en lokaal uitgevoer word.

Snapshots kan **gevoelige inligting** bevat soos **bronkode of APi keys**, daarom word dit aanbeveel om dit te ondersoek as jy die geleentheid het.

### Verskil tussen AMI & EBS

'n **AMI** word gebruik om 'n **EC2 instance te launch**, terwyl 'n EC2 **Snapshot** gebruik word om data wat op 'n EBS-volume gestoor is te **backup en recover**. Alhoewel 'n EC2 Snapshot gebruik kan word om 'n nuwe AMI te skep, is dit nie dieselfde as 'n AMI nie, en dit sluit nie inligting in oor die bedryfstelsel, application server, of ander sagteware wat benodig word om 'n toepassing te laat loop nie.

### Privesc

Op die volgende bladsy kan jy sien hoe om EBS-magtigings te misbruik om bevoegdhede te eskaleer:

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

## SSM

**Amazon Simple Systems Manager (SSM)** maak dit moontlik om op afstand 'n vloot van EC2-instansies te bestuur om hul administrasie baie makliker te maak. Elkeen van hierdie instansies moet die **SSM Agent service** laat loop aangesien dié diens die aksies vanaf die AWS API sal ontvang en uitvoer.

**SSM Agent** maak dit moontlik vir Systems Manager om hierdie bronne op te dateer, te bestuur, en te konfigureer. Die agent **processes requests from the Systems Manager service in the AWS Cloud**, en voer dit dan uit soos in die versoek gespesifiseer.

Die **SSM Agent kom**[ **preinstalled in some AMIs**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html) of jy moet dit [**manually install them**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html) op die instansies. Ook moet die IAM Role wat binne die instansie gebruik word die beleid **AmazonEC2RoleforSSM** aangeheg hê om te kan kommunikeer.

### Enumeration
```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>
```
Jy kan in 'n EC2-instansie nagaan of Systems Manager aan die gang is deur net die volgende uit te voer:
```bash
ps aux | grep amazon-ssm
```
### Privesc

Op die volgende bladsy kan jy sien hoe om **abuse SSM permissions to escalate privileges**:

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

### Perssistence

Op die volgende bladsy kan jy sien hoe om **abuse SSM permissions to achieve persistence**:

{{#ref}}
../../aws-persistence/aws-ssm-persistence/README.md
{{#endref}}

## ELB

**Elastic Load Balancing** (ELB) is 'n **load-balancing service for Amazon Web Services** (AWS) implementeringe. ELB outomaties **versprei inkomende toepassingsverkeer** en skaal hulpbronne om aan die verkeersvraag te voldoen.

### 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>
```
## Launch Templates & Autoscaling Groups

### Enumerasie
```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 is 'n stel van **innoverende tegnologieë** wat die onderliggende platform vir AWS EC2-instanties vorm. Ingelei deur Amazon om **sekuriteit, prestasie en betroubaarheid te verbeter**, maak Nitro gebruik van pasgemaakte **hardware-komponente en 'n liggewig-hypervisor**. Dit abstraheer baie van die tradisionele virtualiseringsfunksionaliteit na toegewyde hardeware en sagteware, wat die **aanvalsoppervlak minimaliseer** en hulpbroneffektiwiteit verbeter. Deur virtualiseringsfunksies uit te laai, laat Nitro EC2-instanties toe om **near bare-metal performance** te lewer, wat dit besonder voordelig maak vir hulpbron-intensiewe toepassings. Verder verseker die Nitro Security Chip spesifiek die **veiligheid van die hardeware en firmware**, wat sy robuuste argitektuur verder versterk.

Get more information and how to enumerate it from:

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

## VPN

'n VPN laat toe om jou **lokale netwerk (site-to-site VPN)** of die **werknemers se skootrekenaars (Client VPN)** te koppel aan 'n **AWS VPC**, sodat dienste toeganklik is sonder om dit aan die internet bloot te stel.

#### Basic AWS VPN Components

1. **Customer Gateway**:
- 'n Customer Gateway is 'n hulpbron wat jy in AWS skep om jou kant van 'n VPN-verbinding voor te stel.
- Dit is in wese 'n fisiese toestel of sagtewaretoepassing aan jou kant van die Site-to-Site VPN-verbinding.
- Jy verskaf routeringsinligting en die publieke IP-adres van jou netwerktoestel (soos 'n router of firewall) aan AWS om 'n Customer Gateway te skep.
- Dit dien as 'n verwysingspunt vir die opstelling van die VPN-verbinding en trek geen ekstra koste in nie.
2. **Virtual Private Gateway**:
- 'n Virtual Private Gateway (VPG) is die VPN-koncentrator aan die Amazon-kant van die Site-to-Site VPN-verbinding.
- Dit is aangeheg aan jou VPC en dien as die teiken vir jou VPN-verbinding.
- VPG is die AWS-kant-eindpunt vir die VPN-verbinding.
- Dit hanteer die veilige kommunikasie tussen jou VPC en jou plaaslike netwerk.
3. **Site-to-Site VPN Connection**:
- 'n Site-to-Site VPN-verbinding koppel jou plaaslike netwerk aan 'n VPC deur 'n veilige, IPsec VPN-tonnel.
- Hierdie tipe verbinding vereis 'n Customer Gateway en 'n Virtual Private Gateway.
- Dit word gebruik vir veilige, stabiele en konsekwente kommunikasie tussen jou datacentrum of netwerk en jou AWS-omgewing.
- Gewoonlik gebruik vir gereelde, langtermynverbindinge en word gefaktureer gebaseer op die hoeveelheid data wat oor die verbinding oorgedra word.
4. **Client VPN Endpoint**:
- 'n Client VPN-endpunt is 'n hulpbron wat jy in AWS skep om client VPN-sessies moontlik te maak en te bestuur.
- Dit word gebruik om individuele toestelle (soos skootrekenaars, slimfone, ens.) toe te laat om veilig aan AWS-bronne of jou plaaslike netwerk te koppel.
- Dit verskil van Site-to-Site VPN omdat dit ontwerp is vir individuele kliënte eerder as om hele netwerke te koppel.
- Met Client VPN gebruik elke kliënttoestel 'n VPN-client-sagteware om 'n veilige verbinding tot stand te bring.

Jy kan [**hier meer inligting oor die voordele en komponente van AWS VPNs vind**](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
```
### Local Enumeration

**Plaaslike Tydelike Kredensiale**

Wanneer die AWS VPN Client gebruik word om met 'n VPN te verbind, sal die gebruiker gewoonlik **aanmeld by AWS** om toegang tot die VPN te kry. Daarna word sommige **AWS credentials geskep en plaaslik gestoor** om die VPN-verbinding te vestig. Hierdie credentials word **gestoor in** `$HOME/.config/AWSVPNClient/TemporaryCredentials/<region>/temporary-credentials.txt` en bevat 'n **AccessKey**, 'n **SecretKey** en 'n **Token**.

Die credentials behoort aan die gebruiker `arn:aws:sts::<acc-id>:assumed-role/aws-vpn-client-metrics-analytics-access-role/CognitoIdentityCredentials` (TODO: ondersoek meer oor die permissies van hierdie credentials).

**opvn konfigurasielêers**

As 'n **VPN-verbinding tot stand gebring is** moet jy soek na **`.opvn`** konfigurasielêers op die stelsel. Verder is een plek waar jy die **konfigurasies** kan vind in **`$HOME/.config/AWSVPNClient/OpenVpnConfigs`**

#### **Post Exploitaiton**

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

## References

- [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}}
