Автор: Иннокентий Сенновский
Taidoor — крайне эффективная вредоносная программа класса RAT (remote access trojan), предназначенная для использования без закрепления в системе. Модульная система, реализованная в Taidoor, отличается от многих других RAT гибкостью: операторы программы могут отправлять на зараженную систему только те модули, которые нужны для достижения целей конкретной атаки.
Чтобы затруднить обнаружение, Taidoor использует несколько разных методов: манипуляции с временными метками, удаление файлов с модулями, обфускацию строк, поиск антивируса на атакуемой машине и др.
Мы изучили функциональные возможности и алгоритмы работы Taidoor, а также ее загрузчиков, и хотим поделиться своими наблюдениями.
Источник информации о зараженной системе, включая имена файлов, — отчет агентства кибербезопасности и безопасности инфраструктуры США (CISA) номер AR20-216A.
Taidoor в арсенале злоумышленника
С точки зрения злоумышленника, Taidoor — достойный базовый инструмент удаленного управления с многочисленными возможностями для динамического расширения. К тому же у малвари довольно удобный интерфейс для запуска процессов и взаимодействия с консолью.
Два встроенных модуля позволяют собирать информацию о зараженной системе. По мере необходимости с сервера управления можно отправлять дополнительные модули.
В ходе общения с управляющим сервером Taidoor использует криптоконверт RSA
+ AES
для обеспечения конфиденциальности. Однако криптография в программе реализована слабо: при перехвате трафика можно подменить команды от сервера. Также при использовании указанного алгоритма на сервере может появиться уязвимость, позволяющая расшифровать отправляемые на сервер данные, к которым удалось получить доступ.
Загрузчики Taidoor
Загрузчики основного тела Taidoor — файлы rasautoex.dll
и ml.dll
, идентичные по функциональности. Они отличаются только разрядностью: первый является 64-битной версией малвари, второй — 32-битной. Их свойства представлены в табл. 1.
Табл. 1. Свойства загрузчиков Taidoor
Свойства | 64-битная версия | 32-битная версия |
---|---|---|
Имя файла | rasautoex.dll |
ml.dll |
Тип файла | PE32+ Executable (DLL) | PE32 Executable (DLL) |
Класс ВПО | Загрузчик (Loader) | Загрузчик (Loader) |
MD5 | 4ec8e16d426a4aaa57c454c58f447c1e |
6aa08fed32263c052006d977a124ed7b |
SHA-1 | 5c89629e5873072a9ca3956b67cf7b5080312c80 |
9a6795333e3352b56a8fd506e463ef634b7636d2 |
SHA-256 | 6e6d3a831c03b09d9e4a54859329fbfd428083f8f5bc5f27abbfdd9c47ec0e57 |
4a0688baf9661d3737ee82f8992a0a665732c91704f28688f643115648c107d4 |
Размер (в байтах) | 50 176 | 43 520 |
Ниже мы поделимся результатами исследования 64-битной версии.
Функциональные возможности загрузчика
Файл rasautoex.dll
предназначен для загрузки основного тела Taidoor в память системы. Он может быть запущен через вызов экспортируемой функции MyStart
или зарегистрирован как служба — об этом свидетельствует экспортируемая функция ServiceMain
.
Поведение в системе
При запуске загрузчик ищет в той же директории, в которой он находится, файл svchost.dll
— зашифрованное основное тело Taidoor. Обнаружив необходимый файл, загрузчик выполняет следующие действия:
- Загружает содержимое файла в память.
- Расшифровывает файл алгоритмом RC4 на ключе
ar1z7d6556sAyAXtUQc2
. В расшифрованном видеsvchost.dll
представляет собой 64-битную библиотеку. В случае с 32-битным загрузчиком (ml.dll
) библиотека с телом Taidoor, соответственно, 32-битная. - Выполняет маппинг библиотеки в памяти.
- Находит и заполняет адреса всех импортируемых функций.
- Находит адрес экспортируемой из библиотеки функции
Start
. Если такая функция найдена, вызывает ее.
Строка: ar1z7d6556sAyAXtUQc2
Основное тело Taidoor
Основное зашифрованное тело Taidoor представлено в виде одного из файлов svchost.dll
, которые отличаются разрядностью. Их свойства описаны в табл. 2.
Табл. 2. Свойства файлов основного тела Taidoor
Свойства | 64-битная версия | 32-битная версия |
---|---|---|
Имя файла | svchost.dll |
svchost.dll |
Тип файла | Зашифрованный PE32+ Executable (DLL) | Зашифрованный PE32 Executable (DLL) |
Класс ВПО | Троян удаленного доступа (Remote Access Trojan) | Троян удаленного доступа (Remote Access Trojan) |
MD5 | 6627918d989bd7d15ef0724362b67edd |
8cf683b7d181591b91e145985f32664c |
SHA-1 | 21e29034538bb4e3bc922149ef4312b90b6b4ea3 |
f0a20aaf4d2598be043469b69075c00236b7a89a |
SHA-256 | 0d0ccfe7cd476e2e2498b854cef2e6f959df817e52924b3a8bcdae7a8faaa686 |
363ea096a3f6d06d56dc97ff1618607d462f366139df70c88310bbf77b9f9f90 |
Размер (в байтах) | 183 808 | 158 208 |
C2 | www[.]infonew[.]dubya[.]net:443 |
• 210.68.69.82:443 • www[.]cnaweb[.]mrslove[.]com:443 |
В файле с MD5-хешем, оканчивающимся на 7edd
, зашифрована 64-битная версия программы. В файле с MD5-хешем, оканчивающимся на 2664c
, — 32-битная. Файлы почти идентичны, но в них прописаны разные адреса серверов управления.
Далее речь пойдет об исследовании 64-битной версии.
Общая характеристика исследуемого образца Taidoor
Изученный образец — зашифрованная вредоносная библиотека, которую запускает отдельная программа, описанная выше.
При запуске с помощью rundll32
Taidoor проверяет наличие сохраненных вне тела программы зашифрованных настроек в параметре RValue
ключа реестра SOFTWARE\Microsoft\Windows NT\CurrentVersion
. При их отсутствии или другом типе запуска программа использует стандартные настройки, сохраненные в ее теле.
Далее Taidoor расшифровывает настройки, которые включают в себя следующие данные:
- адреса сервера управления (домены или IP-адреса и порты);
- адрес прокси-сервера (необязательно);
- настройки ожидания (время переподключения к серверу в различных ситуациях);
- публичный RSA-ключ сервера.
Если указан прокси, программа пытается подключиться к серверу управления через него. При подключении Taidoor отправляет один зашифрованный по алгоритму RSA пакет с идентификатором и ждет от сервера ответ. Если попытка успешна, программа создает файл %ALLUSERSPROFILE%\\Application Data\\Microsoft\\~svc_.TMp
— вероятнее всего, это индикатор успешного заражения, который предотвращает повторную загрузку Taidoor.
Программа в ходе основного цикла инициализирует два плагина: один для сбора информации о системе, другой — для создания процессов и работы с командной строкой.
После этого программа запускает в отдельном потоке цикл отстука, в котором она обращается к управляющему серверу каждые 10 секунд. В основном же потоке программа начинает цикл получения команд от сервера. При отправке сообщений на сервер используется криптоконверт RSA
+ AES
. На каждое сообщение генерируется отдельный ключ AES
.
Вот какие действия может совершать злоумышленник в зараженной системе при помощи Taidoor в базовой комплектации (основной модуль и два встроенных плагина):
- сохранять файлы на диск,
- изменять настройки подключения к серверу управления,
- загружать новые модули,
- подменять временные метки у файлов,
- запускать процессы и получать их результаты,
- взаимодействовать с командной строкой.
У каждого плагина Taidoor есть свой идентификатор, который указывается в начале каждого сообщения с обеих сторон. Это позволяет оператору программы адресовать команды конкретному плагину и различать источники сообщений от программы (основной модуль и конкретные плагины). По умолчанию используются следующие идентификаторы:
- 1 — основной модуль;
- 2 — плагин для старта процессов и работы с командной строкой;
- 3 — плагин для получения дополнительной информации о системе.
Внешние плагины Taidoor загружает в виде динамических библиотек по команде с сервера управления. В каждом плагине есть три экспортируемые функции:
Install
— инициализация плагина и возвращение идентификатора плагина;Proxy
— передача плагину адресованного ему сообщения от сервера;Uninstall
— деинициализация плагина.
Taidoor применяет всевозможные методы, чтобы затруднить обнаружение и расследование атаки:
- Вместо оригинального файла может использоваться копия
cmd.exe.
- Временные метки индикатора заражения
%ALLUSERSPROFILE%\\Application Data\\Microsoft\\~svc_.TMp
заменяются временными метками системного файлаC:\Windows\System32\services.exe
, что осложняет определение даты заражения. - Файлы загружаемых плагинов удаляются после запуска.
- До старта процессов плагин проверяет, нет ли на атакуемой машине антивируса Kaspersky.
Инициализация Taidoor
Перед использованием модуль должен быть расшифрован — это делает специализированный загрузчик, описанный выше. Исполнение самого образца начинается с вызова экспортируемой функции Start
.
В начале процесса используется механизм для препятствования ручной отладке, в ходе которого программа:
- считает, сколько секунд по времени от 0 до 60 должно быть через 10 секунд;
- запускает цикл, ждет по 10 секунд на каждой итерации до тех пор, пока не получит ожидаемое значение.
При ручной отладке с момента вычисления ожидаемого значения до вызова функции wait
может пройти больше секунды, в результате чего цикл может сбиться и исполняться вечно.
После запуска Taidoor препятствует ручной отладке с помощью примитивной функции.
Далее программа сама импортирует все необходимые функции за исключением LoadLibrary
и GetProcAddress
.
Taidoor вызывает еще несколько неопасных и бессмысленных функций (рис. 1), скорее всего, чтобы защититься от обнаружения.
"
Рис. 1. Пример бесполезной функции, используемой Taidoor
После этого малварь запускает основную функциональность в новом потоке. Большинство строк вредоносной программы (например, названия импортируемых функций) обфусцированы с использованием нестандартного поточного шифра для усложнения обнаружения. Строки деобфусцируются прямо перед использованием.
Соединение с сервером управления
В начале основного цикла Taidoor проверяет имя приложения, при помощи которого малварь была запущена, чтобы определить источник параметров соединения с управляющим сервером:
- Если использовалась стандартная утилита
rundll32.exe
, то программа пытается загрузить параметры соединения с сервером из параметраRValue
ключа реестраSOFTWARE\Microsoft\Windows NT\CurrentVersion
. - Если библиотека была запущена иным способом или параметр
RValue
не существует, настройки берутся из тела Taidoor.
Настройки, полученные тем или иным способом, расшифровываются алгоритмом AES
в режиме ECB
с ключом 2B7E151628AED2A6ABF7158809CF4F3C
(представлен в шестнадцатеричном виде).
Далее Taidoor пытается подключиться к серверу управления. В полученных ранее параметрах подключения может быть указано до 4 адресов сервера и до 3 портов на каждый сервер. Также может быть указан адрес и порт HTTP-прокси-сервера. В изученном образце был указан один управляющий сервер и один порт, а в 32-битной версии указаны два управляющих сервера и по одному порту на каждый.
Подключение проходит по следующему алгоритму:
- Программа берет адрес и порт из конфигурации. Если в конфигурации указаны параметры прокси-сервера, то программа пытается подключиться к нему.
- Программа подключается к серверу управления или дает прокси-серверу соответствующую команду (при наличии параметров прокси и успешном подключении к нему).
- Программа отправляет на управляющий сервер массив из 263 символов, где:
- первые 3 символа — фиксированная строка
F::
; - следующие 4 — количество миллисекунд, прошедших между стартом системы и запуском программы;
- оставшиеся 256 — строка
0x040x230x190x340xfe0xc1
, зашифрованная при помощи алгоритмаRSA_PKCS1v1.5
с использованием криптографически стойкого генератора псевдослучайных чисел (ГПСЧ).
- первые 3 символа — фиксированная строка
- В ответ программа ожидает строку
200 OK\r\n\r\n
:
- Если программа получает такой ответ, фаза подключения к серверу завершается.
- Если программа не получает ожидаемого ответа, то она пробует соединиться со следующим сервером, указанным в параметрах. Если ни к одному из них не удается подключиться, программа засыпает на указанный в параметрах период времени (в данном образце — 30 минут), затем повторяет описанный выше цикл.
Работа с временными метками
Перед соединением с сервером управления Taidoor открывает журнал событий системы и начинает по очереди читать записи. Особое внимание при этом программа обращает на записи типов 6005
(«Начало работы службы журнала событий») и 6006
(«Конец работы службы журнала событий») — они могут использоваться для определения времени работы машины. В рассмотренном экземпляре реализован проход по этим данным, но программа их не использует.
После подключения к серверу программа создает файл %ALLUSERSPROFILE%\\Application Data\\Microsoft\\~svc_.TMp
, а также обновляет его временные метки. Затем программа проверяет файл C:\Windows\win.ini
на наличие секции Micros
с ключом source
. Если ключ присутствует, утилита cmd.exe
копируется по указанному в ключе адресу (в отчете CISA указан адрес c:\temp\cmd.exe
).
Функциональные возможности основного модуля
Если в первом байте расшифрованного буфера, пришедшего от сервера, стоит 1
, остаток буфера обрабатывается самой Taidoor. Отдельные команды могут устанавливать или использовать глобальные переменные. Вот самые важные из них:
<имя_файла>;
<файловый_дескриптор>;
<идентификатор>;
<глобальный_массив>;
<дополнительное_имя_файла>;
<дополнительный_дескриптор_файла>.
Первый байт остатка буфера, который передается на обработку, идентифицирует одну из команд. Команды могут манипулировать подключением малвари к серверу, обновлять ее настройки, загружать и выгружать плагины, а также выполнять другие вредоносные действия.
Идентификатор | Команда |
---|---|
2 | Отключиться от сервера |
3 | Создать в текущей директории файл с именем }{ . Деинициализировать все плагины. Завершить процесс |
4 | Загрузить плагин из директории по пути, переданному сервера управления. При успешной инициализации удалить все файлы с именем uaq*.dll в текущей директории.Если инструкции выполнены, отправить серверу сообщение \x01\x05 и тип плагина.Если во время работы произошла ошибка, отправить на сервер сообщение \x01\x06 , конкатенированное с описанием ошибки: • Can't find plug file — не получилось найти файл, • Can't load more plug — уже загружено максимальное количество плагинов, • Load Dll Plug Failed — возникли проблемы при загрузке |
7 | Деинициализировать плагин указанного типа. Если получилось, отправить на сервер сообщение \x01\x08 , если нет — сообщение \x01\x06Can't find plug file |
9 | Отправить на сервер сообщение \x03\x06 и массив из конфигурации. Попытаться открыть файл %temp\~lpz.zp. .Если получилось, отправить файл в нескольких сообщениях — частями по 6000 символов. В сообщении каждая тысяча символов оригинального файла разделена переносом строки, а каждому отсылаемому сообщению предшествует код \x03\x07. После отправки содержимого файл удаляется |
10 | Сохранить полученный массив (новую конфигурацию) в параметр RValue ключа SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion .Если получилось, отправить конфигурацию на сервер с кодом \x03\x06 |
11 | Попытаться открыть файл с указанным в сообщении именем. Если не получилось, отправить серверу сообщение \x03\x05Can't open update file и закончить обработку команды.Если получилось, проверить его размер. Если файл пуст, отправить серверу сообщение \x03\x05File too small и закончить обработку.Если обработка продолжается, создать <глобальный_массив> и сохранить туда содержимое файла.Если <дополнительный_дескриптор_файла> открыт, закрыть его, файл <дополнительное_имя_файла> переместить в текущую директорию с именем <5 случайных символов латинского алфавита в нижнем регистре> . XMP-файл из сообщения переместить на место <дополнительное_имя_файла> . После этого файл, указанный в сообщении, открывается как <дополнительное_имя_файла> .Вне зависимости от того, был ли открыт до этого <дополнительный_дескриптор_файла> , удалить файл с именем из сообщения (если он не был перемещен), удалить параметр RValue из ключа реестра SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion. В конце отправить на сервер сообщение \x03\x04aaa |
12 | Проверить, инициализирован ли плагин с указанным типом. Если да, отправить серверу сообщение \x01\x0d , если нет — \x01\x0e |
15 | Скопировать остаток буфера в переменную <имя_файла> . Попытаться открыть файл на запись и сохранить соответствующий дескриптор в <файловый_дескриптор> .Если не получилось открыть файл или переданный путь к файлу длиннее 260 байт, отправить на сервер сообщение с ошибкой \x01\x06Create File Failed\x00. Если все прошло успешно, отправить \x01\x10 |
17 | Записать остаток буфера в ранее открытый <файловый_поток> |
18 | Если <файловый_дескриптор> открыт, закрыть его. Заменить значения временных меток файла <имя_файла> на значения временных меток файла C:\Windows\System32\services.exe . Отправить на сервер сообщение \x01\x13 вместе с <имя_файла> |
20 | Закрыть <файловый_дескриптор> , удалить файл <имя_файла> |
32 | Отправить \x01\x21 и <идентификатор> на сервер |
34 | Отключиться от сервера |
На рис. 2 можно увидеть реализацию команды с идентификатором 15, которая запускает процесс открытия файла.
Рис. 2. Часть обработчика открытия файла
Работа плагинов
Инициализация плагинов
Taidoor инициализирует два встроенных плагина:
- MyPlugCmd — для исполнения команд на машине. В качестве одного из аргументов при инициализации передается путь, по которому располагается копия
cmd.exe
. Если необходимый ключ вwin.ini
не найден или копирование сорвалось, передается пустая строка. - MyPlugInfo — для получения базовой информации о зараженной машине.
Вот как выглядит процесс загрузки нового плагина (функция представлена на рис. 3):
- Библиотека загружается в память.
- Программа проверяет плагин на наличие следующих экспортируемых функций:
Install,
Uninstall,
Proxy.
- Программа вызывает функцию
Install
, передает в нее информацию о подключении к серверу управления. В качестве идентификатора выставляется полученное изInstall
значение. - После инициализации модуль добавляется в массив плагинов и, если имя файла соответствует схеме
uaq*.dll
, файл удаляется.
Рис. 3. Функция загрузки плагина
Каждый модуль может быть деинициализирован, чтобы предоставить место другому.
При получении команды от сервера управления Taidoor проверяет первый байт, который указывает на адресата: команда может быть предназначена либо для основного модуля, либо для одного из плагинов. Если команда должна быть передана плагину, остаток сообщения передается в функцию плагина Proxy
.
Активировав плагины, Taidoor в отдельном потоке запускает функцию периодического обращения к серверу. В этой функции программа каждые 10 секунд отправляет управляющему серверу сообщение \x01\xff
.
Все обращения к серверу здесь и далее создаются по следующему алгоритму:
- Высчитывается размер данных с паддингом. Он будет равен длине сообщения + 4 байта — это значение округляется до 16, обязательно в большую сторону. Например, 16 > 20 > 32, a 12 > 16 > 32.
- Изначальный размер записывается в первые 4 байта нового массива с вычисленным размером. Сразу после него копируются передаваемые данные (т. е. по отступу 4). Лишние байты в конце массива заполняются нулями. Таким образом данные запаковываются для симметричного шифрования.
- Программа генерирует временный ключ из 16 символов нижнего регистра в латинском алфавите. Механизм генерации небезопасен, поскольку позволяет перебрать все возможные варианты за приемлемое время. К тому же если известно примерное время заражения, можно сократить количество вариантов.
- Программа шифрует созданный ключ при помощи алгоритма
RSA_PKCS1v1.5
с использованием криптографически стойкого ГПСЧ на ключе, взятом из параметров. - Программа шифрует запакованный массив при помощи алгоритма
AES-128
в режимеECB
на временном ключе. - Программа отправляет на сервер 4 байта полного размера пакета: 256 (размер зашифрованного ключа) + размер зашифрованных данных. Если удалось отправить размер, то программа последовательно посылает 256 байт зашифрованного ключа и зашифрованные данные.
Общение плагинов с сервером управления
Включив плагины, малварь начинает получать команды от сервера управления. Дальнейшие действия вредоноса зависят от команд.
Если при получении данных от сервера возникла ошибка, программа завершает соединение и ждет столько времени, сколько установлено в параметрах (в изученном образце это 1 секунда), после чего вновь пытается подключиться к серверу.
Если сервер ответил пустым сообщением, программа это запоминает. Если сервер ответил так 300 раз подряд, программа завершает соединение и столько времени, сколько установлено в параметрах (в изученном образце это 30 минут), после чего пытается подключиться снова.
Если размер сообщения от сервера больше или равен 256 байтам, то программа действуют по следующему алгоритму:
- Taidoor берет первые 256 байт и расшифровывает их на публичном ключе RSA c применением
RSA_PKCS1v1.5
. Полученные данные используются в качестве симметричного ключа для следующих данных. Использование подписи в данном случае бессмысленно, так как не защищает от перехвата управления. - Программа использует полученный ключ, чтобы расшифровать остаток сообщения алгоритмом
AES-128
в режимеECB
. - В первый байт полученного массива записывается идентификатор адресата команды:
- Если он равен 1, то остальные данные предназначаются для основного модуля и обрабатываются в отдельной функции.
- Все остальные значения обозначают тот или иной плагин. Программа ищет его и передает ему данные. Если такой плагин не найден, программа не делает ничего.
Функциональные возможности плагинов
Встроенный модуль MyPlugCmd предназначен для запуска процессов и передачи команд консоли. При инициализации ему передается параметр, который может быть сохранен в файле C:\Windows\win.ini
. Этот параметр указывает на копию cmd.exe
, которая используется, чтобы затруднить обнаружение программы.
Модуль хранит несколько переменных в своем теле. Вот наиболее важные из них:
<файловый_дескриптор>;
<имя_файла>;
<альтернативный_путь_к_cmd>;
<шелл>.
Стоит отметить, что переменная <шелл> хранит информацию о запущенном процессе консоли, которая нужна для записи в поток ввода данного процесса и получения данных из потока вывода.
Идентификатор | Команда |
---|---|
1 | Проверить, что среди запущенных процессов нет avp.exe (антивируса Kaspersky):• Если он найден, отправить \x02\x07kb и закончить обработку.• Если не найден, проверить, инициализирована ли переменная <альтернативный_путь_к_cmd> . Если нет, то записать туда cmd.exe. Затем создать процесс <альтернативный_путь_к_cmd> с перенаправленным вводом-выводом.При успешном запуске поместить информацию о процессе вместе с дескрипторами перенаправления ввода-вывода в <шелл> , а в файл C:\Windows\win.ini добавить секцию Micros c ключом source со значением <альтернативный_путь_к_cmd>. Также запускается дополнительный поток, в котором каждые 32 миллисекунды до 4096 байт вывода запущенного процесса отправляются на сервер с идентификатором \x02\x09. При ошибке создания процесса отправить на сервер сообщение \x02\x03 , при успехе — \x02\x02 |
4 | Если <шелл> инициализирован, завершить его процесс и отправить на сервер \x02\x05. Если нет — отправить на сервер \x02\x06no shell |
8 | Записать остаток буфера в поток ввода <шелл> |
10 | Сохранить путь к файлу, переданный в сообщении, в <имя_файла> , открыть его для чтения и сохранить дескриптор в <файловый_дескриптор> .При ошибке отправить \x02\x0eCreate File Failed , при успехе — \x02\x0b |
12 | Сохранить остаток буфера в переменную <имя_файла> , открыть этот файл для чтения, сохранить дескриптор в <файловый_дескриптор>. Если возникла ошибка при открытии файла, отправить на сервер \x02\x0eOpen File Failed .Еcли он пуст — \x02\x03File Size is 0 . При обеих ошибках закончить обработку команды.Если файл открыт и он не пустой, отправить на сервер сообщение \x02\x0d . Также запустить дополнительный поток, в котором содержимое файла будет отправляться на сервер в сообщениях с идентификатором \x02\x0f частями по 4096 байт с промежутком в одну миллисекунду. Остаток файла не отправлять.Завершить процесс сообщением \x02\x12 и закрытием <файловый_дескриптор> |
15 | Подать остаток буфера на вход процессу <шелл> , если он инициализирован |
16 | Обновить временные метки у файла <имя_файла> , скопировав временные метки файла C:\Windows\System32\services.exe . Отправить серверу сообщение \x02\x11 |
19 | Закрыть <файловый_дескриптор> , удалить файл <имя_файла> |
31 | Cоздать временный файл и запустить файл, расположенный по пути из остатка буфера, перенаправляя вывод во временный файл. Если произошла ошибка при создании временного файла, отправить сообщение об ошибке \x02\x20Create result file failed .Еcли при запуске файла по пути из остатка буфера произошла ошибка, отправить сообщение \x02\x32CreateProcess Error: , конкатенированное с кодом ошибки.Если запуск прошел успешно, читать из временного файла по 4096 символов и отправлять их с кодом сообщения \x02\x21 каждую миллисекунду |
34 | Запустить файл, расположенный по пути из остатка буфера. При удачном запуске отправить серверу сообщение \x02\x32CreateProcess succ , при ошибке — сообщение \x02\x32CreateProcess Error :, конкатенированное с кодом ошибки. |
37 | Заменить <альтернативный_путь_к_cmd> остатком полученного буфера. Отправить серверу сообщение \x02\x26 |
Встроенный модуль MyPlugInfo может собирать и отправлять на сервер информацию об IP-адресах и MAC-адресах сетевых интерфейсов, идентификатор текущего процесса, а также идентификаторы заражения. Еще он умеет выполнять команду 11 основного обработчика.
Значение байта | Команда |
---|---|
1 | Собрать информацию об IP-адресах и MAC-адресах сетевых интерфейсов, идентификатор текущего процесса, а также идентификаторы заражения (устанавливаются при инициализации плагина). Отправить всю эту информацию на сервер с кодом \x03\x02 |
3 | Выполнить команду 11 основного обработчика |
Файл | Параметр реестра |
---|---|
%ALLUSERSPROFILE%\\Application Data\\Microsoft\\~svc_.TMp |
RValue в ключе SOFTWARE\Microsoft\Windows NT\CurrentVersion |
rivitna
Спасибо за хорошую статью!
Единственное, мне не понятен посыл ресёрча. В августе 2020 года появился отчет агентства кибербезопасности и безопасности инфраструктуры США (CISA) номер AR20-216A, Ваша команда решила происследовать указанные там образцы и представить более детальный анализ. Но зачем? Ваша команда выявила Taidoor вживую? Taidoor — сложный RAT, но есть сложнее и изощреннее.
Мне как вирусному аналитику интересен вектор начального доступа, какое-то описание киллчейна атаки с использованием Taidoor, сравнительный анализ со старыми образцами, а Taidoor атакует госсектор, как минимум с 2010 года, и эти образцы есть на VT. То есть мне не хватило более развернутого исследования, а не только реверс конкретных образцов, причем, как мне кажется, не выявленных вашей командой
А анализ ради анализа не очень интересен. Известный факт, что в BI.ZONE хорошие спецы.
BiZone_team Автор
Спасибо за обратную связь.
Мы постоянно анализируем и изучаем ВПО различных группировок. В данном случае мы решили опубликовать отчёт, потому что заметили нераскрытые интересные особенности. Например, использование уязвимых криптографических алгоритмов, а также некоторые неточности в изначальной статье.