Хорошая новость: DNS-туннелирование оставляет следы. Плохая — эти следы видны не в отдельных запросах, а в паттернах.
Есть два базовых подхода к обнаружению злоупотребления DNS:
- анализ нагрузки, то есть поиск аномалий в передаваемых данных в обоих направлениях с помощью статистических методов;
- анализ числа DNS-запросов по доменам и сравнение с нормальным средним уровнем для сети.
На практике стоит искать несколько типов аномалий.
Средняя длина запроса. В типичной корпоративной сети длина полного доменного имени (FQDN) чаще всего не превышает примерно 40 символов. Существенное увеличение средней длины запроса или регулярные обращения к доменам длиной более 50−60 символов могут указывать на DGA-активность или попытку передачи данных через DNS. Оценивать нужно не абстрактное значение, а отклонение от собственного профиля сети.
Количество уникальных поддоменов одного домена за единицу времени. Для большинства легитимных сервисов число разных поддоменов, к которым обращается клиент за час, ограничено. Резкий рост количества уникальных поддоменов — десятки и сотни в час для одного базового домена — характерный признак DNS-туннелирования или алгоритмически генерируемых имен.
Частота и регулярность обращений к одному домену. В нормальном пользовательском трафике запросы распределены неравномерно и зависят от активности пользователя и приложений. Строго регулярные DNS-запросы с фиксированным интервалом (beaconing) могут указывать на C2-коммуникацию.
Для анализа могут быть полезны утилиты:
reassemble_dns — Python-утилита, которая открывает .pcap-файлы и анализирует DNS-запросы;
dnsHunter — Python-модуль, который считывает .pcap-файлы, извлекает DNS-запросы и помогает выявлять геолокацию, что полезно при дальнейшем анализе.