Как эффективно приенять Taidoor

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

Taidoor — это очень эффективна вирусная программа класса RAT (remotes access trojan), которая предназначена для использования без закрепления в системе. С помощью модульной системы, реализованной в Taidoor можно осуществлять доставку на зараженную территорию только тех модулей, которые необходимы для достижения целей конкретной атаки. В данной статье мы разберем как эффективно работать с Taidoor.

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

Taidoor в арсенале хакера

Два независимых модуля позволяют собрать всю необходимую информацию о зараженной системе. Если необходимо, то с сервера управления можно отправить дополнительные модули.

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

Загрузчики Taidoor

Основными загрузчиками Taidoor являются rasautoex.dll и ml.dll, которые имеют идентичную функциональность. Они различаются только битовой глубиной: первая — это 64-битная версия зловреда, вторая — 32-битная версия. Их свойства приведены в таблице 1.

Табл. 1. Свойства загрузчиков Taidoor

Как эффективно работать с 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

Как эффективно работать с 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

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

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

Перед началом каждого из основных циклов 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. Отдельные команды могут устанавливать или использовать глобальные переменные. Вот самые важные:

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

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

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

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

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

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

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

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

Плагины

Инициализация плагинов

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 – удобный инструмент дистанционного управления для начального уровня с множеством возможностей динамического расширения. В то же время вредоносная программа имеет достаточно удобный интерфейс, чтобы запускать процессы и взаимодействовать с консолью.

 

 

 

 

 

 

 

 

 

 

 

 

Click to rate this post!
[Total: 0 Average: 0]

Leave a reply:

Your email address will not be published.