AWS Pentesting

Impara l'hacking di AWS da zero a eroe con htARTE (Esperto Red Team di HackTricks su AWS)!

Altri modi per supportare 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 gerarchia dell'organizzazione, IAM e altri concetti di base sono spiegati in:

pageAWS - Basic Information

Laboratori per imparare

Strumenti per simulare attacchi:

Metodologia del Pentester/Red Team di AWS

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

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

  • Leak in github (o simili) - OSINT

  • Ingegneria Sociale

  • Riutilizzo di password (leak di password)

  • Vulnerabilità nelle Applicazioni ospitate su AWS

  • Server Side Request Forgery con accesso al metadata endpoint

  • Lettura di File Locali

  • /home/USERNAME/.aws/credentials

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

  • 3rd parties violati

  • Dipendente Interno

  • Cognito credenziali

O compromettendo un servizio non autenticato esposto:

pageAWS - Unauthenticated Enum & Access

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

pageAWS - Permissions for a Pentest

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

Enumerazione di Base

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

Si noti che le aziende potrebbero utilizzare canary tokens per identificare quando i token vengono rubati e utilizzati. È consigliabile verificare se un token è un canary token prima di utilizzarlo. Per ulteriori informazioni controlla questa pagina.

Enumerazione dell'Organizzazione

pageAWS - Organizations Enum

Enumerazione IAM

Se hai abbastanza autorizzazioni controllare i privilegi di ogni 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 autorizzazioni per enumerare IAM, puoi rubarle forzatamente per capirle. Controlla come fare l'enumerazione e il brute-forcing in:

pageAWS - IAM, Identity Center & SSO Enum

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

Enumerazione dei Servizi, Post-Esploitation & Persistenza

AWS ha un'enorme quantità di servizi, nella pagina seguente troverai informazioni di base, cheatsheets di enumerazione, come evitare la rilevazione, ottenere persistenza, e altri trucchi di post-esploitation su alcuni di essi:

pageAWS - Services

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

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

pageAWS - Unauthenticated Enum & Access

Escalation dei Privilegi

Se puoi controllare almeno le tue autorizzazioni su risorse diverse potresti verificare se sei in grado di ottenere ulteriori autorizzazioni. Dovresti concentrarti almeno sulle autorizzazioni indicate in:

pageAWS - Privilege Escalation

Servizi Esposti Pubblicamente

Mentre stai enumerando i servizi AWS potresti averne trovati alcuni che espongono elementi su 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. Riguardo a come trovare vulnerabilità nei servizi di rete esposti ti consiglierei di cercare il servizio specifico in:

Compromissione dell'Organizzazione

Dall'account root/account di gestione

Quando l'account di gestione crea nuovi account nell'organizzazione, viene creato un nuovo ruolo nel nuovo account, di default chiamato OrganizationAccountAccessRole e dà la politica 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 dei account figli e i nomi del ruolo (di default OrganizationAccountAccessRole) che permette all'account di gestione di accedere come amministratore.

  • 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 quelle che permettono sts:AssumeRole sui account figli precedentemente scoperti.

  • Compromettere un principale nell'account di gestione con permesso sts:AssumeRole sul ruolo negli account figli (anche se l'account permette a chiunque dall'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 multi-threaded focalizzato 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 Risorse (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'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 gli asset dell'infrastruttura e le relazioni tra di essi in una visualizzazione 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, le applicazioni SaaS, i controlli di sicurezza e altro ancora in una visualizzazione grafica intuitiva supportata dal database Neo4j.

  • aws-inventory: (Utilizza 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 (IPv4/IPv6) associati a un account AWS.

Privesc & Sfruttamento

# 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 IAM e Ruoli in un account come un grafo diretto, che consente di controllare l'elevazione dei privilegi e i percorsi alternativi che un attaccante potrebbe intraprendere per ottenere accesso a una risorsa o azione in AWS. È possibile controllare le autorizzazioni utilizzate per trovare i percorsi di privesc nei file il cui nome termina 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 violazioni del principio del privilegio minimo e genera un rapporto HTML con priorità dei rischi. Mostrerà potenzialmente un cliente con privilegi eccessivi, inline e policy aws e a quali principali hanno accesso. (Non controlla solo le privesc ma anche altri tipi di autorizzazioni 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 dirottamento di sottodomini a seguito di configurazioni disaccoppiate di Route53 e CloudFront.

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

  • Dufflebag: Dufflebag è uno strumento che ricerca tra gli snapshot pubblici di Elastic Block Storage (EBS) per individuare 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 negli account di infrastrutture cloud, 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 della situazione 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 audit 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 (utilizza python2.7 e sembra non essere mantenuto)

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

Audit Costante

  • cloud-custodian: Cloud Custodian è un motore di regole per la gestione di account e risorse cloud pubblici. Consente agli utenti di definire politiche per abilitare un'infrastruttura cloud ben gestita, che sia sicura e ottimizzata in termini di costi. Consolida molti degli script ad hoc delle organizzazioni 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 generazione di report sulla 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 vengono valutate rispetto a queste politiche per valutare la conformità alle politiche. Il framework auto-fix di PacBot fornisce la capacità di rispondere automaticamente alle violazioni delle politiche mediante l'adozione di azioni predefinite.

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

DEBUG: Cattura delle richieste del cli AWS

# 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 l'hacking AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated