ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus

Nesta publicación contarémosche como o grupo cibernético OceanLotus (APT32 e APT-C-00) utilizou recentemente un dos exploits dispoñibles publicamente para CVE-2017-11882, as vulnerabilidades de corrupción da memoria en Microsoft Office e como o malware do grupo logra a persistencia en sistemas comprometidos sen deixar rastro. A continuación, describiremos como, desde principios de 2019, o grupo está a utilizar arquivos autoextraíbles para executar código.

OceanLotus está especializado en ciberespionaxe, sendo os obxectivos prioritarios os países do sueste asiático. Os atacantes falsifican documentos que atraen a atención das posibles vítimas para convencelos de que executen a porta traseira e tamén están a traballar no desenvolvemento de ferramentas. Os métodos utilizados para crear honeypots varían segundo os ataques, desde ficheiros de "dobre extensión", arquivos autoextraíbles, documentos con macros, ata exploits coñecidos.

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus

Usando un exploit en Microsoft Equation Editor

A mediados de 2018, OceanLotus realizou unha campaña que aproveitaba a vulnerabilidade CVE-2017-11882. Un dos documentos maliciosos do grupo cibernético foi analizado por especialistas do 360 Threat Intelligence Center (investigación en chinés), incluíndo unha descrición detallada do exploit. A seguinte publicación contén unha visión xeral deste documento malicioso.

O primeiro estadio

O documento FW Report on demonstration of former CNRP in Republic of Korea.doc (SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3) é semellante ao mencionado no estudo anterior. É interesante porque está dirixido a usuarios interesados ​​na política cambadesa (CNRP - Cambodia National Rescue Party, disolto a finais de 2017). A pesar da extensión .doc, o documento está en formato RTF (ver imaxe a continuación), contén código lixo e tamén está distorsionado.

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus
Figura 1. "Lixo" en RTF

Aínda que hai elementos confusos, Word abre este ficheiro RTF con éxito. Como podes ver na Figura 2, hai unha estrutura EQNOLEFILEHDR no offset 0xC00, seguida dunha cabeceira MTEF e despois unha entrada MTEF (Figura 3) para o tipo de letra.

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus
Figura 2. Valores de entrada FONT

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus
Imaxe 3. Formato de gravación FONT

Posible desbordamento no campo nome, porque o seu tamaño non se verifica antes de copialo. Un nome demasiado longo desencadea unha vulnerabilidade. Como podes ver no contido do ficheiro RTF (offset 0xC26 na Figura 2), o búfer énchese con shellcode seguido dun comando ficticio (0x90) e enderezo de retorno 0x402114. O enderezo é un elemento de diálogo en EQNEDT32.exe, indicando instrucións RET. Isto fai que EIP apunte ao inicio do campo nomeque contén o shellcode.

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus
Figura 4. Inicio do código shell de explotación

Enderezo 0x45BD3C almacena unha variable que se desreferencia ata que chega a un punteiro á estrutura cargada actualmente MTEFData. O resto do shellcode está aquí.

O propósito do shellcode é executar a segunda peza de shellcode incrustada no documento aberto. O shellcode orixinal tenta primeiro atopar o descritor de ficheiros do documento aberto iterando todos os descritores do sistema (NtQuerySystemInformation cun argumento SystemExtendedHandleInformation) e comprobando se coinciden PID descritor e PID proceso WinWord e se o documento se abriu cunha máscara de acceso - 0x12019F.

Para confirmar que se atopou o identificador correcto (e non o identificador doutro documento aberto), o contido do ficheiro móstrase mediante a función CreateFileMapping, e o shellcode comproba se os últimos catro bytes do documento coinciden con "yyyy"(Método de caza de ovos). Unha vez que se atopa unha coincidencia, o documento cópiase nun cartafol temporal (GetTempPath) Como ole.dll. Despois lense os últimos 12 bytes do documento.

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus
Figura 5. Marcadores de fin de documento

Valor de 32 bits entre marcadores AABBCCDD и yyyy é a compensación do seguinte shellcode. Chámase usando a función CreateThread. Extraeu o mesmo shellcode que utilizou anteriormente o grupo OceanLotus. Script de emulación de Python, que lanzamos en marzo de 2018, aínda funciona para a segunda etapa.

A segunda etapa

Eliminación de compoñentes

Os nomes de ficheiros e directorios escóllense de forma dinámica. O código selecciona aleatoriamente o nome do ficheiro executable ou DLL C:Windowssystem32. Despois fai unha solicitude aos seus recursos e recupera o campo FileDescription para usar como nome do cartafol. Se isto non funciona, o código selecciona aleatoriamente un nome de cartafol dos directorios %ProgramFiles% ou C:Windows (de GetWindowsDirectoryW). Evita usar un nome que poida entrar en conflito cos ficheiros existentes e garante que non conteña as seguintes palabras: windows, Microsoft, desktop, system, system32 ou syswow64. Se o directorio xa existe, engádese "NLS_{6 caracteres}" ao nome.

recurso 0x102 analízase e bótanse ficheiros %ProgramFiles% ou %AppData%, nun cartafol seleccionado aleatoriamente. Cambiouse o tempo de creación para que teña os mesmos valores que kernel32.dll.

Por exemplo, aquí está o cartafol e a lista de ficheiros creados seleccionando o executable C:Windowssystem32TCPSVCS.exe como fonte de datos.

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus
Figura 6. Extracción de varios compoñentes

Estrutura de recursos 0x102 nun contagotas é bastante complexo. En poucas palabras, contén:
- Nomes de ficheiros
- Tamaño e contido do ficheiro
- Formato de compresión (COMPRESSION_FORMAT_LZNT1, usado pola función RtlDecompressBuffer)

O primeiro ficheiro restablecerase como TCPSVCS.exe, que é lexítimo AcroTranscoder.exe (dacordo con FileDescription, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3).

Quizais teña notado que algúns ficheiros DLL teñen máis de 11 MB. Isto débese a que un gran búfer contiguo de datos aleatorios colócase dentro do ficheiro executable. É posible que esta sexa unha forma de evitar a detección por parte dalgúns produtos de seguridade.

Asegurando a persistencia

recurso 0x101 no contagotas contén dous enteiros de 32 bits que especifican como se debe proporcionar a persistencia. O valor do primeiro especifica como persistirá o malware sen dereitos de administrador.

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus
Táboa 1. Mecanismo de persistencia sen dereitos de administrador

O valor do segundo número enteiro especifica como o malware debe lograr a persistencia cando se executa con dereitos de administrador.

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus
Táboa 2. Mecanismo de persistencia con dereitos de administrador

O nome do servizo é o nome do ficheiro sen extensión; o nome para mostrar é o nome do cartafol, pero se xa existe, engádese a cadea "Revision 1” (o número aumenta ata que se atopa un nome non utilizado). Os operadores aseguráronse de que a persistencia a través do servizo fose robusta; en caso de falla, o servizo debería reiniciarse despois de 1 segundo. Despois o valor WOW64 A clave de rexistro do novo servizo está definida como 4, o que indica que é un servizo de 32 bits.

Créase unha tarefa programada a través de varias interfaces COM: ITaskScheduler, ITask, ITaskTrigger, IPersistFile и ITaskScheduler. Esencialmente, o malware crea unha tarefa oculta, establece a información da conta xunto coa información do usuario ou administrador actual e, a continuación, establece o disparador.

Trátase dunha tarefa diaria cunha duración de 24 horas e intervalos entre dúas execucións de 10 minutos, o que significa que se executará de forma continua.

Bit malicioso

No noso exemplo, o ficheiro executable TCPSVCS.exe (AcroTranscoder.exe) é un software lexítimo que carga DLL que se restablecen xunto con el. Neste caso, é de interese Flash Video Extension.dll.

A súa función DLLMain só chama a outra función. Algúns predicados difusos están presentes:

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus
Figura 7. Predicados difusos

Despois destas comprobacións enganosas, o código recibe unha sección .text arquivo TCPSVCS.exe, cambia a súa defensa a PAGE_EXECUTE_READWRITE e reescríbeo engadindo instrucións ficticias:

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus
Figura 8. Secuencia de instrucións

Ao final ao enderezo da función FLVCore::Uninitialize(void), exportado Flash Video Extension.dll, engádese instrución CALL. Isto significa que despois de cargar a DLL maliciosa, cando o tempo de execución chama WinMain в TCPSVCS.exe, o punteiro da instrución apuntará a NOP, provocando FLVCore::Uninitialize(void), seguinte etapa.

A función simplemente crea un mutex comezando por {181C8480-A975-411C-AB0A-630DB8B0A221}seguido do nome de usuario actual. A continuación, le o ficheiro *.db3 envorcado, que contén código independente da posición, e utiliza CreateThread para executar o contido.

O contido do ficheiro *.db3 é o shellcode que normalmente usa o grupo OceanLotus. Descomprimimos de novo a súa carga útil usando o script do emulador que publicamos en github.

O guión extrae a fase final. Este compoñente é unha porta traseira, que xa analizamos en estudo anterior de OceanLotus. Isto pódese determinar polo GUID {A96B020F-0000-466F-A96D-A91BBF8EAC96} ficheiro binario. A configuración do malware aínda está cifrada no recurso PE. Ten aproximadamente a mesma configuración, pero os servidores C&C son diferentes dos anteriores:

- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz

O equipo de OceanLotus volve demostrar unha combinación de diferentes técnicas para evitar a detección. Volveron cun diagrama "refinado" do proceso de infección. Ao escoller nomes aleatorios e encher os executables con datos aleatorios, reducen o número de IoC fiables (baseados en hash e nomes de ficheiros). Ademais, grazas ao uso da carga de DLL de terceiros, os atacantes só precisan eliminar o binario lexítimo. AcroTranscoder.

Arquivos autoextraíbles

Despois dos ficheiros RTF, o grupo pasou a arquivos autoextraíbles (SFX) con iconas de documentos comúns para confundir aínda máis ao usuario. Threatbook escribiu sobre isto (ligazón en chinés). Tras o lanzamento, quítanse os ficheiros RAR autoextraíbles e execútanse DLL cunha extensión .ocx, cuxa carga útil final foi documentada previamente. {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll. Desde mediados de xaneiro de 2019, OceanLotus estivo reutilizando esta técnica, pero cambiando algunhas configuracións co paso do tempo. Neste apartado falaremos da técnica e dos cambios.

Creando un Señuelo

O documento THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB) atopouse por primeira vez en 2018. Este ficheiro SFX foi creado con coidado - na descrición (Información da versión) di que esta é unha imaxe JPEG. O script SFX ten o seguinte aspecto:

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus
Figura 9. Comandos SFX

O malware restablece {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC), así como unha imaxe 2018 thich thong lac.jpg.

A imaxe do señuelo ten o seguinte aspecto:

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus
Figura 10. Imaxe de señuelo

Quizais teña notado que as dúas primeiras liñas do script SFX chaman dúas veces ao ficheiro OCX, pero isto non é un erro.

{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)

O fluxo de control dun ficheiro OCX é moi similar a outros compoñentes de OceanLotus: moitas secuencias de comandos JZ/JNZ и PUSH/RET, alternando co código lixo.

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus
Figura 11. Código ofuscado

Despois de filtrar o código lixo, exporta DllRegisterServer, chamado regsvr32.exe, como segue:

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus
Figura 12. Código básico do instalador

Basicamente, na primeira convocatoria DllRegisterServer exportar conxuntos de valor de rexistro HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model para compensación cifrada en DLL (0x10001DE0).

Cando se chama a función por segunda vez, le o mesmo valor e execútase nese enderezo. Desde aquí len e execútanse o recurso e moitas accións na RAM.

O shellcode é o mesmo cargador PE usado nas campañas anteriores de OceanLotus. Pódese emular usando o noso guión. Ao final reinicia db293b825dcc419ba7dc2c49fa2757ee.dll, cárgao na memoria e execútase DllEntry.

A DLL extrae o contido do seu recurso, descifra (AES-256-CBC) e descomprime (LZMA). O recurso ten un formato específico que é fácil de descompilar.

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus
Figura 13. Estrutura de configuración do instalador (KaitaiStruct Visualizer)

A configuración especifícase de forma explícita: dependendo do nivel de privilexios, escribiranse datos binarios %appdata%IntellogsBackgroundUploadTask.cpl ou %windir%System32BackgroundUploadTask.cpl (Ou SysWOW64 para sistemas de 64 bits).

Garantíase unha maior persistencia creando unha tarefa co nome BackgroundUploadTask[junk].jobonde [junk] representa un conxunto de bytes 0x9D и 0xA0.

Nome da aplicación de tarefas %windir%System32control.exe, e o valor do parámetro é a ruta ao ficheiro binario descargado. A tarefa oculta execútase todos os días.

Estruturalmente, un ficheiro CPL é unha DLL cun nome interno ac8e06de0a6c4483af9837d96504127e.dll, que exporta unha función CPlApplet. Este ficheiro descifra o seu único recurso {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll, despois carga esta DLL e chama á súa única exportación DllEntry.

Ficheiro de configuración de porta traseira

A configuración da porta traseira está cifrada e incrustada nos seus recursos. A estrutura do ficheiro de configuración é moi semellante á anterior.

ESET: novos esquemas de entrega de portas traseiras para o grupo cibernético OceanLotus
Figura 14. Estrutura de configuración da porta traseira (KaitaiStruct Visualizer)

Aínda que a estrutura é similar, moitos dos valores de campo actualizáronse a partir dos mostrados en o noso vello informe.

O primeiro elemento da matriz binaria contén unha DLL (HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759), identificado por Tencent. Pero como o nome da exportación foi eliminado do binario, os hash non coinciden.

Investigación Adicional

Durante a recollida de mostras, observamos algunhas características. O exemplar que se acaba de describir apareceu ao redor de xullo de 2018, e outros similares apareceron tan recentemente como mediados de xaneiro ata principios de febreiro de 2019. O arquivo SFX utilizouse como vector de infección, deixando caer un documento de señuelo lexítimo e un ficheiro OSX malicioso.

Aínda que OceanLotus usa marcas de tempo falsas, observamos que as marcas de tempo dos ficheiros SFX e OCX son sempre as mesmas (0x57B0C36A (08/14/2016 ás 7:15 UTC) e 0x498BE80F (02/06/2009 ás 7:34 UTC) respectivamente). Isto probablemente indica que os autores teñen algún tipo de "deseñador" que usa os mesmos modelos e simplemente cambia algunhas características.

Entre os documentos que estudamos desde principios de 2018, hai varios nomes que indican os países de interese para os atacantes:

— A nova información de contacto de Cambodia Media(New).xls.exe
— 李建香 (个人简历).exe (documento pdf falso dun CV)
— comentarios, Rally en EUA do 28 ao 29 de xullo de 2018.exe

Dende que se descubriu a porta traseira {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll e a publicación da súa análise por parte de varios investigadores, observamos algúns cambios nos datos de configuración do malware.

Primeiro, os autores comezaron a eliminar nomes das DLL auxiliares (DNSprov.dll e dúas versións HttpProv.dll). Os operadores deixaron de empaquetar a terceira DLL (a segunda versión HttpProv.dll), escollendo incrustar só un.

En segundo lugar, modificáronse moitos campos de configuración de portas traseiras, probablemente para evitar a detección a medida que se dispoñían de moitos IoC. Os campos importantes modificados polos autores inclúen:

  • A clave de rexistro de AppX cambiou (ver IoCs)
  • cadea de codificación mutex ("def", "abc", "ghi")
  • número de porto

Finalmente, todas as novas versións analizadas teñen novos C&C listados na sección IoCs.

Descubrimentos

OceanLotus segue desenvolvéndose. O grupo cibernético céntrase en refinar e ampliar as ferramentas e señuelos. Os autores disimulan cargas útiles maliciosas utilizando documentos que chaman a atención cuxo tema é relevante para as vítimas previstas. Desenvolven novos esquemas e tamén usan ferramentas dispoñibles públicamente, como a explotación do Editor de ecuacións. Ademais, están mellorando as ferramentas para reducir o número de artefactos que quedan nas máquinas das vítimas, reducindo así a posibilidade de ser detectados polo software antivirus.

Indicadores de compromiso

Indicadores de compromiso, así como atributos MITRE ATT&CK están dispoñibles sobre Welivesecurity и en github.

Fonte: www.habr.com

Engadir un comentario