Вопрос или проблема
Я провожу эксперимент по безопасности и мне нужно определить домены, которые указывают на определенный поддомен. Интересно, есть ли способ найти CNAME для всех доменов в каком-то списке?
Или мне необходимо полностью искать по списку .com и просматривать, чтобы найти все случаи CNAME?
Интересно, есть ли способ найти CNAME для всех доменов в каком-то списке?
Нет. Нет правильного способа сделать это. Записи CNAME хранятся в файловых зонах, которые хранятся на разных серверах имен. И нет общего способа получить всю файловую зону с сервера имен. Пока у вас нет доступа ко всем серверам имен в мире, вы не сможете найти все CNAME, указывающие на домен (что, очевидно, невозможно).
Или мне необходимо полностью искать по списку .com и просматривать, чтобы найти все случаи CNAME?
Даже если вы скачаете файл зоны для TLD (да, это возможно: http://jordan-wright.com/blog/2015/09/30/how-to-download-a-list-of-all-registered-domain-names/), все, что вы получите – это список серверов имен, используемых для всех вторых уровней доменов. Затем вам нужно будет просмотреть каждый сервер имен в списке и рекурсивно запросить его файловую зону, которую они в большинстве случаев не предоставят.
Одним приемлемым решением в вашем случае было бы логировать активность пользователей.
-
Если вы являетесь владельцем
определенного поддомена
, для которого вы хотите получить CNAME, и веб-сервер размещен на этом сервере, вы можете логировать заголовокHOST
в HTTP-запросе, чтобы получить возможную запись CNAME. -
Если вы являетесь сетевым администратором вашей сети (т.е. у вас есть доступ к локальному DNS-серверу), вы можете логировать все DNS-запросы, которые разрешаются в желаемые CNAME.
Как конечный пользователь, где серверы имен настроены неправильно, вы не можете просмотреть DNS, чтобы получить список всех ресурсных записей (что, как я думаю, вы и спрашиваете).
Если доменное имя настроено неправильно (или если у вас есть повышенные привилегии, что я предполагаю, у вас нет), вы можете выполнить “трансфер зоны”, который выгрузит содержимое зоны – посмотрите здесь, но, в Linux, это так же просто, как выполнить dig axfr domain.name @dns.server.name
Если у вас есть доступ к устройству или вы можете перехватить сетевой трафик, где находится “определенный поддомен”, и если целевой трафик – “http”, вы можете перехватить HTTP-заголовки, чтобы получить список запросов (если вы управляете веб-сервером, вы можете создать лог-файл, чтобы получить эту информацию, которую можете просмотреть)
Наконец, если у вас есть список доменов и вы знаете поддомен, который ищете для каждого домена, возможно написать скрипт для запроса поддомена для каждого домена и логировать это. (Но подозреваю, что это не то, о чем вы спрашиваете?)
Я тоже недавно об этом думал, и невозможно сделать это напрямую без сбора огромного количества данных. Но к счастью, Merklemap собрал множество DNS-запросов в свой набор данных объемом 418 ГБ (41 ГБ в сжатом виде). Используя эти данные, вы можете, например, выяснить, какие домены указывают на определенный CNAME. Это не полная информация, но она содержит много доменов.
Этот набор данных хранится в формате JSON с разделением по новому строку, и его обработка требует много места на диске и некоторого времени для вычислений.
Если кто-то заинтересован, я написал, как анализировать этот набор данных DNS для CNAME, используя duckdb
.
Ответ или решение
Поиск списка CNAME записей, указывающих на конкретный адрес, представляет собой сложную задачу, поскольку в DNS инфраструктуре отсутствует централизованная база данных, которая могла бы ответить на такой запрос. В связи с этим, стоит рассмотреть ограниченные, но полезные подходы к решению данной задачи.
Теория (Theory)
DNS (Domain Name System) является иерархической структурой, в которой разные доменные имена распределяются между разными зонами. Каждая зона управляется своим nameserver, и функциональность CNAME заключена в указании, что определенное доменное имя является псевдонимом для другого доменного имени. Таким образом, запросы к DNS переадресовываются через CNAME на другой адрес, что часто используется для облегчения управления доменными именами.
Важно отметить, что данные о CNAME записаны в зоне, и доступ к ним ограничен соответствующим nameserver. Из-за этой дисперсии вы не можете централизованно просмотреть все CNAME, указывающие на ваш субдомен. Более того, DNS-серверы обычно не предоставляют полные записи зон по соображениям безопасности.
Пример (Example)
Например, если вы владеете доменом "example.com" и хотите узнать, какие CNAME-записи указывают на "target.example.com", ваши действия будут ограничены. Вы можете воспользоваться только методами мониторинга активности или учёта журналов сервера.
Применение (Application)
-
Мониторинг активности сервера. Если у вас есть сервер, поддерживающий конкретный субдомен, важным опытом будет ведение журналов, где логируются все входящие HTTP-запросы. Заголовки HTTP могут содержать информацию о доменном имени, где видны CNAME.
-
Анализ DNS запросов в сети. Если у вас есть доступ к локальному DNS-серверу, вы можете включить запись всех DNS-запросов. Это подходит, если вы администратор сети и имеете полномочия для ведения таких записей. Такие журналы могут выявить все доменные имена, делающие CNAME-запросы.
-
Работа с существующими DNS базами данных. Существует ряд организаций и исследований, которые собирают общедоступные данные DNS. Например, Merklemap предоставляет довольно обширный набор данных DNS, который можно использовать для анализа CNAME записей. Этот метод требует технической инфраструктуры и анализа данных, но может помочь обнаружить значительное количество доменных имен, ссылающихся на целевой CNAME.
-
Частные исследования. Для технически подкованных пользователей возможно написать скрипты, которые будут проверять DNS-записи для списка известных доменов. Скрипты могут выполнять запросы к DNS для каждого домена из списка и проверять, включает ли результат CNAME-запись, указывающую на ваш субдомен.
Заключение
Невозможно напрямую и эффективно собрать все CNAME-записи, указывающие на определенный адрес, используя только ресурсы DNS. Однако, используя методы мониторинга, регистрации и работы с большими данными, можно получить определенные результаты, которые помогут в вашем исследовании. Важно отметить, что ведение таких операций требует осведомленности в области информационной безопасности и соблюдения юридических норм, связанных с использованием и обработкой данных.