Mezzo: многоцелевая финансовая угроза
Сергей Юнаковский - Январь 25, 2018. 12:00
C атаками на бухгалтерские программы аналитики «Лаборатории Касперского» сталкиваются не в первый раз — например, около года назад нами был обнаружен зловред Trojan.Win32.TwoBee. В общем виде атака на учетную систему сводилась к подмене реквизитов в данных, выгружаемых для банковских систем из базы данных. В результате денежные суммы уходят на чужие счета без ведома владельца. Троянец TwoBee в начале своей «карьеры» получал данные для подмены реквизитов извне, а позже «носил» их с собой, отправляя на сервер лишь короткие сообщения с информацией о результатах работы.
Что касается троянца Mezzo, который мы хотим рассмотреть, то он просто отправляет текстовые файлы на сервер, не производя с ними никаких манипуляций. Однако это не означает что угрозы нет – наоборот, это может говорить о том, что авторы зловреда готовятся к будущей компании и в данный момент находятся на этапе сбора информации о целях.
Остановимся подробнее на некоторых особенностях данного троянца, для этого рассмотрим две модификации Mezzo – один предназначен исключительно для сбора информации о имеющихся файлах бухгалтерии, второй же способен их подменять.
Характерная черта обеих — создание на старте легко узнаваемого мьютекса:
Модуль сбора информации
После начала работы Mezzo создает уникальный идентификатор для зараженного компьютера:
Этот идентификатор используется в качестве имени папки, где будет храниться информация о найденных файлах:
Содержимое архива выглядит следующим образом:
Сам архив защищен паролем (в этом качестве используется созданный ранее идентификатор, который также является именем архива). В отличии от TwoBee, Mezzo использует более простой алгоритм для поиска и проверки файлов. К примеру, TwoBee осуществлял подмену данных только при наличии определенной минимальной суммы транзакции:
Проверка минимальной суммы (500 000 ₽) в TwoBee
Кроме того, TwoBee собирал данные о переводимых суммах.
Mezzo же просто удостоверяется в «возрасте» файла (не должен быть старше недели) и наличии строчки 1CClientBankExchange в его начале:
По завершении поиска данные упаковываются в архив с паролем и отправляются на сервер.
Отправка данных
Структура запроса и ответа от C &C -сервера Mezzo
Модуль подмены
Теперь разберемся, как работает модуль Mezzo, в задачи которого входит подмена файлов бухгалтерской программы.
Троянец создает три потока выполнения. Первый (trash _thread на скриншоте ниже) отвечает за противодействие защитному ПО — троянец выделяет огромные регионы памяти в цикле и наполняет их произвольными данными: в «песочницах» некоторых защитных решений обработка выделения памяти и контроль ее утечек отличается от механизмов «реальных» операционных систем и подобные запросы могут нарушить их работу. Второй регистрирует «свежезараженный» компьютер на командном сервере. Третий необходим для опроса C&C-сервера и передачи информации о зараженной системе.
Начало основной процедуры Mezzo
Техника, реализуемая в trash_thread
Mezzo создает уникальный идентификатор и отправляет его на сервер. В случае, когда от сервера получена команда c кодом 0x46 (F irst), передается информация о зараженной системе. Очевидно, данная команда получается при первом обращение с таким идентификатором.
Процедура get _tasks удалит содержимое папки %TEMP% при получении кода 0x34 (4).
После этого троянец начнет искать в каждом из логических разделов файловой системы файлы, соответствующие следующим критериям:
Создан менее двух минут назад;
В начале файла есть строка 1CClientBankExchange;
Расширение — .txt.
Полученный файл копируется по адресу «%TEMP%\<UNIQ_ID\OLD\<UNIQ_ID>.txt» и передается на удаленный сервер, от которого будет получен файл для подмены. Этот файл будет сохранен как «%TEMP%\<UNIQ_ID\NEW\<UNIQ_ID>.txt». Затем программа ждет, когда пользователь вызовет определенные диалоговые окна программы.
Поиск диалогового окна
Это нужно, чтобы подменить файл непосредственно в момент передачи данных из бухгалтерской системы в банк. Ожидание длится пять минут, и если нужное окно не будет открыто, троянец просто заменит файл поддельным, предварительно попытавшись остановить процесс 1cv8c.exe с помощью SuspendThread. По завершению подмены троянец удалит содержимое папки NEW с файлом, полученным от командного сервера.
Следы CryptoShuffler
Однако, на этом расследование не закончилось. Некоторое время назад наши аналитики обнаружили троянец CryptoShuffler и зловред, осуществляющий его загрузку в систему. Им оказался AlinaBot (не путать с AlinaPOS ), названный так из-за заголовка в окна аутентификации C&C-сервера:
По многим признакам этот обычный загрузчик (мы рассмотрим его функции далее) связан с Mezzo.
Для начала пройдемся по «слабым» связям:
Троянец также начинает свою работу с создания мьютекса со схожей структурой имени:
Совпадает структура каталогов на сервере C&C:
Оба работают с curl.
Теперь о «сильных» доказательствах. Первое — способ генерации уникального идентификатора. Восстановленный код Mezzo, AlinaBot и его модулей совпадает до последней строчки:
Вторым доказательством является тот факт, что модули AlinaBot хранят украденные данные похожим образом (разве что в качестве пароля не всегда используется идентифкиатор):
Структура рабочего каталога модуля AlinaBot
Даже поверхностное исследование кода позволяет выявить стиль автора Mezzo — старательное копирование большого количества фрагментов кода.
Функции AlinaBot
Всего существует шесть команд от сервера (и «0», обозначающий отсутствие команды), которые AlinaBot получает в ответе на инициализирующий запрос в виде строки символов:
Важно, что команды обрабатываются «по две» — в данном случае будет два цикла проверки входных значений. Соответственно, единицы на четной позиции в строке и на нечетной будут отличаться по своему назначению. К примеру, команда «2» на нечетной позиции выгружает файл по фиксированному адресу, тогда как на четной получает ссылку на скачивание.
Команда F (четная) обозначает запрос на выгрузку информации о системе и включает в себя следующие поля:
Уникальный идентификатор;
Версия операционной системы;
Имя пользователя;
Имя компьютера;
IP-адрес компьютера.
Команда 1(нечетная) выгружает файл по адресу вида <C&C>/plugins/downloaded/load_file.exe и запускает его:
Команда 1(четная) перезапускает основное тело AlinaBot.
Команда 2(нечетная) также осуществляет выгрузку файлов с сервера C&C как и команда 1, однако по другой строке <C&C>/plugins/downloaded/load_file_gl.exe, и её сервер за время исследования ни разу не проявил активности.
2(четная) получает от сервера адрес, с которого нужно скачать файл, а затем скачивает и запускает его.
Как правило, по этой команде выгружались зловреды семейства Trojan-Banker.Win32.CryptoShuffler
Команда 3(четная) завершает выполнения хоста консольных приложений.
Полезная нагрузка
Нам удалось получить выгружаемые файлы, их можно разделить на два типа. Первый — «угоняет» криптовалютные кошельки и пароли браузеров. Кража кошельков осуществляется простым поиском в зараженной системе файлов с именем wallet.dat. Потеря паролей грозит только пользователям Chrome и Opera, оба браузера хранят данные об учетных записях схожим образом — в виде SQLLite-баз по адресу вида «C:\Users\<ИМЯ ПОЛЬЗОВАТЕЛЯ>\AppData\Local\Google\Chrome\User Data\Default«. Плагин открывает эти файлы с помощью библиотеки SQLLite и пытается расшифровать данные с помощью «пустого пароля», на тот случай если пользователь не задал пароль для аутентификации. Полученные данные зловред отправляет на сервер в ZIP-архиве с паролем 1 q 2w 3e 4r .
Восстановленный код извлечения данных о паролях из Chrome
Файлы «складируются» схожим с Mezzo образом.
Последний примечательный момент, связанный с этим модулем: автор отошел от использования curl и позаимствовал код некоего Anasazi: характерная строка WARPCRYPT присутствует в обоих случаях. Плюс, на pastebin нами были обнаружен исходный код Anasazi.
Cравнение восстановленного кода модуля AlinaBOT и исходников Anasazi на Pastebin
Второй выгружаемый файл обладает возможностями удаленного управления зараженным компьютером. Сам по себе данный модуль не представляет особого интереса, являясь достаточно обычным бэкдором, выполняющим, к примеру, следующие команды:
0x403: Запустить диспетчер задач
0x406: Завершить процесс Chrome
0x40F: Запустить командную строку
0x413: Поместить в буфер определенные данные и передать их в заданное окно
И так далее.
MD 5
Mezzo
Модуль сбора информации: 622c93914c91db01b9b4770d4ab7a6c6
Модуль подмены: 1083439FAE49A745F007705281952CD9
AlinaBot
0624074f0d4054b8cc4ad6d32dcc10f1
3e68bd2b41672b2d3f73f484f465764f
42b36019343225f6cac03cd2a41b48ae
4e9827c9773ea20ee7bc7326f1a349d3
5fd33a197d0fa11a45ab94008714eabe
72ec5a23cf125d90670879b6b825f13d
7c96f395d78ab1ae2221ca48d2df29f8
c8017b08a5d512a4537b15466d788378
ecc13a87b59d0eb0c4d80ad6060d90dc
f6c41240fe9f6ecaac8f025a13667ada
0936b3ed7cba7c17e495f84ea5c2c999
E2E7927C279C3740EA9821595FA2AA23
https://securelist.ru/mezzo/88421/