Jimmy Nukebot: от Neutrino с любовью

“You FOOL! This isn’t even my final form!”

В одной из предыдущих статей мы рассмотрели банкер NeutrinoPOS в качестве примера постоянно развивающегося и изменяющегося семейства вредоносного ПО. Спустя буквально неделю после публикации это ответвление от Neutrino само “произвело на свет” нового зловреда, классифицируемого продуктами “Лаборатории Касперского” как Trojan-Banker.Win32.Jimmy.

Сравнение: NeutrinoPOS vs Jimmy

Авторы серьезно переписали троянца – основное тело реструктурировали, функции перенесли в модули. Небольшое отличие, которое сразу же бросается в глаза, — в подсчете контрольных сумм от имен API функций/библиотек и строк. В первом случае контрольные суммы используются для поиска необходимых API вызовов, во втором — для обычного сравнения строк (команды, имена процессов). Подобный подход сильно затрудняет статический анализ — к примеру, для того чтобы определить, в случае обнаружения какого процесса троянец прекращает свою работу, потребуется обсчитать контрольные суммы от огромного списка строк, либо перебирать символы в определенном диапазоне длин. NeutrinoPOS использует два разных алгоритма подсчета контрольных сумм для имен API вызовов, имен библиотек и для строк. Выглядят они следующим образом:

Восстановленный код NeutrinoPOS для подсчета контрольных сумм для произвольных строк и для API вызовов

В Jimmy для этих целей используется только один алгоритм — незначительно модификация CalcCS из NeutrinoPOS. К псевдослучайному генератору добавилось финальное сложение по модулю два с фиксированным двухбайтовым значением.

Подсчет контрольных сумм в Jimmy

Троянец полностью утратил функции кражи данных банковских карт из памяти зараженного устройства, теперь его задача ограничена исключительно получением модулей с удаленного узла и их установкой в систему. Расширилась проверка зараженного хоста: кроме унаследованных от Neutrino проверок, троянец также исследует собственное имя — оно не должно быть контрольной суммой в формате MD5, SHA-1, SHA-256 или, в противном случае, должно содержать символ ‘.’, указывающий на последующее расширение (например, ‘exe’). Плюс, используя ассемблерную команду cpuid, троянец получает информацию о процессоре и сравнивает ее со списком контрольных сумм, “зашитых” в него.

Дополнительные проверки Jimmy

Протокол “общения” c С&C сервером также почти не поменялся — используется такой же обмен командами вида “enter”, “success” в base64, но теперь ответ предварительно шифруются с помощью RC4 и ключа, жестко заданного в теле троянца (a8A5QfZk3r7FHy9o6C2WpBc44TiXg93Y для рассматриваемого семпла). Код для извлечения ключа шифрования можно найти здесь.

Анализ модулей

Как уже было сказано выше, основное тело троянца только получает модули — в них вся “полезная нагрузка”. Нам удалось получить новые модули для веб-инжектов, майнинга и большое количество обновлений основного модуля в различных дропперах.

Майнер предназначен для добычи валюты Monero (XMR). В коде модуля есть идентификатор, ассоциированный с кошельком, для которого добывается криптовалюта, а также адрес пула. Monero пользуется большой популярностью среди вирусописателей: его майнит SambaCry, о котором мы рассказывали в июне, а также появившийся чуть позже Trojan.Win32.DiscordiaMiner. Кстати, исходный код последнего был выложен автором в открытый доступ. Причина схожа с той, что побудила сделать тоже самое автора NukeBot: попытка замять разногласия на форумах и снять с себя обвинения в мошенничестве (в данный момент репозиторий с кодом недоступен).

Благодаря паре идентификатор/пул мы получили статистику по всем узлам, работающим на данный кошелек. Дата начала майнинга — 4 июля — совпадает с меткой компиляции основного тела первого образца, найденного нами, а также чрезвычайно близка к дате компиляции дроппера (06 Июля 13:14:55 2017 UTC), основного тела (02 Июля 14:19:03 2017 UTC) и модулей для веб-инжектов (02 Июля 14:18:39 2017 UTC) Так что можно с уверенностью сказать, что распространение Jimmy началось в первых числах июля.

Стоит заметить, что сумма в кошельке небольшая — всего лишь ~0.3 XMR, что в пересчете по курсу на 21 августа составляет всего $45. Судя по общему спаду и отсутствую выплат, авторы быстро отказались от использования майнеров либо сменили кошелек.

Модули веб-инжектов так названы по своему первичному предназначению, хотя они также способны выполнять функции, описанные у NeutrinoPOS — делать снимки экрана, “поднимать” прокси-сервер и т.д. Данные модули распространяются в виде библиотек, их функции меняются в зависимости от имени процесса, в котором они находятся. Как видно из скриншота ниже, в трех случаях из пяти для браузеров вызывается процедура ChromeHook. Учитывая большое количество браузеров, созданных на базе Chrome, в этом нет ничего удивительного. К сожалению, восстановить имя из контрольной суммы удалось только для одного — chrome.exe (0xFC0C7619). Контрольные суммы рассчитываются по алгоритму описанному в предыдущей секции.

Восстановленный код основной процедуры в модуля веб-инжектов Jimmy

Как и NeutrinoPOS, Jimmy хранит ряд параметров в реестре. В описываемом сэмпле данные находятся в ветке HKEY_CURRENT_USER\Software\c2Fsb21vbkBleHBsb2l0Lmlt. К примеру, модуль веб-инжектов получает оттуда адрес используемого в данный момент DNS-сервера — это критично при использовании в качестве C&C-сервера NamCoin-подобных адресов.

Для Firefox и Internet Explorer хук функций осуществляется банальной подменой адресов вызываемых функций в загружаемых библиотеках (etc. InternetConnectW/PR_Read). В случае Chrome все несколько сложнее — необходимые библиотеки слинкованы статически. Но последующая подмена данных с помощью веб-инжектов совпадает.

Восстановленный код обработки веб-инжектов

На данный момент нам удалось получить только тестовый образец веб-инжектов (на скриншоте ниже), в дальнейшем, вероятно, троянец обзаведется и их “боевыми” версиями. По данной ссылке можно найти примеры веб-инжектов и используемых ключей. Напомним, что для расшифровки необходимо декодировать строку с помощью base64, а затем расшифровать с помощью RC4.

Запрос Jimmy на получение веб-инжектов

Пример тестовых веб-инжектов Jimmy

На картинках ниже представлено сравнение нескольких процедур в исходном коде NukeBot и восстановленном Jimmy. Невооруженным глазом видно, что они полностью совпадают.

Заключение

В отрыве от предыдущих модификаций созданный с нуля Jimmy не представлял бы особого интереса для исследователей. Однако в данной ситуации он является прекрасным примером того, как имея на руках исходный код качественного троянца, можно гибко перестроить цели и задачи, ставящиеся перед ботнетом, и извлекать выгоду из нового источника.

MD5

Дропперы:
c989d501460a8e8e381b81b807ccbe90 (рассмотрен в статье)
E584C6E999A509AC21583D9543492EF4
2e55bd0d409bf9658887e02a7c578019
bccd77cf0269da7dc914885cda626c6c
86d7d3b50e4dc4181c28ccbaafb89ab3

Основное тело:
174256b5f1ee80be1b847d428c5180e2
336841d91c37b07134adba135828e66e
FE9A46CEFDB41095F10D459BB9943682

Модули:
380356b8297893b4fc9273d42f15e9db
2fa18456e14bea53ec0d7c898d94043b
7040b5ac432064780a17024ab0a3792a
629a4d2b79abe48fb21afd625f674354
05846839DAA851006B119A2B4F9687BF
2362E3BEBAD1089DDFE40C8996B0BF45
380356B8297893B4FC9273D42F15E9DB
4042C27F082F48E253BE66528938640C
443831A3057E9A62455D4BD3C7E04144
4762B90C0305A2681CE42B9D05B9E741
CB01E3A0799D4C318F74E439CCE0413F
D9F58167A9A22BD1FA9AA0F991AEAF11
E991936E09697DE8495D05B484F3A3E2

Публикации на схожие темы

Leave a Reply

Your email address will not be published. Required fields are marked *