C атаками на бухгалтерские программы аналитики «Лаборатории Касперского» сталкиваются не в первый раз — например, около года назад нами был обнаружен зловред Trojan.Win32.TwoBee. В общем виде атака на учетную систему сводилась к подмене реквизитов в данных, выгружаемых для банковских систем из базы данных. В результате денежные суммы уходят на чужие счета без ведома владельца. Троянец TwoBee в начале своей «карьеры» получал данные для подмены реквизитов извне, а позже «носил» их с собой, отправляя на сервер лишь короткие сообщения с информацией о результатах работы.
Что касается троянца Mezzo, который мы хотим рассмотреть, то он просто отправляет текстовые файлы на сервер, не производя с ними никаких манипуляций. Однако это не означает что угрозы нет – наоборот, это может говорить о том, что авторы зловреда готовятся к будущей компании и в данный момент находятся на этапе сбора информации о целях.
Остановимся подробнее на некоторых особенностях данного троянца, для этого рассмотрим две модификации Mezzo – один предназначен исключительно для сбора информации о имеющихся файлах бухгалтерии, второй же способен их подменять.
Характерная черта обеих — создание на старте легко узнаваемого мьютекса:
Модуль сбора информации
После начала работы Mezzo создает уникальный идентификатор для зараженного компьютера:
Этот идентификатор используется в качестве имени папки, где будет храниться информация о найденных файлах:
Содержимое архива выглядит следующим образом:
Сам архив защищен паролем (в этом качестве используется созданный ранее идентификатор, который также является именем архива). В отличии от TwoBee, Mezzo использует более простой алгоритм для поиска и проверки файлов. К примеру, TwoBee осуществлял подмену данных только при наличии определенной минимальной суммы транзакции:
Кроме того, TwoBee собирал данные о переводимых суммах.
Mezzo же просто удостоверяется в «возрасте» файла (не должен быть старше недели) и наличии строчки 1CClientBankExchange в его начале:
По завершении поиска данные упаковываются в архив с паролем и отправляются на сервер.
Модуль подмены
Теперь разберемся, как работает модуль Mezzo, в задачи которого входит подмена файлов бухгалтерской программы.
Троянец создает три потока выполнения. Первый (trash _thread на скриншоте ниже) отвечает за противодействие защитному ПО — троянец выделяет огромные регионы памяти в цикле и наполняет их произвольными данными: в «песочницах» некоторых защитных решений обработка выделения памяти и контроль ее утечек отличается от механизмов «реальных» операционных систем и подобные запросы могут нарушить их работу. Второй регистрирует «свежезараженный» компьютер на командном сервере. Третий необходим для опроса C&C-сервера и передачи информации о зараженной системе.
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 хранят украденные данные похожим образом (разве что в качестве пароля не всегда используется идентифкиатор):
Даже поверхностное исследование кода позволяет выявить стиль автора 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 .
Файлы «складируются» схожим с Mezzo образом.
Последний примечательный момент, связанный с этим модулем: автор отошел от использования curl и позаимствовал код некоего Anasazi: характерная строка WARPCRYPT присутствует в обоих случаях. Плюс, на pastebin нами были обнаружен исходный код Anasazi.
Второй выгружаемый файл обладает возможностями удаленного управления зараженным компьютером. Сам по себе данный модуль не представляет особого интереса, являясь достаточно обычным бэкдором, выполняющим, к примеру, следующие команды:
- 0x403: Запустить диспетчер задач
- 0x406: Завершить процесс Chrome
- 0x40F: Запустить командную строку
- 0x413: Поместить в буфер определенные данные и передать их в заданное окно
И так далее.
MD 5
Mezzo
Модуль сбора информации: 622c93914c91db01b9b4770d4ab7a6c6
Модуль подмены: 1083439FAE49A745F007705281952CD9
AlinaBot
0624074f0d4054b8cc4ad6d32dcc10f1
3e68bd2b41672b2d3f73f484f465764f
42b36019343225f6cac03cd2a41b48ae
4e9827c9773ea20ee7bc7326f1a349d3
5fd33a197d0fa11a45ab94008714eabe
72ec5a23cf125d90670879b6b825f13d
7c96f395d78ab1ae2221ca48d2df29f8
c8017b08a5d512a4537b15466d788378
ecc13a87b59d0eb0c4d80ad6060d90dc
f6c41240fe9f6ecaac8f025a13667ada
0936b3ed7cba7c17e495f84ea5c2c999
E2E7927C279C3740EA9821595FA2AA23
Mezzo: многоцелевая финансовая угроза