Кейлоггер с отправкой данных через DNS-туннелирование
Кейлоггер остаётся одним из самых востребованных инструментов в инструментарии как киберпреступников, так и аналитиков, занимающихся авторизованной проверкой защищённости. Сочетание перехвата нажатий с выводом данных через DNS-туннелирование даёт связку, которую сложно заметить: вредонос не открывает ни одного подозрительного соединения с привычным портом и не генерирует трафик, похожий на выгрузку файлов. Именно такая конфигурация — кейлоггер с отправкой данных через DNS-туннелирование — чаще всего описывается на русскоязычных площадках, где публикуют сборки шпионского ПО, инжекторы, анонимайзеры и программы доступа к учётным записям.
Причина выбора DNS как канала вывода проста. Разрешение имён почти всегда разрешено в корпоративных сетях, тогда как проксирование HTTP и HTTPS тщательно логируется и блокируется. Запрос к авторитативному серверу с длинной, ни на что не похожей меткой выглядит внутри общей массы фонового DNS-трафика, а ответы в формате TXT или NXDOMAIN не вызывают внимания ни у сетевых фильтров, ни у рядового администратора.
Разговор идёт о механике, признаках и легальном поле применения. Ниже разбирается, какие данные собирает клавиатурный логгер, как устроен туннель на уровне протокола, по каким косвенным признакам связку находят в логах и на файловой системе, а также где искать сборки, если задача — авторизованный тест, а не слежка за чужой техникой.
Отдельно стоит подчеркнуть правовую рамку. Перехват ввода пользователем без его согласия квалифицируется по статье 138 УК РФ как неправомерный доступ к информации, обработка персональных данных без законных оснований попадает под 152-ФЗ, а тайное установление ПО на чужое устройство может пересекаться со статьёй 137 УК РФ. Любая работа с подобным инструментарием в корпоративной или исследовательской среде начинается с письменного разрешения, фиксирующего границы и сроки.
Что фиксирует кейлоггер и как собираются данные
Базовый уровень сбора реализуется двумя способами. Пользовательский перехват через SetWindowsHookEx с глобальным хуком клавиатуры не требует повышения привилегий и работает в процессе самого приложения. Второй уровень — низкоуровневый перехват клавиатурного ввода или фильтрация в драйвере, где снимаются аппаратные коды клавиш. Разница практическая: у хуков окон нет доступа к содержимому полей ввода, там доступны только события нажатия и отпускания, поэтому для восстановления текста нужны таблицы раскладок и логика сопоставления виртуальных и физических кодов.
Практически всегда кейлоггер дополняется модулями снимков экрана, чтения буфера обмена, извлечения автозаполнения и сохранения cookies из профилей браузеров. Исключение полей с паролями через эвристику по именам элементов стало ненадёжным: современные сайты рандомизируют разметку, прячут поля в iframe и обфусцируют атрибуты, поэтому надёжнее записывать весь поток нажатий без фильтров.
Собранные данные не передаются сразу. Они накапливаются в локальном буфере, шифруются, разбиваются на блоки фиксированного размера и снабжаются метками времени. Такой буфер сглаживает моменты отсутствия сети и уменьшает объём исходящего трафика до размера, не выделяющегося на фоне обычных запросов.
Как работает вывод данных через DNS-туннелирование
Механизм опирается на иерархию DNS. Клиент кодирует очередной блок, превращает его в безопасный для доменного пространства набор символов — обычно base32 или base64url — и помещает в метку поддомена: идентификатор, номер фрагмента, метка времени, зашифрованное полезное нагрузка. Ограничения длины при этом жёсткие: одна метка не может превышать 63 символа, всё имя — 255 байт, поэтому данные неизбежно режутся на короткие части.
Ответная часть работает по одному из двух сценариев. В первом клиент запрашивает TXT-запись у заранее подготовленного домена, а сервер возвращает в TXT как полезную нагрузку, так и статус приёма фрагмента. Во втором используется обратная схема: клиент только отправляет запросы, а коллектор отвечает кодом NXDOMAIN, служащим односторонним сигналом подтверждения. Схема с NXDOMAIN удобна тем, что не требует размещения на сервере никаких данных — достаточно управлять авторитативными записями.
Устойчивость каналу обеспечивается несколькими приёмами: чередование доменов, разброс интервалов отправки, начиная от получаса до нескольких часов, использование TXT-записей, внешне неотличимых от проверок SPF и DKIM, и маскировка под обычные клиентские запросы к доменам с большим числом авторитативных серверов. Полезную нагрузку обычно шифруют гибридной схемой, где симметричный ключ.session обменивается через асимметричный алгоритм, поэтому пассивный наблюдатель DNS не прочитает содержимое даже при полном перехвате запросов.
Признаки туннеля, которые видят аналитики и SIEM
Главный индикатор — резкий рост количества уникальных полных доменных имён под одним зонным именем. В обычной работе клиент запрашивает десятки имён; туннель порождает сотни и тысячи почти не повторяющихся поддоменов с высокой энтропией символов. Второй признак — TXT-запросы к домену, у которого нет почтовых серверов и веб-инфраструктуры. Третий — соотношение ответов NXDOMAIN, нехарактерное для легитимного клиента.
В Windows-окружении перехват DNS на уровне хоста удобно реализуется через Sysmon с событием 22, которое пишет все запросы разрешения имён. В журналы попадают и обращения к DnsQuery, и данные, собранные вендорным агентом. Поведенческий анализ дополняется корреляцией: появление нового процесса, запись в ветку Run или создание запланированного задания в одном временном окне с потоком DNS-запросов к незнакомой зоне — уже повод для разбирательства.
На уровне сети полезен пассивный DNS: он показывает домены, к которым обращаются единичные узлы сети, и фиксирует историю поддоменов. Домен, который почти не встречается в открытых источниках, но каждый день генерирует тысячи уникальных меток, почти наверняка обслуживает туннель.
Источники сборок и юридические рамки применения
Сборки подобного ПО встречаются в трёх видах: открытые исследовательские проекты на GitHub с исходным кодом, форки с добавленными модулями вывода данных и коммерческие «комплекты» с панелью управления, которые продаются через партнёрские сети. Русскоязычные порталы публикуют архивы преимущественно второго и третьего вида, часто под видом «стелс-версии» или «неузнаваемого логгера».
Проверка архива до запуска — обязательный шаг. Сверка контрольной суммы, изучение отчёта VirusTotal, детонация в изолированной песочнице и бег в виртуальной машине без реальных учётных данных позволяют выявить зашитый инфостилер, криптер или дополнительный модуль загрузки, добавленный к исходному проекту. Стенд для такого теста поднимают в изолированной сети с поддельными доменами и снимком состояния, который можно откатить.
Юридическая сторона определяет, допустим ли сам эксперимент. Собственное устройство, собственная сеть, письменное разрешение на проведение проверки и уведомление сотрудников о контроле ввода — минимальный набор, без которого техническая обоснованность работы не имеет значения. Даже в рамках авторизованного пентеста установка кейлоггера на рабочие места сотрудников часто нарушает внутренние политики компании и требования трудового законодательства о негласном сборе информации.
Практические рекомендации для исследователей и защитников
- Получать письменное разрешение с перечнем устройств, сроков работ и перечнем собираемых данных до установки любого сбора ввода.
- Разворачивать стенд в изолированной виртуальной машине со снимком состояния и без доступа к реальным учётным записям и корпоративным ресурсам.
- Проверять каждый загружаемый бинарник по контрольной сумме, через репутационные отчёты и детонацию в песочнице до запуска.
- Шифровать собираемый поток и ограничивать объём логов теми категориями данных, которые действительно нужны для проверки.
- Включать логирование DNS-запросов и Sysmon-событие 22, настроить правила выявления всплеска уникальных поддоменов и TXT-ответов.
- Учитывать DoH и DoT: канал, уходящий в зашифрованный DNS, не виден ни DNS-логам, ни пассивному наблюдателю — такие запросы стоит блокировать или инспектировать на прокси.
- Документировать процедуру: фиксировать время установки, настройки канала, найденные индикаторы и порядок передачи результатов, чтобы выводы можно было проверить и оспорить.