Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/assetnote/ghostbuster
ReconocimientoEscáneres de VulnerabilidadesSeguridad en la NubeEnumeración de SubdominiosAnálisis de DNS
GitHubassetnote/ghostbuster

ghostbuster

Elimina las IPs elásticas huérfanas realizando un análisis de tus recursos en todas tus cuentas de AWS.

Ver Repositorio
278368hace 1 añoRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Índice

  • Índice
  • Ghostbuster
    • El problema
    • Características del proyecto
    • Instalación de Ghostbuster
    • Uso de Ghostbuster
    • Ejemplo de salida
    • Configuración de tus cuentas AWS
    • Configuración de Cloudflare (Opcional)
    • Autores
    • Licencia

Ghostbuster

Elimina IPs elásticas colgantes realizando análisis de tus recursos en todas tus cuentas de AWS.

Ghostbuster obtiene todos los registros DNS presentes en todas tus cuentas de AWS (Route53) y opcionalmente puede recibir registros mediante entrada CSV o desde Cloudflare.

Después de recolectar estos registros, Ghostbuster itera sobre todas tus IPs elásticas de AWS y las IPs públicas de interfaces de red y recolecta estos datos.

Al tener una imagen completa de los registros DNS (desde Route53, archivo de entrada o Cloudflare) y una imagen completa de las IPs de AWS que posee tu organización, esta herramienta puede detectar subdominios que apuntan a IPs elásticas colgantes (IPs que ya no posees).

El problema

Cuando despliegas infraestructura en AWS, puedes crear instancias EC2 que tienen una IP asociada. Cuando creas registros DNS que apuntan a estas IPs, pero olvidas eliminar los registros DNS después de que la instancia EC2 haya recibido una nueva IP o haya sido destruida, eres susceptible a ataques de secuestro de subdominios.

Se ha realizado una gran cantidad de investigación sobre secuestros de IPs elásticas, donde es posible que atacantes reclamen continuamente IPs elásticas hasta obtener una IP asociada con un subdominio de la empresa que están atacando.

Aunque AWS frecuentemente bloquea cuentas que intentan realizar este patrón de ataque, no se ha publicado una solución a largo plazo por parte de AWS.

El impacto de los ataques de secuestro de subdominios por IPs elásticas colgantes es más grave que un secuestro de subdominio típico donde solo puedes controlar el contenido que se sirve. Con los secuestros de IPs elásticas colgantes, es posible que un atacante haga lo siguiente:

  • Reclamar certificados SSL para el subdominio
  • Escuchar tráfico en todos los puertos (potencialmente descubriendo información sensible que aún se envía al subdominio)
  • Ejecutar scripts del lado del servidor con la capacidad de robar cookies HTTPOnly, lo que típicamente conduce a un ataque de secuestro de cuenta con un solo clic cuando las cookies tienen alcance a *.domain.com

Características del proyecto

  • Itera dinámicamente a través de cada perfil de AWS configurado en .aws/config
  • Obtiene registros A de AWS Route53
  • Obtiene registros A de Cloudflare (opcional)
  • Obtiene registros A desde entrada CSV (opcional)
  • Itera a través de todas las regiones, una sola región, o una lista de regiones separadas por comas
  • Obtiene todas las IPs elásticas asociadas con todas tus cuentas de AWS
  • Obtiene todas las IPs públicas asociadas con todas tus cuentas de AWS
  • Cruza los registros DNS con las IPs de tu organización para detectar posibles secuestros
  • Soporte de Slack Webhook para enviar notificaciones de secuestros

Importante:

Para que esta herramienta sea efectiva, debe tener una imagen completa de tu entorno AWS. Si no tiene una imagen completa, generará falsos positivos.

Instalación de Ghostbuster

Instalar Ghostbuster es tan sencillo como ejecutar: pip install ghostbuster. La herramienta CLI será accesible mediante el comando ghostbuster.

Esto requiere un entorno Python 3.x.

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

Comandos de ejemplo

Ejecuta Ghostbuster con acceso a registros DNS de Cloudflare, envía notificaciones a un webhook de Slack, itera a través de cada perfil de AWS configurado en .aws/config o .aws/credentials para todas las regiones de AWS

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

Ejecuta Ghostbuster con una lista ingresada manualmente de registros A de subdominios (consulta records.csv en este repositorio para un archivo de ejemplo):

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

Puedes especificar regiones específicas usando --regions configurado con una lista separada por comas de regiones, p.ej. us-east-1,us-west-1.

Ejemplo de salida

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']}

Configuración de tus cuentas AWS

El primer paso es crear claves o roles en tus cuentas AWS que otorguen los privilegios necesarios para leer registros Route53 y describir direcciones elásticas e interfaces de red EC2.

  1. Para crear un nuevo usuario IAM en AWS, visita la siguiente URL: https://console.aws.amazon.com/iam/home#/users$new?step=details
  2. Elige solo Access key - Programmatic access y haz clic en Next: Permissions.
  3. Haz clic en Attach existing policies directly y luego en Create policy.
  4. Haz clic en JSON y luego pega la siguiente política:
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. Haz clic en Next: Tags y luego en Next: Review.
  2. Establece el nombre de la política como GhostbusterPolicy.
  3. Haz clic en Create Policy.
  4. Ve a https://console.aws.amazon.com/iam/home#/users$new?step=permissions&accessKey&userNames=ghostbuster&permissionType=policies
  5. Selecciona GhostbusterPolicy.
  6. Haz clic en Next: Tags y luego en Next: Review.
  7. Haz clic en Create user y configura las credenciales AWS en tu archivo .aws/credentials.

Repite los pasos anteriores para cada cuenta AWS que poseas.

Esta herramienta funcionará con cualquier configuración de AWS que hayas establecido (múltiples claves o perfiles de asunción de roles entre cuentas). Esto es gestionado por boto3, la librería utilizada para interactuar con AWS.

Un ejemplo de configuración se ve así:

.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

Alternativamente, en lugar de tener roles que se asumen, también puedes configurar el archivo .aws/credentials para que tenga una lista de perfiles y claves asociadas con acceso limitado.

Una vez que tu configuración de AWS se haya establecido con todas las cuentas de tu entorno AWS, puedes ejecutar la herramienta usando el siguiente comando:

Configuración de permisos AWS para --roles

Ghostbuster puede usar roles en lugar de perfiles, lo que elimina la necesidad de tener tantas credenciales en un solo lugar. Sin embargo, el enfoque de roles requerirá crear políticas IAM adicionales dentro de tu organización.

Los roles se pueden usar mediante las banderas --roles roles.csv o --autoroles. Para configurar --roles para que funcione, es necesario crear el rol GhostbusterTargetAccountRole exactamente con ese nombre en cada cuenta que se va a escanear:

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 se ejecutará en lambda/ec2/etc. con el rol ghostbuster - llamémoslo rol maestro de ghostbuster. El rol maestro debe poder asumir los roles de las cuentas objetivo.

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"
  }
}

Configuración de permisos AWS para --autoroles

El descubrimiento automático de cuentas requiere permisos adicionales en comparación con --roles. Después de configurar --roles para que funcione, considera agregar la siguiente política IAM en una cuenta que tenga una visión general de la organización:

root@kitploit:~
{
    sid = "BaseAccess"

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

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

Luego, en la cuenta que ejecuta ghostbuster, adjunta la siguiente política al rol maestro de ghostbuster para que pueda asumir el rol de búsqueda de la organización:

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

No olvides reemplazar ORG_LOOKUP_ACCOUNT_ID con el ID de cuenta real.

Configuración de Cloudflare (Opcional)

Si deseas que Ghostbuster obtenga todos los registros A que tienes configurados en Cloudflare, deberás configurar un token de API que pueda leer zonas.

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

Configura un token de API de Cloudflare como se muestra en la captura de pantalla a continuación:

Una vez que hayas obtenido este token de API, anótalo en algún lugar (gestor de contraseñas). Para usarlo con Ghostbuster, pásalo mediante el argumento cloudflaretoken.

Autores

  • Shubham Shah - Trabajo inicial - github

Consulta también la lista de contribuidores que participaron en este proyecto.

Licencia

GNU Affero General Public License

Probando Ghostbusters

  1. Clona este repositorio.
  2. Instala virtualenv usando pip3 install virtualenv
  3. Crea un entorno virtual usando virtualenv venv
  4. Activa el entorno virtual usando . venv/bin/activate
  5. Instala ghostbuster yendo a la raíz del repositorio. pip3 install --editable .
  6. Haz tus cambios y ejecuta el comando ghostbuster.
Descargar herramienta