TL;DR
13-го апреля 2023 года в мессенджере Telegram обнаружена рассылка с архивом под красноречивым названием 这几笔错误的账单我圈出来了你看看.zip:
В результате анализа удалось выяснить, что архив содержит вредоносное программное обеспечение нацеленное на пользователей ОС семейства Windows, краткая схема работы которого представлена на следующем рисунке:
где 1 – получение архива, 2 – ручное извлечение и запуск пользователем загрузчика ВПО, 3 – подгрузка ВПО с сервера злоумышленника в сети CloudFlare,
4 – передача управления основной вредоносной программе, 5 – подключение
к серверу управления и получение команд.
В этой статье представлен технический анализ трояна. Он может быть полезен специалистам ИБ, которым хочется изучить возможности данного семпла или ознакомиться базовыми подходами ручного анализа вредоносного ПО.
Технический анализ
Загрузка
В архиве находится одноимённый исполняемым EXE файл (MD5: 50351169d2ee00143091254fc7e8b3ab), название которого в дословном переводе гугл-транслейта означает “Я обвел эти неправильные счета, чтобы вы могли видеть.exe”. Ну-с, очень заманчиво. Отметим, что вредонос совсем не “юзерфрендли”, так как пользователь должен сам распаковать и запустить его.
Тем не менее, откроем его с помощью любого удобного дизассемблера. Перейдя к main-процедуре видим, что если пользователь запустит файл, то программа скачает ряд файлов с сервера imgcache.vip033324[.]xyz, используя функцию WinAPI URLDownloadToFile:
Отметим, что загрузчик первой стадии (beacon, stager в англоязычных источниках) никак не защищен от статического или динамического анализа. Впрочем, даже с обфускацией время жизни подобных семплов до детекта AV-решениями идёт на дни, так что ничего особенного в этом нет.
Разреверсив бинарь окончательно, получаем перечень загружаемых файлов и путей их сохранения (пытливые читатели на данном этапе могут попытаться скачать эти файлы и подключиться к анализу, если домен ещё не снесли):
URL на сервере http://imgcache.vip033324[.]xyz |
Локальный путь сохранения файла |
/picturess/2023/30.45.txt |
C:\ProgramData\setting.ini |
/picturess/2023/LiveUpdate.exe |
C:\ProgramData\Thunder\LiveUpdate.exe, C:\ProgramData\ThunderUpdate\LiveUpdate.exe |
/picturess/2023/Mediax.xml |
C:\ProgramData\Thunder\Media.xml |
/picturess/2023/RSD.xml |
C:\ProgramData\ThunderUpdate\Media.xml |
/picturess/2023/update.log |
C:\ProgramData\Thunder\update.log |
/picturess/2023/LiveUpdate360.dat |
C:\ProgramData\Thunder\LiveUpdate.dat, C:\ProgramData\ThunderUpdate\LiveUpdate.dat |
Эта информация вкупе с адресом сервера – мастхев для любых систем обнаружения таких вредоносов, так как позволяет защититься ещё до внедрения трояна в систему, или же вылечить систему путём удаления необходимых для вредоноса файлов.
Далее перейдём к поиску “полезной нагрузки”, ведь загрузчик пока никаких вредоносных действий не выполнил (да и не может их выполнить, в нем просто нет такого функционала). Может это и не вредонос вовсе, а какая-нибудь вычурная китайская программа обновления ПО?
Распаковка LiveUpdate.exe
После загрузки необходимых файлов, beacon запускает скачанную программу LiveUpdate.exe. С помощью программ типа Binwalk, DetectItEasy, PEInfo (или же просто в дизассемблере) легко можно обнаружить, что эта программа запакована с помощью упаковщика с открытым исходным кодом UPX. Просто скачиваем её с официального сайта (https://upx.github.io/) и распаковываем LiveUpdate.exe. Снова отметим, что ничего вредоносного в UPX нет, он часто используется разработчиками для сокращения размера своих программ.
Распаковка LiveUpdate.dat
Загружаем распакованный LiveUpdate.exe в дизассемблер и видим… Ничего? Да, файл не выглядит особо вредоносным, но почему-то содержит в себе виртуальную машину LUA?! Интересно… На этом этапе может помочь динамический анализ, чтобы определить, зачем же всё-таки нужен этот файл (только лучше делать это на виртуальной машине не имеющей доступа к сети). А можно не лезть в отладчик, а взглянуть на другие загруженные beacon-ом файлы.
Кроме LiveUpdate.dat, все остальные бинарные файлы в каком-то неясном формате, а вот LiveUpdate, как можно заметить в хекс-редакторе, является ZIP-архивом. Однако открыть вы его не сможете, он требует пароля. Что же, давайте попробуем поискать, кто же его разархивирует? В строках LiveUpdate.exe замечаем LiveUpdate.dat и названия запакованных в нём файлов. Переходим по ссылкам, и спустя несколько минут поисков видим, что LiveUpdate.exe разархивирует и загружает в память содержимое файла используя пароль, так же находящийся в строках файла в открытом виде: “3D9E9F5F9B2B40E1A9158385E2E4B660”:
Из архива в память загружаются два файла – _TUProj.dat (80 КБ)
и _TUProjDT.dat (4 байта). Если открыть их в шестнадцатеричном редакторе, то можно заметить, что в файле _TUProj.dat располагаются различные скрипты LUA (теперь понятно зачем его реализация есть в LiveUpdate.exe).
Среди скриптов обнаруживается некий ClientScript:
Даже не зная языка LUA, можно заметить, что в этом коде происходит выделение памяти на куче для массива чисел из переменной g_table_char (24), преобразуемого в массив байт и загружаемого в выделенную память (29). Вообще цепочка вида VirtualAlloc (выделить память), заполнить её какой-либо функцией (RtlFillMemory), и начать исполнять (CreateThread) – очень типична, и сразу бросается в глаза. После загрузки по данному адресу создаётся новый поток выполнения (38). После этого скрипт в цикле загружает картинку с сайта baidu.com (генерация мусорного трафика для отвлечения внимания).
Отлично, вооружимся любым скриптовым языком (я выбрал Python) и преобразуем последовательность из переменной g_table_char в двоичный код, и загрузим его в дизассемблер.
Распаковка Media.xml
Декомпилируем, ищем строки и видим, что новый поток кода, полученный из переменной g_table_char, считывает скачанный ранее файл Media.xml из текущей рабочей директории программы и правит первые 4 байта файла: buf[i] = (buf[i] ^ 0x30) + 0x30 ( i <= 4).
После исправления обнаруживается, что данный файл является исполняемым файлом Windows формата PE (сигнатура MZ там со времен MS-DOS). Впрочем, об этом и так можно было догадаться и так, открыв файл в hex-редакторе.
После этого, как ни странно, исполнение переходит в загруженный и исправленный файл. Что ж, ожидаемо. Грузим и этот файл в дизассемблер.
Распаковка update.log
Мы почти добрались до конца этой цепочки, ведь далее загруженный файл Media.xml получает управление в своей точке входа и загружает файл update.log, повторяя описанную ранее процедуру декодирования с байтом 0x30 (только уже для всего файла).
Данный файл после декодирования также представляет из себя исполняемую библиотеку MS Windows, в которую в очередной раз передаётся управление. Отметим про себя, что вредоносный код в этот и в предыдущий раз не использовал стандартные процедуры динамической загрузки исполняемого кода (например, LoadLibrary), а высчитал Entry Point загруженного кода самостоятельно.
Без лишних слов вооружаемся Python-ом, декодируем файл по уже известной формуле и загружаем в дизассемблер
Расшифрование внутреннего файла в update.log
Замечаем, что большая часть библиотеки update.log также упакована, после дизассемблирования в ней можно обнаружить лишь 28 функций (а ведь файл довольно “жирный”, почти полтора мегайбайта).
Ищем начало недизассемблированных данных и видим, что на них есть ссылка в коде, бинго! Обнаруживаем циклическое расшифрование 1105920 байт по адресу 0x04010A0 XOR-ом на 40-битном ключе 0xBE16CF52CD:
Повторяем эту процедуру с помощью всё того же питона, и с удивлением (нет) обнаруживаем, что расшифрованные данные также представляют из себя DLL-библиотеку. Срочно грузим в дизассемблер.
Единственной экспортируемой процедурой этой библиотеки (помимо стандартной DLLMain) является процедура под названием Shellex. Далее управление из update.log переходит в неё.
Вот и всё, мы извлекли основную “полезную нагрузку”. Бегло проанализировав полученный файл можем увидеть, что он действительно подозрительно напоминает вредоносный файл, или… нестандартное средство удалённого администрирования. Далее в статье будут представлены некоторые результаты статического анализа этого файла и динамического анализа вредоноса в целом.
Закрепление
Если открыть планировщик задач Windows, то можно заметить, что вредонос закрепляет свой запуск в системе путём добавления задачи ThunderLiveUpdate и красноречиво названной задачи “Ñ¸À׸üзþÎñ”.
Это один из типичных способов закрепления, так что одним из первых пунктов анализа взломанных машин можно проверять именно планировщик (например, утилита Autostart из пакета Sysinternals поможет обнаружить этот и многие другие способы закрепления).
Взаимодействие с C2
Чтобы быть полезным для злоумышленников, троян должен откуда-то получать команды и куда-то отправлять данные. Этот вредонос для связи с сервером получает IP-адрес сервера злоумышленников из скачанного на первом этапе файла setting.ini:
Вредоносный агент взаимодействует с сервером злоумышленника по нестандартному протоколу поверх TCP (порт 18076):
В результате статического анализа кода дизассемблером и декомпилятором можно уточнить формат данного протокола (просто ищем сетевые импортированные функции, и пытаемся найти нужные вызовы). Все данные при отправке кодируются побайтово в соответствии со следующим кодом:
Если декодировать таким образом представленный ранее пакет, то можно обнаружить следующие данные:
Первые три байта 0x687620 являются сигнатурой протокола “hx ” (в закодированном виде – 0xF6E6AE). Её инициализация также обнаружена в коде:
По этой сигнатуре и порту назначения возможно обнаружение такого трафика в сети. Впрочем, в других версиях и модификациях вредоноса эти данные могут быть изменены. Следующие 4 байта заголовка – полный размер пакета в формате Little Endian (в приведённом выше примере – 0xCB030000 == 0x03CB).
Анализ возможностей
Если продолжить реверс полученного бинаря, и перейти от сетевых вызовов к реализации протокола, то путём анализа “сверху вниз” можно обнаружить, что после компрометации системы троян предоставляет злоумышленнику достаточно широкие возможности по управлению системой, среди которых имеются, например:
• различные форматы удалённого администрирования;
• взаимодействие с периферийными устройствами;
• контроль файловой системы;
• осуществление сетевой активости;
• зачистка следов веб активности;
• логирование действий и запись экрана;
• похищение аутентификационных данных;
• обнаружение антивирусного ПО;
• подгрузки и выполнения произвольного кода;
Можно пойти обратным, “восходящим” путём анализа, и перейти от вызовов “полезных” импортированных функций WinAPI (запуск процессов, модификация реестра, взаимодействие с устройствами) ко всему доступному функционалу в целом. Как правило, в ходе реверса применяется и то и другое сразу.
Далее чуть подробнее остановимся на некоторых возможностях вредоноса.
В качестве одного из способов удалённого управления злоумышленник может при необходимости активировать сервис RDP на компьютере:
Точно неизвестно, как злоумышленники планируют к нему подключаться, но учитывая возможность исполнения произвольного кода, вполне возможен запуск реверс-прокси.
Для аутентификации злоумышленник может создать произвольного пользователя или модифицировать гостевую учетную запись, активировать её и добавить в группу администраторов:
Интересно также целевое назначение вредоноса. Ввиду того, что он ориентирован на китайских пользователей, в нем реализован функционал взаимодействия с китайской социальной сетью и мессенджером qq.com. В результате анализа различных скриптов автоматизации использования API qq.com, которые можно обнаружить, например, на github.com (https://gist.github.com/kagurazakasanae/a76b01f60c89aa3866dfc689345a3faf, https://github.com/LeoHuang2015/qqloginjs/) удалось разобрать некоторые процедуры такого взаимодействия.
Сначала в процедуре осуществляется аутентификация в qq под всеми доступными аккаунтами текущего пользователя,
затем происходит получение списка друзей пользователя:
и групп, в которых он состоит:
Для каждой группы предпринимается попытка получить список пользователей этой группы:
И вся эта информация благополучно отправляется на сервера злоумышленников. Зачем? Точно неизвестно. Возможно, для того чтобы отправить всем доступным пользователям этот же самый троян с аккаунта жертвы и осуществить распространение вредоноса таким образом. А может, для проведения социологических исследований…
Среди прочего, в троян встроены команды завершения процессов различных браузеров и очистки их кэша:
Заметим, что некоторые из них также очень специализированы для китайской аудитории. Вкупе с возможностями по записи экрана и кейлоггингу сброс кеша браузеров позволяет злоумышленникам похищать аутентификационную информации различных сервисов.
Заключение
В статье представлен анализ трояна, в ходе которого мы познакомились с некоторыми базовыми техниками анализа вредоносного ПО, а также с техниками, которые злоумышленники используют для сокрытия полезной нагрузки вредоносов.
Данный троян предоставляет злоумышленникам гибкие возможности по удалённому контролю и получению информации в системе, в том числе – чтение, изменение и создание файлов и процессов, активация RDP и других стандартных сервисов администрирования, осуществление сетевой активности и запуск сетевых сервисов, логирование нажатий клавиш и создание скриншотов экрана, запись звука, создание и удаление пользователей, получение аутентификационной информации, модификация реестра Windows.
Отметим, что никаких продвинутых техник по обфускации и антиотладке он не использует и с точки зрения защиты кода является достаточно примитивным. Но даже так, вредоносный код скрыт от автоматического обнаружения статическим путём, и без динамического анализа (например, запуска вредоноса в песочнице, эмуляции), антивирусу будет сложно идентифицировать модификации данного семпла.
MD5-хеш исходного архива: 62275e818ff92c030f75fdb89cddd40b, на текущий момент некоторые антивирусные решения уже отмечают его как троян семейства “lotok” (https://www.virustotal.com/gui/file/fe00e9c691f85871adfd4d8b43e6ba4a797f89cde8f5f9239884c60809b475ac/detection), однако подробной информации об этом трояне нет.
На момент обнаружения трояна VirusTotal считал данный файл безопасным. А подгружаемые им файлы и до сих пор считаются безопасными большинством AV-вендоров.
В заключение ещё раз приведём некоторые индикаторы компрометации системы данным вредоносом.
URL загрузки файлов и соответствующие им хеши сохраняемых файлов:
URL на сервере http://imgcache.vip033324[.]xyz |
Локальный путь сохранения файла в директорию C:\\ProgramData\\ |
MD5 |
/picturess/2023/30.45.txt |
setting.ini |
9dd530e124f1c6425e975fa9b66cee13 |
/picturess/2023/LiveUpdate.exe |
Thunder\\LiveUpdate.exe, ThunderUpdate\\LiveUpdate.exe |
96e4b47a136910d6f588b40d872e7f9d |
/picturess/2023/Mediax.xml |
Thunder\\Media.xml |
3668799602e1e5b94bf893141b4b76e6 |
/picturess/2023/RSD.xml |
ThunderUpdate\\Media.xml |
481b4106e3f1e40a98e3e89c385ecc7b |
/picturess/2023/update.log |
Thunder\\update.log |
8c4862a32095d0b71fcf8fb0b244161a |
/picturess/2023/LiveUpdate360.dat |
Thunder\\LiveUpdate.dat, ThunderUpdate\\LiveUpdate.dat |
f149d3f3ef0361ebe4d346811f29b527 |
Задачи в планировщике задач Windows
ThunderLiveUpdate |
ѸÀ׸üзþÎñ |
Домены, к которым троян получает доступ
imgcache.vip033324[.]xyz |
43.249.30[.]45 (конфигурируется через setting.ini) |
UserGate MRC. Автор: Шаих Галиев, ведущий реверс-инженер
Понравилась ли вам статья? Пишите в комментах!
dnbolt
Судя по данным моего самописного NGFW операторы вредоноса из японии (Данные GeoIP), мною операторы были замечены и заблокированы 23.02.22 11:06:29 повторно пытались ломится 23.05.2022 в 15:56:40.
chernovzaib
Как по мне, IoC'и так долго не живут, поэтому это могли быть другие операторы другого вредоносного ПО
yamano
Это вы по IP C2 определили? Сейчас вроде показывает регистрацию в Гонконге