РАЗБОР
Статья
Атака на цепочку поставок через заброшенный домен
[ обложка статьи ]
Режим чтения
На внешнем пентесте финансовой организации я нашёл в DNS CNAME-запись, ведущую на домен виджета обратной связи от стороннего SaaS-вендора. Домен истёк два месяца назад и был доступен для регистрации за $12. После согласования с заказчиком расширения scope (захват домена третьей стороны выходит за стандартные ROE - нужно отдельное разрешение) я зарегистрировал домен, поднял HTTP-сервер, настроил DNS. Через 48 часов на мой лог посыпались запросы: браузеры сотрудников, внутренние порталы, автоматизированные системы. Несколько тысяч уникальных хостов. EDR молчал, алертов в SIEM не было - трафик шёл по CNAME-пути, который существовал три года и ни у кого не вызывал подозрений. По MITRE ATT&CK это Compromise Infrastructure: Domains (T1584.001, Resource Development). Стоимость атаки - чашка кофе.
Бизнес-логика атаки: зачем злоумышленнику заброшенный домен
Атака на цепочку поставок через заброшенные домены работает на одном принципе: доверие наследуется, даже когда объект доверия исчез. Организация подключает сторонний виджет, CDN или аналитику через внешний домен - тот попадает в белые списки CSP-политик, CORS-правил, firewall-исключений. Домен вендора истекает, а все доверительные отношения остаются на месте. Атакующий регистрирует домен и наследует накопленное доверие. Подробнее - в нашем материале про asset management пентест.Монетизация зависит от типа перехваченного ресурса:
| Тип ресурса | Вектор монетизации | Масштаб |
|---|---|---|
| JavaScript-библиотека (CDN) | Инъекция стилера, майнера, редирект | Polyfill.io - 100 000+ сайтов |
| Поддомен для SaaS-интеграции | Фишинг от имени бренда, спам | SubdoMailing - 8 000+ поддоменов |
| Домен пакетного менеджера | Подмена пакета, RCE через обновление | MavenGate, django-log-tracker |
| Email-сервис (MX-записи) | Перехват переписки, BEC-атаки | Захват MX истёкшего домена |
Стоимость входа: регистрация домена - $8-15, VPS - $5/месяц. Один заброшенный домен CDN-виджета может дать initial access к десяткам тысяч эндпоинтов одновременно. По данным IBM X-Force Threat Intelligence Index 2025, среднее время между публикацией CVE и устранением в организации - 29 месяцев. Для истёкших доменов и dangling DNS нет ни CVE, ни патча, ни сканера. Эти записи могут жить годами, и никто не почешется.
В терминологии MITRE ATT&CK цепочка выглядит так:
- Reconnaissance: WHOIS (T1596.002) + DNS (T1590.002) - поиск истекающих доменов и dangling-записей
- Resource Development: Acquire Infrastructure: Domains (T1583.001) - покупка домена
- Initial Access: Supply Chain Compromise (T1195) - подмена ресурса. Для кейсов внедрения вредоносного кода в пакет/зависимость (Polyfill.io, django-log-tracker) применимы T1195.001/T1195.002; для generic domain takeover через dangling DNS корректнее рассматривать захват домена как этап Resource Development (T1584.001/T1583.001), а Initial Access происходит через доверенный канал загрузки ресурса
| Предусловие | Описание |
|---|---|
| Домен вендора истёк | Доступен для регистрации через WHOIS или аукцион |
| DNS-записи клиента не очищены | CNAME/A/MX указывают на несуществующий ресурс |
| Мониторинг DNS отсутствует | Организация не отслеживает статус third-party доменов |
| Доверительные отношения активны | CSP, CORS, firewall-правила не обновлены |
Recon: поиск заброшенных доменов в supply chain
WHOIS-разведка и мониторинг истечения доменов
Первый этап - собрать все внешние домены, от которых зависит целевая инфраструктура. На пентесте я начинаю с пассивного сбора: парсинг JavaScript-файлов на сайте цели через Developer Tools (вкладка Network, фильтр по сторонним доменам), анализ CSP-заголовков (Content-Security-Policy), проверка DNS-записей SPF/DKIM/DMARC. Каждый домен третьей стороны - потенциальная точка захвата.Массовая проверка WHOIS для списка обнаруженных доменов:
Bash:
# Проверка дат истечения третьесторонних доменов
while read domain; do
expiry=$(whois "$domain" 2>/dev/null | grep -i "expir" | head -1)
echo "$domain | $expiry"
done < third_party_domains.txt | sort -t'|' -k2
pendingDelete - красный флаг.Инструмент
dnstwist полезен для обнаружения domain squatting - атаки на инфраструктуру через похожие доменные имена. Но для нашего сценария важнее мониторинг точных доменов вендоров, уже прописанных в инфраструктуре цели, а не поиск тайпосквоттинга.Поиск dangling DNS-записей
Dangling DNS record - DNS-запись (CNAME, A, MX), указывающая на ресурс, который больше не контролируется владельцем записи. По данным исследования BitSight TRACE, заброшенные домены продолжают получать трафик спустя месяцы и годы после прекращения использования. В одном из наблюдаемых случаев сотни истёкших доменов календарных сервисов получали запросы синхронизации с миллионов устройств. Представьте масштаб: миллионы устройств стучатся на домен, который можно купить за десятку.Связка
amass + ручная верификация через dig для поиска dangling-записей:
Bash:
# Перечисление поддоменов цели
amass enum -passive -d target.com -o subdomains.txt
# Проверка CNAME на dangling
while read sub; do
cname=$(dig +short CNAME "$sub" 2>/dev/null)
if [ -n "$cname" ]; then
resolved=$(dig +short A "$cname" 2>/dev/null)
[ -z "$resolved" ] && echo "DANGLING: $sub -> $cname"
fi
done < subdomains.txt
Отдельно стоит проверять облачные сервисы. По данным BitSight, исследователи безопасности демонстрировали subdomain takeover на платформах Shopify и GitHub Pages: удалённые hosted-сайты оставляли за собой CNAME-записи, позволяя атакующим захватить незарегистрированный ресурс и раздавать вредоносный контент с доверенных корпоративных поддоменов. По сути - вы раздаёте малварь с домена условного bank.com, и браузер даже не моргнёт.
Цепочка атаки: от покупки домена до перехвата трафика
Пошаговый разбор - обобщённый сценарий из нескольких проектов.
Шаг 1: Сбор third-party зависимостей. Анализ всех внешних ресурсов, загружаемых сайтом цели. Developer Tools, Network Tab, фильтр по сторонним доменам. Дополнительно:
curl -s https://target.com | grep -oP 'src="https?://[^"]*"' для извлечения всех внешних скриптов и стилей.Шаг 2: Проверка WHOIS и DNS. Для каждого стороннего домена - проверка статуса регистрации. Домен в статусе
redemptionPeriod, pendingDelete или с истёкшим Expiry Date - кандидат для захвата заброшенного домена.Шаг 3: Регистрация. Стандартная регистрация через любого регистратора. Стоимость: $8-15 для .com/.io. Некоторые домены доступны только через аукционы (GoDaddy Auctions, NameJet) - цена редко превышает $50.
Шаг 4: Настройка инфраструктуры. DNS-сервер с теми же типами записей (A, MX), которые использовал оригинальный вендор. На VPS - HTTP/HTTPS-сервер с логированием всех входящих запросов. Let's Encrypt выпустит сертификат бесплатно, потому что домен теперь наш (если на домене не осталась CAA-запись, ограничивающая выпуск другим CA, и домен не попал в blocklist CA/Browser Forum).
Шаг 5: Перехват трафика. В первые часы после настройки DNS начинают приходить запросы от систем, которые до сих пор ссылаются на захваченный домен. Лог-файл покажет масштаб: User-Agent, Referer, IP-адреса, типы запросов. Десятки, сотни или тысячи систем, зависящих от одного ресурса - и все они теперь ваши.
Шаг 6 (PoC для клиента). Для отчёта достаточно вернуть кастомный JavaScript с
alert('PoC: domain takeover by [pentester]') или отдать JSON с контролируемым payload. В реальной атаке здесь был бы стилер, криптомайнер или редирект.И вот что интересно: на шагах 3-6 не эксплуатируется ни одна уязвимость в традиционном понимании. Нет CVE, нет exploit-кода, нет обхода защиты. Только организационный пробел - никто не отслеживает домены третьих сторон.
Кейсы захвата заброшенных доменов в supply chain
Polyfill.io (июнь 2024). Сервис для совместимости JavaScript с устаревшими браузерами. Домен и GitHub-аккаунт проданы CDN-провайдеру Funnull, после чего cdn.polyfill.io начал раздавать вредоносный код. По данным Kaspersky, через фейковый домен, имитирующий Google Analytics (www[.]googie-anaiytics[.]com), пользователей перенаправляли на сайт ставок. На момент инцидента Polyfill.io использовали более 100 000 сайтов. Скрипт сервиса до сих пор торчит на десятках тысяч сайтов - типичная supply chain атака через домен, где компрометация одной точки распространения затронула всю downstream-цепочку.SubdoMailing (2024). По данным Guardio Labs (описано BitSight), атакующие захватили более 8 000 поддоменов известных брендов - MSN, McAfee, The Economist, Cornell University, CBS, Marvel, eBay. Механизм: supply chain атака через поддомен - организации привязывали поддомены к внешним сервисам, при деактивации сервисов dangling DNS-записи оставались. Атакующие зарегистрировали ресурсы, на которые указывали записи, и использовали доверие к брендам для массовой рассылки фишинга. 8 000 поддоменов - это не единичный инцидент, это индустрия.
django-log-tracker (февраль 2024). Заброшенный пакет на PyPI - последнее легитимное обновление в 2022 году. По данным Kaspersky, злоумышленники получили контроль над аккаунтом разработчика и загрузили обновление с инфостилером Nova Sentinel. Вредонос тянул пароли из браузеров, ключи от криптокошельков, сессионные токены. Классический захват аккаунта вендора в хозяйстве пакетных менеджеров.
MavenGate. Согласно исследованию Maven-Hijack (arxiv), атака MavenGate эксплуатировала предположения о владении пространствами имён (groupId) в Maven. Атакующие перерегистрировали истёкшие домены, связанные с groupId, публикуя вредоносные версии ранее доверенных Java-библиотек.
Для контекста масштаба: CVE-2024-3094 (XZ Utils) получил CVSS 10.0 (CRITICAL) с вектором CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H и классификацией CWE-506 (Embedded Malicious Code). EPSS 0.9090 (Top 1%) - вероятно, из-за множества публичных PoC-чекеров и широкого обсуждения в сообществе, а не из-за продолжающейся активной эксплуатации уже устранённого бэкдора. Операция длилась два с половиной года - пользователь под ником Jia Tan получил контроль над проектом, модифицированная liblzma попала в тестовые версии GNU/Linux-дистрибутивов. Принцип тот же: компрометация цепочки поставок через DNS, код или аккаунт - результат одинаков.
Subdomain takeover: эксплуатация dangling CNAME
Subdomain takeover - частный случай захвата заброшенного домена, только на уровне поддоменов. Механизм:
- Организация создаёт CNAME:
status.company.com -> company.statuspage.io - Statuspage-аккаунт отключают, но CNAME остаётся
- Атакующий создаёт аккаунт на Statuspage и привязывает
company.statuspage.io status.company.comтеперь отдаёт контент атакующего
Наиболее уязвимые паттерны (по данным публичных исследований, упомянутых BitSight):
| Платформа | Паттерн CNAME | Признак dangling |
|---|---|---|
| GitHub Pages | *.github.io | 404 при обращении |
| Shopify | *.myshopify.com | Shopify default page |
| Azure | *.azurewebsites.net | NXDOMAIN |
| AWS S3 | *.s3.amazonaws.com | NoSuchBucket |
| Heroku | *.herokuapp.com | No such app |
Для автоматизации обнаружения -
subjack и проект can-i-take-over-xyz на GitHub с актуальным списком fingerprints для каждой платформы.Что проверять и как защититься от захвата домена вендора
Заброшенные домены - один из тех векторов, который не вписывается в привычную модель управления уязвимостями. Нет CVE, нет CVSS, нет патча. Сканер периметра не поймает dangling CNAME. SIEM не алертнёт на загрузку скрипта с домена, который три года был в белом списке. На практике, на каждом втором внешнем пентесте находится хотя бы одна dangling DNS-запись, указывающая на ресурс, который никто не контролирует.
Большинство команд безопасности фокусируются на том, что они контролируют: свои серверы, приложения, код. Но атака на цепочку поставок через заброшенные домены бьёт по зонам вне контроля. Домен вендора, который закрылся. CDN-ссылка, которую забыли убрать при миграции. Поддомен, созданный маркетологом для промо-страницы два года назад. Всё это - артефакты, которые превращаются в точки initial access за $10 и 15 минут работы.
В ближайший год мы увидим рост целевых атак через перерегистрацию доменов пакетных менеджеров и CDN-провайдеров. Polyfill.io был демонстрацией масштаба - 100 000+ сайтов через один домен. Атакующим не нужен zero-day, когда достаточно подождать, пока домен вендора уйдёт на аукцион. Проверьте свой периметр скриптом из раздела про dangling CNAME - если хоть одна запись ведёт в пустоту, у вас та же проблема, что я нашёл на том пентесте. Только без пентестера на вашей стороне. Если хочешь отработать эту цепочку руками - на HackerLab.pro (ХакерЛаб) есть web-задачи, где DNS-разведку и subdomain takeover нужно пройти от recon до полного захвата.
AI-выжимка
по разделам
Тезисы статьи скоро
Статья читается полностью. Тезисы со ссылками на разделы появятся позже.
Содержание
Codeby Academy
Практика и мастерство
От основ до продвинутого — программы для практиков Codeby.
Перейти к курсу →
Продолжить чтение
Следующий разбор
Кризис NVD и CVE 2026: workflow пентестера
Комментарии
0