June 14, 2021

Как эффективно работать с Taidoor. Часть 2

Taidoor инициализирует два встроенных плагина:

  • MyPlugCmd — для исполнения команд на машине. В качестве одного из аргументов при инициализации передается путь, по которому располагается копия cmd.exe. Если необходимый ключ в win.ini не найден или копирование сорвалось, передается пустая строка.
  • MyPlugInfo — для получения базовой информации о зараженной машине.

Вот как выглядит процесс загрузки нового плагина (функция представлена на рис. 3):

  1. Библиотека загружается в память.
  2. Программа проверяет плагин на наличие следующих экспортируемых функций: Install,Uninstall,Proxy.
  3. Софтина вызывает функцию Install, передает в нее информацию о подключении к серверу управления. В качестве идентификатора выставляется полученное из Install значение.
  4. После инициализации модуль добавляется в массив плагинов и, если имя файла соответствует схеме uaq*.dll, файл удаляется.
Функция загрузки плагина

Каждый модуль может быть деинициализирован, чтобы предоставить место другому.

В случае получения команды от управляющего сервера, Taidoor проверяет первый байт, который указывает на место назначения: команда может быть направлена либо для основного модуля, либо для одного из плагинов. После того, как команда была передана плагину, остальной текст сообщения передаётся прокси-функции плагина.

Функция периодического входа на сервер запускается после активации плагинов Taidoor. В этой функции программа отправляет сообщение \ x01 \ xff на C&C сервер каждые 10 секунд.

Все обращения к серверу здесь и далее создаются по следующему алгоритму:

  • Высчитывается размер данных с паддингом. Он будет равен длине сообщения + 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 байтам, то программа действуют по следующему алгоритму:

  1. Taidoor берет первые 256 байт и расшифровывает их на публичном ключе RSA c применением RSA_PKCS1v1.5. Полученные данные используются в качестве симметричного ключа для следующих данных. Использование подписи в данном случае бессмысленно, так как не защищает от перехвата управления.
  2. Программа использует полученный ключ, чтобы расшифровать остаток сообщения алгоритмом AES-128 в режиме ECB.
  3. В первый байт полученного массива записывается идентификатор адресата команды: Если он равен 1, то остальные данные предназначаются для основного модуля и обрабатываются в отдельной функции.Все остальные значения обозначают тот или иной плагин. Программа ищет его и передает ему данные. Если такой плагин не найден, программа не делает ничего.

Возможности плагинов

Интегрированный модуль MyPlugCmd предназначен для запуска процессов и отправки команд с консоли. Во время запуска ему передается параметр, который можно сохранить в файле C: \ Windows \ win.ini. Этот параметр указывает на копию cmd.exe, которая используется для затруднения обнаружения программы.

Модуль хранит несколько переменных в своем теле. Вот наиболее важные из них:

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

Также стоит отметить, что переменная «шелл» хранит информацию о запущенном процессе консоли, которая нужна для записи в поток ввода этого процесса и получения данных из потока вывода.

Полный список команд, выполняемых модулем MyPlugCmd

Интегрированный модуль MyPlugInfo может собирать и отправлять на сервер информацию об IP-адресах и MAC-адресах сетевых интерфейсов, текущем идентификаторе процесса и идентификаторах заражения. Он также знает, как выполнить команду 11 из главного обработчика.

Команды с идентификаторами

Индикаторы компрометации (IoC) обоих вариантов svchost.dll

Вывод

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

Источник