Как эффективно работать с Taidoor. Часть 1
Taidoor — это очень эффективна вирусная программа класса RAT (remotes access trojan), которая предназначена для использования без закрепления в системе. С помощью модульной системы, реализованной в Taidoor можно осуществлять доставку на зараженную территорию только тех модулей, которые необходимы для достижения целей конкретной атаки. В данной статье мы разберем как эффективно работать с Taidoor.
Чтобы усложнить обнаружение, Taidoor использует различные методы: манипулирование отметками времени, удаление файлов с модулями, запутывание строк, поиск антивирусных программ на атакуемом компьютере и т.д.
Taidoor в арсенале хакера
Два независимых модуля позволяют собрать всю необходимую информацию о зараженной системе. Если необходимо, то с сервера управления можно отправить дополнительные модули.
С помощью криптовалюты RSA + AES
, которая используется в Taidoor, обеспечивается секретность при работе с сервером управления. С точки зрения реализации программы, криптография в ней не очень хорошая. При захвате трафика нужно использовать команды с сервера. Помимо этого в этом алгоритме есть уязвимость, которая позволяет расшифровать полученную информацию, отправленную на сервер.
Загрузчики Taidoor
Основными загрузчиками Taidoor являются rasautoex.dll
и ml.dll,
которые имеют идентичную функциональность. Они различаются только битовой глубиной: первая — это 64-битная версия зловреда, вторая — 32-битная версия. Их свойства приведены в таблице 1.
Табл. 1. Свойства загрузчиков Taidoor
Возможности загрузчика
Файл rasautoex.dll
предназначен для загрузки основной части Taidoor в системную память. Его можно запустить, вызвав экспортированную функцию MyStart
, или зарегистрировать как службу, как показывает экспортированная функция ServiceMain.
Как ведет себя в системе
При запуске загрузчик в том же каталоге ищет файл svchost.dll
, зашифрованный основной текст Taidoor. Найдя нужный файл, загрузчик выполняет следующие действия:
- Загружает содержимое файла в память.
- Расшифровывает файл алгоритмом RC4 на ключе
ar1z7d6556sAyAXtUQc2
. В расшифрованном видеsvchost.dll
представляет собой 64-битную библиотеку. В случае с 32-битным загрузчиком (ml.dll
) библиотека с телом Taidoor, соответственно, 32-битная. - Выполняет маппинг библиотеки в памяти.
- Находит и заполняет адреса всех импортируемых функций.
- Находит адрес экспортируемой из библиотеки функции
Start
. Если такая функция найдена, вызывает ее.
Индикатор компрометации (IoC)
Строка: ar1z7d6556sAyAXtUQc2
Тело Taidoor
Основное зашифрованное тело Taidoor представлено в виде одного из файлов svchost.dll
, которые отличаются разрядностью. Их свойства описаны в табл. 2.
Табл. 2. Свойства файлов основного тела Taidoor
Хэш-файл MD5
, заканчивающийся 7edd
, содержит зашифрованную 64-битную версию программы. В файле с хешем MD5
, заканчивающимся на 2664c
, он 32-битный. Файлы почти идентичны, но содержат разные адреса серверов управления.
Далее речь пойдет об исследовании 64-битной версии.
Общая характеристика Taidoor
Исследуемый образец представляет собой зашифрованную вредоносную библиотеку, запускаемую отдельной программой, описанной выше.
При запуске с rundll32
Taidoor проверяет зашифрованные настройки, сохраненные вне тела программы, в параметре RValue
в разделе реестра SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion.
Если они отсутствуют или в выпуске другого типа, программа использует настройки по умолчанию, сохраненные в вашем теле.
Далее Taidoor расшифровывает настройки, которые включают в себя следующие данные:
Далее Taidoor расшифровывает настройки, которые включают в себя следующие данные:
- адреса сервера управления (домены или IP-адреса и порты);
- адрес прокси-сервера (необязательно);
- настройки ожидания (время переподключения к серверу в различных ситуациях);
- публичный RSA-ключ сервера.
В случае, если в настройках программы установлен прокси, программа пытается через него выйти на сервер управления. Taidoor посылает один зашифрованный RSA пакет, который содержит идентификатор и ожидает ответа от сервера. После успешной попытки программа создает файл % ALLUSERSPROFILE%\Application Data\ Microsoft\~ svc_.TMp – возможно, это индикатор успешного заражения, который не позволяет перезагрузить Taidoor.
После того, как основной цикл завершается, программа создает два плагина: один для сбора системных данных, второй для создания процессов и работы с командной строкой.
Затем программа запускает цикл отстука в отдельном потоке, где она связывается с C&C сервером каждые 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), скорее всего, чтобы защититься от обнаружения.
После этого малварь запускает основную функцию в новом потоке. Некоторые из строк вредоносной программы (например, название импортируемых функций) обфусацированы с использованием нестандартного поточног шифра для усложнения обнаружения. Строки деобфусцируют непосредственно перед использованием.
Связь с сервером управления
Перед началом каждого из основных циклов 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
с использованием криптографически стойкого генератора псевдослучайных чисел (ГПСЧ). - В ответ программа ожидает строку
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. Отдельные команды могут устанавливать или использовать глобальные переменные. Вот самые важные:
<имя_файла>;
<файловый_дескриптор>;
<идентификатор>;
<глобальный_массив>;
<дополнительное_имя_файла>;
<дополнительный_дескриптор_файла>.
Первый байт оставшейся части буфера, отправленный на обработку, идентифицирует одну из команд. Команды могут управлять подключением вредоносного ПО к серверу, обновлять его настройки, загружать и скачивать плагины и выполнять другие вредоносные действия.
Полный список команд
Продолжение следует…