AWS Pentesting

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Informations de base

Avant de commencer le test de pénétration 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 configurations incorrectes 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 :

pageAWS - Basic Information

Laboratoires pour apprendre

Outils pour simuler des attaques :

Méthodologie de testeur de pénétration/équipe rouge 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 AWS internes et les services externes sont connectés.

Du point de vue d'une équipe rouge, la première étape pour compromettre un environnement AWS est de parvenir à obtenir des informations d'identification. Voici quelques idées sur la façon de le faire :

  • 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

  • Falsification de requête côté serveur avec accès à l'endpoint de métadonnées

  • Lecture de fichiers locaux

  • /home/USERNAME/.aws/credentials

  • C:\Users\USERNAME\.aws\credentials

  • 3e parties compromises

  • Employé interne

  • Cognito informations d'identification

Ou en compromettant un service non authentifié exposé :

pageAWS - Unauthenticated Enum & Access

Ou si vous effectuez une révision, vous pourriez simplement demander des informations d'identification avec ces rôles :

pageAWS - Permissions for a Pentest

Après avoir réussi à obtenir des informations d'identification, vous devez savoir à qui appartiennent ces informations d'identification, et à quoi elles ont accès, vous devez donc effectuer une certaine énumération de base :

Énumération de base

SSRF

Si vous avez trouvé un SSRF sur une machine à l'intérieur d'AWS, consultez cette page pour des astuces :

Qui suis-je

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) :

# 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

Notez que les entreprises peuvent utiliser des tokens canary pour identifier quand des tokens sont volés et utilisés. Il est recommandé de vérifier si un token est un token canary ou non avant de l'utiliser. Pour plus d'informations, consultez cette page.

Énumération de l'organisation

pageAWS - Organizations Enum

Énumération IAM

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 suffisamment de permissions pour énumérer IAM, vous pouvez les forcer en force brute pour les découvrir. Consultez comment effectuer l'énumération et le forçage en force dans :

pageAWS - IAM, Identity Center & SSO Enum

Maintenant 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écouvrir quels services sont utilisés dans l'environnement. Dans la section suivante, vous pouvez consulter quelques façons d'énumérer certains services courants.

Énumération des services, Post-Exploitation & Persistence

AWS propose une quantité impressionnante de services, sur la page suivante, vous trouverez des informations de base, des triches d'énumération, comment éviter la détection, obtenir la persistance, et d'autres astuces de post-exploitation à leur sujet :

pageAWS - Services

Notez que vous n'avez pas besoin d'effectuer 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 davantage de services exposés aux utilisateurs non authentifiés, que vous pourriez exploiter :

pageAWS - Unauthenticated Enum & Access

Élévation de privilèges

Si vous pouvez vérifier au moins vos propres permissions sur différentes ressources, vous pourriez vérifier si vous êtes en mesure d'obtenir des permissions supplémentaires. Vous devriez vous concentrer au moins sur les permissions indiquées dans :

pageAWS - Privilege Escalation

Services Exposés Publiquement

Lors de l'énumération des services AWS, vous pourriez en trouver certains exposant des éléments à Internet (ports VM/Containers, bases de données ou services de file d'attente, instantanés ou buckets...). En tant que testeur d'intrusion/é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 la façon de trouver des services AWS exposés et comment les vérifier. Pour trouver des vulnérabilités dans les services réseau exposés, je vous recommande de rechercher le service spécifique dans :

Compromission de l'organisation

À partir du compte racine/de gestion

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.

Ainsi, pour accéder en tant qu'administrateur à un compte enfant, vous devez :

  • 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'administrateur.

  • 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, donc vérifiez toutes les politiques IAM personnalisées et recherchez celles autorisant sts:AssumeRole sur les comptes enfants précédemment découverts.

  • Compromettre un principal dans le compte de gestion avec l'autorisation sts:AssumeRole sur le rôle dans les comptes enfants (même si le compte autorise n'importe qui du compte de gestion à s'impersonner, des autorisations spécifiques sts:AssumeRole sont nécessaires).

Outils Automatisés

Reconnaissance

  • aws-recon : Un outil de collecte d'inventaire AWS axé sur la sécurité, multi-thread et écrit en 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 est un outil multi-cloud pour obtenir des ressources (noms d'hôtes, adresses IP) auprès 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é.

# 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 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.

# 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 collecte des actifs et des relations à partir de services et de 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 tous 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 & Exploiting

# 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) est un script et une bibliothèque permettant d'identifier les risques liés à la configuration de la gestion des identités et des accès (IAM) AWS pour un compte AWS ou une organisation AWS. Il modélise les différents utilisateurs IAM et rôles dans un compte sous la forme d'un graphe orienté, ce qui permet de vérifier les possibilités d'élévation 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 autorisations utilisées pour trouver des chemins de privilèges dans les fichiers se terminant par _edges.py dans 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 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 potentiellement les clients sur-privilegiés, les policies inline et aws et quels principaux y ont accès. (Il ne vérifie pas seulement les élévations de privilèges mais aussi d'autres types de permissions intéressantes, recommandé à utiliser).

# 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 évalue les comptes AWS pour les vulnérabilités de détournement de sous-domaine résultant de configurations déconnectées de Route53 et CloudFront.

  • ccat: Liste des dépôts ECR -> Récupère le dépôt ECR -> Le compromet -> Pousse l'image compromisée

  • Dufflebag: Dufflebag est un outil qui recherche dans les instantanés publics de stockage de blocs élastiques (EBS) des secrets qui auraient pu être 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).

./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 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 renforcement et une préparation à la criminalistique.

# 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 vous aide à acquérir une connaissance de la situation 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 d'autres professionnels de la sécurité offensive à trouver des chemins d'attaque exploitables dans l'infrastructure cloud.

cloudfox aws --profile [profile-name] all-checks
  • ScoutSuite: Scout Suite est un outil d'audit de sécurité multi-cloud open source, qui permet d'évaluer la posture de sécurité des environnements 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 (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 informations d'identification configurées par défaut dans le système.

Audit Constant

  • cloud-custodian: Cloud Custodian est un moteur de règles pour la gestion des comptes et des ressources cloud publics. 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 possèdent 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é, la génération de rapports 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 sous forme de 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 des données provenant de n'importe quel environnement, en utilisant des sources de données et une logique d'alerte que vous définissez. Les équipes de sécurité informatique utilisent StreamAlert pour analyser des téraoctets de données de journal chaque jour pour la détection et la réponse aux incidents.

DEBUG: Capturer les requêtes 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 ...

Références

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge HackTricks AWS)!

Autres façons de soutenir HackTricks:

Dernière mise à jour