Статья Деанонимизация C2-инфраструктуры: от dangling CNAME до атрибуции оператора через IP-пивотинг

Сетевой коммутатор на антистатическом коврике с зелёным текстом на дисплее, рядом распечатка DNS-зоны с красной пометкой. Тёплый свет лампы, глубокие тени, зернистость плёнки.


При разборе инфраструктуры одной Cobalt Strike-кампании ключевой зацепкой оказался не сэмпл и не IP из фида, а CNAME-запись субдомена скомпрометированной организации. Она указывала на Heroku-приложение, удалённое за полгода до инцидента. Этот dangling CNAME позволил восстановить исторический IP через passive DNS, а к нему оказались привязаны ещё четыре домена - два из которых уже фигурировали в TI-фидах как управляющие серверы. Одна забытая DNS-запись, два рабочих дня пивотинга - семнадцать связанных узлов и три автономные системы, за которыми стоял один оператор. Ниже - методология, которая за этим стоит.

Инфраструктура атакующего как объект threat intelligence​

Без канала связи между имплантом и сервером управления атака замирает на этапе post-exploitation: оператор не может отдавать команды, выгружать данные, перемещаться по сети. MITRE ATT&CK классифицирует подготовку такой инфраструктуры как Resource Development - T1584.001 (Domains): атакующий приобретает или компрометирует домены для использования в операции. Для бизнеса конечный импакт - утечка данных, шифрование хостов, простой. Для аналитика C2-инфраструктура - это не абстрактный "управляющий сервер", а граф связанных ресурсов, который можно раскопать.

[Применимо: threat intelligence, внешняя разведка, SOC L3. Не применимо для внутреннего пентеста - это чистая TI-дисциплина.]

Каждый элемент графа - домены, IP-адреса, TLS-сертификаты, Whois-записи, ASN - содержит метаданные, которые атакующий не всегда контролирует. Passive DNS хранит историческую привязку домена к IP, Certificate Transparency логирует каждый выпущенный сертификат, а Whois-история иногда показывает email регистранта до того, как он включил privacy. Задача деанонимизации C2 инфраструктуры - собрать эти метаданные и через серию пивотов восстановить полную картину операции.

Русскоязычные материалы по C2-хантингу описывают инструменты обнаружения серверов (Shodan, Censys, VirusTotal) и паттерны поиска (HTTP-заголовки, фавиконки, сертификаты). Хорошая база, но она не отвечает на вопрос: кто стоит за инфраструктурой и как связать разрозненные серверы в единую операцию. Именно этот разрыв закрывает методология инфраструктурного пивотинга - от обнаружения dangling CNAME до построения графа оператора.

Dangling CNAME и subdomain takeover: точка входа в C2-разведку​

1783053597733.webp

Механика dangling DNS и типы уязвимых записей​

Dangling DNS - DNS-запись, которая продолжает указывать на ресурс, которого больше не существует.

Согласно OWASP Subdomain Takeover Prevention Cheat Sheet, наиболее уязвимы четыре типа записей:

CNAME - самый распространённый вектор. Если каноническое имя указывает на сервис, который можно заново зарегистрировать (Heroku, GitHub Pages, AWS S3), захват субдомена становится тривиальным. A-записи, указывающие на освобождённые IP-адреса - в облачных средах elastic IP возвращается в пул провайдера, и его может получить другой клиент. NS-записи, делегирующие субдомен стороннему DNS-провайдеру - если аккаунт у провайдера закрыт, любой новый пользователь может заявить права на делегированную зону и контролировать все записи под этим субдоменом. MX-записи, указывающие на деактивированные почтовые сервисы - по данным OWASP, через такую запись можно перехватить почту и пройти email-based domain validation у Certificate Authority, получив легитимный TLS-сертификат на субдомен.

Корневая причина, по которой dangling-записи накапливаются, - разрыв между жизненным циклом облачных ресурсов и DNS-управлением. Команда, создававшая ресурс, может не иметь доступа к DNS. Команда, управляющая DNS, может не знать, что ресурс удалён. Shadow IT, забытые PoC-стенды, DNS-зоны, унаследованные при слияниях компаний - всё это порождает висящие записи, которые никто не контролирует.

Как отмечает AWS CIRT, сервисы с глобально уникальными пространствами имён наиболее подвержены захвату: Amazon S3 (bucket-имена глобально уникальны, заявить может любой аккаунт), Elastic Beanstalk (аналогично). CloudFront менее уязвим - DNS-имя вида d111111abcdef8.cloudfront.net назначается AWS автоматически. С марта 2026 года S3-бакеты, созданные с региональными пространствами имён, привязаны к аккаунту и не подвержены этой проблеме (по данным блога AWS Security).

Для автоматизированного обнаружения dangling-записей есть инструменты с открытым кодом: dnsReaper (сканер с поддержкой более 40 сервисных fingerprint'ов), nuclei с набором шаблонов для subdomain takeover, community-проект can-i-take-over-xyz(GitHub - EdOverflow/can-i-take-over-xyz: "Can I take over XYZ?" — a list of services and how to claim (sub)domains with dangling DNS records.) - справочник по уязвимым и неуязвимым сервисам (по данным OWASP). Microsoft опубликовала PowerShell-скрипт Get-DanglingDnsRecords.ps1 для проверки Azure-ресурсов.

Subdomain takeover C2: от захвата к наблюдению​

Для threat intelligence аналитика subdomain takeover интересен в двух сценариях, и оба напрямую связаны с деанонимизацией C2 инфраструктуры.

Сценарий 1: атакующий захватывает субдомен жертвы для размещения C2. Прямое применение T1584.001 - оператор находит dangling CNAME на [I].target.com, заявляет права на ресурс и получает C2-сервер на доверенном домене. Трафик к такому субдомену не вызывает подозрений у сетевых фильтров, потому что родительский домен легитимен. По данным OWASP, атакующий при этом может перехватывать cookies, скопированные на [/I].example.com, обходить CSP-правила с wildcard-доверием к субдоменам и даже получать валидные TLS-сертификаты через автоматическую DNS-валидацию. По данным Censys, HTTPS с padlock в браузере не защищает от subdomain takeover - атакующий может получить легитимный сертификат через платформу, на которую указывает захваченный ресурс.

Сценарий 2: dangling CNAME в инфраструктуре самого атакующего. Операторы C2 тоже используют CDN, cloud-хостинги и third-party сервисы для маскировки. Когда кампания завершается, они деактивируют ресурсы, но не всегда чистят DNS. Эти "хвосты" видны в passive DNS и позволяют связать домены, которые оператор считал несвязанными.

В обоих случаях dangling CNAME - не уязвимость для эксплуатации, а индикатор для пивотинга. Обнаружив такую запись, аналитик получает историческую привязку домена к IP через passive DNS, и этот IP становится следующей точкой пивотинга.

Passive DNS для деанонимизации C2 инфраструктуры​

1783053629517.webp

Источники и инструменты passive DNS разведки​

Passive DNS - база данных, которая записывает исторические DNS-резолюции: какой домен указывал на какой IP, в какой временной период. В отличие от активного dig-запроса, passive DNS показывает то, что было месяцы и годы назад - даже после удаления или изменения записей.

Основные источники для аналитика:
  • SecurityTrails - хранит историю A/AAAA/MX/NS/CNAME-записей. Через API или веб-интерфейс можно запросить все исторические IP для домена и наоборот - все домены, которые когда-либо указывали на конкретный IP.
  • DNSDB (Farsight Security) - одна из крупнейших passive DNS баз. Поддерживает обратные запросы: по IP получить все связанные домены за заданный период.
  • PassiveTotal (RiskIQ, теперь часть Microsoft) - объединяет passive DNS с данными Whois, сертификатов и трекеров. Удобен для построения связей между элементами инфраструктуры в едином интерфейсе.
Для первоначального сбора субдоменов перед проверкой на dangling записи используются subfinder и amass - они агрегируют данные из Certificate Transparency логов, DNS-перебора и passive DNS.

Практический workflow passive DNS​

Типичная цепочка при расследовании C2:
  1. Берём домен из IOC-фида или из результатов анализа сэмпла - допустим, update-cdn.example[.]com.
  2. Запрашиваем историю в SecurityTrails: текущий dig покажет IP или NXDOMAIN, а SecurityTrails покажет все IP, на которые этот домен указывал за последние годы.
  3. Делаем обратный запрос по каждому историческому IP. Если IP 185.X.X.X обслуживал update-cdn.example[.]com с января по март - запрашиваем: какие ещё домены указывали на этот IP в тот же период?
  4. Фильтруем результаты. Shared-хостинг даёт сотни доменов на одном IP - это шум. Выделенные серверы (VPS) с 1-5 доменами на IP - сигнал. Если на том же IP в тот же период находились delivery-api.example2[.]com и report-portal.example3[.]com - это кандидаты на принадлежность к тому же оператору.
  5. Рекурсивно повторяем для каждого найденного домена. Это и есть IP-пивотинг - расширение графа через итеративные запросы.
Проверить текущий статус CNAME и зафиксировать dangling-запись можно стандартным dig:
Bash:
dig staging.target.com CNAME +short
# old-app.herokuapp.com

dig old-app.herokuapp.com A +short
# ;; status: NXDOMAIN  - ресурс не существует, запись dangling
Если CNAME резолвится в NXDOMAIN на стороне провайдера, а запись до сих пор присутствует в DNS организации - это подтверждённый dangling CNAME, готовый для дальнейшего анализа через passive DNS.

IP-пивотинг и атрибуция оператора C2​

Историческая корреляция через Whois и ASN​

IP-пивотинг - переход от IP-адреса к другим элементам инфраструктуры через метаданные. Whois-записи, даже при использовании privacy-сервисов, оставляют артефакты: email регистранта, организация, дата регистрации, NS-серверы.

Операторы C2 регулярно допускают OPSEC-ошибки, и на этом строится атрибуция:
  • Регистрируют несколько доменов через один аккаунт у регистратора с одним email
  • Используют одни и те же NS-серверы (характерные для конкретных bulletproof-хостингов)
  • Размещают серверы в одной автономной системе (ASN)
Методология IP-пивотинга для атрибуции оператора C2:
  1. Whois для каждого домена из passive DNS. Если email регистранта не privacy-защищён - делаем reverse Whois: ищем все домены, зарегистрированные на этот email. SecurityTrails и DomainTools поддерживают такие запросы.
  2. Исторический Whois. Регистранты не всегда включали privacy protection с первого дня. SecurityTrails хранит исторические Whois-снимки - бывает видно, что домен первые месяцы был зарегистрирован на конкретный email, а затем privacy включили. Этот email - сильная ось для пивотинга.
  3. ASN-кластеризация. Определяем AS для каждого IP в графе. Если четыре из пяти серверов находятся в AS, подконтрольной одному bulletproof-хостеру - это паттерн. Он не доказывает атрибуцию сам по себе, но подтверждает связь между узлами и сужает круг.
[Применимо: threat intelligence, внешняя разведка. Ограничение: техника не работает при анализе commodity-малвари на shared hosting - слишком много шума на одном IP. Требуется выделенная инфраструктура оператора.]

Построение графа через Maltego и SpiderFoot​

Maltego - основной инструмент для визуализации инфраструктурных связей при деанонимизации C2 инфраструктуры. Рабочий процесс: загрузить начальный домен или IP как корневую сущность, применять трансформы (passive DNS lookup, Whois lookup, reverse DNS, certificate lookup) и наблюдать, как граф расширяется при каждом пивоте. Связи между сущностями видны визуально: домен -> IP -> другие домены -> сертификат -> SAN -> ещё домены.

SpiderFoot - альтернатива для автоматизированной инфраструктурной разведки. В отличие от Maltego, он работает в CLI/web-режиме и автоматически запускает десятки модулей (passive DNS, Shodan, Censys, Certificate Transparency) по одному стартовому индикатору. Результаты менее удобны для визуального анализа, но покрывают больше источников за один запуск.

На практике оптимальная связка: SpiderFoot для первоначального широкого сбора, затем Maltego для ручного анализа связей и построения финального графа атрибуции. SpiderFoot находит то, что аналитик мог бы пропустить; Maltego позволяет проследить каждую связь и отсечь ложные совпадения.

КритерийMaltego CESpiderFoot
Режим работыGUI, интерактивныйCLI/Web, пакетный
Визуализация графаНативно, в реальном времениТолько отчёт/граф после сканирования
Покрытие источниковЧерез трансформы (нужна ручная настройка)200+ модулей из коробки
Когда использоватьРучной анализ связей, финальный графПервоначальный сбор, wide-scope разведка
Когда не использоватьМассовый сбор по сотням индикаторовДетальный разбор одного узла графа

Сертификаты и TLS-fingerprinting для OSINT C2 атрибуции​

1783053767372.webp

Certificate Transparency и SAN-пивотинг​

Certificate Transparency (CT) - публичный лог всех выпущенных TLS-сертификатов. Каждый раз, когда оператор C2 получает сертификат (даже бесплатный Let's Encrypt), запись попадает в CT-лог и становится доступна для поиска.

Почему CT критичен для атрибуции:

Subject Alternative Names (SAN). Один сертификат может покрывать несколько доменов. Если оператор выпустил сертификат для cdn-update[.]com с SAN, включающим report-api[.]net и static-files[.]org - эти три домена связаны. Даже если они размещены на разных IP и в разных ASN.

Временная корреляция. Серия сертификатов, выпущенных с одного аккаунта Let's Encrypt в течение короткого окна (несколько часов), часто указывает на автоматизированное развёртывание C2-инфраструктуры.

Issuer fingerprint. Самоподписанные сертификаты или сертификаты от нишевых CA - дополнительный признак для кластеризации. Операторы, использующие нестандартные значения в полях issuer и subject, оставляют воспроизводимый след. Бывает, что в Subject CN прямо указано название фреймворка - по данным исследований C2-хантинга, такие ляпы встречаются чаще, чем хотелось бы атакующим.

Поиск по CT-логам доступен через crt.sh (бесплатно, запрос вида crt.sh/?q=%.example.com), Censys (API) и SecurityTrails.

JARM и JA3S: fingerprinting C2-фреймворков​

Помимо атрибутов сертификата, TLS-соединение само оставляет уникальный отпечаток.

JA3/JA3S - пассивный метод fingerprinting'а клиентской (JA3) и серверной (JA3S) части TLS-рукопожатия. Собирает параметры из пакетов Client Hello и Server Hello, формирует MD5-хеш. C2-фреймворки (Cobalt Strike, Mythic, Havoc) генерируют характерные JA3S-хеши, по которым их можно идентифицировать в результатах сканирования и в сетевом трафике.

JARM - активный fingerprint TLS-сервера. Отправляет десять специально сформированных TLS Client Hello с разными параметрами и хеширует ответы. JARM-отпечаток стабилен для конкретной конфигурации сервера. Если пять серверов на разных IP дают одинаковый JARM-хеш - это с высокой вероятностью один фреймворк с одной конфигурацией, развёрнутый одним оператором.

Пример поиска в Shodan по характерным HTTP-заголовкам Mythic C2:
Код:
port:80 "Cache-Control: max-age=0, no-cache" "Server: NetDNA-cache/2.2"
"Content-Type: application/javascript" ASN:AS14061
Этот запрос ищет серверы с набором заголовков, характерным для дефолтной конфигурации профиля Mythic C2. Найденные IP - кандидаты для дальнейшего пивотинга через passive DNS и Whois. Для Cobalt Strike характерен другой маркер: дефолтный HTTP-ответ 404 Not Found с Content-Type: text/plain и Content-Length: 0 без кастомного профиля malleable C2. (Да, в 2025 году люди всё ещё разворачивали CS с дефолтным профилем. Каждый раз удивлялся.)

Ограничение: JARM и Shodan-запросы - активное сканирование. Они работают только с живыми серверами. Если C2 уже деактивирован, остаётся опираться на passive DNS и CT-логи.

Практическая цепочка деанонимизации: от IOC до оператора​

Требования к окружению:
  • ОС: GNU/Linux (Kali, Ubuntu 22.04+) или macOS
  • RAM: минимум 8 ГБ (Maltego CE потребляет 2-4 ГБ при работе с крупными графами)
  • Сеть: online (требуется доступ к API SecurityTrails, Shodan, Censys, crt.sh)
  • API-ключи: SecurityTrails (free tier - 50 запросов/мес), Shodan (free tier), Censys (free tier для Search)
  • Инструменты: dig, curl, jq, subfinder (ProjectDiscovery), Maltego CE (free)
  • Дополнительно: JARM-сканер (GitHub: salesforce/jarm) для активного fingerprinting'а живых серверов
Шаг 1. Получаем стартовый индикатор: домен из анализа сэмпла или TI-фида. Пусть это update-service.example[.]com.

Шаг 2. Проверяем текущее состояние DNS через dig update-service.example[.]com A и dig update-service.example[.]com CNAME. Если CNAME указывает на несуществующий ресурс - фиксируем dangling CNAME. Если A-запись возвращает IP - записываем.

Шаг 3. Запрашиваем passive DNS историю в SecurityTrails. Смотрим все исторические IP для этого домена. Каждый IP - потенциальная точка пивотинга.

Шаг 4. Reverse DNS для каждого исторического IP. Через SecurityTrails или DNSDB получаем список всех доменов, которые когда-либо указывали на каждый IP. Фильтруем: VPS с 1-5 доменами на IP - приоритет. Shared hosting (100+ доменов) - отбрасываем.

Шаг 5. Whois и reverse Whois для каждого нового домена из шага 4. Исторический Whois - обязательно: даже если сейчас стоит privacy, раньше email мог быть открыт. Совпадение email регистранта по нескольким доменам - сильный сигнал атрибуции.

Шаг 6. Certificate Transparency: запрашиваем crt.sh/?q=%.example[.]com для каждого связанного домена. Анализируем SAN - альтернативные имена в сертификатах раскрывают дополнительные домены оператора.

Шаг 7. TLS-fingerprinting (только для живых серверов): проверяем JARM-хеш через утилиту jarm или через Shodan, где JARM индексируется автоматически. Совпадение JARM по нескольким IP подтверждает единую конфигурацию.

Шаг 8. Визуализация в Maltego. Импортируем все собранные сущности (домены, IP, email регистрантов, сертификаты) и прокладываем связи. Граф наглядно показывает кластеры и узлы-хабы - точки пересечения максимального числа связей.

Результат: от одного стартового домена - граф инфраструктуры с десятками узлов, объединённых по IP-пересечениям, общим Whois-данным, SAN-сертификатам и TLS-отпечаткам.

Ограничения техник деанонимизации C2​

📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

Наибольший практический результат даёт комбинация passive DNS и Certificate Transparency. Эти два источника не требуют активного сканирования, полностью легальны и покрывают большинство сценариев, когда атрибуция вообще возможна. Whois и JARM дополняют картину, но редко являются единственной осью для построения графа.

Большинство TI-команд работают в парадигме IOC-matching: получили хеш или домен из фида, проверили в VirusTotal, добавили в blocklist, закрыли тикет. Инфраструктурный пивотинг - переход от одного индикатора к графу операции - остаётся навыком единиц. И дело не в сложности инструментов: SecurityTrails, crt.sh и Maltego CE доступны бесплатно. Дело в подходе. Аналитик, который воспринимает C2-домен как конечную точку для блокировки, и аналитик, который воспринимает его как стартовый узел для пивотинга - два принципиально разных специалиста по ценности для команды. Автоматизированная корреляция инфраструктуры постепенно становится стандартной функцией коммерческих TI-платформ - Censys и Microsoft уже движутся в эту сторону с dangling DNS-детектированием и attack surface management. Но пока это окно открыто, навык ручного пивотинга через passive DNS, Whois и CT-логи - то, что отличает настоящего threat intelligence аналитика от оператора поисковой строки VirusTotal. Возьмите любой C2-домен из свежего TI-отчёта и пройдите описанную цепочку самостоятельно, шаг за шагом. Это единственный способ превратить методологию в рабочий рефлекс.
 
Последнее редактирование модератором:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🧭 Навигатор · ИБ 2026
Не знаешь, какой трек твой?
5 направлений ИБ, реальные зарплаты и точка входа для каждого — в одном треде.
JuniorSenior+
100K → 600K+ ₽ /мес
Открыть навигатор →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab