Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
ghostbuster — Éliminez les adresses IP élastiques orphelines en effectuant une analyse de vos ressources dans tous vos comptes AWS. | Kitploit
Outils/GitHubGitHub/assetnote/ghostbuster
ReconnaissanceScanners de VulnérabilitésSécurité CloudÉnumération de Sous-domainesAnalyse DNS
GitHubassetnote/ghostbuster

ghostbuster

Éliminez les adresses IP élastiques orphelines en effectuant une analyse de vos ressources dans tous vos comptes AWS.

Voir le dépôt
27836il y a 1 anVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Table des matières

  • Table des matières
  • Ghostbuster
    • Le problème
    • Fonctionnalités du projet
    • Installation de Ghostbuster
    • Utilisation de Ghostbuster
    • Exemple de sortie
    • Configuration de vos comptes AWS
    • Configuration de Cloudflare (Optionnel)
    • Auteurs
    • Licence

Ghostbuster

Éliminez les adresses IP élastiques pendantes en effectuant une analyse de vos ressources dans tous vos comptes AWS.

Ghostbuster récupère tous les enregistrements DNS présents dans tous vos comptes AWS (Route53), et peut éventuellement prendre en compte des enregistrements via une entrée CSV ou via Cloudflare.

Après avoir collecté ces enregistrements, Ghostbuster parcourt toutes vos adresses IP élastiques AWS et les IP publiques des interfaces réseau et collecte ces données.

En ayant une image complète des enregistrements DNS (depuis Route53, une entrée fichier ou Cloudflare) et une image complète des IP AWS appartenant à votre organisation, cet outil peut détecter les sous-domaines pointant vers des adresses IP élastiques pendantes (des IP que vous ne possédez plus).

Le problème

Lorsque vous déployez une infrastructure sur AWS, vous pouvez créer des instances EC2 avec une IP associée. Si vous créez des enregistrements DNS pointant vers ces IP, mais oubliez de supprimer les enregistrements DNS après que l'instance EC2 ait reçu une nouvelle IP ou ait été détruite, vous êtes vulnérable aux attaques de prise de contrôle de sous-domaine.

Des recherches approfondies ont été menées sur les prises de contrôle d'IP élastiques, où il est possible pour des attaquants de revendiquer continuellement des IP élastiques jusqu'à obtenir une IP associée à un sous-domaine de l'entreprise ciblée.

Bien qu'AWS bannisse fréquemment les comptes qui tentent d'exécuter ce schéma d'attaque, aucun correctif à long terme n'a été publié par AWS.

L'impact des attaques de prise de contrôle de sous-domaine par IP élastique pendante est plus grave qu'une prise de contrôle de sous-domaine classique où vous ne pouvez contrôler que le contenu servi. Avec les prises de contrôle d'IP élastique pendante, un attaquant peut potentiellement :

  • Réclamer des certificats SSL pour le sous-domaine
  • Écouter le trafic sur tous les ports (découvrant potentiellement des informations sensibles toujours envoyées au sous-domaine)
  • Exécuter des scripts côté serveur avec la capacité de voler des cookies HTTPOnly, menant généralement à une attaque de prise de contrôle de compte en un clic lorsque les cookies sont limités à *.domain.com

Fonctionnalités du projet

  • Parcourt dynamiquement chaque profil AWS configuré dans .aws/config
  • Récupère les enregistrements A depuis AWS Route53
  • Récupère les enregistrements A depuis Cloudflare (optionnel)
  • Récupère les enregistrements A depuis une entrée CSV (optionnel)
  • Parcourt toutes les régions, une seule région, ou une liste de régions séparées par des virgules
  • Obtient toutes les IP élastiques associées à tous vos comptes AWS
  • Obtient toutes les IP publiques associées à tous vos comptes AWS
  • Recoupe les enregistrements DNS avec les IP appartenant à votre organisation pour détecter les prises de contrôle potentielles
  • Prise en charge d'un webhook Slack pour envoyer des notifications en cas de prise de contrôle

Important :

Pour que cet outil soit efficace, il doit avoir une image complète de votre environnement AWS. S'il n'a pas une image complète, cela entraînera des faux positifs.

Installation de Ghostbuster

Installer Ghostbuster est aussi simple que d'exécuter : pip install ghostbuster. L'outil en ligne de commande sera alors accessible via la commande ghostbuster.

Cela nécessite un environnement Python 3.x.

Utilisation de Ghostbuster

root@kitploit:~
❯ ghostbuster scan aws --help                                                                                                                                                                     
Usage: ghostbuster scan aws [OPTIONS]

  Scan for dangling elastic IPs inside your AWS accounts.

Options:
  --profile TEXT          Specify a specific AWS profile to run ghostbuster
                          on.

  --skipascii             Skip printing the ASCII art when starting up
                          Ghostbuster.

  --json                  Only return a JSON object.
  --slackwebhook TEXT     Specify a Slack webhook URL to send notifications
                          about potential takeovers.

  --records PATH          Manually specify DNS records to check against.
                          Ghostbuster will check these IPs after checking
                          retrieved DNS records. See records.csv for an
                          example.

  --cloudflaretoken TEXT  Pull DNS records from Cloudflare, provide a CF API
                          token.

  --allregions            Run on all regions.
  --exclude TEXT          Comma delimited list of profile names to exclude.
  --regions TEXT          Comma delimited list of regions to run on.
  --help                  Show this message and exit.

Exemples de commandes

Exécutez Ghostbuster avec un accès aux enregistrements DNS Cloudflare, envoyez des notifications à un webhook Slack, parcourez chaque profil AWS configuré dans .aws/config ou .aws/credentials pour toutes les régions AWS :

root@kitploit:~
❯ ghostbuster scan aws --cloudflaretoken APIKEY --slackwebhook https://hooks.slack.com/services/KEY --allregions

Exécutez Ghostbuster avec une liste manuelle d'enregistrements A de sous-domaine (voir records.csv dans ce dépôt pour un exemple de fichier) :

root@kitploit:~
❯ ghostbuster scan aws --records records.csv

Vous pouvez spécifier des régions particulières avec --regions défini sur une liste séparée par des virgules, par exemple us-east-1,us-west-1.

Exemple de sortie

root@kitploit:~
❯ ghostbuster scan aws --cloudflaretoken whougonnacall
Obtaining all zone names from Cloudflare.
Obtaining DNS A records for all zones from Cloudflare.
Obtained 33 DNS A records so far.
Obtaining Route53 hosted zones for AWS profile: default.
Obtaining Route53 hosted zones for AWS profile: account-five.
Obtaining Route53 hosted zones for AWS profile: account-four.
Obtaining Route53 hosted zones for AWS profile: account-four-deploy.
Obtaining Route53 hosted zones for AWS profile: account-two-deploy.
Obtaining Route53 hosted zones for AWS profile: account-one-deploy.
Obtaining Route53 hosted zones for AWS profile: account-three-deploy.
Obtaining Route53 hosted zones for AWS profile: account-six.
Obtaining Route53 hosted zones for AWS profile: account-seven.
Obtaining Route53 hosted zones for AWS profile: account-one.
Obtained 124 DNS A records so far.
Obtaining EIPs for region: us-east-1, profile: default
Obtaining IPs for network interfaces for region: us-east-1, profile: default
Obtaining EIPs for region: us-east-1, profile: account-five
Obtaining IPs for network interfaces for region: us-east-1, profile: account-five
Obtaining EIPs for region: us-east-1, profile: account-four
Obtaining IPs for network interfaces for region: us-east-1, profile: account-four
Obtaining EIPs for region: us-east-1, profile: account-four-deploy
Obtaining IPs for network interfaces for region: us-east-1, profile: account-four-deploy
Obtaining EIPs for region: us-east-1, profile: account-two-deploy
Obtaining IPs for network interfaces for region: us-east-1, profile: account-two-deploy
Obtaining EIPs for region: us-east-1, profile: account-one-deploy
Obtaining IPs for network interfaces for region: us-east-1, profile: account-one-deploy
Obtaining EIPs for region: us-east-1, profile: account-three-deploy
Obtaining IPs for network interfaces for region: us-east-1, profile: account-three-deploy
Obtaining EIPs for region: us-east-1, profile: account-six
Obtaining IPs for network interfaces for region: us-east-1, profile: account-six
Obtaining EIPs for region: us-east-1, profile: account-seven
Obtaining IPs for network interfaces for region: us-east-1, profile: account-seven
Obtaining EIPs for region: us-east-1, profile: account-one
Obtaining IPs for network interfaces for region: us-east-1, profile: account-one
Obtained 415 unique elastic IPs from AWS.


Takeover possible: {'name': 'takeover.assetnotecloud.com', 'records': ['52.54.24.193']}

Configuration de vos comptes AWS

La première étape consiste à créer des clés ou des rôles dans vos comptes AWS qui accordent les privilèges nécessaires pour lire les enregistrements Route53 et décrire les adresses élastiques et les interfaces réseau EC2.

  1. Pour créer un nouvel utilisateur IAM dans AWS, visitez l'URL suivante : https://console.aws.amazon.com/iam/home#/users$new?step=details
  2. Choisissez uniquement Access key - Programmatic access, puis cliquez sur Next: Permissions.
  3. Cliquez sur Attach existing policies directly, puis sur Create policy.
  4. Cliquez sur JSON, puis collez la politique suivante :
root@kitploit:~
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "GhostbusterPolicy",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeAddresses",
                "ec2:DescribeNetworkInterfaces",
                "route53:ListResourceRecordSets",
                "route53:ListHostedZonesByName",
                "route53:GetTrafficPolicyInstance",
                "route53:GetTrafficPolicy"
            ],
            "Resource": "*"
        }
    ]
}
  1. Cliquez sur Next: Tags, puis sur Next: Review.
  2. Nommez la politique GhostbusterPolicy.
  3. Cliquez sur Create Policy.
  4. Allez sur https://console.aws.amazon.com/iam/home#/users$new?step=permissions&accessKey&userNames=ghostbuster&permissionType=policies
  5. Sélectionnez GhostbusterPolicy.
  6. Cliquez sur Next: Tags, puis sur Next: Review.
  7. Cliquez sur Create user et configurez les identifiants AWS dans votre fichier .aws/credentials.

Répétez les étapes ci-dessus pour chaque compte AWS que vous possédez.

Cet outil fonctionnera quelle que soit la façon dont vous avez configuré votre environnement AWS (plusieurs clés, ou profils avec assumer un rôle cross-compte). Cela est géré par boto3, la bibliothèque utilisée pour interagir avec AWS.

Un exemple de configuration ressemble à ceci :

.aws/credentials :

root@kitploit:~
[default]
aws_access_key_id = AKIAIII...
aws_secret_access_key = faAaAaA...

.aws/config :

root@kitploit:~
[default]
output = table
region = us-east-1

[profile account-one]
role_arn = arn:aws:iam::911111111113:role/Ec2Route53Access
source_profile = default
region = us-east-1

[profile account-two]
role_arn = arn:aws:iam::911111111112:role/Ec2Route53Access
source_profile = default
region = us-east-1

[profile account-three]
region = us-east-1
role_arn = arn:aws:iam::911111111111:role/Ec2Route53Access
source_profile = default

Alternativement, au lieu d'avoir des rôles qui sont assumés, vous pouvez également configurer le fichier .aws/credentials pour avoir une liste de profils et de clés associées avec un accès limité.

Une fois votre configuration AWS définie avec tous les comptes de votre environnement AWS, vous pouvez exécuter l'outil en utilisant la commande suivante :

Configuration de vos permissions AWS pour --roles

Ghostbuster peut utiliser des rôles au lieu de profils, ce qui évite d'avoir autant d'identifiants au même endroit. Cependant, l'approche par rôles nécessitera la création de politiques IAM supplémentaires dans votre organisation.

Les rôles peuvent être utilisés via les indicateurs --roles roles.csv ou --autoroles. Pour que --roles fonctionne, il faut créer le rôle GhostbusterTargetAccountRole nommé exactement comme cela dans chaque compte qui est scanné :

root@kitploit:~
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "GhostbusterTargetAccountRole",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeAddresses",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeRegions",
                "route53:ListResourceRecordSets",
                "route53:ListHostedZonesByName",
                "route53:GetTrafficPolicyInstance",
                "route53:GetTrafficPolicy"
            ],
            "Resource": "*"
        }
    ]
}

Ghostbuster s'exécutera dans lambda/ec2/autre avec le rôle ghostbuster - appelons-le rôle maître ghostbuster. Le rôle maître doit pouvoir assumer les rôles des comptes cibles (TargetAccountRoles).

root@kitploit:~
resource "aws_iam_policy" "ghostbuster_target_account_roles" {
  name        = "ghostbuster_target_account_roles"
  path        = "/"
  description = "Allow inspecting DNS and elastic IP data."

  policy = jsonencode({
    "Version" : "2012-10-17",
    "Statement" : [
      {
        "Effect" : "Allow",
        "Action" : "sts:AssumeRole",
        "Resource" : ["arn:aws:iam::*:role/GhostbusterTargetAccountRole"]
    }]
  })

  tags = {
    Project = "ghostbuster"
  }
}

Configuration de vos permissions AWS pour --autoroles

La découverte automatique de comptes nécessite une permission supplémentaire par rapport à --roles. Après avoir configuré --roles pour fonctionner, considérez ajouter la politique IAM suivante dans un compte qui a une vue d'ensemble de l'organisation :

root@kitploit:~
{
    sid = "BaseAccess"

    actions = [
      "organizations:DescribeAccount",
      "organizations:ListAccounts"
    ]

    resources = ["*"]
    effect    = "Allow"
  }
}

Ensuite, dans le compte qui exécute ghostbuster, attachez la politique suivante au rôle maître ghostbuster afin qu'il puisse assumer le rôle de consultation de l'organisation :

root@kitploit:~
{
    "Version" : "2012-10-17",
    "Statement" : [
      {
        "Effect" : "Allow",
        "Action" : "sts:AssumeRole",
        "Resource" : ["arn:aws:iam::ORG_LOOKUP_ACCOUNT_ID:role/ghostbuster-org-role"]
    }]
}

N'oubliez pas de remplacer ORG_LOOKUP_ACCOUNT_ID par l'ID réel du compte.

Configuration de Cloudflare (Optionnel)

Si vous voulez que Ghostbuster récupère tous les enregistrements A que vous avez définis dans Cloudflare, vous devez configurer un jeton API capable de lire les zones.

https://dash.cloudflare.com/profile/api-tokens

Configurez un jeton API Cloudflare comme indiqué dans la capture d'écran ci-dessous :

Une fois que vous avez obtenu ce jeton API, notez-le quelque part (gestionnaire de mots de passe). Pour l'utiliser avec Ghostbuster, passez-le via l'argument cloudflaretoken.

Auteurs

  • Shubham Shah - Travail initial - github

Voir aussi la liste des contributeurs qui ont participé à ce projet.

Licence

GNU Affero General Public License

Test de Ghostbusters

  1. Clonez ce dépôt.
  2. Installez virtualenv en utilisant pip3 install virtualenv
  3. Créez un environnement virtuel avec virtualenv venv
  4. Activez l'environnement virtuel avec . venv/bin/activate
  5. Installez ghostbuster en allant à la racine du dépôt. pip3 install --editable .
  6. Faites vos modifications et exécutez la commande ghostbuster.
Télécharger l’outil