AWS Pentesting
Informations de base
Avant de commencer le pentesting d'un environnement AWS, il y a quelques choses de base que vous devez savoir sur le fonctionnement d'AWS pour vous aider à comprendre ce que vous devez faire, comment trouver des mauvaises configurations et comment les exploiter.
Des concepts tels que la hiérarchie de l'organisation, IAM et d'autres concepts de base sont expliqués dans :
AWS - Basic InformationLabs pour apprendre
Outils pour simuler des attaques :
Méthodologie Pentester/Red Team AWS
Pour auditer un environnement AWS, il est très important de savoir : quels services sont utilisés, ce qui est exposé, qui a accès à quoi, et comment les services internes AWS et les services externes sont connectés.
Du point de vue d'une Red Team, la première étape pour compromettre un environnement AWS est de réussir à obtenir des identifiants. Voici quelques idées pour y parvenir :
Fuites sur github (ou similaire) - OSINT
Ingénierie sociale
Réutilisation de mot de passe (fuites de mots de passe)
Vulnérabilités dans les applications hébergées sur AWS
Server Side Request Forgery avec accès au point de terminaison des métadonnées
Lecture de fichier local
/home/USERNAME/.aws/credentials
C:\Users\USERNAME\.aws\credentials
3rd parties compromis
Employé interne
Cognito credentials
Ou en compromettant un service non authentifié exposé :
AWS - Unauthenticated Enum & AccessOu si vous effectuez une revue, vous pouvez simplement demander des identifiants avec ces rôles :
AWS - Permissions for a PentestAprès avoir réussi à obtenir des identifiants, vous devez savoir à qui appartiennent ces identifiants, et à quoi ils ont accès, vous devez donc effectuer une énumération de base :
Énumération de base
SSRF
Si vous avez trouvé un SSRF dans une machine à l'intérieur d'AWS, consultez cette page pour des astuces :
Whoami
L'une des premières choses que vous devez savoir est qui vous êtes (dans quel compte vous êtes et d'autres informations sur l'environnement AWS) :
Notez que les entreprises peuvent utiliser des canary tokens pour identifier quand les tokens sont volés et utilisés. Il est recommandé de vérifier si un token est un canary token ou non avant de l'utiliser. Pour plus d'informations consultez cette page.
Org Enumeration
AWS - Organizations EnumIAM Enumeration
Si vous avez suffisamment de permissions, vérifier les privilèges de chaque entité à l'intérieur du compte AWS vous aidera à comprendre ce que vous et d'autres identités pouvez faire et comment escalader les privilèges.
Si vous n'avez pas assez de permissions pour énumérer IAM, vous pouvez les voler par force brute pour les découvrir. Consultez comment faire l'énumération et la force brute dans :
AWS - IAM, Identity Center & SSO EnumMaintenant que vous avez des informations sur vos identifiants (et si vous êtes une équipe rouge, espérons que vous n'avez pas été détecté). Il est temps de déterminer quels services sont utilisés dans l'environnement. Dans la section suivante, vous pouvez vérifier quelques façons d'énumérer certains services courants.
Services Enumeration, Post-Exploitation & Persistence
AWS dispose d'une quantité impressionnante de services, dans la page suivante vous trouverez des informations de base, des cheatsheets d'énumération, comment éviter la détection, obtenir de la persistance, et d'autres astuces de post-exploitation sur certains d'entre eux :
AWS - ServicesNotez que vous n'avez pas besoin de faire tout le travail manuellement, ci-dessous dans ce post vous pouvez trouver une section sur les outils automatiques.
De plus, à ce stade, vous pourriez avoir découvert plus de services exposés aux utilisateurs non authentifiés, vous pourriez être en mesure de les exploiter :
AWS - Unauthenticated Enum & AccessPrivilege Escalation
Si vous pouvez vérifier au moins vos propres permissions sur différentes ressources, vous pourriez vérifier si vous êtes capable d'obtenir d'autres permissions. Vous devriez vous concentrer au moins sur les permissions indiquées dans :
AWS - Privilege EscalationPublicly Exposed Services
En énumérant les services AWS, vous pourriez en avoir trouvé certains exposant des éléments à Internet (ports VM/Containers, bases de données ou services de file d'attente, snapshots ou buckets...). En tant que pentester/équipe rouge, vous devriez toujours vérifier si vous pouvez trouver des informations sensibles / vulnérabilités sur eux car ils pourraient vous fournir un accès supplémentaire au compte AWS.
Dans ce livre, vous devriez trouver des informations sur comment trouver des services AWS exposés et comment les vérifier. Pour savoir comment trouver des vulnérabilités dans les services réseau exposés, je vous recommande de rechercher le service spécifique dans :
Compromising the Organization
From the root/management account
Lorsque le compte de gestion crée de nouveaux comptes dans l'organisation, un nouveau rôle est créé dans le nouveau compte, par défaut nommé OrganizationAccountAccessRole
et donnant la politique AdministratorAccess au compte de gestion pour accéder au nouveau compte.
Donc, pour accéder en tant qu'administrateur à un compte enfant, vous avez besoin de :
Compromettre le compte de gestion et trouver l'ID des comptes enfants et les noms du rôle (OrganizationAccountAccessRole par défaut) permettant au compte de gestion d'accéder en tant qu'admin.
Pour trouver les comptes enfants, allez à la section organisations dans la console aws ou exécutez
aws organizations list-accounts
Vous ne pouvez pas trouver directement le nom des rôles, alors vérifiez toutes les politiques IAM personnalisées et recherchez celles permettant
sts:AssumeRole
sur les comptes enfants précédemment découverts.Compromettre un principal dans le compte de gestion avec la permission
sts:AssumeRole
sur le rôle dans les comptes enfants (même si le compte permet à quiconque du compte de gestion de se faire passer pour lui, comme c'est un compte externe, des permissions spécifiquessts:AssumeRole
sont nécessaires).
Automated Tools
Recon
aws-recon : Un outil de collecte d'inventaire multi-threadé axé sur la sécurité AWS écrit en Ruby.
cloudlist : Cloudlist est un outil multi-cloud pour obtenir des actifs (noms d'hôte, adresses IP) des fournisseurs de cloud.
cloudmapper : CloudMapper vous aide à analyser vos environnements Amazon Web Services (AWS). Il contient désormais beaucoup plus de fonctionnalités, y compris l'audit des problèmes de sécurité.
cartography : Cartography est un outil Python qui consolide les actifs d'infrastructure et les relations entre eux dans une vue graphique intuitive alimentée par une base de données Neo4j.
starbase: Starbase collecte des actifs et des relations provenant de services et systèmes, y compris l'infrastructure cloud, les applications SaaS, les contrôles de sécurité, et plus encore dans une vue graphique intuitive soutenue par la base de données Neo4j.
aws-inventory: (Utilise python2) C'est un outil qui tente de découvrir toutes les ressources AWS créées dans un compte.
aws_public_ips: C'est un outil pour récupérer toutes les adresses IP publiques (IPv4/IPv6) associées à un compte AWS.
Privesc & Exploitation
SkyArk: Découvrir les utilisateurs les plus privilégiés dans l'environnement AWS scanné, y compris les AWS Shadow Admins. Il utilise powershell. Vous pouvez trouver la définition des politiques privilégiées dans la fonction
Check-PrivilegedPolicy
dans https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1.pacu: Pacu est un framework d'exploitation AWS open-source, conçu pour les tests de sécurité offensive contre les environnements cloud. Il peut énumérer, trouver des mauvais configurations et les exploiter. Vous pouvez trouver la définition des permissions privilégiées dans https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134 à l'intérieur du dict
user_escalation_methods
.Notez que pacu vérifie uniquement vos propres chemins de privescs (pas à l'échelle du compte).
PMapper : Principal Mapper (PMapper) est un script et une bibliothèque pour identifier les risques dans la configuration de AWS Identity and Access Management (IAM) pour un compte AWS ou une organisation AWS. Il modélise les différents IAM Users et Roles dans un compte comme un graphe orienté, ce qui permet de vérifier l'escalade de privilèges et les chemins alternatifs qu'un attaquant pourrait emprunter pour accéder à une ressource ou une action dans AWS. Vous pouvez vérifier les permissions utilisées pour trouver des chemins privesc dans les noms de fichiers se terminant par
_edges.py
dans https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing
cloudsplaining : Cloudsplaining est un outil d'évaluation de la sécurité IAM AWS qui identifie les violations du principe du moindre privilège et génère un rapport HTML priorisé par risque. Il vous montrera les clients potentiellement sur-privilégiés, les politiques inline et aws et quels principaux y ont accès. (Il ne vérifie pas seulement les privesc mais aussi d'autres types d'autorisations intéressantes, recommandé à utiliser).
cloudjack: CloudJack évalue les comptes AWS pour les vulnérabilités de détournement de sous-domaine résultant de configurations découpées de Route53 et CloudFront.
ccat: Lister les dépôts ECR -> Extraire le dépôt ECR -> Le backdoor -> Pousser l'image backdoorée
Dufflebag: Dufflebag est un outil qui recherche dans les instantanés publics Elastic Block Storage (EBS) des secrets qui pourraient avoir été laissés accidentellement.
Audit
cloudsploit: CloudSploit par Aqua est un projet open-source conçu pour permettre la détection des risques de sécurité dans les comptes d'infrastructure cloud, y compris : Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI), et GitHub (Il ne recherche pas les ShadowAdmins).
Prowler : Prowler est un outil de sécurité Open Source pour effectuer des évaluations des meilleures pratiques de sécurité AWS, des audits, des réponses aux incidents, une surveillance continue, un durcissement et une préparation à la criminalistique.
CloudFox: CloudFox vous aide à acquérir une connaissance situationnelle dans des environnements cloud inconnus. C’est un outil en ligne de commande open source créé pour aider les testeurs de pénétration et autres professionnels de la sécurité offensive à trouver des chemins d'attaque exploitables dans l'infrastructure cloud.
ScoutSuite: Scout Suite est un outil d'audit de sécurité multi-cloud open source, qui permet l'évaluation de la posture de sécurité des environnements cloud.
cs-suite: Cloud Security Suite (utilise python2.7 et semble non maintenu)
Zeus: Zeus est un outil puissant pour les meilleures pratiques de durcissement AWS EC2 / S3 / CloudTrail / CloudWatch / KMS (semble non maintenu). Il vérifie uniquement les creds configurés par défaut à l'intérieur du système.
Audit Constant
cloud-custodian: Cloud Custodian est un moteur de règles pour gérer les comptes et ressources de cloud public. Il permet aux utilisateurs de définir des politiques pour permettre une infrastructure cloud bien gérée, à la fois sécurisée et optimisée en termes de coûts. Il consolide de nombreux scripts ad hoc que les organisations ont en un outil léger et flexible, avec des métriques et des rapports unifiés.
pacbot: Policy as Code Bot (PacBot) est une plateforme pour la surveillance continue de la conformité, le reporting de conformité et l'automatisation de la sécurité pour le cloud. Dans PacBot, les politiques de sécurité et de conformité sont implémentées en tant que code. Toutes les ressources découvertes par PacBot sont évaluées par rapport à ces politiques pour mesurer la conformité aux politiques. Le cadre auto-fix de PacBot offre la possibilité de répondre automatiquement aux violations de politiques en prenant des actions prédéfinies.
streamalert: StreamAlert est un cadre d'analyse de données en temps réel sans serveur qui vous permet d'ingérer, d'analyser et d'alerter sur les données de n'importe quel environnement, en utilisant les sources de données et la logique d'alerte que vous définissez. Les équipes de sécurité informatique utilisent StreamAlert pour analyser des téraoctets de données de journaux chaque jour pour la détection et la réponse aux incidents.
DEBUG: Capturer les requêtes AWS cli
Références
Last updated