ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group

В посте расскажем, как кибергруппа OceanLotus (APT32 и APT-C-00) недавно использовала один из общедоступных эксплойтов к CVE-2017-11882, уязвимости повреждения памяти в Microsoft Office, и как вредоносное ПО группы обеспечивает персистентность в скомпрометированных системах, не оставляя следов. Дальше опишем, как с начала 2019 года группа использовала самораспаковывающиеся архивы для запуска кода.

OceanLotus специализируется на кибершпионаже, приоритетные цели – страны Юго-Восточной Азии. Атакующие подделывают документы, привлекающие внимание потенциальных жертв, чтобы убедить тех выполнить бэкдор, а также работают над развитием инструментария. Методы, используемые для создания приманок, варьируются в разных атаках – от файлов с «двойным расширением», самораспаковывающихся архивов, документов с макросами до известных эксплойтов.

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group

Использование эксплойта в Microsoft Equation Editor

В середине 2018 года OceanLotus провела кампанию с использованием уязвимости CVE-2017-11882. Один из вредоносных документов кибергруппы проанализировали специалисты 360 Threat Intelligence Center (исследование на китайском), включив детальное описание эксплойта. В посте ниже – обзор подобного вредоносного документа.

O le taimi muamua

O le pepa FW Report on demonstration of former CNRP in Republic of Korea.doc (SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3) аналогичен упомянутому в исследовании выше. Он интересен тем, что нацелен на пользователей, интересующихся камбоджийской политикой (CNRP – Партия национального спасения Камбоджи, распущенная в конце 2017 года). Несмотря на расширение .doc, документ имеет формат RTF (см. рисунок ниже), содержит мусорный код, а также искажен.

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group
Рисунок 1. «Мусор» в RTF

Несмотря на наличие искаженных элементов, Word успешно открывает этот RTF-файл. Как видно из рисунка 2, здесь структура EQNOLEFILEHDR со смещением 0xC00, за которой следует заголовок MTEF, а затем запись MTEF (рисунок 3) для шрифта.

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group
Рисунок 2. Значения записи FONT

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group
Ata 3. Формат записи FONT

Возможно переполнение в поле igoa, поскольку его размер не проверяется перед копированием. Слишком длинное имя запускает уязвимость. Как видно из содержимого RTF-файла (смещение 0xC26 на рисунке 2), буфер заполняется шелл-кодом, за которым следует фиктивная команда (0x90) и адрес возврата 0x402114. Адрес является диалоговым элементом в EQNEDT32.exe, указывающим на инструкцию RET. Это приводит к тому, что EIP указывает на начало поля igoa, содержащего шелл-код.

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group
Рисунок 4. Начало шелл-кода эксплойта

РђРґСвРμСлу 0x45BD3C хранит переменную, которая разыменовывается, пока не достигнет указателя на текущую загруженную структуру MTEFData. Здесь находится оставшаяся часть шелл-кода.

Назначение шелл-кода – выполнение второго фрагмента шелл-кода, встроенного в открытый документ. Сначала исходный шелл-код пытается найти дескриптор файла открытого документа, перебирая все дескрипторы системы (NtQuerySystemInformation с аргументом SystemExtendedHandleInformation) и проверяя, соответствуют ли PID дескриптора и PID faiga WinWord и был ли документ открыт с маской доступа – 0x12019F.

Чтобы подтвердить обнаружение правильного дескриптора (а не дескриптора другого открытого документа), содержимое файла отображается с помощью функции CreateFileMapping, и шелл-код проверяет, соответствуют ли последние четыре байта документа «yyyy» (метод Egg Hunting). Как только будет обнаружено совпадение, документ копируется во временную папку (GetTempPath) E faapefea ole.dll. Затем читаются последние 12 байт документа.

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group
Рисунок 5. Маркеры конца документа

32-битное значение между маркерами AABBCCDD и yyyy – это смещение следующего шелл-кода. Он вызывается с помощью функции CreateThread. Извлечен тот же шелл-код, что использовался группой OceanLotus ранее. Скрипт эмуляции Python, который мы выпустили в марте 2018 года, все еще работает для дампа второго этапа.

Laasaga lona lua

Извлечение компонентов

Имена файлов и каталогов выбираются динамически. Код случайным образом выбирает имя исполняемого или DLL-файла в C:Windowssystem32. Затем он делает запрос к своим ресурсам и извлекает поле FileDescription для использования в качестве имени папки. Если это не работает, код случайным образом выбирает имя папки из каталогов %ProgramFiles% poʻo C:Windows (из GetWindowsDirectoryW). Он избегает использования имени, которое может конфликтовать с существующими файлами, и следит за тем, чтобы оно не содержало следующие слова: windows, Microsoft, desktop, system, system32 poʻo syswow64. Если каталог уже существует, к имени добавляется «NLS_{6 символов}».

alagāʻoa 0x102 анализируется и файлы сбрасываются в %ProgramFiles% poʻo %AppData%, в папку, выбранную случайным образом. Время создания изменено, чтобы иметь те же значения, что и у kernel32.dll.

Например, вот папка и список файлов, созданных путем выбора исполняемого файла C:Windowssystem32TCPSVCS.exe в качестве источника данных.

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group
Рисунок 6. Извлечение различных компонентов

Структура ресурса 0x102 в дроппере достаточно сложна. В двух словах, он содержит:
— Имена файлов
— Размер и содержание файлов
— Формат сжатия (COMPRESSION_FORMAT_LZNT1, используемый функцией RtlDecompressBuffer)

Первый файл сбрасывается как TCPSVCS.exe, являющийся легитимным AcroTranscoder.exe (согласно FileDescription, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3).

Возможно, вы заметили, что размер некоторых DLL-файлов превышает 11 Мб. Это связано с тем, что большой непрерывный буфер случайных данных размещается внутри исполняемого файла. Не исключено, что это способ избежать обнаружения некоторыми продуктами для безопасности.

Обеспечение персистентности

alagāʻoa 0x101 в дроппере содержит два 32-битных целых числа, которые определяют, каким образом следует обеспечить персистентность. Значение первого указывает, как вредоносная программа будет сохранять персистентность без прав администратора.

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group
Таблица 1. Механизм персистентности без прав администратора

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

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group
Таблица 2. Механизм персистентности с правами администратора

Имя службы – это имя файла без расширения; отображаемое имя – имя папки, но если оно уже существует, к нему добавляется строка “Revision 1” (число увеличивается до тех пор, пока не будет найдено неиспользуемое имя). Операторы позаботились о том, чтобы персистентность через службу была устойчивой – в случае сбоя служба должна быть перезапущена через 1 секунду. Затем значению WOW64 нового ключа реестра службы присваивается значение 4, что указывает на то, что это 32-разрядная служба.

Запланированное задание создается через несколько СОМ интерфейсов: ITaskScheduler, ITask, ITaskTrigger, IPersistFile и ITaskScheduler. По сути, вредоносная программа создает скрытую задачу, устанавливает информацию об учетной записи вместе с информацией о текущем пользователе или администратора и затем задает триггер.

Это ежедневное задание с продолжительностью 24 часа и интервалами между двумя выполнениями в 10 минут, что означает, что оно будет выполняться постоянно.

Вредоносный бит

В нашем примере исполняемый файл TCPSVCS.exe (AcroTranscoder.exe) является легитимным ПО, загружающим DLL, которые сбрасываются вместе с ним. В этом случае интерес представляет Flash Video Extension.dll.

Его функция DLLMain просто вызывает еще одну функцию. Присутствуют некоторые нечеткие предикаты:

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group
Рисунок 7. Нечеткие предикаты

После этих вводящих в заблуждение проверок код получает раздел .text faila TCPSVCS.exe, меняет его защиту на PAGE_EXECUTE_READWRITE и перезаписывает его, добавляя фиктивные инструкции:

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group
Рисунок 8. Последовательность инструкций

В конце к адресу функции FLVCore::Uninitialize(void), экспортируемой Flash Video Extension.dll, добавляется инструкция CALL. Это означает, что после загрузки вредоносной DLL, когда среда выполнения вызывает WinMain в TCPSVCS.exe, указатель инструкции будет указывать на NOP, в результате вызывая FLVCore::Uninitialize(void), следующий этап.

Функция просто создает мьютекс, начинающийся с {181C8480-A975-411C-AB0A-630DB8B0A221}, за которым следует текущее имя пользователя. Затем она читает сброшенный файл с расширением *.db3, который содержит позиционно-независимый код, и использует CreateThread для выполнения содержимого.

Содержимое файла *.db3 представляет собой шелл-код, который обычно использует группа OceanLotus. Мы вновь успешно распаковали его полезную нагрузку, используя скрипт эмулятора, который мы опубликовали i luga ole GitHub.

Скрипт извлекает финальный этап. Этот компонент является бэкдором, который мы уже проанализировали в предыдущем исследовании OceanLotus. Это можно определить по GUID {A96B020F-0000-466F-A96D-A91BBF8EAC96} бинарного файла. Конфигурация вредоносного ПО все еще зашифрована в РЕ ресурсе. Он имеет примерно ту же конфигурацию, но C&C-серверы отличаются от прежних:

- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz

Группа OceanLotus снова демонстрирует сочетание разных техник, чтобы избегать обнаружения. Они вернулись с «доработанной» схемой процесса заражения. Выбирая случайные имена и заполняя исполняемые файлы случайными данными, они уменьшают число надежных IoC (на основе хешей и имен файлов). Более того, благодаря использованию сторонней загрузки DLL, атакующим нужно лишь удалить легитимный бинарник AcroTranscoder.

Самораспаковывающиеся архивы

После RTF-файлов группа перешла на самораспаковывающиеся (SFX) архивы с распространенными иконками документов, чтобы еще больше запутать пользователя. Об этом писали Threatbook (ссылка на китайском). После запуска сбрасываются самораспаковывающиеся RAR-файлы и исполняются DLL с расширением .ocx, финальная полезная нагрузка которых ранее была задокументирована {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll. С середины января 2019 года OceanLotus повторно используют эту технику, но со временем меняют некоторые конфигурации. В данном разделе мы расскажем о технике и изменениях.

Создание приманки

O le pepa THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB) впервые найден в 2018 году. Этот SFX файл создан с умом – в описании (Faʻamatalaga) сказано, что это изображение JPEG. Скрипт SFX выглядит следующим образом:

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group
Рисунок 9. Команды SFX

Вредоносная программа сбрасывает {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC), а также картинку 2018 thich thong lac.jpg.

Изображение-приманка выглядит следующим образом:

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group
Рисунок 10. Изображение-приманка

Возможно, вы заметили, что первые две строки в скрипте SFX дважды вызывают ОСХ файл, но это не ошибка.

{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)

Поток управления ОСХ файла очень похож на другие компоненты OceanLotus – много последовательностей команд JZ/JNZ и PUSH/RET, чередующихся с мусорным кодом.

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group
Рисунок 11. Обфусцированный код

После фильтрации мусорного кода экспорт DllRegisterServer, вызываемый regsvr32.exe, fa'apea:

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group
Рисунок 12. Основной код установщика

По сути, при первом вызове DllRegisterServer экспорт устанавливает значение реестра HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model для зашифрованного оффсета в DLL (0x10001DE0).

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

Шелл-код – тот же загрузчик РЕ, используемый в прошлых кампаниях OceanLotus. Его можно эмулировать с помощью нашего скрипта. В итоге он сбрасывает db293b825dcc419ba7dc2c49fa2757ee.dll, загружает его в память и выполняет DllEntry.

DLL извлекает содержимое своего ресурса, расшифровывает (AES-256-CBC) и распаковывает (LZMA) его. Ресурс имеет специфический формат, который легко декомпилировать.

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group
Рисунок 13. Структура конфигурации установщика (KaitaiStruct Visualizer)

Конфигурация задана в явном виде – в зависимости от уровня привилегий бинарные данные будут записываться в %appdata%IntellogsBackgroundUploadTask.cpl poʻo %windir%System32BackgroundUploadTask.cpl (po o SysWOW64 для 64-битных систем).

Далее персистентность обеспечивается путем создания задачи с именем BackgroundUploadTask[junk].jobfea [junk] представляет собой набор байтов 0x9D и 0xA0.

Имя приложения задачи %windir%System32control.exe, а значение параметра – путь к выгруженному бинарному файлу. Скрытая задача запускается каждый день.

Конструктивно файл CPL представляет собой DLL с внутренним именем ac8e06de0a6c4483af9837d96504127e.dll, которая экспортирует функцию CPlApplet. Этот файл расшифровывает свой единственный ресурс {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll, затем загружает эту DLL и вызывает ее единственный экспорт DllEntry.

Файл конфигурации бэкдора

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

ESET: polokalame fou tu'uina atu i tua mo le OceanLotus cyber group
Рисунок 14. Структура конфигурации бэкдора (KaitaiStruct Visualizer)

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

Первый элемент бинарного массива содержит DLL (HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759), идентифицированную Tencent. Но поскольку имя экспорта было удалено из бинарного файла, хеши не совпадают.

Su'esu'ega Faaopoopo

Собирая образцы, мы обратили внимание на некоторые характеристики. Только что описанный образец появился примерно в июле 2018 года, а другие подобные ему – совсем недавно, в середине января – начале февраля 2019 года. В качестве вектора заражения использовался архив SFX, сбрасывающий легитимный документ-приманку и вредоносный файл ОСХ.

Несмотря на то, что OceanLotus используют поддельные временные метки, мы заметили, что временные метки файлов SFX и OCX всегда одинаковые (0x57B0C36A (08/14/2016 @ 7:15pm UTC) и 0x498BE80F (02/06/2009 @ 7:34am UTC) соответственно). Вероятно, это указывает на то, что у авторов есть некий «конструктор», который использует одни и те же шаблоны и просто меняет некоторые характеристики.

Среди документов, которые мы изучили с начала 2018 года, встречаются различные названия, указывающие на интересующие атакующих страны:

— The New Contact Information Of Cambodia Media(New).xls.exe
— 李建香 (个人简历).exe (fake pdf document of a CV)
— feedback, Rally in USA from July 28-29, 2018.exe

С момента обнаружения бэкдора {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll и публикации его анализа несколькими исследователями мы наблюдали некоторые изменения в данных конфигурации вредоносных программ.

Во-первых, авторы начали удалять имена из вспомогательных DLL DLLs (DNSprov.dll и две версии HttpProv.dll). Затем операторы прекратили упаковывать третью DLL (вторая версия HttpProv.dll), выбрав встраивание только одной.

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

  • изменен раздел реестра AppX (см. IoCs)
  • строка кодирования мьютекса («def», «abc», «ghi»)
  • numera uafu

Наконец, во всех новых проанализированных версиях появились новые C&C, перечисленные в разделе IoCs.

sailiiliga

OceanLotus продолжает развиваться. Кибергруппа сфокусирована на доработке и расширении инструментария и приманок. Авторы маскируют вредоносные полезные нагрузки с помощью привлекающих внимание документов, тема которых актуальна для предполагаемых жертв. Они разрабатывают новые схемы, а также используют общедоступные инструменты, например, эксплойт Equation Editor. Более того, они совершенствуют инструменты, чтобы уменьшить количество артефактов, остающихся на машинах жертв, тем самым снижая шанс на обнаружение антивирусным ПО.

Faʻailoga o le fetuʻunaʻiga

Индикаторы компрометации, а также атрибуты MITRE ATT&CK доступны на Welivesecurity и i luga ole GitHub.

puna: www.habr.com

Faaopoopo i ai se faamatalaga