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

Neste post contaremos como o grupo cibernético OceanLotus (APT32 e APT-C-00) usou recentemente uma das explorações disponíveis publicamente para CVE-2017-11882, vulnerabilidades de corrupção de memória no Microsoft Office e como o malware do grupo consegue persistência em sistemas comprometidos sem deixar rastros. A seguir, descreveremos como, desde o início de 2019, o grupo vem utilizando arquivos autoextraíveis para executar código.

A OceanLotus é especializada em espionagem cibernética, tendo como alvos prioritários os países do Sudeste Asiático. Os invasores falsificam documentos que atraem a atenção de possíveis vítimas para convencê-las a executar o backdoor e também estão trabalhando no desenvolvimento de ferramentas. Os métodos usados ​​para criar honeypots variam entre os ataques, desde arquivos de “extensão dupla”, arquivos autoextraíveis, documentos com macros até explorações conhecidas.

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

Usando uma exploração no Microsoft Equation Editor

Em meados de 2018, a OceanLotus conduziu uma campanha explorando 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 exploração. A postagem abaixo contém uma visão geral desse documento malicioso.

O primeiro estágio

Documento FW Report on demonstration of former CNRP in Republic of Korea.doc (SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3) é semelhante ao mencionado no estudo acima. É interessante porque se destina a usuários interessados ​​na política cambojana (CNRP - Partido de Resgate Nacional do Camboja, dissolvido no final de 2017). Apesar da extensão .doc, o documento está em formato RTF (veja imagem abaixo), contém código lixo e também está distorcido.

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

Embora existam elementos distorcidos, o Word abre esse arquivo RTF com êxito. Como você pode ver na Figura 2, há uma estrutura EQNOLEFILEHDR no deslocamento 0xC00, seguida por um cabeçalho MTEF e, em seguida, uma entrada MTEF (Figura 3) para a fonte.

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

ESET: novos esquemas de entrega backdoor para o grupo cibernético OceanLotus
Figura 3. Formato de gravação FONT

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

ESET: novos esquemas de entrega backdoor para o grupo cibernético OceanLotus
Figura 4. Início do shellcode de exploração

endereço 0x45BD3C armazena uma variável que é desreferenciada até atingir um ponteiro para a estrutura atualmente carregada MTEFData. O resto do shellcode está aqui.

O objetivo do shellcode é executar a segunda parte do shellcode incorporada no documento aberto. O shellcode original primeiro tenta encontrar o descritor de arquivo do documento aberto iterando todos os descritores do sistema (NtQuerySystemInformation com um argumento SystemExtendedHandleInformation) e verificando se eles correspondem PID descritor e PID processo WinWord e se o documento foi aberto com máscara de acesso - 0x12019F.

Para confirmar se o identificador correto foi encontrado (e não o identificador de outro documento aberto), o conteúdo do arquivo é exibido usando a função CreateFileMapping, e o shellcode verifica se os últimos quatro bytes do documento correspondem a "yyyy"(Método de caça aos ovos). Assim que uma correspondência for encontrada, o documento será copiado para uma pasta temporária (GetTempPath) como ole.dll. Em seguida, são lidos os últimos 12 bytes do documento.

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

Valor de 32 bits entre marcadores AABBCCDD и yyyy é o deslocamento do próximo shellcode. É chamado usando a função CreateThread. Extraiu o mesmo shellcode usado anteriormente pelo grupo OceanLotus. Script de emulação Python, que lançamos em março de 2018, ainda funciona para o despejo do segundo estágio.

A segunda etapa

Removendo Componentes

Os nomes de arquivos e diretórios são escolhidos dinamicamente. O código seleciona aleatoriamente o nome do arquivo executável ou DLL em C:Windowssystem32. Em seguida, ele faz uma solicitação aos seus recursos e recupera o campo FileDescription para usar como nome da pasta. Se isso não funcionar, o código seleciona aleatoriamente um nome de pasta nos diretórios %ProgramFiles% ou C:Windows (de GetWindowsDirectoryW). Evita usar um nome que possa entrar em conflito com arquivos existentes e garante que não contenha as seguintes palavras: windows, Microsoft, desktop, system, system32 ou syswow64. Se o diretório já existir, "NLS_{6 caracteres}" será anexado ao nome.

recurso 0x102 é analisado e os arquivos são despejados em %ProgramFiles% ou %AppData%, para uma pasta selecionada aleatoriamente. Tempo de criação alterado para ter os mesmos valores de kernel32.dll.

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

ESET: novos esquemas de entrega backdoor para o grupo cibernético OceanLotus
Figura 6. Extraindo vários componentes

Estrutura de recursos 0x102 em um conta-gotas é bastante complexo. Em poucas palavras, contém:
- Nomes de arquivos
— Tamanho e conteúdo do arquivo
— Formato de compactação (COMPRESSION_FORMAT_LZNT1, usado pela função RtlDecompressBuffer)

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

Você deve ter notado que alguns arquivos DLL são maiores que 11 MB. Isso ocorre porque um grande buffer contíguo de dados aleatórios é colocado dentro do arquivo executável. É possível que esta seja uma forma de evitar a detecção por alguns produtos de segurança.

Garantindo persistência

recurso 0x101 no conta-gotas contém dois inteiros de 32 bits que especificam como a persistência deve ser fornecida. O valor do primeiro especifica como o malware persistirá sem direitos de administrador.

ESET: novos esquemas de entrega backdoor para o grupo cibernético OceanLotus
Tabela 1. Mecanismo de persistência sem direitos de administrador

O valor do segundo número inteiro especifica como o malware deve obter persistência ao ser executado com direitos de administrador.

ESET: novos esquemas de entrega backdoor para o grupo cibernético OceanLotus
Tabela 2. Mecanismo de persistência com direitos de administrador

O nome do serviço é o nome do arquivo sem extensão; o nome de exibição é o nome da pasta, mas se já existir, a string “é anexada a elaRevision 1”(o número aumenta até que um nome não utilizado seja encontrado). As operadoras garantiram que a persistência através do serviço fosse robusta – em caso de falha, o serviço deveria ser reiniciado após 1 segundo. Então o valor WOW64 A chave de registro do novo serviço está definida como 4, indicando que se trata de um serviço de 32 bits.

Uma tarefa agendada é criada através de diversas interfaces COM: ITaskScheduler, ITask, ITaskTrigger, IPersistFile и ITaskScheduler. Essencialmente, o malware cria uma tarefa oculta, define as informações da conta junto com as informações atuais do usuário ou administrador e, em seguida, define o gatilho.

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

Parte maliciosa

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

Sua função DLLMain apenas chama outra função. Alguns predicados difusos estão presentes:

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

Após essas verificações enganosas, o código recebe uma seção .text Arquivo TCPSVCS.exe, muda sua defesa para PAGE_EXECUTE_READWRITE e o reescreve adicionando instruções fictícias:

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

No final do endereço da função FLVCore::Uninitialize(void), exportado Flash Video Extension.dll, a instrução é adicionada CALL. Isso significa que após o carregamento da DLL maliciosa, quando o tempo de execução chamar WinMain в TCPSVCS.exe, o ponteiro da instrução apontará para NOP, causando FLVCore::Uninitialize(void), Próximo estágio.

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

O conteúdo do arquivo *.db3 é o shellcode que o grupo OceanLotus normalmente usa. Novamente descompactamos com sucesso sua carga útil usando o script do emulador que publicamos no GitHub.

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

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

A equipe da OceanLotus demonstra novamente uma combinação de diferentes técnicas para evitar a detecção. Eles voltaram com um diagrama “refinado” do processo de infecção. Ao escolher nomes aleatórios e preencher 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, graças ao uso de carregamento de DLL de terceiros, os invasores só precisam remover o binário legítimo AcroTranscoder.

Arquivos autoextraíveis

Depois dos arquivos RTF, o grupo passou para arquivos autoextraíveis (SFX) com ícones de documentos comuns para confundir ainda mais o usuário. Threatbook escreveu sobre isso (link em chinês). Após a inicialização, os arquivos RAR autoextraíveis são descartados e DLLs com extensão .ocx são executadas, cuja carga final foi documentada anteriormente {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll. Desde meados de janeiro de 2019, a OceanLotus vem reutilizando esta técnica, mas alterando algumas configurações ao longo do tempo. Nesta seção falaremos sobre a técnica e as mudanças.

Criando uma isca

Documento THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB) foi encontrado pela primeira vez em 2018. Este arquivo SFX foi criado com sabedoria - na descrição (Informação da versão) diz que esta é uma imagem JPEG. O script SFX fica assim:

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

O malware é redefinido {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC), bem como uma foto 2018 thich thong lac.jpg.

A imagem isca é assim:

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

Você deve ter notado que as duas primeiras linhas do 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 de um arquivo OCX é muito semelhante a outros componentes do OceanLotus - muitas sequências de comandos JZ/JNZ и PUSH/RET, alternando com código lixo.

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

Depois de filtrar o código indesejado, exporte DllRegisterServer, chamado regsvr32.exe, parece com isso:

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

Basicamente, na primeira chamada DllRegisterServer exportar define valor de registro HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model para deslocamento criptografado em DLL (0x10001DE0).

Quando a função é chamada pela segunda vez, ela lê o mesmo valor e é executada naquele endereço. A partir daqui o recurso e muitas ações na RAM são lidas e executadas.

O shellcode é o mesmo carregador PE usado em campanhas anteriores do OceanLotus. Pode ser emulado usando nosso roteiro. No final ele reinicia db293b825dcc419ba7dc2c49fa2757ee.dll, carrega-o na memória e executa DllEntry.

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

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

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

Maior persistência é garantida criando uma tarefa com o nome BackgroundUploadTask[junk].jobOnde [junk] representa um conjunto de bytes 0x9D и 0xA0.

Nome do aplicativo de tarefa %windir%System32control.exee o valor do parâmetro é o caminho para o arquivo binário baixado. A tarefa oculta é executada todos os dias.

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

Arquivo de configuração do backdoor

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

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

Embora a estrutura seja semelhante, muitos dos valores dos campos foram atualizados daqueles mostrados em nosso antigo relatório.

O primeiro elemento da matriz binária contém uma DLL (HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759), identificado pela Tencent. Mas como o nome de exportação foi removido do binário, os hashes não correspondem.

Pesquisa adicional

Durante a coleta de amostras, percebemos algumas características. O espécime que acabamos de descrever apareceu por volta de julho de 2018, e outros semelhantes apareceram recentemente, de meados de janeiro ao início de fevereiro de 2019. O arquivo SFX foi usado como vetor de infecção, descartando um documento falso legítimo e um arquivo OSX malicioso.

Embora o OceanLotus use carimbos de data e hora falsos, notamos que os carimbos de data e hora dos arquivos SFX e OCX são sempre os mesmos (0x57B0C36A (08/14/2016 às 7h15 UTC) e 0x498BE80F (02/06/2009 às 7h34 UTC) respectivamente). Isso provavelmente indica que os autores possuem algum tipo de “designer” que utiliza os mesmos templates e simplesmente altera algumas características.

Entre os documentos que estudamos desde o início de 2018, existem vários nomes que indicam os países de interesse dos atacantes:

- As novas informações de contato da Cambodia Media (New).xls.exe
— 李建香 (个人简历).exe (documento PDF falso de um currículo)
— feedback, Rally nos EUA de 28 a 29 de julho de 2018.exe

Desde que a porta dos fundos foi descoberta {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll e a publicação de sua análise por diversos pesquisadores, observamos algumas alterações nos dados de configuração do malware.

Primeiro, os autores começaram a remover nomes de DLLs auxiliares (DNSprov.dll e duas versões HttpProv.dll). Os operadores então pararam de empacotar a terceira DLL (a segunda versão HttpProv.dll), optando por incorporar apenas um.

Em segundo lugar, muitos campos de configuração de backdoor foram alterados, provavelmente evitando a detecção à medida que muitos IoCs se tornassem disponíveis. Campos importantes modificados pelos autores incluem:

  • Chave de registro AppX alterada (consulte IoCs)
  • string de codificação mutex ("def", "abc", "ghi")
  • número da porta

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

Descobertas

OceanLotus continua a se desenvolver. O grupo cibernético está focado em refinar e expandir as ferramentas e iscas. Os autores disfarçam cargas maliciosas usando documentos que chamam a atenção, cujo tópico é relevante para as vítimas pretendidas. Eles desenvolvem novos esquemas e também usam ferramentas disponíveis publicamente, como o exploit Equation Editor. Além disso, estão a melhorar ferramentas para reduzir o número de artefactos remanescentes nas máquinas das vítimas, reduzindo assim a possibilidade de detecção por software antivírus.

Indicadores de compromisso

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

Fonte: habr.com

Adicionar um comentário