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/
Добавить комментарий