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

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

## VPC & Networking

Saznajte šta je VPC i o njegovim komponentama u:

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

## EC2

Amazon EC2 se koristi za pokretanje **virtuelnih servera**. Omogućava konfiguraciju **bezbednosti** i **mreže** i upravljanje **skladištem**. Fleksibilnost Amazon EC2 je očigledna u njegovoj sposobnosti da skalira resurse kako naviše, tako i naniže, efikasno se prilagođavajući promenama zahteva ili porastima popularnosti. Ova funkcija smanjuje potrebu za preciznim predikcijama saobraćaja.

Zanimljive stvari za enumeraciju u EC2:

- Virtuelne mašine
- SSH ključevi
- Podaci o korisnicima
- Postojeći EC2/AMI/snapshoti
- Mreženje
- Mreže
- Podmreže
- Javne IP adrese
- Otvoreni portovi
- Integrisane veze sa drugim mrežama van AWS-a

### Instance Profiles

Korišćenje **rola** za dodeljivanje dozvola aplikacijama koje rade na **EC2 instancama** zahteva malo dodatne konfiguracije. Aplikacija koja radi na EC2 instanci je apstrahovana od AWS-a putem virtuelizovanog operativnog sistema. Zbog ove dodatne separacije, potrebna je dodatna faza za dodeljivanje AWS role i njenih povezanih dozvola EC2 instanci i njihovo dostupnost aplikacijama.

Ova dodatna faza je **kreiranje** [_**instance profile**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) vezanog za instancu. **Instance profile sadrži ulogu i** može pružiti privremene akreditive uloge aplikaciji koja radi na instanci. Ti privremeni akreditive se zatim mogu koristiti u API pozivima aplikacije za pristup resursima i za ograničavanje pristupa samo onim resursima koje uloga specificira. Imajte na umu da **samo jedna uloga može biti dodeljena EC2 instanci** u isto vreme, a sve aplikacije na instanci dele istu ulogu i dozvole.

### Metadata Endpoint

AWS EC2 metapodaci su informacije o Amazon Elastic Compute Cloud (EC2) instanci koje su dostupne instanci u vreme izvršavanja. Ovi metapodaci se koriste za pružanje informacija o instanci, kao što su njen ID instance, dostupna zona u kojoj se pokreće, IAM uloga povezana sa instancom i ime hosta instance.

{{#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 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
```
### Neautentifikovani pristup

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

### Privesc

Na sledećoj stranici možete proveriti kako da **zloupotrebite EC2 dozvole za eskalaciju privilegija**:

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

### Post-eksploatacija

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

## EBS

Amazon **EBS** (Elastic Block Store) **snapshots** su u suštini statički **backup-ovi** AWS EBS volumena. Drugim rečima, to su **kopije** **diskova** povezanih sa **EC2** instancom u određenom trenutku. EBS snapshots se mogu kopirati između regiona i naloga, ili čak preuzeti i pokrenuti lokalno.

Snapshots mogu sadržati **osetljive informacije** kao što su **izvorni kod ili API ključevi**, stoga, ako imate priliku, preporučuje se da ih proverite.

### Razlika između AMI i EBS

**AMI** se koristi za **pokretanje EC2 instance**, dok se EC2 **Snapshot** koristi za **backup i oporavak podataka sa EBS volumena**. Dok se EC2 Snapshot može koristiti za kreiranje novog AMI-ja, to nije isto što i AMI, i ne uključuje informacije o operativnom sistemu, aplikacionom serveru ili drugom softveru potrebnom za pokretanje aplikacije.

### Privesc

Na sledećoj stranici možete proveriti kako da **zloupotrebite EBS dozvole za eskalaciju privilegija**:

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

## SSM

**Amazon Simple Systems Manager (SSM)** omogućava daljinsko upravljanje flotama EC2 instanci kako bi njihova administracija bila mnogo lakša. Svaka od ovih instanci treba da pokreće **SSM Agent servis, jer će taj servis obavljati akcije i izvršavati ih** putem AWS API-ja.

**SSM Agent** omogućava Systems Manager-u da ažurira, upravlja i konfiguriše ove resurse. Agent **obrađuje zahteve od Systems Manager servisa u AWS Cloudu**, a zatim ih izvršava kako je navedeno u zahtevu.

**SSM Agent dolazi**[ **predinstaliran u nekim AMI-jima**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html) ili ga treba [**ručno instalirati**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html) na instancama. Takođe, IAM uloga koja se koristi unutar instance treba da ima politiku **AmazonEC2RoleforSSM** prikačenu da bi mogla da komunicira.

### Enumeracija
```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>
```
Možete proveriti da li je Systems Manager pokrenut na EC2 instanci jednostavno izvršavanjem:
```bash
ps aux | grep amazon-ssm
```
### Privesc

Na sledećoj stranici možete proveriti kako da **zloupotrebite SSM dozvole za eskalaciju privilegija**:

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

### Perssistence

Na sledećoj stranici možete proveriti kako da **zloupotrebite SSM dozvole za postizanje persistencije**:

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

## ELB

**Elastic Load Balancing** (ELB) je **usluga balansiranja opterećenja za Amazon Web Services** (AWS) implementacije. ELB automatski **distribuira dolazni aplikativni saobraćaj** i skalira resurse kako bi zadovoljio zahteve saobraćaja.

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

### Enumeration
```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 je skup **inovativnih tehnologija** koje čine osnovnu platformu za AWS EC2 instance. Uveden od strane Amazona da **poboljša bezbednost, performanse i pouzdanost**, Nitro koristi prilagođene **hardverske komponente i lagani hipervizor**. Apstrahuje većinu tradicionalne funkcionalnosti virtualizacije na posvećen hardver i softver, **minimizirajući površinu napada** i poboljšavajući efikasnost resursa. Oslobađanjem funkcija virtualizacije, Nitro omogućava EC2 instancama da pruže **performanse blizu onih na fizičkom hardveru**, što ga čini posebno korisnim za aplikacije koje zahtevaju mnogo resursa. Pored toga, Nitro Security Chip posebno osigurava **bezbednost hardvera i firmvera**, dodatno učvršćujući njegovu robusnu arhitekturu.

Dobijte više informacija i kako ga enumerisati sa:

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

## VPN

VPN omogućava povezivanje vaše **lokalne mreže (site-to-site VPN)** ili **laptopova radnika (Client VPN)** sa **AWS VPC** tako da se usluge mogu pristupiti bez potrebe da ih izlažete internetu.

#### Osnovne komponente AWS VPN-a

1. **Customer Gateway**:
- Customer Gateway je resurs koji kreirate u AWS-u da predstavlja vašu stranu VPN veze.
- To je u suštini fizički uređaj ili softverska aplikacija na vašoj strani Site-to-Site VPN veze.
- Pružate informacije o rutiranju i javnu IP adresu vašeg mrežnog uređaja (kao što je ruter ili vatrozid) AWS-u da biste kreirali Customer Gateway.
- Služi kao referentna tačka za postavljanje VPN veze i ne generiše dodatne troškove.
2. **Virtual Private Gateway**:
- Virtual Private Gateway (VPG) je VPN koncentrator na Amazon strani Site-to-Site VPN veze.
- Priključen je na vaš VPC i služi kao cilj za vašu VPN vezu.
- VPG je AWS strana krajnje tačke za VPN vezu.
- Rukuje sigurnom komunikacijom između vašeg VPC-a i vaše lokalne mreže.
3. **Site-to-Site VPN Connection**:
- Site-to-Site VPN veza povezuje vašu lokalnu mrežu sa VPC-om kroz sigurni, IPsec VPN tunel.
- Ova vrsta veze zahteva Customer Gateway i Virtual Private Gateway.
- Koristi se za sigurnu, stabilnu i doslednu komunikaciju između vašeg data centra ili mreže i vašeg AWS okruženja.
- Obično se koristi za redovne, dugoročne veze i naplaćuje se na osnovu količine podataka prenetih preko veze.
4. **Client VPN Endpoint**:
- Client VPN endpoint je resurs koji kreirate u AWS-u da omogućite i upravljate klijent VPN sesijama.
- Koristi se za omogućavanje pojedinačnim uređajima (kao što su laptopi, pametni telefoni itd.) da sigurno povežu sa AWS resursima ili vašom lokalnom mrežom.
- Razlikuje se od Site-to-Site VPN po tome što je dizajniran za pojedinačne klijente, a ne za povezivanje celih mreža.
- Sa Client VPN-om, svaki klijentski uređaj koristi VPN klijentski softver za uspostavljanje sigurne veze.

Možete [**pronaći više informacija o prednostima i komponentama AWS VPN-a ovde**](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
```
### Lokalna Enumeracija

**Lokalne Privremene Akreditiv**

Kada se koristi AWS VPN klijent za povezivanje na VPN, korisnik obično **prijavljuje se u AWS** da bi dobio pristup VPN-u. Tada se neki **AWS akreditivi kreiraju i čuvaju** lokalno kako bi se uspostavila VPN veza. Ovi akreditivi su **čuvani u** `$HOME/.config/AWSVPNClient/TemporaryCredentials/<region>/temporary-credentials.txt` i sadrže **AccessKey**, **SecretKey** i **Token**.

Akreditivi pripadaju korisniku `arn:aws:sts::<acc-id>:assumed-role/aws-vpn-client-metrics-analytics-access-role/CognitoIdentityCredentials` (TODO: istražiti više o dozvolama ovih akreditiva).

**opvn konfiguracione datoteke**

Ako je **VPN veza uspostavljena**, trebali biste tražiti **`.opvn`** konfiguracione datoteke u sistemu. Štaviše, jedno mesto gde možete pronaći **konfiguracije** je u **`$HOME/.config/AWSVPNClient/OpenVpnConfigs`**

#### **Post Eksploatacija**

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

## Reference

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