Receba as últimas notícias, ameaças e recursos do setor.
O blister é um malware assinado por código que lança um arquivo DLL malicioso no sistema da vítima, que é então executado pelo carregador via rundll32.exe, resultando na implantação de um beacon RAT/C2, permitindo assim o acesso não autorizado ao sistema alvo pela Internet. As campanhas do Blister Malware estão ativas desde 15 de setembro de 2021.
Parte I da análise do CloudSEK fornece uma compreensão detalhada de como o carregador funciona. A parte 2 abordará os detalhes da segunda etapa desta campanha, que é a carga útil.dll e seu funcionamento interno.
Dissecando a DLL maliciosa — Blister Malware
Conforme discutido na Parte 1, o Blister dropper elimina o malicioso .dll arquivo no Diretório temporário do usuário, dentro de uma pasta recém-criada. Isso é malicioso .dll em seguida, realiza a segunda etapa da campanha, na qual um RAT/agente é implantado no sistema para obter acesso não autorizado e roubar dados.
O conta-gotas Blister chama a funçãoInicie o ColorCPL, que é uma das funções exportadas pelo .dll, via rundll32.exe.
Funções exportadas pela DLL maliciosa
Encenação
A função exportadaInicie o ColorCPLrecupera o código de teste da seção de recursos do arquivo PE. Esse código de teste é protegido por um esquema simples de codificação XOR.
Código responsável pela decodificação do código de testeCódigo de teste codificado na seção de recursos do arquivo PE
Após a decodificação iterativa do código de teste, o controle é transferido para o código decodificado na memória.
O fluxo de controle é transferido para o código de teste chamando o endereço no registro EAX.
Ligando para o endereço no registro EAX
Anti-análise
O código de teste é altamente ofuscado e tem uma lógica semelhante a um código de spaghetti, para dificultar a análise. Todas as chamadas para APIs do Windows são obscurecidas e resolvidas dinamicamente.
A primeira coisa que o código de teste faz é fazer com que o malware adormeça chamando a API Sleep Windows. Essa é uma estratégia típica usada pela maioria dos códigos maliciosos para contornar sandboxes de segurança e testes dinâmicos de produtos de segurança.
Stackframe antes do malware chamar a API Sleep Windows
O valor hexadecimal “927C0” é passado para Kernel 32.759f9010 ou seja, o Função de sono. Esse valor (927C0) se traduz em “600000” em decimal. Como a API Sleep aceita argumentos em milissegundos (ms), os 600.000 ms são convertidos em 10 minutos.
Quando o malware volta do modo de suspensão, ele obtém a carga útil final na seção de recursos do arquivo PE.
Trecho da carga protegida armazenada na memória
Na memória, a carga protegida é decodificada. A presença de um cabeçalho DOS, nos bytes da carga útil, confirma que a carga está no formato PE e não em um código de shell.
Carga útil descriptografada armazenada na memória
Uma observação interessante dessa análise é a adição do byte MZ após o processo de descriptografia. Na imagem acima, o byte inicial não é MZ, mas o byte MZ é adicionado posteriormente no início da carga separadamente. Esse comportamento é principalmente para segurança operacional.
Adição do byte MZ após o processo de descriptografia
Processo de esvaziamento
Em geral, o esvaziamento do processo permite que um invasor altere o conteúdo de um processo legítimo de código genuíno para código malicioso antes de ser executado, criando a lógica do código dentro do processo de destino.
Depois de descriptografar a carga final, o malware se prepara para a execução.
Isso é feito criando um novo processo para implantar o código extraído e, em seguida, executando o esvaziamento do processo para executar a carga no processo remoto. O código de teste recupera o Rundll32.exe localização do sistema comprometido.
Recuperação da localização do rundll32.exe
Um novo processo de Rundll32.exe é criado por meio do Criar processo interno W API no estado suspenso.
Criação do novo rendll32.exe
O malware usa as seguintes APIs Win32 para esvaziar o processo:
Visualização do mapa Zwun da seção
Memória virtual ZWREAD
Memória virtual ZW Write
Tópico de contexto do ZW GetContext
Tópico de contexto do ZWSET
Tópico de currículo do NT
Memória virtual ZW Write é usado para escrever código malicioso no processo de destino.
Para fazer com que o thread do novo processo aponte para o código recém-escrito, o atacante altera o ponto de entrada do thread atual via Tópico de contexto do ZW GetContext e Tópico de contexto do ZWSET.
Essas funções são usadas para realizar atividades de manutenção do processador na estrutura de dados que armazena o contexto atual do thread em execução. O esvaziamento de processos aproveita esses recursos para fazer com que o thread do processo execute o código do invasor.
Funcionamento passo a passo da DLL
O código de teste aloca uma nova memória via ZW Alocate Virtual Memory para transferir a carga final previamente descriptografada.
Alocação de nova memória via ZWALlocateVirtualMemory
A carga útil é então copiada para um buffer recém-criado. Com base nos testes do CloudSEK na carga útil extraída, uma das amostras analisadas continha o Ladrão de guaxinins como carga útil do estágio final. No entanto, outras amostras usadas Farol Cobalt Strike e BitRAT para comprometer o alvo e obter acesso não autorizado.
Movendo a carga para um buffer recém-criado
O código de teste então injeta o código no processo remoto recém-criado, ou seja, Rundll32.exe.
Code injeções no recém-criado rendll32.exe
Posteriormente, as proteções de memória são alteradas para as apropriadas para a execução do código residente via Memória virtual NTProtect.
Alteração das proteções de memória
O contexto do tópico é recuperado via API ZWGetContextThread para alterar o ponto de entrada do thread para executar a carga injetada no processo remoto.
Adição do byte MZ após o processo de descriptografia
OTópico de contexto do ZWSET é usado para modificar o ponto de entrada do thread para o do arquivo PE recém-copiado.
MModificação do ponto de entrada do thread para o arquivo PE copiado
Na fase final do processo de esvaziamento, a rosca suspensa do Rundll32.exe é retomado via Tópico de currículo do NT. Em seguida, o Rundll32.exe O processo começa a executar o código malicioso inserido nele pelo malware.
Retomando a rosca suspensa
No processo de limpeza, o código de teste usa Memória virtual NT Free para liberar a memória alocada, que contém a montagem da carga útil, uma por uma.
Processo de limpeza liberando a memória alocada
O processo atual usado para preparação é encerrado por meio do Processo de encerramento do NT.
Encerramento do processo atual
Blister Malware — Mantendo a persistência
O malware Blister atinge a persistência no sistema de destino criando um arquivo “lnk” chamado Jogos Proamings na C:\Users\<username>\ AppData\ Roaming\ Microsft\ Windows\ Menu Iniciar\ Inicializaçãodiretório.
Sempre que o usuário fizer login, explorer.exe executa qualquer arquivo no Inicialização pasta. Como resultado, quando o usuário faz login na conta, após o processo de inicialização, o malware é executado como um processo secundário do explorer.exe.
Arquivo de tinta produzido no diretório de inicialização
O destino do arquivo lnk é definido como C:\ProgramData\proamingsGames\proamingsGames.dll, LaunchColorCPL . Aqui, o malware copia o Rundll32.execomo proamingsGames.exe e o .dll malicioso (inicialmente em diretório C:\ProgramData\proamingsGames) é colocado no Temperatura pasta.
Conteúdo do arquivo proamingsGames.dll
Toda vez que o sistema é ligado e o usuário faz login, o arquivo lnk executa um código malicioso.dll por meio de uma instância renomeada de Rundll32.exe.
Conclusão
Como os agentes de ameaças estão usando ativamente certificados de assinatura de código válidos em sistemas Windows, para evitar a detecção por software antivírus, é essencial que os produtos de segurança de rede e de terminais sejam atualizados com os indicadores de comprometimento (IOCs) mais recentes do malware. Os IOCs mais recentes do Blister Malware estão enumerados em Parte 1 da análise técnica.
Nenhum item encontrado.
Inscreva-se nos recursos do CloudSEK
Receba as últimas notícias, ameaças e recursos do setor.