ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus

Neste post, vamos contar como o grupo cibernético OceanLotus (APT32 e APT-C-00) recentemente utilizou uma das exploits públicas para CVE-2017-11882, uma vulnerabilidade de corrupção de memória no Microsoft Office, e como o malware do grupo garante persistência em sistemas comprometidos, sem deixar vestígios. Em seguida, descreveremos como, desde o início de 2019, o grupo tem utilizado arquivos autoextraíveis para executar código.

OceanLotus se especializa em ciberespionagem, tendo como alvos prioritários os países do Sudeste Asiático. Os atacantes falsificam documentos atraentes para convencer potenciais vítimas a executar backdoors, além de estarem constantemente desenvolvendo suas ferramentas. Os métodos utilizados para criar iscas variam em diferentes ataques — desde arquivos com "extensões duplas", arquivos autoextraíveis, documentos com macros até exploits conhecidos.

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus

Uso da exploit no Microsoft Equation Editor

No meio de 2018, o OceanLotus conduziu uma campanha utilizando a vulnerabilidade CVE-2017-11882. Um dos documentos maliciosos do grupo cibernético foi analisado por especialistas do 360 Threat Intelligence Center (pesquisa em chinês), incluindo uma descrição detalhada da exploit. No post abaixo, há um resumo de um documento malicioso semelhante.

Primeira etapa

Documento FW Report on demonstration of former CNRP in Republic of Korea.doc (SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3) é semelhante ao mencionado na pesquisa acima. Ele é interessante porque tem como alvo usuários interessados na política do Camboja (CNRP – Partido de Salvação Nacional do Camboja, dissolvido no final de 2017). Apesar da extensão .doc, o documento tem formato RTF (veja a figura abaixo), contém código lixo, além de estar distorcido.

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus
Figura 1. "Lixo" em RTF

Apesar da presença de elementos distorcidos, o Word consegue abrir este arquivo RTF com sucesso. Como mostrado na figura 2, aqui está a estrutura EQNOLEFILEHDR com deslocamento 0xC00, seguida pelo cabeçalho MTEF e, em seguida, a entrada MTEF (figura 3) para a fonte.

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus
Figura 2. Valores da entrada FONT

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus
Figura 3. Formato da entrada FONT

Possível estouro no campo nome, uma vez que seu tamanho não é verificado antes da cópia. Um nome muito longo aciona uma vulnerabilidade. Como pode ser visto no conteúdo do arquivo RTF (deslocamento 0xC26 na figura 2), o buffer é preenchido com shellcode, seguido de um comando fictício (0x90) e um endereço de retorno 0x402114. O endereço é um elemento de diálogo em EQNEDT32.exe, indicando a instrução RET. Isso faz com que o EIP aponte para o início do campo nome, contendo código de shell.

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus
Figura 4. Início do código de shell do exploit

Endereço 0x45BD3C armazenando uma variável que é desreferenciada até atingir o ponteiro para a estrutura carregada atualmente MTEFData. Aqui está o restante do código de shell.

O propósito do código de shell é executar o segundo fragmento de código de shell, embutido no documento aberto. Primeiro, o código de shell original tenta encontrar o descritor do arquivo do documento aberto, percorrendo todos os descritores do sistema (NtQuerySystemInformation com o argumento SystemExtendedHandleInformation) e verificando se PID do descritor e PID www.iphones.ru/iNotes/sravnenie-apple-pencil-1-i-apple-pencil-2-chto-izmenilos-11-13-2018 WinWord e se o documento foi aberto com a máscara de acesso - 0x12019F.

Para confirmar a detecção do descritor correto (e não do descritor de outro documento aberto), o conteúdo do arquivo é mapeado usando a função CreateFileMapping, e o código de shell verifica se os últimos quatro bytes do documento são 'yyyy' (método Egg Hunting). Assim que uma correspondência é detectada, o documento é copiado para a pasta temporária (GetTempPath) como ole.dll. Então, os últimos 12 bytes do documento são lidos.

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus
Figura 5. Marcadores de fim do documento

Um valor de 32 bits entre marcadores AABBCCDD e yyyy – é o deslocamento do próximo código de shell. Ele é acionado pela função CreateThread. O mesmo código de shell, utilizado pelo grupo OceanLotus anteriormente, foi extraído. O script de emulação em Python, que lançamos em março de 2018, ainda funciona para o despejo da segunda etapa.

Segunda etapa

Extraindo componentes

Os nomes de arquivos e pastas são escolhidos dinamicamente. O código seleciona aleatoriamente um nome de arquivo executável ou DLL em C:Windowssystem32. Ele então faz uma solicitação a seus recursos e extrai o campo FileDescription para uso como nome da pasta. Se isso não funcionar, o código aleatoriamente escolhe um nome de pasta dos diretórios %ProgramFiles% ou C:Windows (de GetWindowsDirectoryW). Ele evita o uso de nomes que possam conflitar com arquivos existentes e garante que não contenham as seguintes palavras: windows, Microsoft, desktop, system, system32 ou syswow64. Se o diretório já existir, 'NLS_{6 caracteres}' é adicionado ao nome.

Recurso 0x102 é analisado e os arquivos são despejados em %ProgramFiles% ou %AppData%, em uma pasta escolhida aleatoriamente. O tempo de criação é alterado para ter os mesmos valores que kernel32.dll.

Por exemplo, aqui está uma pasta e uma lista de arquivos criada selecionando o executável C:Windowssystem32TCPSVCS.exe como fonte de dados.

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus
Figura 6. Extração de vários componentes

Estrutura do recurso 0x102 no droppper é bastante complexa. Resumidamente, ele contém:
— Nomes dos arquivos
— Tamanho e conteúdo dos arquivos
— Formato de compressão (COMPRESSION_FORMAT_LZNT1, utilizado pela função RtlDecompressBuffer)

O primeiro arquivo é descartado como TCPSVCS.exe, que é legítimo AcroTranscoder.exe (de acordo com FileDescription, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3).

Você pode ter notado que o tamanho de alguns arquivos DLL ultrapassa 11 MB. Isso ocorre porque um grande buffer contínuo de dados aleatórios é alocado dentro do arquivo executável. Não é descartado que esta seja uma forma de evitar a detecção por alguns produtos de segurança.

Garantindo a persistência

Recurso 0x101 no droppper contém dois números inteiros de 32 bits que definem como a persistência deve ser garantida. O valor do primeiro indica como o malware irá manter a persistência sem privilégios de administrador.

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus
Tabela 1. Mecanismo de persistência sem privilégios de administrador

O valor do segundo número inteiro indica como o malware deve garantir a persistência ao operar com privilégios de administrador.

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus
Tabela 2. Mecanismo de persistência com privilégios de administrador

O nome do serviço é o nome do arquivo sem extensão; o nome exibido é o nome da pasta, mas se já existir, será adicionada a string "Revision 1" (o número aumenta até que um nome não utilizado seja encontrado). Os operadores se certificaram de que a persistência através do serviço fosse robusta – em caso de falha, o serviço deve ser reiniciado em 1 segundo. Em seguida, o valor WOW64 da nova chave de registro do serviço é definido como 4, o que indica que é um serviço de 32 bits.

Uma tarefa agendada é criada através de várias interfaces COM: ITaskScheduler, ITask, ITaskTrigger, IPersistFile e ITaskScheduler. Essencialmente, o malware cria uma tarefa oculta, define informações sobre a conta juntamente com informações sobre o usuário atual ou administrador e, em seguida, define um gatilho.

Esta é uma tarefa diária com duração de 24 horas e intervalos de 10 minutos entre duas execuções, o que significa que será executada continuamente.

Malware Bit

No nosso exemplo, o arquivo executável TCPSVCS.exe (AcroTranscoder.exe) é um software legítimo que carrega DLLs que são descarregadas junto com ele. Neste caso, o que interessa é Flash Video Extension.dll.

Sua função DLLMain simplesmente chama outra função. Existem alguns predicados ambíguos:

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus
Figura 7. Predicados ambíguos

Após essas verificações enganosas, o código obtém a seção .text do arquivo TCPSVCS.exe, altera sua proteção para PAGE_EXECUTE_READWRITE e a reescreve, adicionando instruções fictícias:

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus
Figura 8. Sequência de instruções

No final, ao endereço da função FLVCore::Uninitialize(void), exportada Flash Video Extension.dll, é adicionada a instrução CALL. Isso significa que, após o carregamento da DLL maliciosa, quando o ambiente de execução chama WinMain em TCPSVCS.exe, o ponteiro da instrução apontará para NOP, resultando na chamada de FLVCore::Uninitialize(void), a próxima etapa.

A função simplesmente cria um mutex que começa com {181C8480-A975-411C-AB0A-630DB8B0A221}, seguido pelo nome de usuário atual. Em seguida, lê o arquivo descarregado com a extensão *.db3 que contém código independente de posição e utiliza CreateThread para executar o conteúdo.

O conteúdo do arquivo *.db3 é um shellcode que geralmente é utilizado pelo grupo OceanLotus. Novamente, conseguimos descompactar sua carga útil com um script emulador que publicamos no GitHub.

O script extrai a etapa final. Este componente é uma porta dos fundos que já analisamos em uma pesquisa anterior do OceanLotus. Isso pode ser identificado pelo GUID {A96B020F-0000-466F-A96D-A91BBF8EAC96} do arquivo binário. A configuração do malware ainda está criptografada no recurso PE. Ele tem aproximadamente a mesma configuração, mas os servidores C&C são diferentes dos anteriores:

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

O grupo OceanLotus demonstra novamente uma combinação de várias técnicas para evitar detecções. Eles voltaram com um esquema «reformulado» de processo de infecção. Escolhendo nomes aleatórios e preenchendo arquivos executáveis com dados aleatórios, eles reduzem o número de IoCs confiáveis (com base em hashes e nomes de arquivos). Além disso, ao utilizar o download de DLL de terceiros, os atacantes precisam apenas deletar o binário legítimo AcroTranscoder.

Arquivos autoextraíveis

Após os arquivos RTF, o grupo passou a arquivos autoextraíveis (SFX) com ícones comuns de documentos para confundir ainda mais o usuário. Isso foi reportado pela Threatbook (link em chinês). Após a execução, os arquivos RAR autorun são descartados e os arquivos DLL com a extensão .ocx são executados, cuja carga útil final já foi documentada. {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll. Desde meados de janeiro de 2019, o OceanLotus reiniciou essa técnica, alterando algumas configurações ao longo do tempo. Nesta seção, descreveremos a técnica e as mudanças.

Criação da isca

Documento THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB) encontrado pela primeira vez em 2018. Este arquivo SFX foi elaborado com cuidado – na descrição (Informações da versão) está escrito que esta é uma imagem JPEG. O script SFX se parece com o seguinte:

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus
Figura 9. Comandos SFX

O malware descarta {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC), assim como a imagem 2018 thich thong lac.jpg.

A imagem isca se parece com o seguinte:

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus
Figura 10. Imagem isca

Talvez você tenha notado que as duas primeiras linhas no script SFX chamam o arquivo OCX duas vezes, mas isso não é um erro.

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

O fluxo de controle do arquivo OCX é muito semelhante a outros componentes do OceanLotus – muitas sequências de comandos JZ/JNZ e PUSH/RET, alternando com código lixo.

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus
Figura 11. Código ofuscado

Após a filtragem do código lixo, a exportação DllRegisterServer, chamada por regsvr32.exe, se parece com o seguinte:

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus
Figura 12. Código principal do instalador

Basicamente, na primeira chamada, DllRegisterServer a exportação define o valor do registro HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model para o deslocamento criptografado na DLL (0x10001DE0).

Quando a função é chamada pela segunda vez, ela lê o mesmo valor e é executada a partir desse endereço. Daqui, o recurso é lido e executado, assim como muitas ações na memória.

O shellcode – o mesmo loader PE usado nas campanhas anteriores do OceanLotus. Pode ser emulado com o nosso script. No final, ele descarta db293b825dcc419ba7dc2c49fa2757ee.dll, carrega-o na memória e executa DllEntry.

A DLL extrai o conteúdo de seu recurso, decifra (AES-256-CBC) e descompacta (LZMA) isso. O recurso tem um formato específico, que é fácil de descompilar.

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus
Figura 13. Estrutura de configuração do instalador (KaitaiStruct Visualizer)

A configuração é explicitamente definida – dependendo do nível de privilégios, os dados binários serão gravados em %appdata%IntellogsBackgroundUploadTask.cpl ou %windir%System32BackgroundUploadTask.cpl (ou SysWOW64 para sistemas de 64 bits).

Em seguida, a persistência é garantida criando uma tarefa com o nome BackgroundUploadTask[junk].job, onde [junk] é um conjunto de bytes 0x9D e 0xA0.

Nome da tarefa do aplicativo %windir%System32control.exe, e o valor do parâmetro - o caminho para o arquivo binário carregado. A tarefa oculto é executada todos os dias.

Estruturalmente, o arquivo CPL é uma DLL com o nome interno ac8e06de0a6c4483af9837d96504127e.dll, que exporta a função CPlApplet. Este arquivo decifra seu único recurso {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll, em seguida, carrega esta DLL e chama sua única exportação DllEntry.

Arquivo de configuração do backdoor

A configuração do backdoor está criptografada e embutida em seus recursos. A estrutura do arquivo de configuração é muito semelhante à anterior.

ESET: novos esquemas de entrega de backdoor do grupo cibernético OceanLotus
Figura 14. Estrutura da configuração do backdoor (KaitaiStruct Visualizer)

Apesar da estrutura semelhante, os valores de muitos campos foram atualizados em relação aos dados apresentados em nosso antigo relatório.

O primeiro elemento do array binário contém a DLL (HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759), identificada como Tencent. Mas como o nome da exportação foi removido do arquivo binário, os hashes não correspondem.

Investigação adicional

Ao coletar amostras, notamos algumas características. A amostra recém-descrita apareceu por volta de julho de 2018, enquanto outras semelhantes surgiram recentemente, em meados de janeiro a fevereiro de 2019. O vetor de infecção usou um arquivo SFX, que descarrega um documento legítimo isca e um arquivo malicioso OCX.

Apesar de a OceanLotus usar timestamps falsificados, notamos que os timestamps dos arquivos SFX e OCX são sempre os mesmos (0x57B0C36A (14/08/2016 @ 19:15 UTC) e 0x498BE80F (06/02/2009 @ 07:34 UTC), respectivamente). Provavelmente, isso indica que os autores possuem algum 'construtor' que utiliza os mesmos templates e apenas altera algumas características.

Entre os documentos que analisamos desde o início de 2018, encontramos vários títulos que indicam os países de interesse dos atacantes:

— The New Contact Information Of Cambodia Media(New).xls.exe
— 李建香 (个人简历).exe (documento pdf falso de um CV)
— feedback, Rally in USA from July 28-29, 2018.exe

Desde que o backdoor foi descoberto {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll e a publicação de sua análise por vários pesquisadores, observamos algumas mudanças nos dados de configuração do malware.

Primeiramente, os autores começaram a remover nomes das DLLs auxiliares (DNSprov.dll e duas versões HttpProv.dll). Em seguida, os operadores pararam de empacotar a terceira DLL (a segunda versão HttpProv.dll), optando por embutir apenas uma.

Em segundo lugar, muitos campos de configuração do backdoor foram alterados, provavelmente para evitar a detecção, já que muitos IoCs se tornaram disponíveis. Entre os campos importantes alterados pelos autores, estão os seguintes:

  • campo do registro AppX alterado (veja IoCs)
  • string de codificação do mutex (“def”, “abc”, “ghi”)
  • número da porta

Por fim, em todas as novas versões analisadas, surgiram novos C&C, listados na seção IoCs.

Como resultado, obtemos um serviço de "monitoramento como serviço", automatizado na linha de produção de integração contínua. O desenvolvedor ou testador precisa apenas definir a lista de métricas em um arquivo JSON, e tudo o mais acontece automaticamente. Obtemos um controle de qualidade transparente dos lançamentos: todas as notificações sobre desempenho, consumo de recursos ou regressões arquitetônicas.

OceanLotus continua a evoluir. O grupo cibernético está focado em aprimorar e expandir suas ferramentas e iscas. Os autores disfarçam as cargas úteis maliciosas com documentos atraentes, cujo tema é relevante para as vítimas potenciais. Eles desenvolvem novos esquemas e também utilizam ferramentas públicas, como a exploração do Equation Editor. Além disso, eles aprimoram as ferramentas para reduzir a quantidade de artefatos restantes nas máquinas das vítimas, diminuindo assim a chance de detecção por softwares antivírus.

Indicadores de comprometimento

Indicadores de comprometimento, assim como atributos MITRE ATT&CK, estão disponíveis no Welivesecurity e no GitHub.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster