
Prévenir les attaques SSRF sur AWS EC2 via des mises à niveau automatisées vers l'Instance Metadata Service v2 (IMDSv2) plus sécurisé.
Empêchez les attaques SSRF sur AWS EC2 grâce à des mises à niveau automatisées vers le service de métadonnées d'instance v2 (IMDSv2), plus sécurisé.
Objectif et fonctionnalités
Les équipes d'ingénierie peuvent disposer d'une grande variété d'infrastructures de calcul dans AWS qu'elles doivent protéger contre certaines vulnérabilités exploitant le service de métadonnées. Le service de métadonnées doit être exécuté sur les instances si un IAM est utilisé ou si l'instance a besoin d'informations de données utilisateur au démarrage. Limiter la surface d'attaque de vos instances est crucial pour empêcher la possibilité de pivoter dans votre environnement en volant des informations fournies par le service lui-même. De nombreuses attaques célèbres dans le passé ont exploité ce service pour exploiter un rôle attaché à l'instance ou vider des données sensibles accessibles via le service de métadonnées. Metabadger peut vous aider à identifier où et comment vous utilisez le service de métadonnées d'instance, tout en vous donnant la capacité de réduire tout levier d'attaque indésirable afin d'abaisser votre niveau de risque global lors de l'utilisation d'EC2.
L'utilisation de cet outil peut impacter votre infrastructure de calcul AWS car certains services et applications peuvent ne pas fonctionner sans le service de métadonnées ou avec la version 2. Soyez prudent lors du déploiement dans votre environnement de production et prévoyez un plan de restauration en cas d'anomalie. Metabadger intègre la possibilité de revenir à la version 1 par défaut du service à l'aide du drapeau -v1 ; vous pouvez l'utiliser pour restaurer rapidement vos instances à la version par défaut. Idéalement, exécutez cet outil et mettez à jour la version des métadonnées dans des environnements hors production comme terrain d'essai avant de l'appliquer.
Étape 1
Dans un premier temps, nous souhaitons découvrir notre utilisation globale du service de métadonnées dans une région AWS particulière. Metabadger évaluera l'état actuel de votre utilisation dans la région vers laquelle pointent vos identifiants dans votre fichier /.aws/credentials ou le rôle actuellement assumé. Vous pouvez également spécifier le drapeau --region lors de l'exécution de la commande discover-metadata si vous souhaitez changer de région. Une fois que vous avez une bonne idée de la version utilisée par vos instances et si le service est activé ou désactivé, vous serez en mesure d'élaborer un plan d'action bien plus précis pour durcir le service. Notez que vous pouvez trouver la signification spécifique de chaque option de métadonnées ici.
Étape 2
L'un des domaines à évaluer lors du passage à la version 2 du service est l'utilisation des rôles IAM. Metabadger vous permet d'identifier les instances d'une région qui utilisent déjà un rôle IAM. La commande discover-role-usage affichera une liste des instances auxquelles des rôles sont attachés. Si vous avez beaucoup d'instances utilisant des rôles, soyez prudent lors de la mise à jour du service vers la version 2 pour garantir que le fonctionnement global de vos charges de travail n'est pas affecté.
Étape 3
Une fois l'étude initiale et l'évaluation terminées, vous pouvez maintenant mettre en place une approche progressive pour durcir votre infrastructure de calcul afin d'utiliser soit la version 2 du service de métadonnées, soit de le désactiver là où il n'est pas utilisé. La commande harden-metadata vous permet de mettre à jour toutes les instances d'une région particulière par défaut. Vous pouvez également passer des balises d'instance à l'aide du drapeau --tags ou un fichier d'entrée contenant un csv des instances auxquelles vous souhaitez appliquer une configuration. Une fois les mises à jour appropriées effectuées vers la version 2 et le service désactivé là où il n'est pas utilisé, vous pouvez réévaluer à l'aide des éléments de l'étape 1 pour confirmer que votre environnement est verrouillé. Si certaines instances ne doivent pas être mises à jour, vous pouvez les exclure via le drapeau --exclusion par balise ou ID d'instance.
Metabadger nécessite un rôle IAM ou des identifiants avec les autorisations suivantes:
ec2:ModifyInstanceAttribute
ec2:DescribeInstances
Lorsque vous apportez des modifications au service de métadonnées d'instance, soyez prudent et suivez les recommandations supplémentaires d'AWS sur la façon de mettre à niveau en toute sécurité vers la version 2. Metabadger a été conçu pour vous assister dans ce processus afin de renforcer la sécurité de votre infrastructure de calcul AWS.
Guide des bonnes pratiques AWS pour la mise à jour vers IMDSv2
Installation via pip
pip3 install --user metabadger
Installation via Github
$ git clone https://github.com/salesforce/metabadger
$ cd metabadger
$ pip install -e .
$ metabadger
Usage: metabadger [OPTIONS] COMMAND [ARGS]...
Metabadger is an AWS Security Tool used for discovering and hardening the
Instance Metadata service.
Options:
--version Show the version and exit.
--help Show this message and exit.
Commands:
cloudwatch-metrics Pull CloudWatch Metrics for MetadataNoToken usage
disable-metadata Disable the IMDS service on EC2 instances
discover-metadata Discover summary of IMDS service usage within EC2
discover-role-usage Discover summary of IAM role usage for EC2
harden-metadata Harden the AWS instance metadata service from v1 to v2
cloudwatch-metrics
Récupérez directement des informations sur votre utilisation d'IMDSv1 avec la métrique MetadataNoToken dans AWS CloudWatch. Cette commande affiche les instances, dans la dernière heure, qui utilisent activement la version 1 du service. Notez que lors de l'exécution de cette commande, vous devez disposer des autorisations IAM nécessaires pour consulter les métriques CloudWatch.
Options:
-a, --all-region Pull CloudWatch metrics across all available
regions
-r, --region TEXT Specify which AWS region you will perform this
command in
-t, --time-period INTEGER The CloudWatch time period in seconds used to
track the IMDS v1 metric
-p, --profile TEXT Specify the AWS IAM profile.
--help Show this message and exit.
discover-metadata
Un résumé de votre utilisation globale du service de métadonnées d'instance, incluant la version et un pourcentage global d'application. Ces chiffres vous aideront à comprendre la posture globale de votre utilisation durcie des métadonnées et où vous appliquez la v2 par rapport à la v1.
Options:
-a, --all-region Provide a metadata summary for all available regions in the AWS account
-j, --json Get metadata summary in JSON format
-r, --region TEXT Specify which AWS region you will perform this command in
-p, --profile TEXT Specify the AWS IAM profile.
discover-role-usage
Un résumé des instances et des rôles qu'elles utilisent, ce qui vous donnera une bonne idée de la prudence dont vous devez faire preuve lors des mises à jour du service de métadonnées lui-même.
Options:
-p, --profile TEXT Specify the AWS IAM profile.
-r, --region TEXT Specify which AWS region you will perform this command in
harden-metadata
La possibilité de modifier les instances pour utiliser la version 1 ou 2 des métadonnées et de comprendre combien d'instances seraient modifiées en exécutant un mode dry run.
Options:
-a, --all-region Update IMDS across all regions in your account
-e, --exclusion The exclusion flag will apply to everything besides what is specified, tags or instances
-d, --dry-run Dry run of hardening metadata changes
-v1, --v1 Enforces v1 of the metadata service
-i, --input-file PATH Path of csv file of instances to harden IMDS for
-t, --tags TEXT A comma seperated list of tags to apply the hardening setting to
-r, --region TEXT Specify which AWS region you will perform this command in
-p, --profile TEXT Specify the AWS IAM profile.
disable-metadata
Utilisez cette commande pour désactiver complètement le service de métadonnées sur les instances.
Options:
-e, --exclusion The exclusion flag will apply to everything besides what is specified, tags or instances
-d, --dry-run Dry run of disabling the metadata service
-i, --input-file PATH Path of csv file of instances to disable IMDS for
-t, --tags TEXT A comma seperated list of tags to apply the hardening setting to
-r, --region TEXT Specify which AWS region you will perform this command in
-p, --profile TEXT Specify the AWS IAM profile.
Toutes les modifications effectuées par Metabadger seront enregistrées dans un fichier nommé metabadger.log dans le répertoire de travail. Le fichier comprendra les informations suivantes pour chaque action entreprise par l'outil lors de la modification du service de métadonnées :