
DNSChef (NG) — DNS-прокси для специалистов по пентесту и аналитиков вредоносного ПО
[!NOTE] Это обновлённая версия DNSChef, изначально написанного @iphelix``` _ _ __
| | v0.7 | | / |
| | __ ___ | | | | ______ _ __ __ _ /| '_ \/ __|/ __| '_ \ / _ \ _|______| '_ \ / _| | (| | | | _ \ (__| | | | __/ | | | | | (| | _,|| ||/_|| ||___|| || ||_, | / | |_/ D O C U M E N T A T I O N
DNSChef — это высококонфигурируемый DNS-прокси для специалистов по тестированию на проникновение и аналитиков вредоносного ПО. DNS-прокси (также известный как «Fake DNS») — это инструмент, используемый для анализа сетевого трафика приложений и других целей. Например, DNS-прокси можно использовать для подмены запросов к «badguy.com», чтобы они указывали на локальную машину для блокировки или перехвата, а не на реальный хост в Интернете.
Существует несколько DNS-прокси. Большинство из них просто перенаправляют все DNS-запросы на один IP-адрес или реализуют лишь примитивную фильтрацию. DNSChef был разработан в рамках теста на проникновение, когда возникла потребность в более гибко настраиваемой системе. В результате DNSChef — это кроссплатформенное приложение, способное подделывать ответы на основе включающих и исключающих списков доменов, поддерживающее несколько типов DNS-записей, сопоставление доменов с подстановочными знаками, проксирование настоящих ответов для несопоставленных доменов, внешние конфигурационные файлы, IPv6 и многие другие функции. Подробное описание каждой функции и рекомендуемые сценарии использования приведены ниже.
Использование DNS-прокси рекомендуется в ситуациях, когда невозможно заставить приложение напрямую использовать какой-либо другой прокси-сервер. Например, некоторые мобильные приложения полностью игнорируют настройки HTTP-прокси операционной системы. В таких случаях использование DNS-прокси, например DNSChef, позволяет обмануть приложение и заставить его перенаправлять соединения на нужный адрес.
## Новые возможности
- Требуется Python 3.11+
- Поддерживает передачу файлов через DNS (пока только через `A`, `AAAA`, `TXT`...)
- Конфигурационный файл теперь в формате TOML
- Опциональный HTTP API (позволяет запрашивать логи и обновлять конфигурацию удалённо)
- Полностью асинхронный для повышения производительности (использует AsyncIO)
- Структурированное логирование и ряд улучшений качества жизни
- Теперь является Python-пакетом
- Поддержка Docker
- Включён ряд PR и исправлений из оригинального репозитория
## Установка
Для установки последнего релиза следует использовать [pipx](https://pypa.github.io/pipx/) (если только ты не говнюк, который любит грязные стейки):
pipx install dnschef-ng
Если вам нужен HTTP API (требуются дополнительные зависимости):
pipx install dnschef-ng[api]
Установите последнюю версию из Git, используя pipx:
pipx install git+https://github.com/byt3bl33d3r/dnschef-ng.git
Установите последнюю версию из Git с помощью pipx вместе с зависимостями для HTTP API:
pipx install "git+https://github.com/byt3bl33d3r/dnschef-ng.git#egg=dnschef-ng[api]"
## Настройка DNS-прокси
Прежде чем начать использовать DNSChef, необходимо настроить вашу машину на использование DNS-сервера, на котором запущен этот инструмент. У вас есть несколько вариантов в зависимости от операционной системы:
- **Linux** — Отредактируйте */etc/resolv.conf*, добавив в самое начало строку с вашим хостом для анализа трафика (например, добавьте «nameserver 127.0.0.1», если вы работаете локально). Кроме того, можно добавить адрес DNS-сервера с помощью таких инструментов, как Network Manager. В Network Manager откройте *Параметры IPv4*, выберите *Только автоматические (DHCP) адреса* или *Вручную* из выпадающего списка *Метод* и отредактируйте текстовое поле *DNS-серверы*, указав IP-адрес, на котором запущен DNSChef.
- **Windows** — Выберите *Сетевые подключения* в *Панели управления*. Затем выберите одно из подключений (например, «Local Area Connection»), щёлкните по нему правой кнопкой мыши и выберите «Свойства». В появившемся диалоговом окне выберите *Интернет-протокол (TCP/IP)* и нажмите «Свойства». Наконец, выберите переключатель *Использовать следующие адреса DNS-серверов* и введите IP-адрес, на котором запущен DNSChef. Например, если вы работаете локально, введите 127.0.0.1.
- **OS X** — Откройте *Системные настройки* и нажмите на значок *Сеть*. Выберите активный интерфейс и заполните поле *DNS-сервер*. Если вы используете AirPort, вам нужно нажать кнопку *Дополнительно...* и изменить DNS-серверы там. В качестве альтернативы можно отредактировать */etc/resolv.conf* и добавить поддельный DNS-сервер в самое начало (например, «nameserver 127.0.0.1»).
- **iOS** — Откройте *Настройки* и выберите *Основные*. Затем выберите *Wi-Fi* и нажмите на синюю стрелку справа от активной точки доступа в списке. Измените запись DNS, чтобы она указывала на хост, на котором запущен DNSChef. Убедитесь, что вы отключили сотовую связь (если она доступна).
- **Android** — Откройте *Настройки* и выберите *Беспроводные сети*. Нажмите на *Настройки Wi-Fi* и выберите *Дополнительно*, нажав кнопку *Опции* на телефоне. Установите флажок *Использовать статический IP-адрес* и настройте собственный DNS-сервер.
Если у вас нет возможности изменить DNS-настройки устройства вручную, у вас всё ещё есть несколько вариантов, включая такие техники, как [ARP Spoofing](http://en.wikipedia.org/wiki/ARP_spoofing), [Rogue DHCP](http://www.yersinia.net/doc.htm) и другие творческие методы.
Наконец, вам нужно настроить поддельный сервис, на который DNSChef будет направлять все запросы. Например, если вы пытаетесь перехватывать веб-трафик, необходимо поднять отдельный веб-сервер на порту 80 или настроить веб-прокси (например, Burp) для перехвата трафика. DNSChef будет направлять запросы на ваш хост с прокси/сервером, на котором правильно настроены соответствующие сервисы.
## Запуск DNSChef
DNSChef — это кроссплатформенное приложение, разработанное на Python, которое должно работать на большинстве платформ с интерпретатором Python. Это руководство будет сосредоточено на Unix-окружениях, однако все примеры ниже были протестированы и работают в Windows.
Давайте попробуем DNSChef в его самой базовой функции мониторинга. Выполните следующую команду от имени root (требуется для запуска сервера на порту 53):
# ./dnschef.py
_ _ __
| | version 0.2 | | / _|
__| |_ __ ___ ___| |__ ___| |_
/ _` | '_ \/ __|/ __| '_ \ / _ \ _|
| (_| | | | \__ \ (__| | | | __/ |
\__,_|_| |_|___/\___|_| |_|\___|_|
[email protected]
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[*] No parameters were specified. Running in full proxy mode
Без параметров DNSChef запускается в режиме полного проксирования. Это означает, что все запросы будут просто перенаправляться на вышестоящий DNS-сервер (по умолчанию 8.8.8.8) и возвращаться обратно запрашивающему хосту. Например, давайте запросим запись «A» для домена и посмотрим на результат:
$ host -t A thesprawl.org
thesprawl.org has address 108.59.3.64
DNSChef выведет следующую строку журнала, показывающую время, IP-адрес источника, тип запрошенной записи и, что самое важное, какое имя было запрошено:
[23:54:03] 127.0.0.1: proxying the response of type 'A' for thesprawl.org
Этот режим полезен для простого мониторинга приложений, когда нужно выяснить, с какими доменами оно взаимодействует.