Në këtë postim do të flasim se si grupi kibernetik OceanLotus (APT32 dhe APT-C-00) së fundmi përdori një nga shfrytëzimet e aksesit publik për , një vulnerabilitet të dëmtimit të memories në Microsoft Office, dhe si malware-i i grupit siguron qëndrueshmëri në sistemet e komprometuara, pa lënë gjurmë. Më pas, do të përshkruajmë se si që nga fillimi i vitit 2019, grupi ka përdorur arkiva që vetë-paketohet për të ngarkuar kodin.
OceanLotus specializohet në spiunazhin kibernetik, përparësitë janë vende të Azisë Juglindore. Sulmuesit falsifikojnë dokumente që tërheqin vëmendjen e viktimave të mundshme për t'i bindur ata të ekzekutojnë backdoor-in dhe gjithashtu punojnë në zhvillimin e mjeteve. Metodat e përdorura për të krijuar gracka ndryshojnë në sulme të ndryshme – nga skedarë me "ekspansione të dyfishta", arkiva që vetë-paketohet, dokumente me makro deri te shfrytëzime të njohura.

Përdorimi i shfrytëzimit në Microsoft Equation Editor
Në mes të vitit 2018, OceanLotus realizoi një fushatë duke përdorur vulnerabilitetin CVE-2017-11882. Një nga dokumentet e dëmshme të grupit kibernetik u analizua nga specialistët e Qendrës së Inteligjencës për Kërcënimet 360 (), duke përfshirë një përshkrim të detajuar të shfrytëzimit. Në postin më poshtë – një përmbledhje e një dokumenti të tillë dëmshmërie.
Faza e parë
Dokumenti FW Report on demonstration of former CNRP in Republic of Korea.doc (SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3) është analog me atë të përmendur në hulumtimin e lartpërmendur. Ai është i veçantë sepse synon përdoruesit e interesuar për politikën kamboxhiane (CNRP – Partia e Shpëtimit Kombëtar të Kamboxhias, e cila u shpërbë në fund të vitit 2017). Pavarësisht nga shtrirja .doc, dokumenti ka formatin RTF (shih figurën më poshtë), përmban kod të mbetur, si dhe është i distortuar.

Figurë 1. "Mbetje" në RTF
Pavarësisht nga prania e elementeve të distortuara, Word e hap me sukses këtë skedar RTF. Siç shihet nga figura 2, këtu është struktura EQNOLEFILEHDR me offset 0xC00, e ndjekur nga një titull MTEF, dhe më pas një regjistrim MTEF (figura 3) për fontin.

Figura 2. Vlerat e regjistrimit FONT

Figura 3.
Mundësi mbushjeje në fushën emri, pasi madhësia e saj nuk verifikohet para kopjimit. Një emër tepër i gjatë aktivizon vulnerabilitetin. Siç shihet nga përmbajtja e skedarit RTF (offset 0xC26 në figurën 2), bufferi mbushet me kod shell, e ndjekur nga një komandë fals (0x90) dhe adresa e kthimit 0x402114. Adresa është një element dialogu në EQNEDT32.exe, e cila tregon për instruksionin RET. Kjo bën që EIP të tregojë për fillimin e fushës emri, e cila përmban kodin shell.

Figura 4. Fillimi i kodit shell të shfrytëzimit
Adresa 0x45BD3C mban një variabël, e cila dereferencohet sa herë që arrin treguesin për strukturën e ngarkuar aktualisht MTEFData. Këtu ndodhet pjesa tjetër e kodit shell.
Qëllimi i kodit shell është të ekzekutojë fragmentin e dytë të kodit shell, i integruar në dokumentin e hapur. Fillimisht, kodi origjinal përpiqet të gjejë dikasterin e skedarit të dokumentit të hapur, duke kaluar përmes të gjithë dikasterëve të sistemit (NtQuerySystemInformation me argumentin SystemExtendedHandleInformation) dhe duke kontrolluar nëse PID i dikasterit dhe PID e procesit WinWord ishin hapur me maskën e qasjes – 0x12019F.
. Për të konfirmuar zbulimin e dikasterit të duhur (dhe jo të dikasterit të një dokumenti tjetër të hapur), përmbajtja e skedarit shfaqet duke përdorur funksionin CreateFileMapping, dhe kodi shell kontrollon nëse katër bajtët e fundit të dokumentit janë "yyyy" (metoda Egg Hunting). Sa herë që gjendet një përputhje, dokumenti kopjohet në një dosje të përkohshme (GetTempPath) si ole.dll. Më pas lexohen 12 bajtët e fundit të dokumentit.
![]()
Figura 5. Markers e fundit të dokumentit
Vlera 32-bit midis markerëve AABBCCDD dhe yyyy – është offseti për kodin e ardhshëm. Ai aktivizohet duke përdorur funksionin CreateThread. Kodi i njëjtë shell është nxjerrë që është përdorur nga grupi OceanLotus më parë. , i cili ne e publikuan në mars 2018, ende punon për shitjen e fazës së dytë.
Faza e dytë
Shkarkimi i komponenteve
Emrat e skedarëve dhe katalogëve zgjidhen dinamikisht. Kodi zgjedh rastësisht një emër skedari ekzekutues ose DLL në C:Windowssystem32. Më pas bën një kërkesë për burimet e tij dhe shkarkon fushën FileDescription për ta përdorur si emrin e dosjes. Nëse kjo nuk funksionon, kodi zgjedh rastësisht një emër dosje nga katalogët %ProgramFiles% ose C:Windows (nga GetWindowsDirectoryW). Ai shmang përdorimin e emrave që mund të shkaktojnë konflikte me skedarët ekzistues dhe sigurohet që ata të mos përmbajnë fjalët e mëposhtme: windows, Microsoft, desktop, system, system32 ose syswow64. Nëse katalogu ekziston tashmë, emrit i shtohet "NLS_{6 karaktere}".
Burimi 0x102 analizohet dhe skedarët shkarkohen në %ProgramFiles% ose %AppData%, në dosjen që zgjidhet rastësisht. Koha e krijimit është modifikuar për të dhënë të njëjtat vlera si ato të kernel32.dll.
Për shembull, këtu është një dosje dhe lista e skedarëve të krijuar duke zgjedhur skedarin ekzekutues. C:Windowssystem32TCPSVCS.exe si burim të dhënash.

Figura 6. Ekstraktimi i komponenteve të ndryshme
Struktura e burimit 0x102 në dropper është mjaft komplekse. Në dy fjalë, ajo përmban:
— Emrat e skedarëve
— Madhësia dhe përmbajtja e skedarëve
— Formati i kompresimit (COMPRESSION_FORMAT_LZNT1, i përdorur nga funksioni RtlDecompressBuffer)
Skedari i parë hidhet si TCPSVCS.exe, i cili është legjitim AcroTranscoder.exe (sipas FileDescription, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3).
Ndoshta keni vënë re se madhësia e disa DLL-ve e kalon 11 MB. Kjo është për shkak se një buffer i madh i të dhënave të rastit vendoset brenda skedarit ekzekutues. Nuk përjashtohet që kjo të jetë një mënyrë për të shmangur zbulimin nga disa produkte sigurie.
Sigurimi i qëndrushmërisë
Burimi 0x101 në dropper përmban dy numra të plotë 32-bit që përcaktojnë se si duhet siguruar qëndrushmëria. Vlera e parë tregon se si programi i dëmshëm do të ruajë qëndrushmërinë pa të drejta admin.

Tabela 1. Mekanizmi i qëndrushmërisë pa të drejta admin
Vlera e dytë e numrit tregon se si programi i dëmshëm duhet të sigurojë qëndrushmërinë duke punuar me të drejta admin.

Tabela 2. Mekanizmi i qëndrushmërisë me të drejta admin
Emri i shërbimit është emri i skedarit pa shtrirje; emri i dukshëm është emri i dosjes, por nëse ai tashmë ekziston, i shtohet një varg “Revision 1” (numri rritet derisa të gjendet një emër i papërdorur). Operatoret e kanë bërë që qëndrushmëria përmes shërbimit të jetë e qendrueshme – në rast të dështimit shërbimi duhet të rindezhet brenda 1 sekonde. Pastaj vlera e WOW64 çelësit të ri të regjistrit të shërbimit merr vlerën 4, që tregon se kjo është një shërbim 32-bit.
Një detyrë e planifikuar krijohet përmes disa ndërfaqeve COM: ITaskScheduler, ITask, ITaskTrigger, IPersistFile dhe ITaskScheduler. Në thelb, programi i dëmshëm krijon një detyrë të fshehtë, vendos informacionin e llogarisë së bashku me informacionin e përdoruesit aktual ose administratorit dhe më pas vendos një trigger.
Kjo është një detyrë e përditshme me kohëzgjatje 24-orëshe dhe intervale midis dy ekzekutimeve në 10 minuta, që do të thotë se ajo do të ekzekutohet vazhdimisht.
Bit i dëmshëm
Në shembullin tonë, skedari ekzekutiv TCPSVCS.exe (AcroTranscoder.exe) është një softuer legjitim që ngarko DLL-të që hodhen së bashku me të. Në këtë rast intereson Flash Video Extension.dll.
Funksioni i tij DLLMain thjesht thërret një funksion tjetër. Ka disa predikata të paqartë:

Figura 7. Predikata të paqartë
Pas këtyre kontrolleve mashtruese, kodi merr seksionin .text e skedarit TCPSVCS.exe, e ndryshon mbrojtjen e tij në PAGE_EXECUTE_READWRITE dhe e riprogramon, duke shtuar udhëzime të rreme:

Figura 8. Sekuenca e udhëzimeve
Në fund, një udhëzim FLVCore::Uninitialize(void), i eksportuar Flash Video Extension.dll, shtohet në adresën CALL. Kjo do të thotë se pas ngarkimit të DLL së dëmshme, kur ekzekutimi thërret WinMain në TCPSVCS.exe, treguesi i udhëzimit do të tregojë te NOP, duke rezultuar në thirrje FLVCore::Uninitialize(void), faza e ardhshme.
Funksioni thjesht krijon një mutex që fillon me {181C8480-A975-411C-AB0A-630DB8B0A221}, pasuar nga emri aktual i përdoruesit. Pastaj lexon skedarin e hedhur me shtrirje *.db3, i cili përmban kod të pavarur nga pozita dhe përdor CreateThread për të ekzekutuar përmbajtjen.
Përmbajtja e skedarit *.db3 përbën shell-kod, që zakonisht përdor grupi OceanLotus. Ne sërish e çliruam me sukses ngarkesën e tij duke përdorur një skenar emulatori që e publikua .
Skenari ekstrakton fazën finale. Ky komponent është një backdoor që ne tashmë e kemi analizuar në . Kjo mund të identifikohet nga GUID {A96B020F-0000-466F-A96D-A91BBF8EAC96} i skedarit binar. Konfigurimi i programit të dëmshëm është akoma i enkriptuar në burimin PE. Ai ka pothuajse të njëjtin konfigurim, por serverat C&C ndryshojnë nga të mëparshmit:
- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz
Grupi OceanLotus përsëri tregon një kombinim teknikash të ndryshme për të shmangur zbulimin. Ata u kthehen me një skemë të përmirësuar të procesit të infektimit. Duke zgjedhur emra të rastësishëm dhe duke e mbushur skedarin ekzekutiv me të dhëna të rastit, ata zvogëlojnë numrin e IoC-ve të besueshëm (bazohet në hash dhe emra skedarësh). Më shumë, për shkak të përdorimit të ngarkesës DLL nga party i tretë, agresorët kanë vetëm nevojë të fshijnë binarët legjitim AcroTranscoder.
Arkiva vetë-çërruese
Pas skedarëve RTF, grupi kaloi në arkivat vetë-çërruese (SFX) me ikona dokumentesh të njohura, për të konfuzionuar më tej përdoruesit. Kjo është raportuar nga Threatbook (). После запуска сбрасываются самораспаковывающиеся RAR-файлы и исполняются DLL с расширением .ocx, финальная полезная нагрузка которых ранее была задокументирована {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll. С середины января 2019 года OceanLotus повторно используют эту технику, но со временем меняют некоторые конфигурации. В данном разделе мы расскажем о технике и изменениях.
Создание приманки
Dokumenti THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB) впервые найден в 2018 году. Этот SFX файл создан с умом – в описании (Version Info) сказано, что это изображение JPEG. Скрипт SFX выглядит следующим образом:

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

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

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

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

Рисунок 13. Структура конфигурации установщика (KaitaiStruct Visualizer)
Конфигурация задана в явном виде – в зависимости от уровня привилегий бинарные данные будут записываться в %appdata%IntellogsBackgroundUploadTask.cpl ose %windir%System32BackgroundUploadTask.cpl (ose SysWOW64 для 64-битных систем).
Далее персистентность обеспечивается путем создания задачи с именем BackgroundUploadTask[junk].job, ku [junk] представляет собой набор байтов 0x9D dhe 0xA0.
Имя приложения задачи %windir%System32control.exe, а значение параметра – путь к выгруженному бинарному файлу. Скрытая задача запускается каждый день.
Конструктивно файл CPL представляет собой DLL с внутренним именем ac8e06de0a6c4483af9837d96504127e.dll, которая экспортирует функцию CPlApplet. Этот файл расшифровывает свой единственный ресурс {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll, затем загружает эту DLL и вызывает ее единственный экспорт DllEntry.
Файл конфигурации бэкдора
Конфигурация бэкдора зашифрована и встроена в его ресурсы. Структура файла конфигурации очень похожа на предыдущую.

Рисунок 14. Структура конфигурации бэкдора (KaitaiStruct Visualizer)
Несмотря на схожую структуру, значения многих полей были обновлены по сравнению с данными, приведенными в .
Первый элемент бинарного массива содержит DLL (HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759), . Но поскольку имя экспорта было удалено из бинарного файла, хеши не совпадают.
Дополнительные исследования
Собирая образцы, мы обратили внимание на некоторые характеристики. Только что описанный образец появился примерно в июле 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). Më pas, operatorët ndaluan pakot e DLL të tretë (versioni i dytë HttpProv.dll), duke zgjedhur të integrojnë vetëm një.
Së dyti, shumë fusha të konfigurimit të backdoor-it u ndryshuan, ndoshta për të shmangur zbardhjen, pasi shumë IoCs u bënë të njohura. Disa nga fushat e rëndësishme, të ndryshuara nga autorët, janë si më poshtë:
- ndryshimi i seksionit të regjistrit AppX (shiko IoCs)
- stringa e kodimit të mutex-it («def», «abc», «ghi»)
- numri i portit
Së fundi, në të gjitha versionet e reja të analizuar, u shfaqën C&C të reja, të renditura në seksionin IoCs.
Përfundimet
OceanLotus vazhdon të zhvillohet. Grupi kibernetik është fokusuar në përmirësimin dhe zgjerimin e instrumentarëve dhe kurtheve. Autorët maskojnë ngarkesat Malware me dokumente tërheqëse, tema të cilave janë relevante për viktimat e supozuara. Ata po zhvillojnë skema të reja dhe përdorin gjithashtu mjete publike, si exploit-i i Equation Editor. Për më tepër, ata po përmirësojnë mjetet për të reduktuar numrin e artefakteve që mbeten në makinat e viktimave, duke ulur kështu mundësinë e zbardhjes nga programet antivirus.
Të dhënat për komprometimin
Të dhënat e kompromisit, si dhe atributet MITRE ATT&CK janë të disponueshme dhe .
Burimi: habr.com
