June 7

Поиск поддоменов: инструменты и методы

Поиск поддоменов: инструменты и методы

Поддомены — это «входные двери» в инфраструктуру организации. Часто основные сервисы располагаются на поддоменах типа www.example.com, mail.example.com, vpn.example.com, а забытые поддомены (test.example.com, dev.example.com) могут быть уязвимы или раскрывать внутреннюю структуру. Поиск поддоменов — ключевой этап технического OSINT, позволяющий обнаружить скрытые активы, не связанные напрямую с основным доменом. Данная статья посвящена методам и инструментам пассивного поиска поддоменов.

Почему поддомены важны для разведки?

Классификация методов поиска поддоменов

Этап 1: Поиск через сертификаты (Certificate Transparency Logs)

Современные SSL/TLS сертификаты публикуются в публичные логи Certificate Transparency (CT). Каждый выданный сертификат (включая те, что для поддоменов) появляется в этих логах. Это наиболее надежный пассивный источник поддоменов.

Инструменты CT-логов:

Использование crt.sh:

  • Веб-интерфейс: https://crt.sh/?q=%25.example.com (где %25 — это URL-кодированный символ %, означающий "любые символы перед .example.com").
  • API: https://crt.sh/?q=.example.com&output=json

Пример API-запроса (Python):

import requests
import json

def get_subdomains_from_crt(domain):
    url = f"https://crt.sh/?q=%25.{domain}&output=json"
    response = requests.get(url)
    if response.status_code == 200:
        data = response.json()
        subdomains = set()
        for entry in data:
            name = entry.get('name_value', '')
            if name.endswith(f'.{domain}') or name == domain:
                subdomains.add(name)
        return sorted(subdomains)
    else:
        return []

subs = get_subdomains_from_crt('example.com')
print(subs)

crt.sh возвращает много дублей, мёртвые сертификаты, включает домены, принадлежащие другим организациям (если сертификат содержит несколько имен). Требуется пост-обработка.

Этап 2: Поиск через DNS-историю

Исторические DNS-записи содержат поддомены, которые уже могли быть удалены, но все еще могут указывать на активные IP.

Инструменты:

  • SecurityTrails — позволяет искать поддомены по домену и видеть историю.
  • DNSdumpster — отображает все поддомены, найденные из разных источников.
  • ViewDNS.info (Reverse IP lookup) — показывает домены на одном IP, что может косвенно выявить поддомены.

SecurityTrails API (пример):

curl -H "APIKEY: YOUR_KEY" https://api.securitytrails.com/v1/domain/example.com/subdomains

Этап 3: Активный DNS-брутфорс (словарный перебор)

Перебор возможных имен поддоменов с использованием словаря (или генерация на основе правил). Это активный метод, так как генерирует множество DNS-запросов к резолверам цели или к публичным DNS.

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

Инструменты брутфорса:

  • Sublist3r — комбинирует пассивные источники + брутфорс.
  • Amass — мощный фреймворк (пассивный + активный).
  • dnsrecon — включает брутфорс и AXFR.
  • dnsenum — классика.
  • Gobuster с модулем dns.

Пример использования Sublist3r:

sublist3r -d example.com -o subdomains.txt
amass enum -passive -d example.com -o subdomains.txt

Активный брутфорс с Amass:

amass enum -active -d example.com -brute -w wordlist.txt

Словари для брутфорса:

  • SecLists/Discovery/DNS/subdomains-top1million-5000.txt — популярный.
  • commonspeak2-wordlists.
  • Собственные списки, сформированные из известных поддоменов (например, www, mail, remote, vpn, dev, test, staging, api, admin, portal, blog, shop, support, ftp, ns1, mx1).

Этап 4: Поиск через поисковые системы

Использование операторов поиска для нахождения страниц, индексированных на поддоменах.

Google Search:

site:*.example.com
site:example.com -www

Bing / Yandex — аналогично.

Особенности: находит только проиндексированные поисковиком поддомены; часто дает неполный результат.

Этап 5: Поиск через ASN и IP-диапазоны

Если известен ASN (автономная система) цели или диапазон IP-адресов, можно выполнить обратный поиск PTR-записей для всех IP в диапазоне.

Метод:

  1. Определить ASN цели (через whois IP или BGP.he.net).
  2. Получить список IP-диапазонов этого ASN (из базы RIPE/ARIN).
  3. Выполнить массовый reverse DNS-запрос (но осторожно, чтобы не перегружать сеть). Инструменты: dnsrecon -r, massdns, собственные скрипты.

Пассивный вариант: использовать сервис Censys (ранее — Project Sonar), который публикует данные reverse DNS сканирований.

Этап 6: Поиск в репозиториях кода (GitHub, GitLab)

В коде, конфигурационных файлах, документации часто встречаются поддомены.

GitHub поиск:

*.example.com extension:conf
"example.com" path:config

Инструменты:

  • GitHub Code Search (веб).
  • TruffleHog (поиск секретов, может найти и поддомены).
  • GitRob / GitGrab — поиск по организациям.

Этап 7: Комплексные фреймворки для поддоменов

Для полного покрытия использовать комбинацию: Amass (пассивный режим) + Subfinder + crt.sh + SecurityTrails (если есть ключ).

Этап 8: Обработка и фильтрация результатов

Список поддоменов обычно содержит:

  • Дубликаты.
  • Поддомены, не относящиеся к цели (например, из общих сертификатов).
  • Некорректные записи (звездочки, wildcards).

Фильтрация:

def clean_subdomains(raw_list, target_domain):
    cleaned = set()
    for sub in raw_list:
        sub = sub.strip().lower().rstrip('.')
        if sub.endswith(target_domain) and sub != target_domain:
            # Убрать wildcard (*)
            if sub.startswith('*.'):
                sub = sub[2:]
            cleaned.add(sub)
    return sorted(cleaned)

Валидация: для каждого поддомена выполнить DNS-запрос (A или AAAA), чтобы убедиться, что он резолвится в IP.

Этап 9: Визуализация и анализ поддоменов

После сбора поддоменов полезно:

  • Сгруппировать их по IP-адресам (один IP — несколько поддоменов).
  • Выявить общие подсети.
  • Обнаружить поддомены, указывающие на облачные сервисы (AWS, Azure, GCP).
  • Построить граф связей.

Инструменты визуализации:

  • Aquatone — создает скриншоты поддоменов, отображает сгруппированные по IP.
  • EyeWitness — аналогично.
  • Gephi — для графа связей.

Практический пример: поиск поддоменов example.org

  1. crt.sh → найдено 45 поддоменов, включая admin.example.org, dev-api.example.org, test.example.org.
  2. Subfinder → добавил mail.example.org, remote.example.org, vpn.example.org.
  3. Amass (пассивный) → нашел grafana.internal.example.org, jenkins.example.org.
  4. DNSdumpster → подтвердил большинство и добавил ftp.example.org.
  5. Проверка через DNS: dev-api.example.org разрешается в 203.0.113.89, jenkins.example.org — в 198.51.100.22.
  6. Анализ IP: оба IP принадлежат одному хостинг-провайдеру, но разным подсетям. jenkins.example.org имеет открытый порт 8080 (Jenkins), что является потенциально критичным.
  7. Вывод: обнаружен Jenkins-сервер, доступный из интернета, который можно проверить на наличие уязвимостей.

Автоматизация сбора поддоменов (Python-скрипт-агрегатор)

import subprocess
import requests

def get_subdomains(domain):
    subs = set()
    # crt.sh
    url = f"https://crt.sh/?q=%25.{domain}&output=json"
    resp = requests.get(url)
    if resp.status_code == 200:
        for entry in resp.json():
            name = entry.get('name_value', '')
            if name.endswith(domain):
                subs.add(name)
    # Subfinder (запуск внешней команды)
    result = subprocess.run(['subfinder', '-d', domain, '-silent'], capture_output=True, text=True)
    for line in result.stdout.split():
        subs.add(line.strip())
    return sorted(subs)

domains = get_subdomains('example.com')
for d in domains:
    print(d)

Пассивный поиск (crt.sh, SecurityTrails, DNS-история) легален и безопасен.

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

Использование публичных резолверов (8.8.8.8) для брутфорса предпочтительнее, чем запросы напрямую к NS цели, но все равно генерирует сетевой трафик.

Поиск поддоменов — многоэтапный процесс, требующий комбинации пассивных источников (crt.sh, SecurityTrails, DNS-история) и аккуратного активного брутфорса. Самые мощные инструменты — Amass и Subfinder. Полученный список поддоменов необходимо очистить, провалидировать и проанализировать (выявить IP, открытые порты, технологии). Это позволит составить полную карту внешней инфраструктуры организации.