AWS Pentesting

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Osnovne informacije

Pre početka pentesting-a AWS okruženja, postoje neke osnovne stvari koje morate znati o tome kako AWS funkcioniše kako biste razumeli šta treba da uradite, kako da pronađete neispravne konfiguracije i kako da ih iskoristite.

Koncepti poput hijerarhije organizacije, IAM i drugi osnovni koncepti su objašnjeni u:

pageAWS - Basic Information

Laboratorije za učenje

Alati za simuliranje napada:

Metodologija AWS Pentestera/Red Tima

Da biste pregledali AWS okruženje, veoma je važno znati: koje servise koristite, šta je izloženo, ko ima pristup čemu, i kako su interni AWS servisi povezani sa spoljnim servisima.

Sa stanovišta Red Tima, prvi korak ka kompromitovanju AWS okruženja je uspeti da dobijete neke akreditive. Evo nekih ideja kako to možete postići:

  • Leak-ovi na github-u (ili slično) - OSINT

  • Socijalno inženjerstvo

  • Ponovna upotreba lozinki (leak-ovi lozinki)

  • Ranjivosti u AWS-hostovanim aplikacijama

  • Server Side Request Forgery sa pristupom metadata endpoint-u

  • Čitanje lokalnih fajlova

  • /home/USERNAME/.aws/credentials

  • C:\Users\USERNAME\.aws\credentials

    1. lica koja su hakovana

  • Interni zaposleni

  • Cognito akreditivi

Ili kompromitovanjem neautentifikovanog servisa koji je izložen:

pageAWS - Unauthenticated Enum & Access

Ili ako radite pregled, možete jednostavno zatražiti akreditive sa ovim ulogama:

pageAWS - Permissions for a Pentest

Nakon što ste uspeli da dobijete akreditive, morate znati kome ti akreditivi pripadaju, i na šta imaju pristup, tako da morate izvršiti neku osnovnu enumeraciju:

Osnovna Enumeracija

SSRF

Ako pronađete SSRF na mašini unutar AWS-a, proverite ovu stranicu za trikove:

Whoami

Jedna od prvih stvari koje morate znati je ko ste (u kojem nalogu se nalazite i druge informacije o AWS okruženju):

# Easiest way, but might be monitored?
aws sts get-caller-identity
aws iam get-user # This will get your own user

# If you have a Key ID
aws sts get-access-key-info --access-key-id=ASIA1234567890123456

# Get inside error message
aws sns publish --topic-arn arn:aws:sns:us-east-1:*account id*:aaa --message aaa

# From metadata
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document

Imajte na umu da kompanije mogu koristiti canary tokens kako bi identifikovale kada se tokeni kradu i koriste. Preporučuje se proveriti da li je token canary token pre nego što ga koristite. Za više informacija posetite ovu stranicu.

Enumeracija organizacije

pageAWS - Organizations Enum

Enumeracija IAM-a

Ako imate dovoljno dozvola, provera privilegija svakog entiteta unutar AWS naloga pomoći će vam da razumete šta vi i ostali identiteti možete raditi i kako dosegnuti privilegije.

Ako nemate dovoljno dozvola da enumerišete IAM, možete ih bruteforce-ovati da biste ih otkrili. Proverite kako izvršiti enumeraciju i brute-force u:

pageAWS - IAM, Identity Center & SSO Enum

Sada kada imate neke informacije o svojim akreditivima (i ako ste crveni tim, nadamo se da niste otkriveni). Vreme je da saznate koje usluge se koriste u okruženju. U sledećem odeljku možete proveriti neke načine za enumeraciju nekih zajedničkih usluga.

Enumeracija usluga, post-eksploatacija i postojanost

AWS ima ogroman broj usluga, na sledećoj stranici pronaći ćete osnovne informacije, enumeraciju šema prevara**,** kako izbeći otkrivanje, dobiti postojanost i druge tehnike post-eksploatacije o nekima od njih:

pageAWS - Services

Imajte na umu da ne morate obavljati sav posao ručno, u nastavku u ovom postu možete pronaći odeljak o automatizovanim alatima.

Osim toga, u ovoj fazi možda ste otkrili više usluga izloženih neautentifikovanim korisnicima, možda ćete moći da ih iskoristite:

pageAWS - Unauthenticated Enum & Access

Eskalacija privilegija

Ako možete proveriti bar svoje sopstvene dozvole nad različitim resursima, možete proveriti da li možete dobiti dodatne dozvole. Trebalo bi da se fokusirate bar na dozvole navedene u:

pageAWS - Privilege Escalation

Javno izložene usluge

Dok enumerišete AWS usluge, možda ste pronašli neke od njih koje izlažu elemente na internetu (VM/Container portove, baze podataka ili usluge redova, snimke ili buckete...). Kao pentester/crveni tim, uvek biste trebali proveriti da li možete pronaći osetljive informacije / ranjivosti na njima jer vam mogu omogućiti dalji pristup AWS nalogu.

U ovoj knjizi trebali biste pronaći informacije o tome kako pronaći izložene AWS usluge i kako ih proveriti. Kako pronaći ranjivosti u izloženim mrežnim uslugama preporučujem vam da pretražite specifičnu uslugu na:

Kompromitovanje organizacije

Iz glavnog/upravljačkog naloga

Kada upravljački nalog kreira nove naloge u organizaciji, novi ulog se kreira u novom nalogu, podrazumevano nazvan OrganizationAccountAccessRole i daje AdministratorAccess politiku upravljačkom nalogu da pristupi novom nalogu.

Dakle, da biste pristupili kao administrator u podnalogu, treba vam:

  • Kompromitovati upravljački nalog i pronaći ID dečijih naloga i imena uloge (podrazumevano OrganizationAccountAccessRole) koja omogućava upravljačkom nalogu pristup kao administrator.

  • Da biste pronašli dečije naloge, idite na odeljak organizacija u AWS konzoli ili pokrenite aws organizations list-accounts

  • Ne možete direktno pronaći ime uloga, stoga proverite sve prilagođene IAM politike i potražite bilo koju koja omogućava sts:AssumeRole nad prethodno otkrivenim dečijim nalozima.

  • Kompromitujte principala u upravljačkom nalogu sa dozvolom sts:AssumeRole nad ulogom u dečijim nalozima (čak i ako nalog dozvoljava bilo kome iz upravljačkog naloga da se predstavi, budući da je to spoljni nalog, potrebne su specifične sts:AssumeRole dozvole).

Automatizovani alati

Recon

  • aws-recon: Višenitni alat za prikupljanje inventara fokusiran na sigurnost AWS-a napisan u Ruby-u.

# Install
gem install aws_recon

# Recon and get json
AWS_PROFILE=<profile> aws_recon \
--services S3,EC2 \
--regions global,us-east-1,us-east-2 \
--verbose
  • cloudlist: Cloudlist je višenamenski alat za dobijanje resursa (Imena hostova, IP adrese) od provajdera oblaka.

  • cloudmapper: CloudMapper vam pomaže da analizirate vaše Amazon Web Services (AWS) okruženje. Sada sadrži mnogo više funkcionalnosti, uključujući proveru bezbednosnih problema.

# Installation steps in github
# Create a config.json file with the aws info, like:
{
"accounts": [
{
"default": true,
"id": "<account id>",
"name": "dev"
}
],
"cidrs":
{
"2.2.2.2/28": {"name": "NY Office"}
}
}

# Enumerate
python3 cloudmapper.py collect --profile dev
## Number of resources discovered
python3 cloudmapper.py stats --accounts dev

# Create HTML report
## In the report you will find all the info already
python3 cloudmapper.py report --accounts dev

# Identify potential issues
python3 cloudmapper.py audit --accounts dev --json > audit.json
python3 cloudmapper.py audit --accounts dev --markdow > audit.md
python3 cloudmapper.py iam_report --accounts dev

# Identify admins
## The permissions search for are in https://github.com/duo-labs/cloudmapper/blob/4df9fd7303e0337ff16a08f5e58f1d46047c4a87/shared/iam_audit.py#L163-L175
python3 cloudmapper.py find_admins --accounts dev

# Identify unused elements
python3 cloudmapper.py find_unused --accounts dev

# Identify publivly exposed resources
python3 cloudmapper.py public --accounts dev

python cloudmapper.py prepare #Prepare webserver
python cloudmapper.py webserver #Show webserver
  • kartografija: Kartografija je Python alat koji konsoliduje infrastrukturne resurse i odnose između njih u intuitivnom grafičkom prikazu koji pokreće Neo4j baza podataka.

# Install
pip install cartography
## At the time of this writting you need neo4j version 3.5.*

# Get AWS info
AWS_PROFILE=dev cartography --neo4j-uri bolt://127.0.0.1:7687 --neo4j-password-prompt  --neo4j-user neo4j
  • starbase: Starbase prikuplja resurse i odnose sa usluga i sistema, uključujući cloud infrastrukturu, SaaS aplikacije, sigurnosne kontrole, i više, u intuitivnom grafičkom prikazu podržanom Neo4j bazom podataka.

  • aws-inventory: (Koristi python2) Ovo je alat koji pokušava da otkrije sve AWS resurse kreirane u jednom nalogu.

  • aws_public_ips: Ovo je alat za dobavljanje svih javnih IP adresa (IPv4/IPv6) povezanih sa AWS nalogom.

Privesc & Eksploatacija

# Install
## Feel free to use venvs
pip3 install pacu

# Use pacu CLI
pacu
> import_keys <profile_name> # import 1 profile from .aws/credentials
> import_keys --all # import all profiles
> list # list modules
> exec iam__enum_permissions # Get permissions
> exec iam__privesc_scan # List privileged permissions
  • PMapper: Principal Mapper (PMapper) je skripta i biblioteka za identifikaciju rizika u konfiguraciji AWS Identity and Access Management (IAM) za AWS nalog ili AWS organizaciju. Modeluje različite IAM korisnike i uloge u nalogu kao usmereni graf, što omogućava provere za privilege escalation i alternativne putanje koje napadač može preduzeti da bi dobio pristup resursu ili akciji u AWS-u. Možete proveriti dozvole korišćene za pronalaženje privesc putanja u datotekama koje se završavaju sa _edges.py na https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing

# Install
pip install principalmapper

# Get data
pmapper --profile dev graph create
pmapper --profile dev graph display # Show basic info
# Generate graph
pmapper --profile dev visualize # Generate svg graph file (can also be png, dot and graphml)
pmapper --profile dev visualize --only-privesc # Only privesc permissions

# Generate analysis
pmapper --profile dev analysis
## Run queries
pmapper --profile dev query 'who can do iam:CreateUser'
pmapper --profile dev query 'preset privesc *' # Get privescs with admins

# Get organization hierarchy data
pmapper --profile dev orgs create
pmapper --profile dev orgs display
  • cloudsplaining: Cloudsplaining je alat za procenu bezbednosti AWS IAM koji identifikuje kršenja najmanjih privilegija i generiše HTML izveštaj prioritizovan po riziku. Prikazaće vam potencijalno prekomerno privilegovane korisnike, inline i aws polise i koje principale imaju pristup njima. (Ne proverava samo privesc već i druge vrste zanimljivih dozvola, preporučuje se korišćenje).

# Install
pip install cloudsplaining

# Download IAM policies to check
## Only the ones attached with the versions used
cloudsplaining download --profile dev

# Analyze the IAM policies
cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output /tmp/files/
  • cloudjack: CloudJack procenjuje AWS naloge za ranjivosti preuzimanja poddomena kao rezultat odvojenih konfiguracija Route53 i CloudFront.

  • ccat: Listaj ECR repozitorijume -> Preuzmi ECR repozitorijum -> Backdoor-uj ga -> Povuci backdoored sliku

  • Dufflebag: Dufflebag je alat koji pretražuje javne Elastic Block Storage (EBS) snimke u potrazi za tajnama koje su možda slučajno ostavljene unutra.

Revizija

  • cloudsploit: CloudSploit od Aqua je open-source projekat dizajniran za otkrivanje sigurnosnih rizika u cloud infrastrukturi naloga, uključujući: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI), i GitHub (Ne traži ShadowAdmins).

./index.js --csv=file.csv --console=table --config ./config.js

# Compiance options: --compliance {hipaa,cis,cis1,cis2,pci}
## use "cis" for cis level 1 and 2
  • Prowler: Prowler je alat otvorenog koda za bezbednost koji vrši procene najboljih praksi za bezbednost na AWS platformi, revizije, odgovor na incidente, kontinuirano praćenje, jačanje i spremnost za forenzičke analize.

# Install python3, jq and git
# Install
pip install prowler
prowler -v

# Run
prowler <provider>
prowler aws --profile custom-profile [-M csv json json-asff html]
  • CloudFox: CloudFox vam pomaže da steknete situacionu svest u nepoznatim cloud okruženjima. To je alat otvorenog koda za komandnu liniju napravljen da pomogne pentesterima i drugim profesionalcima za ofanzivnu bezbednost da pronađu iskorišćive putanje napada u cloud infrastrukturi.

cloudfox aws --profile [profile-name] all-checks
  • ScoutSuite: Scout Suite je alat otvorenog koda za proveru bezbednosti više oblaka, koji omogućava procenu bezbednosnog položaja okruženja u oblaku.

# Install
virtualenv -p python3 venv
source venv/bin/activate
pip install scoutsuite
scout --help

# Get info
scout aws -p dev
  • cs-suite: Cloud Security Suite (koristi python2.7 i izgleda neodržavan)

  • Zeus: Zeus je moćan alat za AWS EC2 / S3 / CloudTrail / CloudWatch / KMS najbolje prakse za očvršćavanje (izgleda neodržavan). Proverava samo podrazumevane konfigurisane akreditive unutar sistema.

Konstantna revizija

  • cloud-custodian: Cloud Custodian je pravilnički motor za upravljanje javnim cloud nalozima i resursima. Omogućava korisnicima definisanje pravila za omogućavanje dobro upravljanje cloud infrastrukturom, koja je i sigurna i optimizovana po troškovima. Konsoliduje mnoge ad-hoc skripte organizacija u lagani i fleksibilni alat, sa ujedinjenim metrikama i izveštavanjem.

  • pacbot: Bot za pravila kao kod (PacBot) je platforma za kontinuirano praćenje usaglašenosti, izveštavanje o usaglašenosti i automatizaciju sigurnosti za cloud. U PacBot-u, sigurnosna i usaglašenost pravila su implementirana kao kod. Svi resursi otkriveni od strane PacBota se procenjuju prema ovim pravilima kako bi se ocenila usaglašenost sa pravilima. Okvir za automatsko popravljanje PacBota pruža mogućnost automatskog odgovora na povrede pravila preuzimanjem unapred definisanih akcija.

  • streamalert: StreamAlert je serverless, real-time okvir za analizu podataka koji vam omogućava da unosite, analizirate i obaveštavate o podacima iz bilo kog okruženja, koristeći izvore podataka i logiku obaveštavanja koje definišete. Timovi za računarsku sigurnost koriste StreamAlert za skeniranje terabajta podataka dnevnika svakog dana radi otkrivanja incidenata i odgovora.

DEBUG: Snimanje AWS cli zahteva

# Set proxy
export HTTP_PROXY=http://localhost:8080
export HTTPS_PROXY=http://localhost:8080

# Capture with burp nor verifying ssl
aws --no-verify-ssl ...

# Dowload brup cert and transform it to pem
curl http://127.0.0.1:8080/cert --output Downloads/certificate.cer
openssl x509 -inform der -in Downloads/certificate.cer -out Downloads/certificate.pem

# Indicate the ca cert to trust
export AWS_CA_BUNDLE=~/Downloads/certificate.pem

# Run aws cli normally trusting burp cert
aws ...

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated