мультитул для хакера / Блог компании BI.ZONE / Хабр

[ [ad_1]

Автор: Иннокентий Сенновский

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

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

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

Источник информации о зараженной системе, включая имена файлов, — отчет агентства кибербезопасности и безопасности инфраструктуры США (CISA) номер AR20-216A.

Taidoor в арсенале злоумышленника

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

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

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

Загрузчики Taidoor

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

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

Ниже мы поделимся результатами исследования 64-битной версии.

Функциональные возможности загрузчика

Файл 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 ключа реестра SOFTWAREMicrosoftWindows NTCurrentVersion. При их отсутствии или другом типе запуска программа использует стандартные настройки, сохраненные в ее теле.

Далее Taidoor расшифровывает настройки, которые включают в себя следующие данные:

  • адреса сервера управления (домены или IP-адреса и порты);
  • адрес прокси-сервера (необязательно);
  • настройки ожидания (время переподключения к серверу в различных ситуациях);
  • публичный RSA-ключ сервера.

Если указан прокси, программа пытается подключиться к серверу управления через него. При подключении Taidoor отправляет один зашифрованный по алгоритму RSA пакет с идентификатором и ждет от сервера ответ. Если попытка успешна, программа создает файл %ALLUSERSPROFILE%\Application Data\Microsoft\~svc_.TMp— вероятнее всего, это индикатор успешного заражения, который предотвращает повторную загрузку Taidoor.

Программа в ходе основного цикла инициализирует два плагина: один для сбора информации о системе, другой — для создания процессов и работы с командной строкой.

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

Вот какие действия может совершать злоумышленник в зараженной системе при помощи Taidoor в базовой комплектации (основной модуль и два встроенных плагина):

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

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

  • 1 — основной модуль;
  • 2 — плагин для старта процессов и работы с командной строкой;
  • 3 — плагин для получения дополнительной информации о системе.

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

  • Install — инициализация плагина и возвращение идентификатора плагина;
  • Proxy — передача плагину адресованного ему сообщения от сервера;
  • Uninstall — деинициализация плагина.

Taidoor применяет всевозможные методы, чтобы затруднить обнаружение и расследование атаки:

  • Вместо оригинального файла может использоваться копия cmd.exe.
  • Временные метки индикатора заражения %ALLUSERSPROFILE%\Application Data\Microsoft\~svc_.TMp заменяются временными метками системного файла C:WindowsSystem32services.exe, что осложняет определение даты заражения.
  • Файлы загружаемых плагинов удаляются после запуска.
  • До старта процессов плагин проверяет, нет ли на атакуемой машине антивируса Kaspersky.

Инициализация Taidoor

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

В начале процесса используется механизм для препятствования ручной отладке, в ходе которого программа:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Работа с временными метками

Перед соединением с сервером управления Taidoor открывает журнал событий системы и начинает по очереди читать записи. Особое внимание при этом программа обращает на записи типов 6005(«Начало работы службы журнала событий») и 6006 («Конец работы службы журнала событий») — они могут использоваться для определения времени работы машины. В рассмотренном экземпляре реализован проход по этим данным, но программа их не использует.

После подключения к серверу программа создает файл %ALLUSERSPROFILE%\Application Data\Microsoft\~svc_.TMp, а также обновляет его временные метки. Затем программа проверяет файл C:Windowswin.ini на наличие секции Micros с ключом source. Если ключ присутствует, утилита cmd.exe копируется по указанному в ключе адресу (в отчете CISA указан адрес c:tempcmd.exe).

Функциональные возможности основного модуля

Если в первом байте расшифрованного буфера, пришедшего от сервера, стоит 1, остаток буфера обрабатывается самой Taidoor. Отдельные команды могут устанавливать или использовать глобальные переменные. Вот самые важные из них:

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

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

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

На рис. 2 можно увидеть реализацию команды с идентификатором 15, которая запускает процесс открытия файла.


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

Работа плагинов

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

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

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

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

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


Рис. 3. Функция загрузки плагина

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

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

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

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

  1. Высчитывается размер данных с паддингом. Он будет равен длине сообщения + 4 байта — это значение округляется до 16, обязательно в большую сторону. Например, 16 → 20 → 32, a 12 → 16 → 32.
  2. Изначальный размер записывается в первые 4 байта нового массива с вычисленным размером. Сразу после него копируются передаваемые данные (т. е. по отступу 4). Лишние байты в конце массива заполняются нулями. Таким образом данные запаковываются для симметричного шифрования.
  3. Программа генерирует временный ключ из 16 символов нижнего регистра в латинском алфавите. Механизм генерации небезопасен, поскольку позволяет перебрать все возможные варианты за приемлемое время. К тому же если известно примерное время заражения, можно сократить количество вариантов.
  4. Программа шифрует созданный ключ при помощи алгоритма RSA_PKCS1v1.5 с использованием криптографически стойкого ГПСЧ на ключе, взятом из параметров.
  5. Программа шифрует запакованный массив при помощи алгоритма AES-128 в режиме ECB на временном ключе.
  6. Программа отправляет на сервер 4 байта полного размера пакета: 256 (размер зашифрованного ключа) + размер зашифрованных данных. Если удалось отправить размер, то программа последовательно посылает 256 байт зашифрованного ключа и зашифрованные данные.

Общение плагинов с сервером управления

Включив плагины, малварь начинает получать команды от сервера управления. Дальнейшие действия вредоноса зависят от команд.

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

Если сервер ответил пустым сообщением, программа это запоминает. Если сервер ответил так 300 раз подряд, программа завершает соединение и столько времени, сколько установлено в параметрах (в изученном образце это 30 минут), после чего пытается подключиться снова.

Если размер сообщения от сервера больше или равен 256 байтам, то программа действуют по следующему алгоритму:

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

Функциональные возможности плагинов

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

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

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

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

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

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

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

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



[ad_2]

Перейти в источник

0

Автор публикации

не в сети 24 часа

admin

500
Комментарии: 4Публикации: 1454Регистрация: 12-02-2020

Похожие статьи

О классах Program и Startup — инициализация ASP.NET приложения. Часть II: IWebHostBuilder и Startup / Хабр

[ [ad_1] Введение Это — продолжение статьи, первая часть которой была опубликована ранее. В той части был рассмотрен процесс инициализации, общий для любого приложения .NET…

0

Инвентаризация ИТ-активов штатными средствами Windows с минимальными правами доступа

[ [ad_1] Коллеги, в предыдущей статье мы обсудили принципы эффективной работы с событиями аудита ОС Windows. Однако, для построения целостной системы управления ИБ важно не…

0

Сборка ядра Linux 5.12.10 c LLVM 12 + Clang и LTO оптимизацией / Блог компании RUVDS.com / Хабр

[ [ad_1] Технический прогресс не стоит на месте, появляются новые компьютерные архитектуры, компиляторы становятся умнее и генерируют более быстрый машинный код. Современные задачи требуют все…

0

Цифровая трансформация офисной печати от зарождения до современных технологий

[ [ad_1] СодержаниеГлава №1. Краткая история зарождения офисной печати1.1. Пионеры1.2. ЭнтузиастыГлава №2. От CapEx к MPS и далее к DaaS2.1. Капитальные расходы (CapEx)2.2. Управляемые сервисы…

0

Ответы

Авторизация
*
*

Забыли пароль?

Регистрация
*
*
*
Генерация пароля