# 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/RhinoSecurityLabs/cloudgoat) - [https://github.com/BishopFox/iam-vulnerable](https://github.com/BishopFox/iam-vulnerable) - [https://github.com/nccgroup/sadcloud](https://github.com/nccgroup/sadcloud) - [https://github.com/bridgecrewio/terragoat](https://github.com/bridgecrewio/terragoat) - [https://github.com/ine-labs/AWSGoat](https://github.com/ine-labs/AWSGoat) - [http://flaws.cloud/](http://flaws.cloud/) - [http://flaws2.cloud/](http://flaws2.cloud/) Strumenti per simulare attacchi: - [https://github.com/Datadog/stratus-red-team/](https://github.com/Datadog/stratus-red-team/) - [https://github.com/sbasu7241/AWS-Threat-Simulation-and-Detection/tree/main](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**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) con accesso all'endpoint dei metadati - **Lettura di File Locali** - `/home/USERNAME/.aws/credentials` - `C:\Users\USERNAME\.aws\credentials` - **breach** di terze parti - **Dipendente** Interno - [**Cognito**](aws-services/aws-cognito-enum/index.html#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): ```bash # 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**](aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md#honeytokens-bypass). ### 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**](#automated-tools). 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:AssumeRole` sugli account secondari precedentemente scoperti**. - **Compromettere** un **principale** nell'account di gestione con **`sts:AssumeRole` permesso 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`). ## Automated Tools ### Recon - [**aws-recon**](https://github.com/darkbitio/aws-recon): Uno strumento di **raccolta inventario** focalizzato sulla sicurezza AWS multi-threaded scritto in Ruby. ```bash # Install gem install aws_recon # Recon and get json AWS_PROFILE= aws_recon \ --services S3,EC2 \ --regions global,us-east-1,us-east-2 \ --verbose ``` - [**cloudlist**](https://github.com/projectdiscovery/cloudlist): Cloudlist è uno **strumento multi-cloud per ottenere Asset** (Nomi host, Indirizzi IP) dai fornitori di cloud. - [**cloudmapper**](https://github.com/duo-labs/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. ```bash # Installation steps in github # Create a config.json file with the aws info, like: { "accounts": [ { "default": true, "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**](https://github.com/lyft/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. ```bash # 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**](https://github.com/JupiterOne/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**](https://github.com/nccgroup/aws-inventory): (Usa python2) Questo è uno strumento che cerca di **scoprire tutti** [**le risorse AWS**](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#resource) create in un account. - [**aws_public_ips**](https://github.com/arkadiyt/aws_public_ips): È uno strumento per **recuperare tutti gli indirizzi IP pubblici** (sia IPv4 che IPv6) associati a un account AWS. ### Privesc & Exploiting - [**SkyArk**](https://github.com/cyberark/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-PrivilegedPolicy`** in [https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1](https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1). - [**pacu**](https://github.com/RhinoSecurityLabs/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](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). ```bash # Install ## Feel free to use venvs pip3 install pacu # Use pacu CLI pacu > import_keys # 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**](https://github.com/nccgroup/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.py` in [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing) ```bash # 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**](https://github.com/salesforce/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). ```bash # 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**](https://github.com/prevade/cloudjack): CloudJack valuta gli account AWS per **vulnerabilità di hijacking dei sottodomini** a causa di configurazioni disaccoppiate di Route53 e CloudFront. - [**ccat**](https://github.com/RhinoSecurityLabs/ccat): Elenca i repo ECR -> Estrai il repo ECR -> Inserisci un backdoor -> Invia l'immagine con backdoor - [**Dufflebag**](https://github.com/bishopfox/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**](https://github.com/aquasecurity/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). ```bash ./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**](https://github.com/prowler-cloud/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. ```bash # Install python3, jq and git # Install pip install prowler prowler -v # Run prowler prowler aws --profile custom-profile [-M csv json json-asff html] ``` - [**CloudFox**](https://github.com/BishopFox/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. ```bash cloudfox aws --profile [profile-name] all-checks ``` - [**ScoutSuite**](https://github.com/nccgroup/ScoutSuite): Scout Suite è uno strumento open source di auditing della sicurezza multi-cloud, che consente la valutazione della postura di sicurezza degli ambienti cloud. ```bash # Install virtualenv -p python3 venv source venv/bin/activate pip install scoutsuite scout --help # Get info scout aws -p dev ``` - [**cs-suite**](https://github.com/SecurityFTW/cs-suite): Cloud Security Suite (usa python2.7 e sembra non essere mantenuto) - [**Zeus**](https://github.com/DenizParlak/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**](https://github.com/cloud-custodian/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**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** è una piattaforma per **monitoraggio continuo della conformità, reporting della conformità e automazione della sicurezza per il clou**d. 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**](https://github.com/airbnb/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 ```bash # 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 - [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) - [https://cloudsecdocs.com/aws/defensive/tooling/audit/](https://cloudsecdocs.com/aws/defensive/tooling/audit/) {{#include ../../banners/hacktricks-training.md}}