Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
ghostbuster — Устраните висящие эластичные IP-адреса, выполнив анализ ваших ресурсов во всех ваших учетных записях AWS. | Kitploit
Инструменты/GitHubGitHub/assetnote/ghostbuster
РазведкаСканеры уязвимостейБезопасность облачных средПеречисление ПоддоменовАнализ DNS
GitHubassetnote/ghostbuster

ghostbuster

Устраните висящие эластичные IP-адреса, выполнив анализ ваших ресурсов во всех ваших учетных записях AWS.

Репозиторий
278361 год назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Содержание

  • Содержание
  • Ghostbuster
    • Проблема
    • Возможности проекта
    • Установка Ghostbuster
    • Использование Ghostbuster
    • Пример вывода
    • Настройка ваших аккаунтов AWS
    • Настройка Cloudflare (опционально)
    • Авторы
    • Лицензия

Ghostbuster

Устраните "зависшие" (dangling) эластичные IP-адреса, выполняя анализ ваших ресурсов во всех аккаунтах AWS.

Ghostbuster получает все DNS-записи, присутствующие во всех ваших аккаунтах AWS (Route53), и опционально может принимать записи через CSV-файл или Cloudflare.

После сбора этих записей Ghostbuster проходит по всем вашим эластичным IP-адресам AWS и публичным IP-адресам сетевых интерфейсов и собирает эти данные.

Имея полную картину DNS-записей (из Route53, файлового ввода или Cloudflare) и полную картину IP-адресов AWS, принадлежащих вашей организации, этот инструмент может обнаруживать поддомены, которые указывают на "зависшие" эластичные IP-адреса (IP-адреса, которыми вы больше не владеете).

Проблема

При развертывании инфраструктуры в AWS вы можете запускать экземпляры EC2, которым назначается IP-адрес. Когда вы создаете DNS-записи, указывающие на эти IP-адреса, но забываете удалить DNS-записи после того, как экземпляру EC2 был назначен новый IP-адрес или он был уничтожен, вы становитесь уязвимы для атак перехвата поддоменов (subdomain takeover).

Было проведено много исследований по захвату эластичных IP-адресов, когда атакующие могут постоянно запрашивать эластичные IP-адреса, пока не получат IP-адрес, связанный с поддоменом целевой компании.

Хотя AWS часто блокирует аккаунты, пытающиеся выполнить такой сценарий атаки, долгосрочного исправления от AWS выпущено не было.

Последствия атак перехвата "зависших" эластичных IP-поддоменов более серьезны, чем типичный перехват поддомена, при котором вы можете контролировать только отображаемый контент. При захвате "зависших" эластичных IP-адресов атакующий может делать следующее:

  • Запрашивать SSL-сертификаты для поддомена
  • Прослушивать трафик на всех портах (потенциально обнаруживая конфиденциальную информацию, все еще отправляемую на поддомен)
  • Запускать серверные скрипты с возможностью кражи HTTPOnly-куки, что обычно приводит к однонажатийному захвату аккаунта, когда куки ограничены областью *.domain.com

Возможности проекта

  • Динамически перебирает каждый профиль AWS, настроенный в .aws/config
  • Извлекает A-записи из AWS Route53
  • Извлекает A-записи из Cloudflare (опционально)
  • Извлекает A-записи из CSV-файла (опционально)
  • Перебирает все регионы, один регион или список регионов через запятую
  • Получает все эластичные IP-адреса, связанные со всеми вашими аккаунтами AWS
  • Получает все публичные IP-адреса, связанные со всеми вашими аккаунтами AWS
  • Перекрестно проверяет DNS-записи с IP-адресами, принадлежащими вашей организации, для обнаружения потенциальных захватов
  • Поддержка Slack Webhook для отправки уведомлений о захватах

Важно:

Чтобы этот инструмент был эффективным, он должен иметь полную картину вашей среды AWS. Если у него нет полной картины, это приведет к ложноположительным результатам.

Установка Ghostbuster

Установка Ghostbuster проста: выполните pip install ghostbuster. Инструмент командной строки будет доступен через команду ghostbuster.

Требуется среда Python 3.x.

Использование 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.

Примеры команд

Запустите Ghostbuster с доступом к DNS-записям Cloudflare, отправляйте уведомления в Slack webhook, перебирайте каждый профиль AWS, настроенный в .aws/config или .aws/credentials, для всех регионов AWS:

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

Запустите Ghostbuster с вручную введенным списком A-записей поддоменов (см. records.csv в этом репозитории для примера файла):

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

Вы можете указать конкретные регионы, используя --regions со списком регионов через запятую, например us-east-1,us-west-1.

Пример вывода

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

Настройка ваших аккаунтов AWS

Первый шаг — создание ключей или ролей в ваших аккаунтах AWS, которые предоставляют привилегии, необходимые для чтения записей Route53 и описания эластичных адресов и сетевых интерфейсов EC2.

  1. Чтобы создать нового пользователя IAM в AWS, перейдите по следующему URL: https://console.aws.amazon.com/iam/home#/users$new?step=details
  2. Выберите только Access key - Programmatic access и нажмите Next: Permissions.
  3. Нажмите Attach existing policies directly, затем нажмите Create policy.
  4. Нажмите JSON и вставьте следующую политику:
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. Нажмите Next: Tags, затем Next: Review.
  2. Установите имя политики GhostbusterPolicy.
  3. Нажмите Create Policy.
  4. Перейдите по адресу https://console.aws.amazon.com/iam/home#/users$new?step=permissions&accessKey&userNames=ghostbuster&permissionType=policies
  5. Выберите GhostbusterPolicy.
  6. Нажмите Next: Tags, затем Next: Review.
  7. Нажмите Create user и настройте учетные данные AWS в файле .aws/credentials.

Повторите описанные выше шаги для каждого аккаунта AWS, которым вы владеете.

Этот инструмент будет работать с любой конфигурацией AWS, которую вы настроили (несколько ключей или профили с переключением ролей между аккаунтами). Этим управляет boto3 — библиотека, используемая для взаимодействия с AWS.

Пример конфигурации выглядит так:

.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

В качестве альтернативы, вместо ролей, которые предполагаются, вы также можете настроить файл .aws/credentials, содержащий список профилей и связанных ключей с ограниченным доступом.

После того как ваша конфигурация AWS настроена со всеми аккаунтами в вашей среде AWS, вы можете запустить инструмент с помощью следующей команды:

Настройка разрешений AWS для --roles

Ghostbuster может использовать роли вместо профилей, что устраняет необходимость хранить много учетных данных в одном месте. Однако подход с ролями потребует создания дополнительных политик IAM внутри вашей организации.

Роли можно использовать с помощью флагов --roles roles.csv или --autoroles. Чтобы настроить --roles для работы, необходимо создать роль GhostbusterTargetAccountRole с точно таким именем в каждом аккаунте, который сканируется:

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 будет запущен в lambda/ec2/где-либо с ролью ghostbuster — назовем ее главной ролью ghostbuster. Главная роль должна иметь возможность предполагать 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"
  }
}

Настройка разрешений AWS для --autoroles

Автоматическое обнаружение аккаунтов требует дополнительных разрешений по сравнению с --roles. После настройки --roles для работы, рассмотрите возможность добавления следующей политики IAM в аккаунт, имеющий обзор организации:

root@kitploit:~
{
    sid = "BaseAccess"

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

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

Затем в аккаунте, где запускается ghostbuster, прикрепите следующую политику к главной роли ghostbuster, чтобы она могла предполагать роль для просмотра организации:

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

Не забудьте заменить ORG_LOOKUP_ACCOUNT_ID на фактический ID аккаунта.

Настройка Cloudflare (опционально)

Если вы хотите, чтобы Ghostbuster импортировал все A-записи, которые вы настроили в Cloudflare, вам необходимо создать API-токен, который может читать зоны.

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

Настройте API-токен Cloudflare, как показано на скриншоте ниже:

После получения этого API-токена сохраните его в надежном месте (менеджере паролей). Чтобы использовать его с Ghostbuster, передайте его через аргумент cloudflaretoken.

Авторы

  • Shubham Shah - Первоначальная работа - github

Смотрите также список участников, которые внесли вклад в этот проект.

Лицензия

GNU Affero General Public License

Тестирование Ghostbuster

  1. Клонируйте этот репозиторий.
  2. Установите virtualenv с помощью pip3 install virtualenv
  3. Создайте виртуальное окружение с помощью virtualenv venv
  4. Активируйте виртуальное окружение с помощью . venv/bin/activate
  5. Установите ghostbuster, перейдя в корень репозитория: pip3 install --editable .
  6. Внесите свои изменения и выполните команду ghostbuster.
Скачать инструмент