Исследование

Mezzo: многоцелевая финансовая угроза

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

Mezzo: многоцелевая финансовая угроза

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

 

Отчеты

StripedFly: двуликий и незаметный

Разбираем фреймворк StripedFly для целевых атак, использовавший собственную версию эксплойта EternalBlue и успешно прикрывавшийся майнером.

Азиатские APT-группировки: тактики, техники и процедуры

Делимся с сообществом подходами, которые используют азиатские APT-группировки при взломе инфраструктуры, и подробной информацией о тактиках, техниках и процедурах (TTPs) злоумышленников, основанной на методологии MITRE ATT&CK.

Как поймать «Триангуляцию»

Эксперты «Лаборатории Касперского» смогли получить все этапы «Операции Триангуляция»: эксплойты нулевого дня для iOS, валидаторы, имплант TriangleDB и дополнительные модули.

Подпишитесь на еженедельную рассылку

Самая актуальная аналитика – в вашем почтовом ящике