AWS pwn
Résumé
Ceci est une collection de scripts horriblement écrits pour effectuer diverses tâches liées aux tests de pénétration AWS. Ne sois pas triste si ça ne fonctionne pas pour toi. Il se peut qu'AWS ait changé depuis la création d'un outil donné, ou que le code soit mauvais. Dans tous les cas, n'hésite pas à contribuer.
La plupart de ces trucs ont été écrits par Daniel Grzelak, mais il y a eu de nombreuses contributions, notamment de Mike Fuller.
Prérequis
pip install -r requirements.txt
Assure-toi également de configurer tes identifiants AWS dans ~/.aws/credentials.
Reconnaissance
Choses à faire pour la collecte d'informations avant compromission.
- validate_iam_access_keys.py - Étant donné un fichier TSV de combinaisons clé d'accès + secret [+ session], vérifie la validité de l'accès et retourne les informations d'identité du principal.
./validate_iam_access_keys.py -i /tmp/keys.txt -o /tmp/out.json
- validate_s3_buckets.py - Étant donné un fichier texte avec un mot par ligne, vérifie si les buckets existent et retourne les informations d'identification de base.
./validate_s3_buckets.py -i /tmp/words.txt -o /tmp/out.json
- validate_iam_principals.py - Étant donné un fichier texte de principaux (ex. user/admin, role/deploy), vérifie si les principaux existent dans un compte donné.
./validate_iam_principals.py -a 123456789012 -i /tmp/words.txt -o /tmp/out.json
- validate_accounts.py - Étant donné un fichier texte d'identifiants de compte et d'alias de compte, vérifie si les comptes existent.
./validate_accounts.py -i /tmp/accounts.txt -o /tmp/out.json
Exploitation
Choses qui t'aideront à prendre pied dans un compte.
Furtivité
Choses qui peuvent t'aider à rester caché après avoir compromis un compte.
- disrupt_cloudtrail.py - Tente de perturber/paralyser la journalisation CloudTrail de la manière spécifiée.
./disrupt_cloudtrail.py -s
Exploration
Choses pour t'aider à comprendre ce que tu as compromis.
- dump_account_data.sh - Appelle un tas de fonctions génériques de lecture/liste/obtention/description liées au compte et enregistre les données à un emplacement donné. Très bruyant mais excellent pour un instantané à un moment donné.
./dump_account_data.sh /tmp/
Élévation
Choses pour t'aider à te déplacer dans un compte et à collecter différents niveaux d'accès.
- dump_instance_attributes.py - Parcourt chaque instance EC2 du compte et récupère les attributs d'instance spécifiés. Le plus souvent utilisé pour récupérer userData, qui a tendance à contenir des secrets.
./dump_instance_attributes.py -u -o /tmp/
- dump_cloudformation_stack_descriptions.py - Récupère les descriptions de pile pour chaque pile existante et chaque pile supprimée au cours des 90 derniers jours. Les paramètres dans les descriptions de pile contiennent souvent des mots de passe et autres secrets.
./dump_cloudformation_stack_descriptions.py -o /tmp/data
- assume_roles.py - Tente d'assumer tous les rôles (ARN) dans un fichier ou fournis par l'API list-roles.
./assume_roles.py -o /tmp/out.json
- add_iam_policy - Ajoute la politique d'administrateur et toutes les actions à un utilisateur, rôle ou groupe donné. Nécessite les privilèges IAM putPolicy ou attachPolicy.
./add_iam_policy.py -u myuser -r myrole -g mygroup
- bouncy_bouncy_cloudy_cloud - Fait redémarrer une instance EC2 donnée et réécrit son userData pour que tu puisses exécuter du code arbitraire ou voler des identifiants temporaires de profil d'instance.
./bouncy_bouncy_cloudy_cloud.py -i instance-id -e exfiltration-endpoint
Persistance
Choses pour t'aider à maintenir ton accès à un compte.
- rabbit_lambda - Exemple de fonction Lambda qui répond aux événements de suppression d'utilisateur en créant davantage de copies de l'utilisateur supprimé.
- cli_lambda - Fonction Lambda qui agit comme un proxy AWS CLI et ne nécessite pas d'identifiants.
- backdoor_created_users_lambda - Fonction Lambda qui ajoute une clé d'accès à chaque nouvel utilisateur créé.
- backdoor_created_roles_lambda - Fonction Lambda qui ajoute une relation de confiance à chaque nouveau rôle créé.
- backdoor_created_security_groups_lambda - Fonction Lambda qui ajoute une règle d'accès entrante donnée à chaque nouveau groupe de sécurité créé.
- backdoor_all_users.py - Ajoute une clé d'accès à chaque utilisateur du compte.
- backdoor_all_roles.py - Ajoute une relation de confiance à chaque rôle du compte. Nécessite la modification du fichier pour définir l'ARN du rôle.
- backdoor_all_security_groups.py - Ajoute une règle d'accès entrante donnée à chaque groupe de sécurité du compte. Nécessite la modification du fichier pour définir la règle.
Exfiltration
Choses pour t'aider à extraire et déplacer des données dans AWS.
Divers
Autres choses que j'étais soit trop stupide soit trop paresseux pour classer.
- reserved_words.txt - Liste de mots/jetons qui ont une signification particulière dans AWS ou sont susceptibles d'en avoir bientôt.
- endpoints.txt - Liste plus ou moins à jour des points de terminaison API exposés par AWS.
- integrations.txt - Un TSV des services qui s'intègrent à AWS via des rôles ou des clés d'accès, avec leurs identifiants de compte, noms d'utilisateur par défaut, etc.
- download_docs.sh - La ligne de commande pour wget toute la documentation AWS parce que je suis stupide et que je perds du temps à la refaire à chaque fois.
À faire
- Ajouter des mots de passe aux utilisateurs pour la persistance
- Vider les ressources des piles
- Valider MFA
- Ajouter plus d'appels à dump_account_data
- Ajouter d'autres méthodes de perturbation des journaux
- Créer un script d'analyse CloudTrail pour récupérer les goodies de CloudTrail
- Créer un énumérateur de permissions de bucket S3
- Créer un outil pour récupérer les identifiants AWS depuis les endroits courants sur le disque
- Créer un outil de clonage
- Créer un outil idiot d'élévation de privilèges utilisant passrole
- Valider les files d'attente
- Valider les sujets de notification
- Corriger les scripts de persistance pour utiliser des arguments au lieu de constantes à l'intérieur des scripts