Использование DNS-туннеля для связи с C&C

Содержание 

Say my name.

127.0.0.1!

You are goddamn right.

Сетевое взаимодействие является ключевой функцией любой вредоносной программы. Да, из этого правила есть исключения, например, шифровальщики и троянцы-вымогатели, которые прекрасно выполняют свои функции и без использования сети. Но и они требуют от пользователя установки контакта со злоумышленником для передачи ему требуемых средств и возврата данных. Если исключить вышеуказанное и взглянуть на вредоносное ПО, не имеющее никакой связи с командным центром или злоумышленником, все что нам останется — несколько устаревших или вовсе мертвых семейств (к примеру, Trojan-ArcBomb) или же пусть и неуместные, топорные, но как правило, безобидные шуточные программы, способные разве что пугать пользователя скримерами да менять местами клавиши на мыши.

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

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

Однако находятся и те, кто не чурается нестандартных подходов и не попадает ни в одну из двух вышеперечисленных групп. На примере троянца, обнаруженного нашими специалистами в середине марта, мы рассмотрим пример такого подхода — DNS-туннель в качестве линии связи с C&C-сервером.

Вредоносное ПО, о котором пойдет речь, детектируется продуктами «Лаборатории Касперского» как Backdoor.Win32.Denis. Данный троянец предоставляет злоумышленнику возможность осуществлять операции с файловой системой, выполнять произвольные команды и запускать выгружаемые модули.

Шифрование

Как и множество троянцев до него, Backdoor.Win32.Denis самостоятельно извлекает адреса необходимых для работы функций из подгружаемых библиотек. Однако вместо обычного в таких случаях обсчета контрольной суммы от имен в таблице экспорта, данный зловред просто сравнивает имена API вызовов с имеющимся списком. Список имен API зашифрован с помощью вычитания 128 из каждого символа имени функции.

Следует сказать, что бот использует два варианта шифрования — в случае с именами API вызовов и необходимыми для работы строками вычитается каждый байт, в случае библиотек — с шагом через один. Для загрузки библиотек по имени используется LoadLibraryW и как следствие нужны wide-строки.

Использование DNS-туннеля для связи с C&C

«Расшифровка» строк в троянце

Использование DNS-туннеля для связи с C&C

Имена API функций и библиотеки в зашифрованном виде

Стоит также отметить, что таким образом получаются лишь некоторые функции — в коде зловреда обращение к извлеченным функциям и функциям, полученным от загрузчика, чередуются.

Взаимодействие с С&C

Принцип работы DNS-туннеля можно описать так: «не знаешь сам, спроси другого». При получении некоторого адреса в DNS-запросе, сервер начинает поиск в своей базе, и если запись не находится, сервер опрашивает тот домен, который есть в базе.

Рассмотрим в качестве примера имя вида «Y3VyaW9zaXR5.example.com». DNS-сервер при получении запроса попытается найти вначале доменную зону .com, затем example.com, но Y3VyaW9zaXR5.example.com найти не удастся. Тогда он перенаправит запрос к example.com и «спросит» у него, известно ли ему такое имя. В ответ example.com может вернуть как IP, так и абсолютно любую строку, включая команды C&C.

Использование DNS-туннеля для связи с C&C

Дамп трафика Backdoor.Win32.Denis

На таком принципе и работает Backdoor.Win32.Denis. Первоначально DNS-запрос отправляется на 8.8.8.8, откуда перенаправляется на z.teriava[.]com. Все, что до этого адреса, — текст запроса к C&C.

А вот так выглядит ответ:

Использование DNS-туннеля для связи с C&C

DNS пакет, полученный после первого запроса

Очевидно, запрос к C&C кодируется с помощью Base64. Первоначальный запрос — это последовательность нулей и результат GetTickCount в конце. В дальнейшем бот получает собственный уникальный номер и использует его в начале пакета.

Номер команды передается в пятом DWORD от начала зеленой секции на рисунке выше. Дальше идет размер полученных от C&C данных. Данные упакованы с помощью zlib и начинаются сразу после размера.

Использование DNS-туннеля для связи с C&C

Распакованный ответ C&C

Первые четыре байта — размер. Всё что дальше — данные, которые могут варьироваться в зависимости от типа команды. В данном случае это уникальный идентификатор бота, который упоминался ранее. На всякий случай напоминаем, что данные в пакете идут в формате big-endian.

Использование DNS-туннеля для связи с C&C

Идентификатор бота в начале каждого последующего запроса к C&C

Команды C&C

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

Использование DNS-туннеля для связи с C&C

Полный список команд C&C

Использование DNS-туннеля для связи с C&C

Информация о зараженной машине, передаваемая С&C

Как видно из скриншота выше, бот передает имя компьютера и пользователя, а также информацию, хранящуюся в ветке реестра Software\INSUFFICIENT\INSUFFICIENT.INI:

  • Время предыдущего выполнения данной команды (если выполняется впервые — возвращается GetSystemTimeAsFileTime и устанавливается переменная BounceTime, в которой записывается полученный результат);
  • UsageCount из той же ветки.

Среди прочего, пересылается информация об операционной системе и окружении, получаемые с помощью NetWkstaGetInfo.

Данные упаковываются с помощью zlib.

Использование DNS-туннеля для связи с C&C

Ответ DNS перед кодированием в Base64

Поля ответа (в зависимости от команды варьируются только красная секция с данными и размер):

  • Идентификатор бота;
  • Размер предыдущего ответа от C&C;
  • Третий DWORD в ответе от C&C;
  • Всегда равно единице для ответа;
  • GetTickCount();
  • Размер данных после указанного поля;
  • Размер ответа;
  • Сам ответ.

После завершения этапа регистрации, троянец начинает в бесконечном цикле опрашивать C&C, что в случае отсутствия команд выглядит как серия «пустых» запросов\ответов.

Использование DNS-туннеля для связи с C&C

Последовательность «пустых» запросов к админке

Заключение

Само по себе использование DNS-туннеля, как это реализовано в Backdoor.Win32.Denis, является крайне редкой, но все же не уникальной техникой. Ранее схожая техника уже встречалась у некоторых POS-троянцев, а также в некоторых APT (например, PlugX – Backdoor.Win32.Gulpix). Однако в контексте персональных компьютеров подобное применение DNS-протокола в новинку.

MD5

facec411b6d6aa23ff80d1366633ea7a
018433e8e815d9d2065e57b759202edc
1a4d58e281103fea2a4ccbfab93f74d2
5394b09cf2a0b3d1caaecc46c0e502e3
5421781c2c05e64ef20be54e2ee32e37

Постинги на схожие темы 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *