En aquesta publicació us explicarem com el cibergrup OceanLotus (APT32 i APT-C-00) va utilitzar recentment una de les explotacions disponibles públicament per
OceanLotus s'especialitza en ciberespionatge, amb objectius prioritaris els països del sud-est asiàtic. Els atacants falsifiquen documents que criden l'atenció de les víctimes potencials per convèncer-les perquè facin una porta del darrere, i també estan treballant en el desenvolupament d'eines. Els mètodes utilitzats per crear honeypots varien segons els atacs, des de fitxers de "doble extensió", arxius autoextractius, documents amb macros, fins a exploits coneguts.
Ús d'un exploit al Microsoft Equation Editor
A mitjans de 2018, OceanLotus va dur a terme una campanya aprofitant la vulnerabilitat CVE-2017-11882. Un dels documents maliciosos del grup cibernètic va ser analitzat per especialistes del 360 Threat Intelligence Center (
La etapa primera
El document FW Report on demonstration of former CNRP in Republic of Korea.doc
(SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3
) és similar a l'esmentat a l'estudi anterior. És interessant perquè s'adreça a usuaris interessats en la política cambodjana (CNRP - Cambodia National Rescue Party, dissolt a finals de 2017). Malgrat l'extensió .doc, el document està en format RTF (vegeu la imatge següent), conté codi d'escombraries i també està distorsionat.
Figura 1. "Escombraries" en RTF
Tot i que hi ha elements confusos, Word obre aquest fitxer RTF amb èxit. Com podeu veure a la figura 2, hi ha una estructura EQNOLEFILEHDR al desplaçament 0xC00, seguida d'una capçalera MTEF i després una entrada MTEF (figura 3) per a la font.
Figura 2. Valors d'entrada FONT
Figura 3.
Possible desbordament al camp nom, perquè la seva mida no es comprova abans de copiar. Un nom massa llarg desencadena una vulnerabilitat. Com podeu veure al contingut del fitxer RTF (desplaçament 0xC26 a la figura 2), la memòria intermèdia s'omple amb el codi shell seguit d'una ordre simulada (0x90
) i adreça de retorn 0x402114
. L'adreça és un element de diàleg a EQNEDT32.exe
, indicant instruccions RET
. Això fa que l'EIP apunti a l'inici del camp nomque conté el codi shell.
Figura 4. Inici de l'exploit shellcode
Direcció 0x45BD3C
emmagatzema una variable que es desreferencia fins que arriba a un punter a l'estructura carregada actualment MTEFData
. La resta de l'shellcode és aquí.
El propòsit de l'shellcode és executar la segona part de shellcode incrustada al document obert. El codi d'intèrpret d'ordres original primer intenta trobar el descriptor de fitxer del document obert iterant sobre tots els descriptors del sistema (NtQuerySystemInformation
amb un argument SystemExtendedHandleInformation
) i comprovant si coincideixen PID descriptor i PID procés WinWord
i si el document es va obrir amb una màscara d'accés - 0x12019F
.
Per confirmar que s'ha trobat el controlador correcte (i no el d'un altre document obert), el contingut del fitxer es mostra mitjançant la funció CreateFileMapping
, i el shellcode comprova si els darrers quatre bytes del document coincideixen amb "yyyy
"(Mètode de caça d'ous). Un cop es troba una coincidència, el document es copia a una carpeta temporal (GetTempPath
) Com ole.dll
. A continuació, es llegeixen els darrers 12 bytes del document.
Figura 5. Marcadors de final de document
Valor de 32 bits entre marcadors AABBCCDD
и yyyy
és el desplaçament del següent shellcode. S'anomena utilitzant la funció CreateThread
. S'ha extret el mateix codi shell que el grup OceanLotus va utilitzar anteriorment.
La segona etapa
Eliminació de components
Els noms de fitxers i directoris es trien de forma dinàmica. El codi selecciona aleatòriament el nom del fitxer executable o DLL C:Windowssystem32
. A continuació, fa una sol·licitud als seus recursos i recupera el camp FileDescription
per utilitzar com a nom de carpeta. Si això no funciona, el codi selecciona aleatòriament un nom de carpeta dels directoris %ProgramFiles%
o C:Windows
(de GetWindowsDirectoryW). Evita utilitzar un nom que podria entrar en conflicte amb els fitxers existents i assegura que no contingui les paraules següents: windows
, Microsoft
, desktop
, system
, system32
o syswow64
. Si el directori ja existeix, s'afegeix "NLS_{6 caràcters}" al nom.
recurs 0x102
s'analitza i s'aboquen els fitxers %ProgramFiles%
o %AppData%
, a una carpeta seleccionada aleatòriament. S'ha canviat el temps de creació per tenir els mateixos valors que kernel32.dll
.
Per exemple, aquí teniu la carpeta i la llista de fitxers creats seleccionant l'executable C:Windowssystem32TCPSVCS.exe
com a font de dades.
Figura 6. Extracció de diversos components
Estructura de recursos 0x102
en un comptagotes és força complex. En poques paraules, conté:
- Noms dels fitxers
— Mida i contingut del fitxer
— Format de compressió (COMPRESSION_FORMAT_LZNT1
, utilitzat per la funció RtlDecompressBuffer
)
El primer fitxer es restableix com a TCPSVCS.exe
, que és legítim AcroTranscoder.exe
(d'acord amb FileDescription
, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3
).
És possible que hàgiu notat que alguns fitxers DLL són més grans que 11 MB. Això es deu al fet que un gran buffer contigu de dades aleatòries es col·loca dins del fitxer executable. És possible que aquesta sigui una manera d'evitar la detecció per part d'alguns productes de seguretat.
Assegurant la persistència
recurs 0x101
al dropper conté dos nombres enters de 32 bits que especifiquen com s'ha de proporcionar la persistència. El valor del primer especifica com persistirà el programari maliciós sense drets d'administrador.
Taula 1. Mecanisme de persistència sense drets d'administrador
El valor del segon nombre enter especifica com ha d'aconseguir la persistència el programari maliciós quan s'executa amb drets d'administrador.
Taula 2. Mecanisme de persistència amb drets d'administrador
El nom del servei és el nom del fitxer sense extensió; el nom de visualització és el nom de la carpeta, però si ja existeix, s'hi afegeix la cadena "Revision 1
” (el nombre augmenta fins que es troba un nom no utilitzat). Els operadors s'asseguraven que la persistència a través del servei fos robusta; en cas de fallada, el servei s'hauria de reiniciar després d'1 segon. Després el valor WOW64
La clau de registre del nou servei s'estableix en 4, cosa que indica que és un servei de 32 bits.
Es crea una tasca programada mitjançant diverses interfícies COM: ITaskScheduler
, ITask
, ITaskTrigger
, IPersistFile
и ITaskScheduler
. Bàsicament, el programari maliciós crea una tasca oculta, estableix la informació del compte juntament amb la informació de l'usuari o de l'administrador actual i, a continuació, estableix l'activador.
Es tracta d'una tasca diària amb una durada de 24 hores i intervals entre dues execucions de 10 minuts, el que significa que s'executarà de forma continuada.
Bit maliciós
En el nostre exemple, el fitxer executable TCPSVCS.exe
(AcroTranscoder.exe
) és un programari legítim que carrega DLL que es restableixen juntament amb ell. En aquest cas, és d'interès Flash Video Extension.dll
.
La seva funció DLLMain
només crida a una altra funció. Hi ha alguns predicats difusos:
Figura 7. Predicats difusos
Després d'aquestes comprovacions enganyoses, el codi obté una secció .text
dossier TCPSVCS.exe
, canvia la seva defensa a PAGE_EXECUTE_READWRITE
i el reescriu afegint instruccions simulades:
Figura 8. Seqüència d'instruccions
Al final de l'adreça de la funció FLVCore::Uninitialize(void)
, exportat Flash Video Extension.dll
, s'afegeix una instrucció CALL
. Això vol dir que després de carregar la DLL maliciosa, quan el temps d'execució crida WinMain
в TCPSVCS.exe
, el punter d'instrucció apuntarà a NOP, provocant FLVCore::Uninitialize(void)
, següent etapa.
La funció simplement crea un mutex començant per {181C8480-A975-411C-AB0A-630DB8B0A221}
seguit del nom d'usuari actual. A continuació, llegeix el fitxer *.db3 abocat, que conté codi independent de la posició, i fa servir CreateThread
per executar el contingut.
El contingut del fitxer *.db3 és el codi shell que el grup OceanLotus utilitza normalment. Hem tornat a desempaquetar la seva càrrega útil amb èxit mitjançant l'script de l'emulador que vam publicar
El guió extreu l'etapa final. Aquest component és una porta del darrere, que ja hem analitzat {A96B020F-0000-466F-A96D-A91BBF8EAC96}
fitxer binari. La configuració del programari maliciós encara està xifrada al recurs PE. Té aproximadament la mateixa configuració, però els servidors C&C són diferents dels anteriors:
- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz
L'equip d'OceanLotus torna a demostrar una combinació de diferents tècniques per evitar la detecció. Van tornar amb un diagrama "refinat" del procés d'infecció. En triar noms aleatoris i omplir els executables amb dades aleatòries, redueixen el nombre d'IoC fiables (basats en hash i noms de fitxers). A més, gràcies a l'ús de la càrrega DLL de tercers, els atacants només necessiten eliminar el binari legítim. AcroTranscoder
.
Arxius autoextractius
Després dels fitxers RTF, el grup es va traslladar a arxius autoextractius (SFX) amb icones de documents habituals per confondre encara més l'usuari. Threatbook va escriure sobre això ({A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
. Des de mitjans de gener de 2019, OceanLotus ha estat reutilitzant aquesta tècnica, però canviant algunes configuracions al llarg del temps. En aquest apartat parlarem de la tècnica i dels canvis.
Creant un esquer
El document THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE
(SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB
) es va trobar per primera vegada el 2018. Aquest fitxer SFX es va crear amb prudència - a la descripció (Informació de la versió) diu que aquesta és una imatge JPEG. L'script SFX té aquest aspecte:
Figura 9. Ordres SFX
El programari maliciós es restableix {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx
(SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC
), així com una imatge 2018 thich thong lac.jpg.
La imatge de l'engany té aquest aspecte:
Figura 10. Imatge de señuelo
És possible que hàgiu notat que les dues primeres línies de l'script SFX criden dues vegades al fitxer OCX, però això no és un error.
{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)
El flux de control d'un fitxer OCX és molt similar a altres components d'OceanLotus: moltes seqüències d'ordres JZ/JNZ
и PUSH/RET
, alternant amb el codi d'escombraries.
Figura 11. Codi ofuscat
Després de filtrar el codi brossa, exporteu-lo DllRegisterServer
, va trucar regsvr32.exe
, com segueix:
Figura 12. Codi bàsic de l'instal·lador
Bàsicament, a la primera convocatòria DllRegisterServer
exportar conjunts de valor de registre HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model
per al desplaçament xifrat a DLL (0x10001DE0
).
Quan la funció es crida per segona vegada, llegeix el mateix valor i s'executa a aquesta adreça. A partir d'aquí es llegeixen i s'executen el recurs i moltes accions a la memòria RAM.
El codi de comandament és el mateix carregador de PE utilitzat a les campanyes anteriors d'OceanLotus. Es pot emular utilitzant db293b825dcc419ba7dc2c49fa2757ee.dll
, el carrega a la memòria i s'executa DllEntry
.
La DLL extreu el contingut del seu recurs, el desxifra (AES-256-CBC) i el descomprimeix (LZMA). El recurs té un format específic que és fàcil de descompilar.
Figura 13. Estructura de configuració de l'instal·lador (KaitaiStruct Visualizer)
La configuració s'especifica de manera explícita: depenent del nivell de privilegis, s'escriuran dades binàries %appdata%IntellogsBackgroundUploadTask.cpl
o %windir%System32BackgroundUploadTask.cpl
(O SysWOW64
per a sistemes de 64 bits).
Es garanteix una major persistència creant una tasca amb el nom BackgroundUploadTask[junk].job
On [junk]
representa un conjunt de bytes 0x9D
и 0xA0
.
Nom de l'aplicació de la tasca %windir%System32control.exe
, i el valor del paràmetre és el camí al fitxer binari descarregat. La tasca oculta s'executa cada dia.
Estructuralment, un fitxer CPL és una DLL amb un nom intern ac8e06de0a6c4483af9837d96504127e.dll
, que exporta una funció CPlApplet
. Aquest fitxer desxifra el seu únic recurs {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
, després carrega aquesta DLL i crida a la seva única exportació DllEntry
.
Fitxer de configuració de la porta posterior
La configuració de la porta posterior està xifrada i incrustada als seus recursos. L'estructura del fitxer de configuració és molt semblant a l'anterior.
Figura 14. Estructura de configuració de la porta posterior (KaitaiStruct Visualizer)
Tot i que l'estructura és similar, molts dels valors de camp s'han actualitzat dels que es mostren a
El primer element de la matriu binària conté una DLL (HttpProv.dll
MD5: 2559738D1BD4A999126F900C7357B759
),
Investigació addicional
Durant la recollida de mostres, vam observar algunes característiques. L'exemplar que s'acaba de descriure va aparèixer al voltant de juliol de 2018, i altres semblants van aparèixer tan recentment com a mitjans de gener fins a principis de febrer de 2019. L'arxiu SFX es va utilitzar com a vector d'infecció, deixant caure un document d'engany legítim i un fitxer OSX maliciós.
Tot i que OceanLotus utilitza marques de temps falses, hem observat que les marques de temps dels fitxers SFX i OCX són sempre les mateixes (0x57B0C36A
(08/14/2016 a les 7:15 UTC) i 0x498BE80F
(02/06/2009 a les 7:34 a.m. UTC) respectivament). Això probablement indica que els autors tenen algun tipus de "dissenyador" que utilitza les mateixes plantilles i simplement canvia algunes característiques.
Entre els documents que hem estudiat des de principis del 2018, hi ha diversos noms que indiquen els països d'interès per als atacants:
— La nova informació de contacte de Cambodia Media (New).xls.exe
— 李建香 (个人简历).exe (document pdf fals d'un currículum)
— comentaris, Ral·li als EUA del 28 al 29 de juliol de 2018.exe
Des que es va descobrir la porta del darrere {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
i la publicació de la seva anàlisi per part de diversos investigadors, vam observar alguns canvis en les dades de configuració de programari maliciós.
Primer, els autors van començar a eliminar noms de les DLL auxiliars (DNSprov.dll
i dues versions HttpProv.dll
). Aleshores, els operadors van deixar d'empaquetar la tercera DLL (la segona versió HttpProv.dll
), escollint incrustar només un.
En segon lloc, es van canviar molts camps de configuració de la porta del darrere, probablement evadir la detecció a mesura que es van disposar molts IoC. Els camps importants modificats pels autors inclouen:
- S'ha canviat la clau de registre d'AppX (vegeu IoC)
- cadena de codificació mutex ("def", "abc", "ghi")
- número de port
Finalment, totes les noves versions analitzades tenen nous C&C llistats a la secció IoCs.
Troballes
OceanLotus continua desenvolupant-se. El grup cibernètic està centrat a perfeccionar i ampliar les eines i els enganys. Els autors dissimulen les càrregues útils malicioses mitjançant documents que criden l'atenció el tema dels quals és rellevant per a les víctimes previstes. Desenvolupen nous esquemes i també utilitzen eines disponibles públicament, com ara l'explotació de l'Equation Editor. A més, estan millorant les eines per reduir el nombre d'artefactes que queden a les màquines de les víctimes, reduint així les possibilitats de detecció pel programari antivirus.
Indicadors de compromís
Hi ha disponibles indicadors de compromís, així com els atributs MITRE ATT&CK
Font: www.habr.com