Titanium: APT-группа Platinum снова атакует

Содержание 

Platinum является одной из самых технологически продвинутых APT-группировок и традиционно действует в Азиатско-Тихоокеанском регионе (APAC). Недавно мы обнаружили, что группа использует новый инструмент — бэкдор, который мы назвали Titanium (таким паролем был зашифрован один из SFX-архивов, который был обнаружен во время анализа). Говоря об атаке в целом, Titanium — это финальный этап заражения в многоуровневой схеме установки троянца на атакуемую систему. Все этапы успешно скрываются на компьютере жертвы благодаря тому, что каждый из них выдаёт себя за популярное ПО (антивирусные продукты, утилит из дистрибутива с аудио-драйверами, программы для создания DVD-видео).

География атакованных систем

Согласно нашему исследованию, основными целями новой кампании APT Platinum были организации, расположенные в Южной и Юго-восточной Азии.

Вступление

Как уже было сказано, Titanium APT представляет собой последовательность из нескольких этапов внедрения вредоносного ПО на компьютер жертвы, где конечным результатом атаки является троянец-бэкдор. В каждом конкретном случае для осуществления атаки обычно используется следующий набор вредоносного ПО:

  1. Эксплойт, позволяющий исполнять вредоносный код с правами SYSTEM.
  2. Шеллкод, –который должен загрузить на атакуемую систему следующий компонент схемы заражения.
  3. Загрузчик, скачивающий защищенный паролем SFX-архив с командного сервера (C&C). Архив содержит файлы, необходимые для добавления задачи в планировщик задач Windows. Благодаря созданной задаче, зловред закрепляется в системе
  4. Защищенный паролем SFX-архив, содержащий установщик троянца-бэкдора
  5. Скрипт-установщик бэкдора в систему (PowerShell)
  6. DLL-библиотека COM-объекта (загрузчик бэкдора)
  7. Собственно, сам троянец-бэкдор (Titanium)

Вектор заражения

Мы считаем, что для распространения на компьютеры жертв Titanium использует локальные веб-ресурсы.

1 – Шеллкод

Ещё одним известным способом распространения Titanium является использование шеллкода, который внедряется в память какого-либо процесса. В рассматриваемой кампании использовался системный процесс winlogon.exe. К сожалению, нам не известно, каким образом шеллкод попадал на компьютеры жертв.

2 – DLL-обёртки

Атакующие активно использовали различные типы «обёрток». Каждая из них обычно являлась DLL-библиотекой COM-объекта с соответствующими экспортируемыми функциями. Задачей данных DLL является расшифровка и загрузка в оперативную память зашифрованных файлов – полезной нагрузки, ранее распакованной или загруженной из интернета. Далее происходит перенаправление вызовов функций библиотеки-«обёртки» на экспортируемые функции полезной нагрузки.

Имеется также и другой тип DLL-«обёрток», который нужен лишь для создания новых процессов с аргументами командной строки, переданными в экспортируемую функцию библиотеки-«обёртки».

3 – Установщик задачи в планировщик задач Windows (SFX-архив)

Представляет собой защищенный паролем SFX-архив, который скачивается с C&C через BITS-загрузчик. Пароль к архиву жёстко задан в коде загрузчика, и передаётся при запуске самораспаковывающегося архива в качестве аргумента командной строки с помощью ключа «-p«.

Главной особенностью данного архива является то, что он содержит в себе код открытого ПО cURL, скомпилированный в виде DLL-библиотеки.

В результате запуска архива в планировщике задач Windows появится задача, благодаря которой зловред сможет оставаться в системе после перезагрузки.

Установщик троянца-бэкдора (SFX-архив)

Собственно, сам бэкдор использует самораспаковывающийся архив, который может быть запущен из командной строки с указанием пароля для его распаковки. Все примеры здесь и далее будут указаны для варианта с ПО для создания DVD-видео, но схема установки остаётся такой же и для других вариантов.

BITS-загрузчик

Этот компонент использовался для скачивания зашифрованных файлов с командного сервера злоумышленников и их последующего запуска.

Описание шеллкода

Шеллкод представляет из себя позиционно-независимый код (PIC), располагающийся в памяти определённого процесса, и не требует каких-либо предварительно загруженных библиотек, кроме Kernel32.dll. Задачами шеллкода являются установка соединения с C&C злоумышленников, загрузка зашифрованной полезной нагрузки (SFX-архива), последующая ее расшифровка и запуск с использованием жёстко заданного в коде пароля. Обычно командная строка в результате выглядит так:

Описание BITS-загрузчика

BITS-загрузчик представляет из себя DLL-библиотеку с единственной экспортируемой функцией: GetVersionInfoA. Единственной задачей библиотеки является скачивание зашифрованных файлов с C&C злоумышленников и их запуск.

Последовательность исполнения

Первое, что делает загрузчик — это проверяет, запущен ли процесс, в памяти которого он находится, с правами SYSTEM. Если проверка прошла успешно, загрузчик с использованием WMI запускает командую строку, которая была передана шеллкодом на предыдущем этапе. В противном случае загрузчик проверят наличие в указанных аргументах командной строки следующих ключей:

Ключ Описание параметра
-c URL Задаёт URL, куда будет отправлена информация о системе.
-t STRING Дополнительная строка, которая будет добавлена к строке запроса к C&C злоумышленников.
-u URL URL-адрес сервера, на который будут отправляться различные запросы и подтверждения во время работы загрузчика.
-br GUID Прекращение скачивания полезной нагрузки. Параметр GUID должен содержать корректный идентификатор созданной BITS-задачи.

Если указан хотя бы один из этих аргументов, загрузчик соберёт и отправит информацию об установленных защитных продуктах на C&C.

После этого загрузчик отправляет запрос на скачивание полезной нагрузки, в ответ C&C-сервер злоумышленников отдаёт файл, который будет загружен в каталог %USERPROFILE%.

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

URL для запроса полезной нагрузки

Адрес по умолчанию: http://70.39.115.196/payment/confirm.gif

Строка запроса обычно выглядит так:

  • http://70.39.115.196/payment/confirm.gif?f=1 (x86)
  • http://70.39.115.196/payment/confirm.gif?f=2 (x64)

Расшифровка и запуск полезной нагрузки

Так выглядит структура зашифрованного файла:

Загрузчик считает хэш MD5 от поля data, сравнивает результат с содержимым поля hash и, если контрольная сумма совпадает, выполняет следующие действия:

  • Добавляет расширение DLL или EXE, в зависимости от типа загруженного файла
  • Сохраняет загруженный файл в каталоге %TMP% с именем %(SystemTimeAsFileTime.dwLowDateTime).%TMP

Далее загрузчик формирует аргументы командной строки для загруженного файла. В случае, если загруженный файл является DLL-библиотекой, командная строка будет выглядеть так:

После этого загрузчик самоудаляется, используя следующую команду:

Запуск файла

Для запуска загруженного файла, загрузчик использует WMI-классы, такие как Win32_ProcessStartup, Win32_Process.

Скачивание файла с использованием BITS

Для скачивания файла загрузчик использует BITS-службы Windows и COM-интерфейс IBackgroundCopyManager. Загрузчик создаёт задачу с именем «Microsoft Download», указывая затем URLы скачиваемого и локального файлов, а также необходимые таймауты.

Установка задачи для планировщика задач (SFX-архив с cURL)

Архив содержит файлы:

Имя Описание
p.bat Запускает cURL и обфусцированные ps1-скрипты
c.dll cURL, скомпилированный в виде DLL (7.50.3)
f1.ps1 Будет запущен после первого запроса к CC. Расшифровывает x.dat
f2.ps1 Будет запущен после второго запроса к CC. Расшифровывает b.dat
e.ps1 Содержит код, который генерирует строку для поля Authorization в HTTP-заголовке
h.ps1 Получает информацию о настройках прокси в системе
e.dll DLL-библиотека с единственной экспортируемой функцией. Вызывает CreateProcessA

Загружаются файлы:

Исходный файл Загруженный и расшифрованный файл Описание
x.dat u.xml Файл, зашифрованный с помощью AES (f1.ps1 содержит алгоритм расшифровки)
b.dat i.bat Файл, зашифрованный с помощью AES (тот же алгоритм шифрования)

Результат:

Имя Описание
i.bat Выполняет установку задачи для планировщика задач Windows

Процесс, запускающий SFX-архив (предыдущий этап), должен указать следующие аргументы командой строки:

Аргумент Описание
-pKEY Аргумент, содержащий ключ для распаковки SFX-архива
-t ACCEPTANCE_ID_STRING Аргумент со строкой — AcceptanceID (используется в запросах к C&C)

p.bat

Запускает скрипт h.ps1 для получения информации о используемом в системе прокси-сервере. Далее запускает скрипт e.ps1, чтобы сгенерировать SystemID, который будет использоваться в запросах к C&C.

Для отправки запроса используется c.dll — cURL DLL-библиотека с единственной экспортируемой функцией DllGetClassObject.

Запрос 1

Аргументы командной строки:

Где:

Параметр Описание
%pp% Прокси-сервер, используемый в системе
%output% SystemID
%p3% AcceptanceID

Этот запрос скачивает файл x.dat, который затем расшифровывается с помощью скрипта f1.ps1 в файл u.xml. После этого p.bat выполняет следующий запрос.

Запрос 2

Аргументы командной строки:

Этот запрос скачивает файл b.dat, который затем расшифровывается с помощью скрипта f2.ps2 в файл i.bat (используется тот же алгоритм дешифрования).

Установка задачи в планировщик Windows

После расшифровки файла в командной строке запускается следующая команда, которая устанавливает задачу в планировщик:

i.bat использует предыдущий расшифрованный файл u.xml в качестве дескриптора задачи для планировщика.

Установщик троянца-бэкдора

Архив распаковывает содержащиеся в нём файлы в следующий каталог (в варианте с ПО для создания DVD-видео):

Содержимое архива:

Имя Описание
BabyBoyStyleBackground.wmv Файл конфигурации для бэкдора
DvDupdate.dll Загрузчик троянца-бэкдора
nav_downarrow.png Троянец-бэкдор
psinstrc.ps1 Скрипт-установщик загрузчика

Единственное отличие варианта с использованием ПО настройки аудио-драйверов от варианта с использованием имён от ПО для создания DVD-видео заключается только в том, что злоумышленники используют известные CLSID другого ПО для подмены загружаемых библиотек на вредоносные.

psinstrc.ps1

Представляет из себя установочный скрипт, который регистрирует библиотеку DvDupdate.dll как сервис «DVDMaker Help» и устанавливает точку входа (основную исполняемую функцию) как DllGetClassObject. Это требует прав администратора для корректного исполнения.

Скрипт также содержит конфигурируемые параметры, поэтому злоумышленник может легко изменять их под каждую атакуемую систему.

В итоге, существует два способа установки загрузчика для бэкдора:

  • Системная служба с экспортируемой функцией DllGetClassObject в качестве ServiceMain
  • COM-библиотека для подмены ей других известных COM-объектов (CLSID Hijacking)

DvDupdate.dll

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

Весь код обфусцирован посредством вызовов различных функций Windows API с использованием циклов с большим количеством итераций. Это сделано не с целью сделать задачу реверс-инженера сложнее, а с целью обхода некоторых антивирусных движков.

Первой вызываемой функцией данной библиотеки всегда будет DllGetClassObject.

DllGetClassObject

Загрузчик создаёт поток, который расшифровывает полезную нагрузку, восстанавливает MZ и PE тэги и загружает в память основного исполняемого файла бэкдор Titanium. Содержимое зловреда зашифровано с помощью AES 256 CBC, а ключ расшифровки жёстко задан в теле загрузчика, как и другие зашифрованные строки. Как уже было сказано, тело троянца не содержит ‘MZ’ и ‘PE’ тегов, что позволяет ему обходить некоторые защитные продукты. После инициализации бэкдора в памяти загрузчик вызывает его экспортируемую функцию с ординалом 1.

nav_downarrow.png

Представляет собой DLL-файл, содержащий основной функционал Titanium. Вредоносный код содержится только в экспортируемой функции с ординалом 1.

nav_downarrow.png — Ординал 1 (Основная функция троянца)

Первое, что делает данная функция, это расшифровка другого зашифрованного файла – файла конфигурации – из SFX-архива:

Файл конфигурации разбит на блоки, и каждый блок имеет свой индекс. Бэкдор использует эти индексы для доступа к конкретным элементам. Файл конфигурации содержит:

  • Адрес командного сервера
  • Ключ шифрования трафика
  • UserAgent
  • Другие менее важные параметры

Основной поток

Данный поток отвечает за получение команд от C&C и отправку ответов. При формировании запроса используются параметр UserAgent из конфигурации и специальный алгоритм генерации cookie-строки. Также, зловред может использовать системные настройки прокси из Internet Explorer.

В ответ на данный запрос командный сервер отдаёт PNG-файл, который содержит спрятанные с помощью стеганографии данные. Эти данные зашифрованы тем же ключом, что используется в запросах к C&C. Расшифрованные стеганографические данные содержат команды для бэкдора и аргументы к ним.

Примеры PNG-изображений:

Командный процессор (описание команд)

Бэкдор может принимать множество различных команд, приводим только самые интересные из них:

  • Чтение любого файла на компьютере жертвы и отправка его на C&C.
  • Загрузка (или удаление) файла на компьютер жертвы.
  • Загрузка и запуск файла.
  • Запуск командной строки с последующей отправкой результатов работы на C&C.
  • Обновление параметров конфигурации (кроме ключа шифрования трафика).
  • Интерактивный режим. Позволяет принимать от злоумышленника данные для ввода в консоль с отправкой результатов на сервер.

Выводы

Titanium представляет собой довольно сложную и многоуровневую схему из загружаемых и устанавливаемых на компьютеры жертв компонентов. такой подход требует хорошей координации действий между каждым из компонентов. Вдобавок, ни один из загружаемых и устанавливаемых на файловую систему компонентов не может быть определён как вредоносный, т.к. авторы Titanium применяют шифрование для каждого из загружаемых на диск файла в сочетании с «fileless» техниками запуска кода. Другим ключевым моментом является использование имён каталогов и файлов реально существующего и популярного ПО.

Публикации на схожие темы

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *