Sumário
Latrodectus é um downloader descoberto pela primeira vez pelo Walmart em outubro de 2023. O malware ficou muito famoso devido às suas semelhanças com o famoso malware IceDid, não apenas no código em si, mas também na infraestrutura, conforme relatado anteriormente pela Proofpoint e pelo Team Cymru S2.
O malware geralmente é entregue por meio de campanhas de spam por e-mail conduzidas por dois agentes de ameaças específicos: TA577 e TA578. Entre os vários recursos que ele contém, está a capacidade de baixar e executar cargas adicionais, coletar e enviar informações do sistema para o C2, encerrar processos e muito mais. Em julho de 2024, Latrodectus também foi observado sendo entregue por um texugo BRC4.
Durante as atividades de caça do Threat Labs, descobrimos uma nova versão da carga útil do Latrodectus, a versão 1.4. As atualizações de malware incluem uma abordagem diferente de desofuscação de strings, um novo endpoint C2, dois novos comandos de backdoor e muito mais.
Neste blog, vamos nos concentrar nos recursos adicionados/atualizados nesta nova versão.
Análise de arquivos JavaScript
A primeira carga útil da cadeia de infecção é um arquivo JavaScript ofuscado usando uma abordagem semelhante usada por outras campanhas da Latrodectus. A técnica de ofuscação é empregada adicionando vários comentários ao arquivo, dificultando a análise e aumentando consideravelmente o tamanho do arquivo.
O código relevante está presente entre os comentários inúteis e, uma vez removido do arquivo, podemos ver o código que seria executado.
O malware procura linhas que começam com a string “/////”, as coloca em um buffer e as executa como uma função JS. A função executada então baixa um arquivo MSI de um servidor remoto e o executa/instala.
Análise do arquivo MSI
Uma vez executado/instalado, o arquivo MSI usa a ferramenta rundll32.exe do Windows para carregar uma DLL chamada “nvidia.dll” e chama uma função chamada “AnselEnableCheck” exportada por essa DLL. A DLL maliciosa é armazenada dentro de um arquivo CAB chamado “disk1”, presente no próprio arquivo MSI:
Análise criptográfica
Como uma tentativa de ofuscar a carga principal, o “nvidia.dll” arquivo usa um criptador chamado Dave. Esse criptador já existe há muito tempo e foi usado no passado por outros malwares, como Emotet, BlackBasta e versões anteriores do Latrodectus.
O criptador armazena a carga a ser executada em um recurso ou em uma seção. Na amostra analisada, a carga útil é armazenada em uma seção chamada “V+N”.
As etapas usadas para desofuscar, carregar e executar a carga final são bastante simples. O malware move uma chave para a pilha e resolve as funções da API do Windows VirtualAlloc, LoadLibrary e GetProcAddress.
Em seguida, ele aloca memória usando a função VirtualAlloc e executa uma operação XOR de vários bytes nos dados da seção mencionada usando a chave definida anteriormente e o resultado da operação é a carga útil final. As próximas etapas envolvem alinhar a carga útil na memória e chamar sua função principal.
Como o criptografador primeiro copia a carga original para a memória alocada antes que as outras etapas sejam executadas, pode-se simplesmente despejar o conteúdo da primeira memória alocada e obter a carga final. Um script para descompactar/desofuscar estaticamente as cargas úteis do Latrodectus usando o Dave crypter pode ser encontrado aqui.
A carga final é uma DLL e sua função dllMain é chamada pelo código criptografador. A próxima etapa é a execução da função exportada “AnselEnableCheck”, que é responsável pela execução da carga final.
Ao analisar a carga útil final, notamos que ela tem várias funções exportadas, mas, como todas elas têm o mesmo RVA, não importa qual delas seja chamada.
Análise de DLL do Latrodectus
Como as características gerais da carga útil principal já foram descritas no passado por outros pesquisadores, as seções a seguir se concentrarão nas atualizações empregadas pela nova versão do Latrodectus.
Ofuscação de cordas
Diferentemente das versões anteriores que usavam uma operação XOR para desofuscar suas strings, a versão atualizada usa AES256 no modo CTR. A chave AES é codificada na própria função de desofuscação e o IV muda para cada string a ser descriptografada. A chave usada nas amostras analisadas é “d623b8ef6226cec3e24c55127de873e7839c776bb1a93b57b25fdbea0db68ea2”.