AWS Pentesting

Support HackTricks

Basic Information

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 misconfigurazioni e come sfruttarle.

Concetti come gerarchia organizzativa, IAM e altri concetti di base sono spiegati in:

Labs to learn

Tools to simulate attacks:

AWS Pentester/Red Team Methodology

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

Dal punto di vista di un 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

  • Social Engineering

  • Password reuse (password leaks)

  • Vulnerabilità nelle applicazioni ospitate su AWS

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

  • Local File Read

  • /home/USERNAME/.aws/credentials

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

  • breached di terze parti

  • Internal Employee

  • Cognito credentials

Oppure compromettendo un servizio non autenticato esposto:

O se stai facendo una review potresti semplicemente chiedere le credenziali con questi ruoli:

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

Basic Enumeration

SSRF

Se hai trovato un 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. Si consiglia di controllare se un token è un canary token o meno prima di utilizzarlo. Per ulteriori informazioni controlla questa pagina.

Enumerazione dell'Organizzazione

Enumerazione IAM

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

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

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

Enumerazione dei Servizi, Post-Exploitation e Persistenza

AWS ha un numero straordinario di servizi, nella pagina seguente troverai informazioni di base, cheatsheets di enumerazione, come evitare il rilevamento, ottenere persistenza e altri trucchi di post-exploitation su alcuni di essi:

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

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

Escalation dei Privilegi

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

Servizi Esposti Pubblicamente

Durante l'enumerazione dei servizi AWS potresti aver trovato alcuni di essi che espongono elementi a Internet (porte VM/Container, database o servizi di coda, snapshot o bucket...). Come pentester/red teamer dovresti sempre controllare se riesci a 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:

Compromissione dell'Organizzazione

Dall'account root/management

Quando l'account di gestione crea nuovi account nell'organizzazione, viene creata una nuova funzione nel nuovo account, chiamata per impostazione predefinita OrganizationAccountAccessRole e viene fornita la policy AdministratorAccess all'account di gestione per accedere al nuovo account.

Quindi, per accedere come amministratore a un account secondario, devi:

  • Compromettere l'account di gestione e trovare l'ID degli account secondari e i nomi della funzione (OrganizationAccountAccessRole per impostazione predefinita) che consente all'account di gestione di accedere come admin.

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

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

  • Compromettere un principale nell'account di gestione con permesso sts:AssumeRole sulla funzione negli account secondari (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

Recon

  • aws-recon: Uno strumento di raccolta inventario focalizzato sulla sicurezza AWS multi-threaded 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 fornitori di cloud.

  • cloudmapper: CloudMapper ti aiuta ad analizzare i tuoi ambienti Amazon Web Services (AWS). Ora contiene molte più funzionalità, inclusa l'audit 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 infrastrutturali 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, inclusa l'infrastruttura cloud, 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 tutti le risorse AWS create in un account.

  • aws_public_ips: È uno strumento per recuperare tutti gli indirizzi IP pubblici (sia IPv4 che 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 utenti e ruoli IAM in un account come un grafo diretto, il che consente controlli per l'escalation dei privilegi e per percorsi alternativi che un attaccante potrebbe seguire per ottenere accesso a una risorsa o azione in AWS. Puoi controllare le permisssioni utilizzate per trovare percorsi di privesc nei nomi dei file che terminano con _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 AWS IAM che identifica le violazioni del principio del minimo privilegio e genera un rapporto HTML prioritizzato per il rischio. Mostrerà i clienti eccessivamente privilegiati, le politiche inline e aws e quali principali hanno accesso a esse. (Controlla non solo per privesc ma anche altri tipi di permessi interessanti, si consiglia di usarlo).

# 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 hijacking dei sottodomini a causa di configurazioni disaccoppiate di Route53 e CloudFront.

  • ccat: Elenca i repo ECR -> Estrai il repo ECR -> Inserisci un backdoor -> Invia l'immagine con backdoor

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

Audit

  • cloudsploit: CloudSploit di Aqua è un progetto open-source progettato per consentire la rilevazione di rischi di sicurezza nelle infrastrutture cloud degli 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, indurimento e prontezza forense.

# 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 da 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 di 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 essere mantenuto)

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

Audit Costante

  • cloud-custodian: Cloud Custodian è un motore di regole per gestire account e risorse nel cloud pubblico. Permette agli utenti di definire politiche per abilitare un'infrastruttura cloud ben gestita, che sia sia sicura che ottimizzata in termini di 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 monitoraggio continuo della conformità, reporting della conformità e automazione della sicurezza per il cloud. In PacBot, le politiche di sicurezza e conformità sono implementate come codice. Tutte le risorse scoperte da PacBot vengono valutate rispetto a queste politiche per misurare la conformità alle politiche. Il framework auto-fix di PacBot fornisce la possibilità di rispondere automaticamente alle violazioni delle politiche intraprendendo azioni predefinite.

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

DEBUG: Cattura delle 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

Supporta HackTricks

Last updated