AWS pwn
Sommario
Questa è una raccolta di script scritti malamente per svolgere vari compiti relativi ai penetration test su AWS. Non ti preoccupare se non funziona per te. Potrebbe essere che AWS sia cambiato da quando uno strumento è stato scritto o che il codice faccia schifo. In ogni caso, sentiti libero di contribuire.
La maggior parte di questa robaccia è stata scritta da Daniel Grzelak ma ci sono stati molti contributi, in particolare da Mike Fuller.
Requisiti
pip install -r requirements.txt
Assicurati anche di configurare le tue credenziali AWS in ~/.aws/credentials.
Riconoscimento
Cose da fare per la raccolta di informazioni pre-compromissione.
- validate_iam_access_keys.py - Dato un file TSV di combinazioni chiave di accesso + segreto [+ sessione], controlla la validità dell'accesso e restituisce le informazioni di identità del principale.
./validate_iam_access_keys.py -i /tmp/keys.txt -o /tmp/out.json
- validate_s3_buckets.py - Dato un file di testo con una parola per riga, controlla se i bucket esistono e restituisce informazioni identificative di base.
./validate_s3_buckets.py -i /tmp/words.txt -o /tmp/out.json
- validate_iam_principals.py - Dato un file di testo di principal (es. user/admin, role/deploy), controlla se i principal esistono in un account specificato.
./validate_iam_principals.py -a 123456789012 -i /tmp/words.txt -o /tmp/out.json
- validate_accounts.py - Dato un file di testo di ID account e alias di account, controlla se gli account esistono.
./validate_accounts.py -i /tmp/accounts.txt -o /tmp/out.json
Sfruttamento
Cose che ti aiuteranno a ottenere un punto d'appoggio in un account.
Furtività
Cose che potrebbero aiutarti a rimanere nascosto dopo aver compromesso un account.
- disrupt_cloudtrail.py - Tenta di interrompere/disabilitare il logging di CloudTrail nel modo specificato.
./disrupt_cloudtrail.py -s
Esplorazione
Cose per aiutarti a capire cosa hai compromesso.
- dump_account_data.sh - Chiama una serie di funzioni generiche basate sull'account (read/list/get/describe) e salva i dati in una posizione specificata. Molto rumoroso ma ottimo per un'istantanea puntuale.
./dump_account_data.sh /tmp/
Elevazione
Cose per aiutarti a spostarti all'interno di un account e raccogliere diversi livelli di accesso.
- dump_instance_attributes.py - Scorre ogni istanza EC2 nell'account e recupera gli attributi specificati dell'istanza. Comunemente usato per recuperare userData, che tende a contenere segreti.
./dump_instance_attributes.py -u -o /tmp/
- dump_cloudformation_stack_descriptions.py - Recupera le descrizioni degli stack per ogni stack esistente e per ogni stack cancellato negli ultimi 90 giorni. I parametri nelle descrizioni degli stack contengono spesso password e altri segreti.
./dump_cloudformation_stack_descriptions.py -o /tmp/data
- assume_roles.py - Tenta di assumere tutti i ruoli (ARN) in un file o forniti dall'API list-roles.
./assume_roles.py -o /tmp/out.json
- add_iam_policy - Aggiunge la policy di amministratore e tutte le azioni a un utente, ruolo o gruppo specificato. Richiede privilegi IAM putPolicy o attachPolicy.
./add_iam_policy.py -u myuser -r myrole -g mygroup
- bouncy_bouncy_cloudy_cloud - Riavvia una determinata istanza EC2 e riscrive il suo userData in modo da poter eseguire codice arbitrario o rubare le credenziali temporanee del profilo dell'istanza.
./bouncy_bouncy_cloudy_cloud.py -i instance-id -e exfiltration-endpoint
Persistenza
Cose per aiutare a mantenere l'accesso a un account.
- rabbit_lambda - Una funzione Lambda di esempio che risponde agli eventi di eliminazione utente creando più copie dell'utente eliminato.
- cli_lambda - Una funzione Lambda che funge da proxy per AWS CLI e non richiede credenziali.
- backdoor_created_users_lambda - Una funzione Lambda che aggiunge una chiave di accesso a ogni utente appena creato.
- backdoor_created_roles_lambda - Una funzione Lambda che aggiunge una relazione di trust a ogni ruolo appena creato.
- backdoor_created_security_groups_lambda - Una funzione Lambda che aggiunge una regola di accesso in entrata specificata a ogni gruppo di sicurezza appena creato.
- backdoor_all_users.py - Aggiunge una chiave di accesso a ogni utente nell'account.
- backdoor_all_roles.py - Aggiunge una relazione di trust a ogni ruolo nell'account. Richiede la modifica del file per impostare l'ARN del ruolo.
- backdoor_all_security_groups.py - Aggiunge una regola di accesso in entrata specificata a ogni gruppo di sicurezza nell'account. Richiede la modifica del file per impostare la regola.
Esfiltrazione
Cose per aiutarti a estrarre e spostare dati in modi AWS.
Miscellanea
Altre cose che ero troppo stupido o pigro per classificare.
- reserved_words.txt - Un elenco di parole/token che hanno un significato speciale in AWS o probabilmente lo avranno presto.
- endpoints.txt - Un elenco più o meno aggiornato di endpoint API esposti da AWS.
- integrations.txt - Un file TSV di servizi che si integrano con AWS tramite ruoli o chiavi di accesso e i loro ID account, nomi utente predefiniti, ecc.
- download_docs.sh - La riga di comando per wget tutti i documenti AWS perché sono stupido e perdo tempo a rifarlo ogni volta.
Da fare
- Aggiungere password agli utenti per persistenza
- Scaricare le risorse degli stack
- Validare MFA
- Aggiungere più chiamate a dump_account_data
- Aggiungere più metodi di interruzione dei log
- Creare uno script di parsing di CloudTrail per estrarre dati interessanti da CloudTrail
- Creare un enumeratore di permessi dei bucket S3
- Creare uno strumento per ottenere credenziali AWS da posizioni comuni sul disco
- Creare uno strumento di clonazione
- Creare uno stupido strumento di escalation dei privilegi che utilizza passrole
- Validare le code
- Validare i topic di notifica
- Correggere gli script di persistenza per utilizzare argomenti invece di costanti all'interno degli script