June 14, 2021

Как эффективно работать с 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. Найдя нужный файл, загрузчик выполняет следующие действия:

  1. Загружает содержимое файла в память.
  2. Расшифровывает файл алгоритмом RC4 на ключе ar1z7d6556sAyAXtUQc2. В расшифрованном виде svchost.dll представляет собой 64-битную библиотеку. В случае с 32-битным загрузчиком (ml.dll) библиотека с телом Taidoor, соответственно, 32-битная.
  3. Выполняет маппинг библиотеки в памяти.
  4. Находит и заполняет адреса всех импортируемых функций.
  5. Находит адрес экспортируемой из библиотеки функции 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начинается выполнение самого образца.

Для того чтобы избежать ручной доработки программы и ее последующей отладки, используется механизм, препятствующий ручной отладке, в ходе которого программа:

  1. считает, сколько секунд по времени от 0 до 60 должно быть через 10 секунд;
  2. запускает цикл, ждет по 10 секунд на каждой итерации до тех пор, пока не получит ожидаемое значение.

Отладка с момента вычисления ожидаемого значения вплоть до вызова функции waitможет занять более чем секунду, что может привести к сбою и невыполнению цикла.

После запуска Taidoor препятствует ручной отладке с помощью примитивной функции.

Далее программа сама импортирует все необходимые функции за исключением LoadLibrary и GetProcAddress.

Taidoor вызывает еще несколько неопасных и бессмысленных функций (рис. 1), скорее всего, чтобы защититься от обнаружения.

Пример бесполезной функции, используемой Taidoor

После этого малварь запускает основную функцию в новом потоке. Некоторые из строк вредоносной программы (например, название импортируемых функций) обфусацированы с использованием нестандартного поточног шифра для усложнения обнаружения. Строки деобфусцируют непосредственно перед использованием.

Связь с сервером управления

Перед началом каждого из основных циклов Taidoor проверяет имя приложения, которое запущено вредоносной программой, на предмет наличия в нем строки подключения к серверу управления и контроля.

  • Если использовалась стандартная утилита rundll32.exe, программа пытается загрузить параметры для подключения к серверу из параметра RValue раздела реестра SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion.
  • Если библиотека была запущена иным способом или параметр RValue не существует, настройки берутся из тела Taidoor.

Настройки, полученные тем или иным способом, расшифровываются алгоритмом AES в режиме ECB с ключом 2B7E151628AED2A6ABF7158809CF4F3C (представлен в шестнадцатеричном виде).

Затем Taidoor пытается подключиться к серверу управления. Полученные ранее параметры подключения могут содержать до 4 адресов серверов и до 3 портов на сервер. Также можно указать адрес и порт прокси-сервера HTTP. В исследуемом образце указаны сервер управления и порт, тогда как в 32-разрядной версии указаны два сервера управления и порт для каждого из них.

Подключение проходит по следующему алгоритму:

  1. Программа берет адрес и порт из конфигурации. Если в конфигурации указаны параметры прокси-сервера, то программа пытается подключиться к нему.
  2. Программа подключается к серверу управления или дает прокси-серверу соответствующую команду (при наличии параметров прокси и успешном подключении к нему).
  3. Программа отправляет на управляющий сервер массив из 263 символов, где: первые 3 символа — фиксированная строка F::;следующие 4 — количество миллисекунд, прошедших между стартом системы и запуском программы;оставшиеся 256 — строка 0x040x230x190x340xfe0xc1, зашифрованная при помощи алгоритма RSA_PKCS1v1.5 с использованием криптографически стойкого генератора псевдослучайных чисел (ГПСЧ).
  4. В ответ программа ожидает строку 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. Отдельные команды могут устанавливать или использовать глобальные переменные. Вот самые важные:

  • <имя_файла>;
  • <файловый_дескриптор>;
  • <идентификатор>;
  • <глобальный_массив>;
  • <дополнительное_имя_файла>;
  • <дополнительный_дескриптор_файла>.

Первый байт оставшейся части буфера, отправленный на обработку, идентифицирует одну из команд. Команды могут управлять подключением вредоносного ПО к серверу, обновлять его настройки, загружать и скачивать плагины и выполнять другие вредоносные действия.

Полный список команд

Часть обработчика открытия файла

Продолжение следует…

Источник