Как эффективно работать с Taidoor. Часть 2
Taidoor инициализирует два встроенных плагина:
- MyPlugCmd — для исполнения команд на машине. В качестве одного из аргументов при инициализации передается путь, по которому располагается копия
cmd.exe
. Если необходимый ключ вwin.ini
не найден или копирование сорвалось, передается пустая строка. - MyPlugInfo — для получения базовой информации о зараженной машине.
Вот как выглядит процесс загрузки нового плагина (функция представлена на рис. 3):
- Библиотека загружается в память.
- Программа проверяет плагин на наличие следующих экспортируемых функций:
Install,Uninstall,Proxy.
- Софтина вызывает функцию
Install
, передает в нее информацию о подключении к серверу управления. В качестве идентификатора выставляется полученное изInstall
значение. - После инициализации модуль добавляется в массив плагинов и, если имя файла соответствует схеме
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 байтам, то программа действуют по следующему алгоритму:
- Taidoor берет первые 256 байт и расшифровывает их на публичном ключе RSA c применением
RSA_PKCS1v1.5
. Полученные данные используются в качестве симметричного ключа для следующих данных. Использование подписи в данном случае бессмысленно, так как не защищает от перехвата управления. - Программа использует полученный ключ, чтобы расшифровать остаток сообщения алгоритмом
AES-128
в режимеECB
. - В первый байт полученного массива записывается идентификатор адресата команды: Если он равен 1, то остальные данные предназначаются для основного модуля и обрабатываются в отдельной функции.Все остальные значения обозначают тот или иной плагин. Программа ищет его и передает ему данные. Если такой плагин не найден, программа не делает ничего.
Возможности плагинов
Интегрированный модуль MyPlugCmd предназначен для запуска процессов и отправки команд с консоли. Во время запуска ему передается параметр, который можно сохранить в файле C: \ Windows \ win.ini.
Этот параметр указывает на копию cmd.exe
, которая используется для затруднения обнаружения программы.
Модуль хранит несколько переменных в своем теле. Вот наиболее важные из них:
<файловый_дескриптор>;
<имя_файла>;
<альтернативный_путь_к_cmd>;
<шелл>.
Также стоит отметить, что переменная «шелл» хранит информацию о запущенном процессе консоли, которая нужна для записи в поток ввода этого процесса и получения данных из потока вывода.
Полный список команд, выполняемых модулем MyPlugCmd
Интегрированный модуль MyPlugInfo может собирать и отправлять на сервер информацию об IP-адресах и MAC-адресах сетевых интерфейсов, текущем идентификаторе процесса и идентификаторах заражения. Он также знает, как выполнить команду 11 из главного обработчика.
Команды с идентификаторами
Индикаторы компрометации (IoC) обоих вариантов svchost.dll
Вывод
В качестве цели злоумышленник видит в Taidoor – удобный инструмент дистанционного управления для начального уровня с множеством возможностей динамического расширения. В то же время вредоносная программа имеет достаточно удобный интерфейс, чтобы запускать процессы и взаимодействовать с консолью.