A equipe de inteligência e análise de segurança elástica pesquisa inovações de adversários de vários tipos e recentemente se concentrou em um grupo de atividades que aproveitou modelos remotos, evasão de código VBA e técnicas de carregamento lateral de DLL. Com base na similaridade do código e nas táticas, técnicas e procedimentos compartilhados (TTPs), a equipe avaliou que essa atividade poderia estar ligada a um grupo chinês conhecido como APT40, ou Leviathan. A campanha do grupo parece ter como alvo autoridades do governo da Malásia com uma isca relacionada à 2020 crise política da Malásia.
Anatomia do ataque
Para iniciar sua campanha de ameaça persistente avançada (APT), o grupo provavelmente entregou um documento do Microsoft Word como anexo de isca de phishing. A imagem usada na isca (Figura 2) parece ter sido criada a partir de um anúncio de transmissão compartilhado por um blogueiro malaio (Figura 1). A imagem de atração inclui o mesmo horário de transmissão, mas a data e o tópico do discurso foram removidos. Depois que esse anexo é aberto, um documento falso é apresentado nos bastidores, realizando as seguintes ações:
- O documento lure baixa o modelo remoto RemoteLoad.dotm
- O modelo remoto executa código de macro VBA
- O código de macro VBA descompacta e executa duas DLLs codificadas em base64 incorporadas (sl1.tmp e sl2.tmp) em c:\users\public\
Essa técnica é conhecida como injeção de modelo, que você pode lembrar da nossa postagem do blog Jogando na defesa contra o Gamaredon Group. Essa é uma abordagem eficaz usada por adversários para contornar controles de perímetro, como gateways de e-mail.
Ambas as DLLs incorporadas (sl1.tmp e sl2.tmp) são semelhantes e exportam os mesmos nomes de função: RCT e RCP. A primeira DLL (sl1.tmp) é usada para baixar um executável benigno chamado LogiMailApp.exe e uma biblioteca associada LogiMail.dll, e a segunda DLL (sl2.tmp) é usada para executar LogiMailApp.exe, que tenta executar automaticamente LogiMail.dll devido a uma vulnerabilidade inerente à ordem de pesquisa de DLL que abordaremos em breve.
Nome do arquivo | Tipo de arquivo | Tamanho (bytes) | MD5 | Tempo de compilação |
LogiMailApp.exe | Win32 EXE | 311656 | 850a163ce1f9cff0367854038d8cfa7e | 2012-09-26 22:13:13+00:00 |
LogiMail.dll | DLL Win32 | 105984 | b5a5dc78fb392fae927e9461888f354d | 2020-06-03 04:08:29+00:00 |
sl1.tmp | DLL Win32 | 3072 | ccbdda7217ba439dfb6bbc6c3bd594f8 | 2019-11-29 17:15:29+00:00 |
sl2.tmp | DLL Win32 | 3072 | dbfa006d64f39cde78b0efda1373309c | 2019-11-29 21:23:44+00:00 |
Tabela 1: Metadados de arquivos descartados
Essa implementação se destacou para nossos pesquisadores devido a uma idiossincrasia comportamental:
- O aplicativo do Microsoft Office winword.exe carrega DLLs sl1.tmp e sl2.tmp usando o método LoadLibraryA, que é moderadamente raro
- Essas DLLs executam comandos explícitos ou instalam uma carga útil de uma URL usando o método CallWindowProcA, o que parece ser excepcionalmente raro
- Ambas as DLLs são excluídas após a execução
DLLs incorporadas
As DLLs incorporadas, sl1.tmp e sl2.tmp, têm funcionalidade muito limitada — exportando as funções RCP e RCT. A função RCP implementa o método WinExec para executar comandos onde a função RCT usa o método URLDownloadToFileA para baixar um arquivo de uma URL especificada.
DLL carregando um backdoor lateralmente
LogiMailApp.exe, que é baixado por sl1.tmp e executado por sl2.tmp, é vulnerável a uma forma de sequestro de ordem de pesquisa de DLL chamada carregamento lateral, que automaticamente procura e executa LogiMail.dll se encontrado no mesmo diretório. Formas de sequestro de ordem de pesquisa de DLL podem ser usadas com muitos aplicativos de software de terceiros. Neste caso, o sequestro de ordem de pesquisa foi usado para carregar um backdoor que exporta as seguintes funções notáveis:
O binário LogiMail.dll criado pelo adversário exporta a função DllGetClassObject que contém lógica crítica para o fluxo de execução deste exemplo:
- Baixe um objeto de segundo estágio criptografado com AES para %TEMP%~liseces1.pcs
- Derive uma chave AES de 128 bits e um vetor de inicialização do SHA256 de uma string codificada
- Ler e descriptografar %TEMP%~liseces1.pcs na memória usando as funções ReadFile e CryptDecrypt
- Excluir %TEMP%~liseces1.pcs do disco
Segundo estágio backdoor
O backdoor de segundo estágio descriptografado é mapeado na memória e então seu ponto de entrada original (OEP) é chamado, ignorando assim detecções bem-sucedidas com base na varredura do sistema de arquivos.
Tanto o servidor de preparação de carga útil quanto a infraestrutura de segundo estágio usam DNS dinâmico:
Esta carga útil suporta os seguintes recursos:
- Verificações básicas anti-depuração
- Descoberta de sistema e usuário
- Execução via linha de comando
- Descoberta, upload e download de arquivos
- Persistência via registro de execução
- Criptografar o tráfego C2 usando a mesma chave AES
Possível conexão APT40/Leviathan
No início do ano, a Equipe de Resposta a Emergências de Computadores da Malásia (MyCERT) emitiu um aviso relacionado a atividades de espionagem direcionadas ao seu país. O relatório listou diferentes TTPs e incluiu diversas amostras e outros indicadores técnicos que se alinham com um grupo de ameaças conhecido como APT40/Leviathan.
Em um nível alto, esta amostra segue a tendência contínua de atingir vítimas da Malásia usando TTPs específicos, como modelos remotos, empregando macros, usando técnicas de carregamento lateral de DLL e aproveitando um implante na memória com DNS dinâmico para comando e controle. Mais especificamente, o implante de segundo estágio desta isca compartilha sequências de caracteres e referências de URL exclusivas e contém funcionalidade semelhante que se correlaciona com os relatórios anteriores para APT40/Leviathan. Com essas semelhanças, nossa Equipe de Inteligência e Análise avalia com moderada confiança que essa atividade está ligada ao APT40/Leviathan.
Semelhanças da sequência de implantes com o exemplo MyCERT:
- /lista_direção
- /post_document
- /post_login
- Falha ao abrir arquivo remoto %s para: %s
- Falha no Open Pipe %s
- O caminho de leitura do download falhou %s
- %02X-%02X-%02X-%02X-%02X-%02X
- Software\Microsoft\Windows\CurrentVersion\Run
- ntkd
Conclusão
Nesta postagem, destacamos uma amostra recente que provavelmente representa o trabalho de um adversário altamente organizado. Grupos de atividades como esse são importantes para que todos tomem conhecimento, mesmo porque representam um nível mais alto de maturidade da inovação pós-exploração. Os TTPs de ponta de hoje acabam se tornando comuns para todos amanhã; é importante aprender com esses eventos.
Esperamos que, ao compartilhar alguns desses insights, possamos ajudar a aumentar a conscientização e continuar a focar na proteção dos dados do mundo contra ataques. Para capacitar ainda mais as organizações, adicionamos todas as técnicas MITRE ATT&CK ® observadas e indicadores de comprometimento (IoCs) abaixo.
Técnicas MITRE ATT&CK ®
- T1193 - Acessório de caça submarina
- T1221 - Injeção de Template
- T1060 - Chaves de execução do registro / Pasta de inicialização
- T1073 - Carregamento lateral de DLL
- T1129 - Execução através de Carga de Módulo
- T1055 - Injeção de Processo
- T1107 - Exclusão de arquivo
- T1140 - Desobfuscar/Decodificar Arquivos ou Informações
- T1059 - Interface de linha de comando
Indicadores de Compromisso (IOCs)
Nomes e caminhos de arquivos
Bubar Parlimen.zip
Bubar Parlimen.docx
RemoteLoad.dotm
C:\Users\Public\sl1.tmp
C:\Users\Public\sl2.tmp
C:\Users\*\AppData\Local\Temp\~liseces1.pcs
C:\Users\*\AppData\Local\Microsoft\Office\LogiMailApp.exe
C:\Users\*\AppData\Local\Microsoft\Office\LogiMail.dll
Chaves de registro
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\ntkd
URLs
hxxps[:]//armybar[.]hopto[.]org/LogiMail.dll
hxxps[:]//armybar[.]hopto[.]org/LogiMailApp[.]exe
hxxps[:]//armybar[.]hopto[.]org/Encrypted
hxxp[:]//tomema.myddns[.]me/postlogin
hxxp[:]//tomema[.]myddns[.]me/list_direction
hxxp[:]//tomema[.]myddns[.]me/post_document
IPs
104[.]248[.]148[.]156
139[.]59[.]31[.]188
Certificado HTTPS
74b5e317527c93539dbaaf84d6a61da92a56012a
Hashes
523cbdaf31ddc920e5b6c873f3ab42fb791fb4c9d1f4d9e6a7f174105d4f72a1
ab541df861c6045a17006969dac074a7d300c0a8edd0a5815c8b871b62ecdda7
145daf50aefb7beec32556fd011e10c9eaa71e356649edfce4404409c1e8fa30
93810c5fd9a287d85c182d2ad13e7d30f99df76e55bb40e5bc7a486d259810c8
925f404b0207055f2a524d9825c48aa511199da95120ed7aafa52d3f7594b0c9
feca9ad5058bc8571d89c9d5a1eebce09e709cc82954f8dce1564e8cc6750a77
06a4246be400ad0347e71b3c4ecd607edda59fbf873791d3772ce001f580c1d3
77ef350639b767ce0a748f94f723a6a88609c67be485b9d8ff8401729b8003d2
YARA
rule APT_APT40_Implant_June2020 {
meta:
version = "1.0"
author = "Elastic Security"
date_added = "2020-06-19"
description = "APT40 second stage implant"
strings:
$a = "/list_direction" fullword wide
$b = "/post_document" fullword wide
$c = "/postlogin" fullword wide
$d = "Download Read Path Failed %s" fullword ascii
$e = "Open Pipe Failed %s" fullword ascii
$f = "Open Remote File %s Failed For: %s" fullword ascii
$g = "Download Read Path Failed %s" fullword ascii
$h = "\\cmd.exe" fullword wide
condition:
all of them
}