Во овој пост ќе ви кажеме како сајбер групата OceanLotus (APT32 и APT-C-00) неодамна користеше еден од јавно достапните експлоатирања за , ранливости на оштетување на меморијата во Microsoft Office и како малициозниот софтвер на групата постигнува упорност на компромитирани системи без да остави трага. Следно, ќе опишеме како, од почетокот на 2019 година, групата користи архиви за самоизвлекување за да работи код.
OceanLotus е специјализиран за сајбер шпионажа, при што приоритетни цели се земјите во Југоисточна Азија. Напаѓачите фалсификуваат документи кои го привлекуваат вниманието на потенцијалните жртви за да ги убедат да ја извршат задната врата, а исто така работат и на развој на алатки. Методите што се користат за создавање на honeypots варираат во различни напади, од датотеки со „двојна екстензија“, архиви со самоизвлекување, документи со макроа, до познати експлоатирања.

Користење на експлоатација во Microsoft Equation Editor
Во средината на 2018 година, OceanLotus спроведе кампања искористувајќи ја ранливоста CVE-2017-11882. Еден од злонамерните документи на сајбер групата беше анализиран од специјалисти од разузнавачкиот центар 360 Threat (), вклучувајќи детален опис на експлоатацијата. Објавата подолу содржи преглед на таков злонамерен документ.
Првата фаза
Документот FW Report on demonstration of former CNRP in Republic of Korea.doc (SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3) е слична на онаа спомената во студијата погоре. Интересно е затоа што е наменето за корисници заинтересирани за политиката на Камбоџа (CNRP - Национална спасувачка партија на Камбоџа, распуштена на крајот на 2017 година). И покрај наставката .doc, документот е во RTF формат (видете ја сликата подолу), содржи код за ѓубре, а исто така е искривен.

Слика 1. „Ѓубре“ во RTF
Иако има погрешни елементи, Word успешно ја отвора оваа RTF-датотека. Како што можете да видите на Слика 2, постои структура EQNOLEFILEHDR со поместување 0xC00, проследено со заглавие MTEF, а потоа и MTEF запис (слика 3) за фонтот.

Слика 2. Внесување на ФОНТ вредности

Слика 3.
Можно прелевање на терен името, бидејќи неговата големина не се проверува пред копирање. Премногу долго име предизвикува ранливост. Како што можете да видите од содржината на RTF-датотеката (офсет 0xC26 на Слика 2), тампонот е исполнет со код на школка проследен со лажна команда (0x90) и вратете ја адресата 0x402114. Адресата е елемент за дијалог во EQNEDT32.exe, што укажува на инструкции RET. Ова предизвикува EIP да укаже на почетокот на полето иметошто го содржи кодот на школка.

Слика 4. Почеток на експлоат-шелкодот
Адреса: 0x45BD3C складира променлива која е дереференцирана додека не достигне покажувач до моментално вчитаната структура MTEFData. Остатокот од кодот на школка е тука.
Целта на shellcode е да го изврши вториот дел од shellcode вграден во отворениот документ. Оригиналниот код на школка прво се обидува да го пронајде дескрипторот на датотеката на отворениот документ со повторување на сите системски дескриптори (NtQuerySystemInformation со аргумент SystemExtendedHandleInformation) и проверка дали се совпаѓаат PID дескриптор и PID процес WinWord и дали документот е отворен со маска за пристап - 0x12019F.
За да потврдите дека е пронајдена точната рачка (а не рачката на друг отворен документ), содржината на датотеката се прикажува со помош на функцијата CreateFileMapping, а кодот на школка проверува дали последните четири бајти од документот се совпаѓаат "yyyy(Метод на лов на јајца). Откако ќе се најде совпаѓање, документот се копира во привремена папка (GetTempPath) Како ole.dll. Потоа се читаат последните 12 бајти од документот.
![]()
Слика 5. Крај на маркерите на документите
32-битна вредност помеѓу маркерите AABBCCDD и yyyy е поместување на следниот shellcode. Се нарекува користење на функцијата CreateThread. Го извлече истиот код на школка што претходно го користеше групата OceanLotus. , што го објавивме во март 2018 година, сè уште работи за депонија од втората фаза.
Втората фаза
Отстранување на компоненти
Имињата на датотеките и директориумите се избираат динамично. Кодот по случаен избор го избира името на извршната или DLL-датотеката во C:Windowssystem32. Потоа прави барање до своите ресурси и го враќа полето FileDescription да се користи како име на папката. Ако ова не функционира, кодот по случаен избор избира име на папка од директориумите %ProgramFiles% или C:Windows (од ЗемиWindowsDirectoryW). Се избегнува користење на име кое може да биде во конфликт со постоечките датотеки и се осигурува дека не ги содржи следниве зборови: windows, Microsoft, desktop, system, system32 или syswow64. Ако директориумот веќе постои, „NLS_{6 знаци}“ се додава на името.
ресурси 0x102 се анализира и датотеките се фрлаат во %ProgramFiles% или %AppData%, во случајно избрана папка. Променето време на создавање да ги има истите вредности како kernel32.dll.
На пример, тука е папката и списокот на датотеки создадени со избирање на извршна датотека C:Windowssystem32TCPSVCS.exe како извор на податоци.

Слика 6. Извлекување на различни компоненти
Структура на ресурси 0x102 во dropper е доста сложен. Накратко, содржи:
- Имиња на датотеки
— Големина и содржина на датотеката
— Формат за компресија (COMPRESSION_FORMAT_LZNT1, што се користи од функцијата RtlDecompressBuffer)
Првата датотека се ресетира како TCPSVCS.exe, што е легитимно AcroTranscoder.exe (според FileDescription, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3).
Можеби сте забележале дека некои DLL-датотеки се поголеми од 11 MB. Тоа е затоа што голем соседен бафер од случајни податоци е поставен во извршната датотека. Можно е ова да е начин да се избегне откривање од страна на некои безбедносни производи.
Обезбедување на упорност
ресурси 0x101 во dropper содржи два 32-битни цели броеви кои одредуваат како треба да се обезбеди упорност. Вредноста на првата одредува како малициозниот софтвер ќе опстојува без администраторски права.

Табела 1. Механизам на упорност без администраторски права
Вредноста на вториот цел број одредува како малициозниот софтвер треба да постигне упорност кога работи со администраторски права.

Табела 2. Механизам на упорност со администраторски права
Името на услугата е името на датотеката без екстензија; приказното име е името на папката, но ако веќе постои, стрингот „“ е додаден на негоRevision 1” (бројот се зголемува додека не се најде неискористено име). Операторите се погрижија упорноста преку услугата да биде стабилна - во случај на неуспех, услугата треба да се рестартира по 1 секунда. Потоа вредноста WOW64 Регистарскиот клуч на новата услуга е поставен на 4, што покажува дека е 32-битна услуга.
Закажаната задача се креира преку неколку COM интерфејси: ITaskScheduler, ITask, ITaskTrigger, IPersistFile и ITaskScheduler. Во суштина, малициозниот софтвер создава скриена задача, ги поставува информациите за сметката заедно со тековните информации за корисникот или администраторот, а потоа го поставува активирањето.
Ова е дневна задача со времетраење од 24 часа и интервали помеѓу две извршување од по 10 минути, што значи дека ќе работи континуирано.
Злонамерен бит
Во нашиот пример, извршната датотека TCPSVCS.exe (AcroTranscoder.exe) е легитимен софтвер што вчитува DLL-и кои се ресетираат заедно со него. Во овој случај, тоа е од интерес Flash Video Extension.dll.
Неговата функција DLLMain само повикува друга функција. Присутни се некои нејасни предикати:

Слика 7. Нејасни предикати
По овие погрешни проверки, кодот добива дел .text датотека TCPSVCS.exe, ја менува својата одбрана во PAGE_EXECUTE_READWRITE и го препишува со додавање кукла инструкции:

Слика 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. Повторно успешно го отпакувавме неговиот товар користејќи ја скриптата за емулатор што ја објавивме .
Сценариото ја извлекува последната фаза. Оваа компонента е задна врата, која веќе ја анализиравме . Ова може да го одреди GUID {A96B020F-0000-466F-A96D-A91BBF8EAC96} бинарна датотека. Конфигурацијата на малициозен софтвер сè уште е шифрирана во ресурсот на PE. Има приближно иста конфигурација, но 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 повторно ја користи оваа техника, но менува некои конфигурации со текот на времето. Во овој дел ќе зборуваме за техниката и промените.
Создавање мамка
Документот THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB) првпат беше пронајден во 2018 година. Оваа датотека SFX е создадена мудро - во описот (Информации за верзијата) вели дека ова е JPEG слика. Скриптата SFX изгледа вака:

Слика 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).
Кога функцијата се повикува по втор пат, таа ја чита истата вредност и се извршува на таа адреса. Оттука ресурсот и многу дејства во RAM меморијата се читаат и извршуваат.
Шел-кодот е истиот PE натоварувач што се користеше во минатите кампањи на OceanLotus. Може да се емулира со користење . На крајот се ресетира db293b825dcc419ba7dc2c49fa2757ee.dll, го вчитува во меморијата и извршува DllEntry.
DLL ја извлекува содржината на својот ресурс, го дешифрира (AES-256-CBC) и го декомпресира (LZMA). Ресурсот има специфичен формат кој лесно се декомпајлира.

Слика 13. Структура на конфигурација на инсталерот (KaitaiStruct Visualizer)
Конфигурацијата е наведена експлицитно - во зависност од нивото на привилегии, бинарните податоци ќе бидат напишани на %appdata%IntellogsBackgroundUploadTask.cpl или %windir%System32BackgroundUploadTask.cpl (Или SysWOW64 за 64-битни системи).
Понатамошната упорност се обезбедува со креирање задача со името BackgroundUploadTask[junk].jobкаде [junk] претставува збир од бајти 0x9D и 0xA0.
Име на апликацијата за задача %windir%System32control.exe, а вредноста на параметарот е патеката до преземената бинарна датотека. Скриената задача работи секој ден.
Структурно, CPL-датотеката е DLL со внатрешно име ac8e06de0a6c4483af9837d96504127e.dll, кој извезува функција CPlApplet. Оваа датотека го дешифрира нејзиниот единствен ресурс {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll, потоа го вчитува овој DLL и го повикува неговиот единствен извоз DllEntry.
Конфигурациска датотека за задна врата
Конфигурацијата на задна врата е шифрирана и вградена во нејзините ресурси. Структурата на конфигурациската датотека е многу слична на претходната.

Слика 14. Структура на конфигурација на задна врата (KaitaiStruct Visualizer)
Иако структурата е слична, многу од вредностите на полето се ажурирани од оние прикажани во .
Првиот елемент од бинарната низа содржи DLL (HttpProv.dll МД5: 2559738D1BD4A999126F900C7357B759), . Но, бидејќи името на извозот беше отстрането од бинарното, хашовите не се совпаѓаат.
Дополнителни истражувања
При собирањето примероци забележавме некои карактеристики. Штотуку опишаниот примерок се појави околу јули 2018 година, а други слични се појавија неодамна од средината на јануари до почетокот на февруари 2019 година. Архивата SFX се користеше како вектор на инфекција, исфрлајќи легитимен документ за мамка и злонамерна датотека OSX.
Иако OceanLotus користи лажни временски печати, забележавме дека временските ознаки на датотеките SFX и OCX се секогаш исти (0x57B0C36A (08 @ 14:2016 UTC) и 0x498BE80F (02/06/2009 @ 7:34 UTC) соодветно). Ова веројатно укажува дека авторите имаат некој вид „дизајнер“ кој ги користи истите шаблони и едноставно менува некои карактеристики.
Меѓу документите што ги проучувавме од почетокот на 2018 година, има различни имиња кои укажуваат на земјите од интерес за напаѓачите:
— Новите информации за контакт на медиумот во Камбоџа (Нов).xls.exe
— 李建香 (个人简历).exe (лажен pdf документ на CV)
— повратни информации, рели во САД од 28-29 јули 2018 година.exe
Откако беше откриена задна врата {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll и објавувањето на неговата анализа од неколку истражувачи, забележавме некои промени во податоците за конфигурацијата на малициозен софтвер.
Прво, авторите почнаа да ги отстрануваат имињата од помошни DLL-и (DNSprov.dll и две верзии HttpProv.dll). Операторите потоа престанаа да го пакуваат третиот DLL (втората верзија HttpProv.dll), избирајќи да вградите само еден.
Второ, многу полиња за конфигурација на задна врата беа променети, што веројатно ќе избегне откривање бидејќи многу IoC станаа достапни. Важни полиња изменети од авторите вклучуваат:
- Променет е регистарскиот клуч на AppX (види IoC)
- стринг за кодирање mutex („def“, „abc“, „ghi“)
- број на порта
Конечно, сите нови анализирани верзии имаат нови C&C наведени во делот IoCs.
Наоди
OceanLotus продолжува да се развива. Сајбер групата е фокусирана на рафинирање и проширување на алатките и мамките. Авторите прикриваат злонамерни товари користејќи документи кои привлекуваат внимание, чија тема е релевантна за наменетите жртви. Тие развиваат нови шеми и исто така користат јавно достапни алатки, како што е експлоатацијата на Equation Editor. Покрај тоа, тие ги подобруваат алатките за да го намалат бројот на артефакти што остануваат на машините на жртвите, а со тоа ја намалуваат шансата за откривање со антивирусен софтвер.
Индикатори за компромис
Достапни се индикатори за компромис, како и атрибути MITER ATT&CK и .
Извор: www.habr.com
