19 KiB
AWS Pentesting
{{#include ../../banners/hacktricks-training.md}}
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 misconfigurazioni e come sfruttarle.
Concetti come gerarchia organizzativa, IAM e altri concetti di base sono spiegati in:
{{#ref}} aws-basic-information/ {{#endref}}
Laboratori per imparare
- https://github.com/RhinoSecurityLabs/cloudgoat
- https://github.com/BishopFox/iam-vulnerable
- https://github.com/nccgroup/sadcloud
- https://github.com/bridgecrewio/terragoat
- https://github.com/ine-labs/AWSGoat
- http://flaws.cloud/
- http://flaws2.cloud/
Strumenti per simulare attacchi:
- https://github.com/Datadog/stratus-red-team/
- https://github.com/sbasu7241/AWS-Threat-Simulation-and-Detection/tree/main
Metodologia AWS Pentester/Red Team
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. Qui hai alcune idee su come farlo:
- Leak su github (o simili) - OSINT
- Ingegneria Sociale
- Riutilizzo della Password (leak di password)
- Vulnerabilità nelle applicazioni ospitate su AWS
- Server Side Request Forgery con accesso all'endpoint dei metadati
- Lettura di File Locali
/home/USERNAME/.aws/credentialsC:\Users\USERNAME\.aws\credentials- breach di terze parti
- Dipendente Interno
- Cognito credenziali
Oppure compromettendo un servizio non autenticato esposto:
{{#ref}} aws-unauthenticated-enum-access/ {{#endref}}
Oppure, se stai facendo una revisione, potresti semplicemente chiedere le credenziali con questi ruoli:
{{#ref}} aws-permissions-for-a-pentest.md {{#endref}}
Note
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 un SSRF in una macchina all'interno di AWS, controlla questa pagina per trucchi:
{{#ref}} https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html {{#endref}}
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
Caution
Nota che le aziende potrebbero utilizzare canary tokens per identificare quando i token vengono rubati e utilizzati. Si consiglia di verificare se un token è un canary token o meno prima di utilizzarlo.
Per ulteriori informazioni controlla questa pagina.
Org Enumeration
{{#ref}} aws-services/aws-organizations-enum.md {{#endref}}
IAM Enumeration
Se hai abbastanza permessi, controllare i privilegi di ciascuna entità all'interno dell'account AWS ti aiuterà a capire cosa puoi fare e cosa possono fare 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:
{{#ref}} aws-services/aws-iam-enum.md {{#endref}}
Note
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.
Services Enumeration, Post-Exploitation & Persistence
AWS ha un'incredibile quantità di servizi, nella pagina seguente troverai informazioni di base, enumerazione cheatsheets**,** come evitare il rilevamento, ottenere persistenza e altri trucchi di post-exploitation su alcuni di essi:
{{#ref}} aws-services/ {{#endref}}
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:
{{#ref}} aws-unauthenticated-enum-access/ {{#endref}}
Privilege Escalation
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:
{{#ref}} aws-privilege-escalation/ {{#endref}}
Publicly Exposed Services
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 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:
{{#ref}} https://book.hacktricks.wiki/ {{#endref}}
Compromising the Organization
From the root/management account
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:AssumeRolesugli account secondari precedentemente scoperti. - Compromettere un principale nell'account di gestione con
sts:AssumeRolepermesso 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 specificists:AssumeRole).
Automated Tools
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
- SkyArk: Scopri gli utenti più privilegiati nell'ambiente AWS scansionato, inclusi gli AWS Shadow Admins. Utilizza powershell. Puoi trovare la definizione delle politiche privilegiate nella funzione
Check-PrivilegedPolicyin https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1. - pacu: Pacu è un framework di sfruttamento AWS open-source, progettato per test di sicurezza offensivi contro ambienti cloud. Può enumerare, trovare configurazioni errate e sfruttarle. Puoi trovare la definizione dei permessi privilegiati in https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134 all'interno del dizionario
user_escalation_methods. - Nota che pacu controlla solo i tuoi percorsi di privesc (non a livello di account).
# 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 privilege escalation e per percorsi alternativi che un attaccante potrebbe seguire per ottenere accesso a una risorsa o azione in AWS. Puoi controllare le permissions utilizzate per trovare percorsi di privesc nei nomi dei file che terminano con
_edges.pyin 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 rischio.
Mostrerà i clienti 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, 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 negli account di infrastruttura 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 preparazione 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, sicura e 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à. 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 acquisire, analizzare e allertare sui dati provenienti da qualsiasi ambiente, utilizzando fonti di dati e logica di allerta 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
{{#include ../../banners/hacktricks-training.md}}