
C начала осени 2024 года мы в отделе исследования киберугроз активно наблюдаем за одной любопытной группировкой. Она атаковала государственные структуры в России, а ее основными целями были шпионаж и закрепление в системе для развития последующих атак. Связей с уже известными группировками мы установить не смогли, поэтому решили назвать ее TaxOff из-за использования писем на правовые и финансовые темы в качестве приманок. В своих атаках злоумышленники использовали написанный минимум на C++17 бэкдор, который мы назвали Trinper из-за артефакта, используемого при связи с C2.
Про фишинг, работу бэкдора и почему он так называется читайте под катом, а остальные подробности можно найти в исследовании на сайте.
Начальный вектор
Фишинг — типичный старт для заражения вредоносом. Мы обнаружили несколько фишинговых писем: в одном была ссылка на «Яндекс Диск» с вредоносным содержимым, связанным с «1С», в другом — фальшивый установщик специализированного ПО для заполнения справок о доходах и расходах для госслужащих. Ежегодно это ПО обновляется и становится целью для злоумышленников, распространяющих ВПО под видом обновлений.
«Материалы.img»
Одно из писем содержало ссылку на «Яндекс Диск», в котором хранился файл Материалы.img с таким содержимым:
-
DCIM.lnk — ярлык, который запускает исполнение бэкдора Trinper;
-
drive.google.com — бэкдор Trinper;
-
Encrypteddata — склейка зашифрованных архивов с обрезанными заголовками формата RAR;
-
«История поисков.html» — фишинговая форма, вид которой продемонстрирован на рисунке ниже.
«Справки БК»
В другом письме мы нашли специальное программное обеспечение «Справки БК» для заполнения справок о доходах и расходах госслужащих. Этот вектор уже использовался одной из групп для распространения бэкдора Konni в виде переименованного файла WEXTRACT.EXE.MUI, который отвечает за извлечение сжатых CAB-файлов. В нашем случае в них содержатся два других исполняемых файла: bk.exe – Справки БК и DotNet35.exe — бэкдор Trinper.
Аналогично CAB-файлу в разделе ресурсов RCData есть атрибуты последовательности запуска файлов, хранящихся в нем. В одном атрибуте под названием RUNPROGRAM были инструкции по выполнению первой команды или любой другой определенной программы, он также запускает bk.exe.
Другой атрибут — POSTRUNPROGRAM — также содержит инструкцию для запуска исполняемого файла, но уже после выполнения RUNPROGRAM. Таким образом, после выполнения bk.exe будет выполнен DotNet35.exe.
Бэкдор Trinper
Подробности про его архитектуру, STL, паттерн проектирования, кастомную сериализацию и буферный кэш можно почитать в расширенном исследовании.
В начале бэкдор десериализирует конфигурацию и получает оттуда имя, которое должно быть у него. Если название отличается, то выполнение прекращается. А если название бэкдора совпадает с тем которое у него в конфиге, бэкдор продолжает инициализацию и вызывает функцию для получения информации о компьютере жертвы, собирая ее в структуру VictimInfo такого вида:

Поля структуры VictimInfo имеют следующие назначения:
|
Member |
Purpose |
|
|
|
Магическое число 0xB0B1B201 |
|
|
|
Member |
Purpose |
|
|
Сгенерированный GUID |
|
|
|
Сессионный ключ для AES-128-CBC |
|
|
|
Имя пользователя |
|
|
|
Имя узла |
|
|
|
Имена дисков |
|
|
|
Список адресов узла |
|
|
|
Используемый системой язык |
|
|
|
Информация об архитектуре |
|
|
|
Константное значение 64 |
|
|
|
Мажорная версия системы |
|
|
|
Минорная версия системы |
|
|
|
Уровень целостности |
|
|
|
Путь к файлу |
|
|
|
Адреса сетевых адаптеров |
|
После заполнения структуры VictimInfo бэкдор создает и запускает в разных потоках на исполнение эти экземпляры классов:
-
CommHTTP— класс для потока, в котором будет реализована коммуникация с C2; -
BgJobFileCapture— класс для потока, в котором будет мониторинг файловой системы; -
BgJobKeylogger— класс для потока, в котором будут перехвачены нажатия клавиш.
Экземпляр класса CommHTTP в своем потоке парсит десериализованную конфигурацию, которую будет использовать для коммуникации с C2, также генерирует сессионный ключ для AES-128-CBC (при этом вектор инициализации равен нулю), импортирует публичный RSA-ключ и входит в цикл общения с C2, в котором реализовано:
-
получение команд;
-
получение и отправка результатов работы команд.
Экземпляр класса BgJobFileCapture в своем потоке мониторит файловую систему, в цикле перебирает все подключенные диски и рекурсивно ищет хранящиеся на дисках файлы с расширениями .doc, .xls, .ppt, .rtf, .pdf. Он также хранит результат работы в карте с ключом (имя файла) и значением (структура, содержащая информацию о файле, в том числе его содержимое).
Экземпляр класса BgJobKeylogger в своем потоке перехватывает нажатия клавиш и хранит их в двусторонней очереди, а данные из буфера обмена находятся в неупорядоченной карте.
Конфигурация хранится в зашифрованном виде в секции .data. Дешифрование осуществляется однобайтовым ключом для обычной операции Xor.
Протокол общения с C2
Все общение с C2 осуществляется экземпляром класса CommHTTP с помощью вызовов сетевых функций библиотеки WININET.DLL. Информация о компьютере жертвы и сессионном ключе шифруется публичным ключом RSA, кодируется с помощью Base64 и отправляется C2 в заголовке Config.Commands.CommandsHeaders с приветственной строкой Config.Commands.HelloMessage в данных запроса. Команды, полученные от C2 в ответе, заключены между маркерами Config.Commands.CommandsResponse.TagOpen и Config.Commands.CommandsResponse.TagClose и закодированы с помощью Base64. Результат работы задач шифруется сессионным ключом AES-128-CBC, кодируется с помощью Base64 и заключается между маркерами Config.TaskResults.TaskResultsData.TagOpen и Config.TaskResults.TaskResultsData.TagClose в данных запроса к C2.
Ниже демонстрируется запрос бэкдора к C2 для получения команд. В качестве приветствия в данных используется строка mid=76&mod=TRINP (отсюда мы и получили название для бэкдора). Также можно заметить, что заголовок User-Agent некорректно отображает содержимое, полученное из Config.UserAgent. Это связано с ошибкой передачи значения заголовка в функцию InternetOpenW, так как InternetOpenW пытается конвертировать строку для User-Agent из широкой кодировки в кодировку ascii, но из-за неправильно переданного указателя на значения из конфигурации происходит неправильная конвертация, и на выходе формируется неотображаемая строка.
Заключение
Группировка TaxOff использует актуальные темы в своих фишинговых рассылках, тем самым она привлекает и обманывает пользователей. В своих атаках эти киберпреступники используют сложный многопоточный бэкдор Trinper, который позволяет им устанавливать устойчивый доступ к скомпрометированным системам, эффективно управлять несколькими задачами одновременно и выполнять различные вредоносные действия без значительного влияния на производительность системы.
Таким образом, сочетание использования актуальных тем и сложного многопоточного бэкдора делает атаки группировки TaxOff особенно опасными и трудными для обнаружения и предотвращения.
Владислав Лунин
Старший специалист группы исследования сложных угроз экспертного центра безопасности Positive Technologies
ссылка на оригинал статьи https://habr.com/ru/articles/861940/
Добавить комментарий