
Движок перестановок доменных имен для обнаружения фишинговых атак с использованием омографов, тайпсквоттинга и подделки брендов

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

DNS-фаззинг — это автоматизированный рабочий процесс, цель которого — выявить потенциально вредоносные домены, нацеленные на вашу организацию. Этот инструмент генерирует исчерпывающий список перестановок на основе указанного доменного имени и затем проверяет, используется ли какая-либо из этих перестановок. Кроме того, он может генерировать нечёткие хеши веб-страниц для обнаружения продолжающихся фишинговых атак или подделки бренда, и многое другое!
Нет времени? Попробуйте в веб-браузере: dnstwist.it
Python PIP
$ pip install dnstwist[full]
В качестве альтернативы установите минимальный набор и добавьте остальные зависимости вручную в зависимости от ваших потребностей:
$ pip install dnstwist
Git
Если вы хотите запустить последнюю версию кода, вы можете установить её из Git:
$ git clone https://github.com/elceef/dnstwist.git
$ cd dnstwist
$ pip install .
Debian/Ubuntu/Kali Linux
Выполните следующую команду, чтобы установить инструмент со всеми дополнительными пакетами:
$ sudo apt install dnstwist
Fedora Linux
$ sudo dnf install dnstwist
Пользовательский репозиторий Arch Linux (yay)
$ yay -S dnstwist
macOS
Эта команда установит dnstwist вместе со всеми зависимостями, а бинарный файл
будет добавлен в $PATH.
$ brew install dnstwist
Docker
Загрузите и запустите официальный образ из Docker Hub:
$ docker run -it elceef/dnstwist
В качестве альтернативы вы можете собрать свои локальные образы:
$ docker build -t dnstwist .
$ docker build -t dnstwist:phash --build-arg phash=1 .
Инструмент прогоняет указанное доменное имя через свои алгоритмы фаззинга и генерирует список потенциальных фишинговых доменов вместе с DNS-записями.
Обычно генерируются тысячи перестановок доменов — особенно для более длинных входных доменов. В таких случаях может быть практично отображать только те, которые зарегистрированы:
$ dnstwist --registered domain.name
Убедитесь, что ваш DNS-сервер способен обрабатывать тысячи запросов за короткий промежуток времени. В противном случае вы можете указать внешний DNS-сервер или DNS-over-HTTPS сервер с помощью аргумента --nameservers.
Если доменных перестановок, сгенерированных алгоритмами фаззинга, недостаточно, передайте dnstwist файл словаря. Включены некоторые образцы словарей со списком наиболее распространённых слов, используемых в фишинговых кампаниях.
$ dnstwist --dictionary dictionaries/english.dict domain.name
Если вам нужно проверить, существуют ли домены с разными TLD, просто укажите файл словаря со списком TLD.
$ dnstwist --tld dictionaries/common_tlds.dict domain.name
С другой стороны, если нужно использовать только выбранные алгоритмы, доступен аргумент --fuzzers, который принимает список, разделённый запятыми.
$ dnstwist --fuzzers "homoglyph,hyphenation" domain.name
Помимо цветного вывода в терминале, инструмент позволяет экспортировать результаты в CSV и JSON:
$ dnstwist --format csv domain.name | column -t -s,
$ dnstwist --format json domain.name | jq
Если вам нужны только сами перестановки без выполнения DNS-запросов, используйте аргумент --format list:
$ dnstwist --format list domain.name
Инструмент может выполнять поиск в реальном времени для возврата географического местоположения (с точностью до страны) IPv4-адресов.
$ dnstwist --geoip domain.name
Библиотека GeoIP2 используется по умолчанию. Расположение базы данных стран необходимо
указать с помощью переменной окружения $GEOLITE2_MMDB. Если библиотека или
база данных отсутствуют, инструмент переключится на более старую версию GeoIP Legacy.
Чтобы отобразить все доступные параметры с краткими описаниями, просто запустите инструмент без аргументов.
Ручная проверка каждого доменного имени на предмет размещения фишингового сайта может
занять много времени. Для решения этой задачи dnstwist использует так называемые нечёткие хеши
(locality-sensitive hash, LSH) и перцептивные хеши (pHash). Нечёткое хеширование —
это концепция, предполагающая возможность сравнения двух входных данных (HTML-кода) и
определения фундаментального уровня сходства, тогда как перцептивный хеш —
это отпечаток, полученный из визуальных признаков изображения (скриншота веб-страницы).
Нечёткое хеширование
Уникальная функция обнаружения похожего исходного HTML-кода может быть включена с помощью
аргумента --lsh. Для каждого сгенерированного домена dnstwist будет извлекать содержимое
с отвечающего HTTP-сервера (следуя возможным перенаправлениям), нормализовать HTML-код
и сравнивать его нечёткий хеш с хешем исходного (первоначального) домена. Уровень
сходства выражается в процентах.
В случаях, когда эффективный URL совпадает с URL исходного домена, нечёткий хеш вообще не вычисляется, чтобы исключить ложноположительные срабатывания.
Примечание: имейте в виду, что получить 100% совпадение довольно маловероятно, даже для фреймворков атак типа MITM, и что фишинговый сайт может иметь совершенно иной исходный HTML-код.
$ dnstwist --lsh domain.name
В некоторых случаях фишинговые сайты размещаются по определённому URL. Если вы передадите полный или частичный URL-адрес в качестве аргумента, dnstwist проанализирует его и применит к каждому сгенерированному варианту доменного имени. Используйте --lsh-url, чтобы переопределить URL, с которого загружается исходная веб-страница.
$ dnstwist --lsh https://domain.name/owa/
$ dnstwist --lsh --lsh-url https://different.domain/owa/ domain.name
По умолчанию в качестве алгоритма LSH используется ssdeep, но также доступен TLSH, который можно включить следующим образом:
$ dnstwist --lsh tlsh domain.name
Перцептивное хеширование
Если установлен браузер Chromium, dnstwist может использовать его headless-режим,
который работает без графического интерфейса, для захвата скриншотов веб-страниц,
их рендеринга и вычисления значений pHash. Затем эти значения pHash
сравниваются для оценки визуального сходства, выражаемого в процентах.
$ dnstwist --phash domain.name
Кроме того, можно сохранять захваченные скриншоты в формате PNG в выбранное место:
$ dnstwist --phash --screenshots /tmp/domain domain.name
Примечание: из-за многопоточного использования полнофункционального веб-браузера следует обеспечить достаточный объём свободных ресурсов (главным образом памяти).
Поддержка прокси
Для всех HTTP-соединений прокси используются автоматически при обнаружении
переменных окружения с именами $<scheme>_proxy без учёта регистра.
Если существуют переменные окружения как в нижнем, так и в верхнем регистре,
предпочтение отдаётся нижнему регистру.