В этой статье мы сначала расскажем, как группа 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. |