ESET Eesti Blogi

Фейк или Фейк: Идем в ногу с ловушками OceanLotus

В этой статье мы сначала расскажем, как группа OceanLotus (также известная как APT32 и APT-C-00) недавно использовала один из общедоступных эксплойтов для CVE-2017-11882, уязвимости повреждения памяти в Microsoft Office. Также мы объясним, как вредоносное ПО OceanLotus обеспечивает постоянство в системе после компрометации.КонтекстСледить за действиями OceanLotus — это как путешествовать по миру обмана. Эта группа известна тем, что заманивает жертв, подделывая привлекательные документы, чтобы побудить потенциальных жертв запустить бэкдор группы. Они постоянно придумывают новые идеи для разнообразия своего набора инструментов. Техники, используемые дляКратко об эксплойте Equation EditorВ середине 2018 года OceanLotus провела кампанию, используя документы, злоупотребляющие слабостью, выявленной уязвимостью CVE-2017-11882. Действительно, было доступно несколько Proof-of-Concept. Уязвимость находится в компоненте, отвечающем за отображение и редактирование математических уравнений. Один изПервый этапЭтот документ FW Report on demonstration of former CNRP in Republic of Korea.doc ( SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3 ) похож на упомянутый в статье выше. Он также интересен, так как действительно нацелен на людей, интересующихся камбоджийской политикой (CNRP – Cambodia National R

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

Рисунок 2 — Значения записи FONT

Рисунок 3 — Формат записи FONTПереполнение в поле имени возможно, потому что его размер не проверяется перед копированием. Слишком длинное имя вызывает уязвимость. Как видно из содержимого RTF-файла (смещение 0xC26 на Рисунке 2), буфер заполнен shellcode, за которым следует NOP (0x90) слайд и адрес возврата 0x402

Рисунок 4 — Начало shellcode эксплойтаАдрес 0x45BD3C хранит переменную, которая разыменовывается до тех пор, пока не достигнет указателя на текущую загруженную структуру MTEFData. Там находится остальной shellcode.Цель shellcode — выполнить второй shellcode, встроенный в открытый документ. Сначала исходный shellcode пытается найти хэндл открытого файла документа, перебирая все хэндлы системы ( NtQuerySystemInformation с SystemExtendedHandleInformation

Рисунок 5 — Маркеры в конце документа32-битное значение между маркерами AABBCCDD и yyyy — это смещение к следующему shellcode. Он вызывается с помощью функции CreateThread. Извлеченный shellcode — это тот же, который группа OceanLotus использует уже довольно давно. Скрипт Python-эмулятора, который мы выпустили в марте 2018 года, все еще работает дляВторой этапИзвлечение компонентовИмена файлов и каталоги выбираются динамически. Код случайным образом выбирает имя исполняемого файла или DLL из C:Windowssystem32. Затем он запрашивает его ресурсы и извлекает поле FileDescription для использования в качестве имени папки. Если это не удается, код случайным образом выбираетРесурс 0x102 этапа анализируется, и файлы помещаются либо в %ProgramFiles%, либо в %AppData% в случайном выбранном каталоге. Время создания изменяется так, чтобы оно совпадало со временем kernel32.dll.Например, вот папка и список файлов, созданных путем выбора исполняемого файла C:Windowssystem32TCPSVCS.exe в качестве источника данных.

Рисунок 6 — Извлечение различных компонентовСтруктура ресурса 0x102 в дроппере довольно сложна. В общих чертах, она содержит:имена файлов размер и содержимое файлов формат сжатия ( COMPRESSION_FORMAT_LZNT1, используемый функцией RtlDecompressBuffer)Первый файл помещается как TCPSVCS.exe, который на самом деле является законным AcroTranscoder.exe от Adobe (согласно его FileDescription, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3).Вы могли заметить, что размер некоторых DLL превышает 11 МБ. Это связано с тем, что внутри исполняемого файла находится большой непрерывный буфер случайных данных. Это, возможно, способ уклониться от обнаружения некоторыми продуктами безопасности.Обеспечение постоянстваРесурс 0x101 дроппера содержит два 32-битных целых числа, которые определяют, как должно быть реализовано постоянство. Значение первого указывает, как вредоносное ПО будет обеспечивать постоянство без прав администратора.

Первое значение Цель постоянства 0 Не обеспечивать постоянство 1 Запланированная задача для текущего пользователя 2 (HKLM|HKCU)SOFTWAREMicrosoftWindowsCurrentVersionRun 3 Создание ярлыка (с расширением .lnk) в подкаталоге MicrosoftWindowsStart MenuProgramsStartup под одним изЗначение второго целого числа указывает, как вредоносное ПО должно пытаться обеспечить постоянство, если оно запущено с повышенными привилегиями.

Второе значение Цель постоянства 1 Запланированная задача для администратора 2 Создание службыИмя службы — это имя файла без расширения; имя отображения — это имя папки, но если оно уже существует, то добавляется строка “ Revision 1 ” (число увеличивается до тех пор, пока не будет найдено неиспользуемое имя). Операторы позаботились о том, чтобы постоянство через службу было устойчивым: на сеЗапланированная задача создается через несколько COM-интерфейсов: ITaskScheduler, ITask, ITaskTrigger, IPersistFile и ITaskScheduler. По сути, вредоносное ПО создает скрытую задачу, устанавливает информацию об учетной записи с информацией о текущем пользователе или администраторе и устанавливает триггер. Это ежедневнаяВредоносный битВ нашем примере исполняемый файл TCPSVCS.exe (AcroTranscoder.exe) является законным программным обеспечением, которое загружает DLL-файлы, помещенные вместе с ним. В данном случае Flash Video Extension.dll представляет интерес.Его функция DLLMain просто вызывает одну функцию. Присутствуют некоторые непрозрачные предикаты:

Рисунок 7 — Непрозрачные предикатыПосле этих обманчивых проверок код получает секцию .text TCPSVCS.exe, изменяет ее защиту на PAGE_EXECUTE_READWRITE и перезаписывает ее инструкциями, не выполняющими никаких действий и не имеющими побочных эффектов:

Рисунок 8 — Последовательность инструкций без побочных эффектовВ конце добавляется инструкция CALL по адресу функции FLVCore::Uninitialize(void), экспортируемой Flash Video Extension.dll. Это означает, что после загрузки вредоносного DLL, когда среда выполнения вызывает WinMain в TCPSVCS.exe, указатель инструкции будет указывать на NOP слайд, которыйЭта функция просто создает мьютекс, начинающийся с {181C8480-A975-411C-AB0A-630DB8B0A221} и продолжающийся текущим именем пользователя. Затем он считывает помещенный файл с расширением .db3, который содержит код, не зависящий от позиции, и использует CreateThread для выполнения его содержимого.Содержимое файла .db3 — это shellcode, обычно используемый OceanLotus. Опять же, мы успешно распаковали его полезную нагрузку с помощью эмулятора, который мы опубликовали на GitHub.Скрипт извлекает финальный этап. Этот компонент — бэкдор, который мы уже анализировали в этой технической документации: OceanLotus: Старые техники, новый бэкдор. Он узнаваем по GUID {A96B020F-0000-466F-A96D-A91BBF8EAC96}, присутствующему в бинарном файле. Конфигурация вредоносного ПОandreagahuvrauvin[.]com byronorenstein[.]com stienollmache[.]xyzЕще раз OceanLotus демонстрирует большое сочетание техник, чтобы оставаться незамеченным. Они вернулись с «улучшенной» версией процесса заражения. Выбирая случайные имена и заполняя исполняемые файлы случайными данными, они уменьшают количество надежных IoC (основанных на хэше и имени файла). БольшеСамораспаковывающиеся архивыПосле использования RTF-файлов группа начала использовать самораспаковывающиеся (SFX) архивы, которые используют обычные значки документов, пытаясь еще больше ввести в заблуждение своих жертв. Это было кратко задокументировано Threatbook (на китайском). При запуске эти самораспаковывающиеся RAR-файлы помещают и выполняют DLL-файлы (с расширением .ocx)Попасться на приманкуДокумент THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (означает «ЛЮБИМАЯ СВЯЗЬ ВЬЕТНАМСКИХ ВЫСТУПЛЕНИЙ» по данным Google Translate, SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB ) был впервые замечен в 2018 году. Этот SFX-файл искусно создан, так как описание (Version Info) гласит

Рисунок 9 — Команды SFXВредоносное ПО помещает {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC ) вместе с изображением 2018 thich thong lac.jpg.Изображение-приманка следующее:

Рисунок 10 — Изображение-приманкаВы могли заметить, что первые две строки в скрипте SFX вызывают OCX-файл дважды, но это не ошибка…{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)Управляющий поток OCX-файла очень похож на другие компоненты OceanLotus: много последовательностей JZ/JNZ и PUSH/RET, чередующихся с мусорным кодом.

Рисунок 11 — Обфусцированный кодПосле фильтрации мусорного кода экспорт DllRegisterServer, вызываемый regsvr32.exe, выглядит так:

Рисунок 12 — Основной код установщикаПо сути, при первом вызове DllRegisterServer устанавливается значение реестра HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model, содержащее закодированное смещение в DLL (0x10001DE0). При втором вызове функции она считывает это самое значение и выполняет функцShellcode — это тот же PE-загрузчик, который использовался в предыдущих кампаниях OceanLotus. Его можно эмулировать с помощью нашего скрипта эмуляции miasm. В конечном итоге он помещает db293b825dcc419ba7dc2c49fa2757ee.dll, загружает его в память и выполняет DllEntry.DLL извлекает содержимое своего ресурса, расшифровывает (AES-256-CBC) и сжимает его (LZMA). Ресурс имеет определенный формат, который довольно легко реверсировать.

Рисунок 13 — Структура конфигурации установщика (KaitaiStruct Visualizer)Конфигурация явная: в зависимости от уровня привилегий двоичные данные будут записаны либо в %appdata%IntellogsBackgroundUploadTask.cpl, либо в %windir%System32BackgroundUploadTask.cpl (или SysWOW64 для 64-битных систем). Далее постоянство достигается путем создания задачи с именем BackgroundUpСтруктурно CPL-файл представляет собой DLL, внутреннее имя которой ac8e06de0a6c4483af9837d96504127e.dll, и которая экспортирует функцию CPlApplet. Этот файл расшифровывает свой единственный ресурс {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll, затем загружает эту DLL и вызывает ее единственный экспорт, DllEntry.Файл конфигурации бэкдораБэкдор имеет зашифрованную конфигурацию, встроенную в его ресурсы. Структура файла конфигурации очень похожа на предыдущую.

Рисунок 14 — Структура конфигурации бэкдора (KaitaiStruct Visualizer)Несмотря на структурное сходство, значения во многих этих полях были обновлены по сравнению с тем, что было в нашей технической документации от марта 2018 года. Первый элемент массива бинарных файлов содержит DLL (HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759), идентифицированный Tencent, но экспортПриложить дополнительные усилияВо время поиска образцов выделялись некоторые характеристики. Проанализированный образец появился около июля 2018 года, а другие подобные были обнаружены совсем недавно, в середине января — начале февраля 2019 года. Используемый вектор заражения представлял собой SFX-архив, помещающий законный, decoy-документ и вредоносный OCXХотя OceanLotus использует поддельные временные метки, было замечено, что временные метки SFX и OCX файлов всегда одинаковы (0x57B0C36A (14.08.2016 @ 7:15 вечера UTC) и 0x498BE80F (06.02.2009 @ 7:34 утра UTC) соответственно). Это, вероятно, означает, что у них есть какой-то «конструктор», который повторно используетСреди проанализированных нами документов с начала 2018 года мы видели различные названия документов, указывающие на таргетинг по странам:The New Contact Information Of Cambodia Media(New).xls.exe 李建香 ( 个人 简历 ) .exe (поддельный PDF-документ резюме) feedback, Rally in USA from July 28-29, 2018.exeС момента обнаружения бэкдора {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll и его публичного анализа несколькими исследователями мы наблюдали некоторые изменения в данных конфигурации вредоносного ПО. Во-первых, авторы начали удалять имена из вспомогательных DLL (DNSprov.dll и двух версий HttpPВо-вторых, многие поля конфигурации бэкдора были изменены, возможно, чтобы избежать обнаружения, поскольку появилось много IoC. Измененные важные поля следующие:изменен ключ реестра «AppX» (см. IoC) строка кодирования мьютекса («def», «abc», «ghi») номер портаНаконец, все новые проанализированные варианты имеют новые C&C серверы, которые перечислены в разделе IoC.ЗаключениеOceanLotus очень активен и продолжает развиваться. Группа действительно сосредоточена на изменении своих наборов инструментов и приманок. Они искусно упаковывают свои полезные нагрузки в привлекательные документы, основанные на текущих событиях, которые, вероятно, заинтересуют их целевых жертв. Они продолжают придумывать различные техникиИндикаторы компрометации (IoC)IoC из этого поста в блоге, а также атрибуты MITRE ATT&CK доступны из нашего репозитория GitHub.Ключи/значения реестра:HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model [HKCU|HKLM]SOFTWAREApp AppXbf13d4ea2945444d8b13e2121cb6b663 Application DefaultIcon AppX70162486c7554f7f80f481985d67586d Application DefaultIcon AppX37cc7fdccd644b4f85f4b22d5a3f105a Application DefaultIconМьютексы:{181C8480-A975-411C-AB0A-630DB8B0A221} _ (+ имя пользователя)

Доменные именаaliexpresscn[.]net andreagahuvrauvin[.]com andreagbridge[.]com aol.straliaenollma[.]xyz beaudrysang[.]xyz becreybour[.]com byronorenstein[.]com chinaport[.]org christienoll[.]xyz christienollmache[.]xyz cloud.360cn[.]info dieordaunt[.]com dns.chinanews[.]network illagedrivestralia[.]xyzФайлы:

Документы, использующие CVE-2017-11882:
Хэши SHA-1
D1357B284C951470066AAA7A8228190B88A5C7C3
49DFF13500116B6C085C5CE3DE3C233C28669678
9DF3F0D8525EDF2B88C4A150134C7699A85A1508
50A755B30E8F3646F9476080F2C3AE1347F8F556
BB060E5E7F7E946613A3497D58FBF026AE7C369A
E2D949CF06842B5F7AE6B2DFFAA49771A93A00D9
Названия обнаружения ESET
Win32/Exploit.CVE-2017-11882.BU
Win32/Exploit.CVE-2017-11882.A
Win32/Exploit.Agent.KT
Win32/Exploit.Agent.LT
Win32/Exploit.CVE-2017-11882.EI
SFX-архивы и OCX-дропперы:
Хэши SHA-1
AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB
7642F2181CB189965C596964D2EDF8FE50DA742B
CD13210A142DA4BC02DA47455EB2CFE13F35804A
377FDC842D4A721A103C32CE8CB4DAF50B49F303
B4E6DDCD78884F64825FDF4710B35CDBEAABE8E2
BD39591A02B4E403A25AAE502648264308085DED
B998F1B92ED6246DED13B79D069AA91C35637DEC
CC918F0DA51794F0174437D336E6F3EDFDD3CBE4
83D520E8C3FDAEFB5C8B180187B45C65590DB21A
EFAC23B0E6395B1178BCF7086F72344B24C04DCC
8B991D4F2C108FD572C9C2059685FC574591E0BE
B744878E150A2C254C867BAD610778852C66D50A
3DFC3D81572E16CEAAE3D07922255EB88068B91D
77C42F66DADF5B579F6BCD0771030ADC7AEFA97C
Названия обнаружения ESET
Win32/Agent.ZUR

Техники MITRE ATT&CK

Tactic ID Name Description
Initial Access T1193 Spearphishing Attachment Deceitful RTF documents and self-extracting archives are sent to potential victims.
Execution T1204 User Execution The user needs to execute the self-extracting archive or open the RTF document.
T1117 Regsvr32 The self-extracting archives execute regsvr32 to run the OceanLotus’ backdoor.
T1035 Service Execution The second stage of the exploit tries to run OceanLotus’ backdoor as a service.
Persistence T1050 New Service The second stage of the exploit tries to achieve persistence by creating a service.
T1060 Registry Run Keys / Start Folder The second stage of the exploit tries to achieve persistence by adding a value in the Run registry key.
T1053 Scheduled Task The second stage of the exploit tries to achieve persistence by creating a schedule task.
Defense Evasion T1009 Binary Padding The second stage of the exploit fills dropped executables with random data.
T1073 DLL Side-Loading OceanLotus’ backdoor is side-loaded by dropping a library and a legitimate, signed executable (AcroTranscoder).
T1112 Modify Registry OceanLotus’ backdoor stores its configuration in a registry key.
T1027 Obfuscated Files or Information The second stage of the exploit drops an encrypted shellcode.
T1099 Timestomp The creation time of the files dropped by the second stage of the exploit is set to match the creation time of kernel32.dll.
Discovery T1083 File and Directory Discovery OceanLotus’ backdoor can list files and directories.
T1012 Query Registry OceanLotus’ backdoor can query the Windows Registry to gather system information.
T1082 System Information Discovery OceanLotus’ backdoor captures system information and sends it to its C&C server.
Exfiltration T1002 Data Compressed OceanLotus’ backdoor uses LZMA compression before exfiltration.
T1022 Data Encrypted OceanLotus’ backdoor uses RC4 encryption before exfiltration.
T1041 Exfiltration Over Command and Control Channel Data exfiltration is done using the already opened channel with the C&C server
T1203 Exploitation for Client Execution The RTF document includes an exploit to execute malicious code. (CVE‑2017‑11882)
Command And Control T1094 Custom Command and Control Protocol OceanLotus’ backdoor can exfiltrate data by encoding it in the subdomain field of DNS packets.
T1065 Uncommonly Used Port OceanLotus’ backdoor use HTTP over an uncommon TCP port (14146). Port is specified in the backdoor configuration.

Читать полный анализ на WeLiveSecurity →

Exit mobile version