AWS Pentesting

Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks

Informazioni di base

Prima di iniziare il pentesting di un ambiente AWS ci sono alcune cose di base che devi sapere su come funziona AWS per aiutarti a capire cosa devi fare, come trovare configurazioni errate e come sfruttarle.

Concetti come la gerarchia dell'organizzazione, IAM e altri concetti di base sono spiegati in:

AWS - Basic Information

Laboratori per imparare

Strumenti per simulare attacchi:

Metodologia Pentester/Red Team AWS

Per auditare un ambiente AWS è molto importante sapere: quali servizi vengono utilizzati, cosa è esposto, chi ha accesso a cosa e come sono collegati i servizi AWS interni e i servizi esterni.

Dal punto di vista del Red Team, il primo passo per compromettere un ambiente AWS è riuscire a ottenere alcune credenziali. Ecco alcune idee su come farlo:

  • Leaks in github (o simili) - OSINT

  • Ingegneria Sociale

  • Riutilizzo delle password (password leaks)

  • Vulnerabilità nelle applicazioni ospitate su AWS

  • Server Side Request Forgery con accesso all'endpoint dei metadati

  • Lettura di file locali

  • /home/USERNAME/.aws/credentials

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

  • 3rd parties compromesse

  • Dipendente Interno

  • Cognito credenziali

Oppure compromettendo un servizio non autenticato esposto:

AWS - Unauthenticated Enum & Access

Oppure se stai facendo una revisione potresti semplicemente chiedere le credenziali con questi ruoli:

AWS - Permissions for a Pentest

Dopo aver ottenuto le credenziali, devi sapere a chi appartengono quelle credenziali e a cosa hanno accesso, quindi devi eseguire alcune enumerazioni di base:

Enumerazione di base

SSRF

Se hai trovato una SSRF in una macchina all'interno di AWS, controlla questa pagina per trucchi:

Whoami

Una delle prime cose che devi sapere è chi sei (in quale account ti trovi e altre informazioni sull'ambiente AWS):

# 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

Nota che le aziende potrebbero utilizzare canary tokens per identificare quando i token vengono rubati e utilizzati. È consigliato verificare se un token è un canary token o meno prima di usarlo. Per maggiori informazioni controlla questa pagina.

Enumerazione dell'Organizzazione

AWS - Organizations Enum

Enumerazione IAM

Se hai abbastanza permessi, controllare i privilegi di ogni entità all'interno dell'account AWS ti aiuterà a capire cosa tu e altre identità potete fare e come escalare i privilegi.

Se non hai abbastanza permessi per enumerare IAM, puoi rubare e forzare brutalmente per scoprirli. Controlla come fare l'enumerazione e il brute-forcing in:

AWS - IAM, Identity Center & SSO Enum

Ora che hai alcune informazioni sulle tue credenziali (e se sei un red team speriamo che non sei stato rilevato). È il momento di capire quali servizi vengono utilizzati nell'ambiente. Nella sezione seguente puoi controllare alcuni modi per enumerare alcuni servizi comuni.

Enumerazione dei Servizi, Post-Exploitation & Persistenza

AWS ha un'incredibile quantità di servizi, nella pagina seguente troverai informazioni di base, cheatsheet di enumerazione, come evitare il rilevamento, ottenere persistenza e altri trucchi di post-exploitation su alcuni di essi:

AWS - Services

Nota che non è necessario eseguire tutto il lavoro manualmente, qui sotto in questo post puoi trovare una sezione sui strumenti automatici.

Inoltre, in questa fase potresti aver scoperto più servizi esposti agli utenti non autenticati, potresti essere in grado di sfruttarli:

AWS - Unauthenticated Enum & Access

Escalation dei Privilegi

Se puoi controllare almeno i tuoi permessi su diverse risorse, potresti verificare se sei in grado di ottenere ulteriori permessi. Dovresti concentrarti almeno sui permessi indicati in:

AWS - Privilege Escalation

Servizi Esposti Pubblicamente

Durante l'enumerazione dei servizi AWS potresti aver trovato alcuni di essi che espongono elementi a Internet (porte VM/Containers, database o servizi di coda, snapshot o bucket...). Come pentester/red teamer dovresti sempre verificare se puoi trovare informazioni sensibili / vulnerabilità su di essi poiché potrebbero fornirti ulteriore accesso all'account AWS.

In questo libro dovresti trovare informazioni su come trovare servizi AWS esposti e come controllarli. Per quanto riguarda come trovare vulnerabilità nei servizi di rete esposti ti consiglio di cercare il servizio specifico in:

Compromettere l'Organizzazione

Dall'account root/management

Quando l'account di gestione crea nuovi account nell'organizzazione, viene creato un nuovo ruolo nel nuovo account, di default chiamato OrganizationAccountAccessRole e che assegna la policy AdministratorAccess all'account di gestione per accedere al nuovo account.

Quindi, per accedere come amministratore a un account figlio hai bisogno di:

  • Compromettere l'account di gestione e trovare l'ID degli account figli e i nomi del ruolo (OrganizationAccountAccessRole per default) che consente all'account di gestione di accedere come admin.

  • Per trovare gli account figli vai alla sezione organizzazioni nella console aws o esegui aws organizations list-accounts

  • Non puoi trovare direttamente il nome dei ruoli, quindi controlla tutte le policy IAM personalizzate e cerca qualsiasi che consenta sts:AssumeRole sugli account figli precedentemente scoperti.

  • Compromettere un principale nell'account di gestione con permesso sts:AssumeRole sul ruolo negli account figli (anche se l'account consente a chiunque dell'account di gestione di impersonare, poiché è un account esterno, sono necessari permessi specifici sts:AssumeRole).

Strumenti Automatici

Ricognizione

  • aws-recon: Uno strumento di raccolta inventario multi-threaded incentrato sulla sicurezza AWS scritto in Ruby.

# 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 è uno strumento multi-cloud per ottenere Asset (Nomi host, Indirizzi IP) dai Cloud Provider.

  • cloudmapper: CloudMapper ti aiuta ad analizzare i tuoi ambienti Amazon Web Services (AWS). Ora contiene molte più funzionalità, inclusa l'auditing per problemi di sicurezza.

# 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
  • cartography: Cartography è uno strumento Python che consolida le risorse dell'infrastruttura e le relazioni tra di esse in una vista grafica intuitiva alimentata da un database Neo4j.

# 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 raccoglie asset e relazioni da servizi e sistemi, inclusi cloud infrastructure, applicazioni SaaS, controlli di sicurezza e altro in una vista grafica intuitiva supportata dal database Neo4j.

  • aws-inventory: (Usa python2) Questo è uno strumento che cerca di scoprire tutte le risorse AWS create in un account.

  • aws_public_ips: È uno strumento per recuperare tutti gli indirizzi IP pubblici (sia IPv4/IPv6) associati a un account AWS.

Privesc & Exploiting

# 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) è uno script e una libreria per identificare i rischi nella configurazione di AWS Identity and Access Management (IAM) per un account AWS o un'organizzazione AWS. Modella i diversi IAM Users e Roles in un account come un grafo diretto, il che consente di verificare l'escalation dei privilegi e i percorsi alternativi che un attaccante potrebbe seguire per ottenere l'accesso a una risorsa o azione in AWS. Puoi controllare i permessi utilizzati per trovare i percorsi di privesc nei nomi dei file che terminano in _edges.py in 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 è uno strumento di valutazione della sicurezza IAM di AWS che identifica le violazioni del principio del privilegio minimo e genera un report HTML prioritizzato per rischio. Ti mostrerà i clienti potenzialmente eccessivamente privilegiati, le policy inline e aws e quali principali hanno accesso a esse. (Non controlla solo per privesc ma anche altri tipi di permessi interessanti, consigliato l'uso).

# 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 valuta gli account AWS per vulnerabilità di subdomain hijacking a causa di configurazioni decouple di Route53 e CloudFront.

  • ccat: Elenca i repository ECR -> Scarica il repository ECR -> Inserisci una backdoor -> Carica l'immagine con backdoor

  • Dufflebag: Dufflebag è uno strumento che cerca tra gli snapshot pubblici di Elastic Block Storage (EBS) segreti che potrebbero essere stati lasciati accidentalmente.

Audit

  • cloudsploit: CloudSploit di Aqua è un progetto open-source progettato per consentire il rilevamento di rischi di sicurezza nelle infrastrutture cloud account, inclusi: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI) e GitHub (Non cerca 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 è uno strumento di sicurezza Open Source per eseguire valutazioni delle migliori pratiche di sicurezza AWS, audit, risposta agli incidenti, monitoraggio continuo, hardening e preparazione alla forensica.

# 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 ti aiuta a ottenere consapevolezza situazionale in ambienti cloud sconosciuti. È uno strumento a riga di comando open source creato per aiutare i penetration tester e altri professionisti della sicurezza offensiva a trovare percorsi di attacco sfruttabili nell'infrastruttura cloud.

cloudfox aws --profile [profile-name] all-checks
  • ScoutSuite: Scout Suite è uno strumento open source per l'auditing della sicurezza multi-cloud, che consente la valutazione della postura di sicurezza degli ambienti cloud.

# 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 (usa python2.7 e sembra non mantenuto)

  • Zeus: Zeus è uno strumento potente per le migliori pratiche di hardening di AWS EC2 / S3 / CloudTrail / CloudWatch / KMS (sembra non mantenuto). Controlla solo le credenziali configurate di default all'interno del sistema.

Audit Costante

  • cloud-custodian: Cloud Custodian è un motore di regole per la gestione di account e risorse cloud pubbliche. Consente agli utenti di definire politiche per abilitare un'infrastruttura cloud ben gestita, sicura e ottimizzata nei costi. Consolida molti degli script ad hoc che le organizzazioni hanno in uno strumento leggero e flessibile, con metriche e report unificati.

  • pacbot: Policy as Code Bot (PacBot) è una piattaforma per il monitoraggio continuo della conformità, la reportistica della conformità e l'automazione della sicurezza per il cloud. In PacBot, le politiche di sicurezza e conformità sono implementate come codice. Tutte le risorse scoperte da PacBot sono valutate rispetto a queste politiche per misurare la conformità alle politiche. Il framework auto-fix di PacBot fornisce la capacità di rispondere automaticamente alle violazioni delle politiche prendendo azioni predefinite.

  • streamalert: StreamAlert è un framework di analisi dati in tempo reale senza server che ti consente di ingestire, analizzare e allertare sui dati provenienti da qualsiasi ambiente, utilizzando fonti di dati e logiche di allerta che definisci. I team di sicurezza informatica utilizzano StreamAlert per scansionare terabyte di dati di log ogni giorno per il rilevamento e la risposta agli incidenti.

DEBUG: Catturare le richieste AWS cli

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

Riferimenti

Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks

Last updated