O FortiGuard Labs da Fortinet capturou recentemente mais de 500 arquivos do Microsoft Excel envolvidos em uma campanha para entregar um novo trojan Emotet no dispositivo da vítima.
O Emotet, conhecido como Trojan modular, foi descoberto pela primeira vez em meados de 2014. Desde então, tornou-se muito ativo, atualizando-se continuamente. Também tem sido destaque nas notícias de segurança cibernética de tempos em tempos. O trojan Emotet usa engenharia social, como e-mail, para atrair destinatários para abrir arquivos de documentos anexados (incluindo Word, Excel, PDF etc.) isto.
Na Parte I deste post, foi explicado como essa variante do trojan Emotet é espalhada por código VBA malicioso em documentos do Excel, como o malware Emotet baixado é executado em um programa Rundll32, que tipo de técnicas de anti-análise essa variante usa., como ela criptografa e envia os dados de sua vítima para seu servidor C2., o que o trojan Emotet faz quando recebe dados de resposta do servidor C2 e o que o Emotet faz para habilitar a persistência no dispositivo da vítima.
Neste post, você aprenderá como são os dados nos pacotes de resposta com módulos maliciosos, quais módulos foram recebidos do servidor C2 para a campanha atual do trojan Emotet e como eles são implantados no dispositivo da vítima. Você também descobrirá quais dados confidenciais esses módulos roubam do dispositivo da vítima.
Uma vez que o servidor C2 tenha processado e detectado o primeiro pacote enviado que inclui dados críticos – como a versão do sistema do dispositivo da vítima, arquitetura do Windows, etc. – ele responde com módulos maliciosos para que o trojan Emotet seja executado no dispositivo da vítima. Todos os módulos recebidos são sem arquivo. Ou seja, eles só existem na memória e são processados pelo X.dll (o núcleo do Emotet) executado no Rundll32.exe.
A Figura 1.1 é uma captura de tela do código e da memória do X.dll. A parte inferior é um pacote de resposta de C2, apenas descriptografado na memória chamando uma função de 10012371. Consultar a Figura 5.3 na parte I desta série ajudará você a entender a estrutura do pacote.
A caixa marcada em vermelho são os dados de verificação (99 DE … DD A5), um hash assinado dos dados restantes do pacote. O dword a seguir, 0x00000000, marcado em amarelo, é um sinalizador que informa ao Emotet como executar o módulo respondido. 0x00 diz para executar o módulo em um thread recém-criado. O bloco binário em azul é o módulo. Começa com o tamanho do módulo, 0x79400 neste exemplo, e o resto são os dados binários do módulo (4D 5A 90 00 …).
O Emotet deve verificar os dados descriptografados, conforme mostrado na Figura 1.1, usando os dados de verificação de 40H.
Em seguida, ele implanta o módulo recebido na memória e se prepara para executá-lo. Em seguida, ele chama seu ponto de entrada em um thread recém-criado. Esta postagem se referirá a este módulo como um “módulo de thread”. Seus principais objetivos são extrair e executar o módulo funcional final que rouba dados confidenciais do dispositivo da vítima e enviar os dados roubados ao seu servidor C2, que será discutido mais adiante nesta análise. A Figura 1.2 mostra onde o código ASM da função de thread chama o ponto de entrada do módulo de thread implantado.
O módulo de encadeamento prossegue para descriptografar um arquivo PE, o módulo funcional final, de sua seção .text na memória. Para executar este módulo, ele realiza o esvaziamento do processo. Ele faz isso copiando um arquivo do Windows, “certutil.exe”, de “%Windir%\SysWOW64\certutil.exe” ou “%Windir%\system32\certutil.exe” para a pasta “%temp%”. Em seguida, ele o renomeia para um nome de arquivo aleatório, como “uvbubqj.exe”. Em seguida, o módulo de thread cria um processo suspenso com este arquivo.
Como você pode ver na linha de comando na Figura 2.1, “uvbubqj.exe” é o “certutil.exe” copiado, “/scomma” e o arquivo temporário subsequente — “C:\Users\Bobs\AppData\Local\Temp \60B2.tmp” — são os parâmetros para o processo. O nome do arquivo temporário é gerado chamando a API GetTempFileNameW(). O caminho do arquivo temporário “60B2.tmp” é lido pelo módulo funcional e usado para salvar as informações roubadas. O sexto argumento para CreateProcessW() é 0x00000004, que é um sinalizador de criação que indica “CREATE_SUSPENDED” com o qual CreateProcessW() cria um processo e insere o status suspenso.
Em seguida, ele chama um grupo de APIs, como GetThreadContext(), VirtualAllocEx(), ReadProcessMemory(), WriteProcessMemory() e assim por diante, para injetar o módulo funcional final na memória do novo processo. A API SetThreadContext() é chamada posteriormente para definir o novo registro EIP do processo apontando para o ponto de entrada do módulo funcional, que é invocado após chamar a API ResumeThread().
Depois, o módulo de thread começa a monitorar o arquivo temporário em um loop até que ele seja criado com as informações roubadas do dispositivo da vítima.
Na análise acima, expliquei como um módulo C2 é carregado e executado no dispositivo da vítima.
O servidor C2 pode retornar muitos módulos, cada um passando pelo mesmo processo descrito acima. Eles terão um módulo de thread, executarão em seu thread e executarão seu próprio processo de esvaziamento.
Recebi três módulos C2. Vou detalhar como eles funcionam no dispositivo da vítima nas seções a seguir.
Um packer autoextraível protege este módulo. Ele descriptografa um arquivo PE quando é executado, substitui o código existente de “certutil.exe” e o executa.
O arquivo PE descompactado é um freeware chamado “WebBrowserPassView” desenvolvido pela NirSoft. Ele foi projetado como uma ferramenta de recuperação de senha, mas foi abusado por agentes mal-intencionados para roubar as credenciais da vítima. Uma interface de usuário exibe as credenciais salvas armazenadas em vários navegadores da web.
A Figura 3.1 mostra a aparência deste módulo quando eu o abro em meu ambiente de teste. Esta variante do Emotet usa WebBrowserPassView v2.06.
Seu módulo de thread passa parâmetros de linha de comando como “/scomma C:\Users\Bobs\AppData\Local\Temp\7B3C.tmp” para o processo, que pode alternar WebBrowserPassView para um modo No-Window e salvar as credenciais recuperadas em um dado arquivo temporário.
A partir de seu código, aprendi que ele poderia coletar as credenciais de vários navegadores da web:
Microsoft IE, Microsoft Edge, Google Chrome, Mozilla Firefox, Opera, Apple Safari, SeaMonkey, Yandex, Vivaldi, Waterfox e todos os outros navegadores baseados no Chromium.
As credenciais roubadas contêm as seguintes informações:
• URL: os URLs para os quais as credenciais são salvas
• Navegador da Web: o nome do navegador que contém as credenciais
• Nome de usuário, senha: as credenciais
• Força da senha: forte ou fraca
• Campo de nome de usuário: o tipo de nome de controle no campo de nome de usuário
• Campo de senha: a string inserida no campo de senha
• Hora de criação: quando foi salva
• Hora de modificação: hora em que as credenciais foram atualizadas
• Nome do arquivo: de qual arquivo as credenciais foram roubadas
Todas as credenciais são salvas em um arquivo temporário.
Este módulo rouba os contatos de e-mail da vítima de suas pastas de e-mail dentro do Microsoft Outlook, analisando os e-mails da vítima um por um. Ele mantém as informações de contato coletadas em uma estrutura de cadeia duplamente ligada.
A Figura 4.1 mostra um contato de e-mail obtido de um e-mail na minha conta de teste do Outlook que foi então adicionado à cadeia duplamente vinculada, conforme mostrado na parte inferior. Os dados coletados mostram o nome da pessoa e o endereço de e-mail do remetente do e-mail. Neste exemplo, ele coletou “Outlook” e “outlook@email2.office.com” da mensagem de e-mail exibida.
Este módulo enumera todos os e-mails coletados e coloca as informações de contato de e-mail exclusivas na cadeia duplamente vinculada. Para coletar os dados do Outlook, ele precisa chamar várias APIs, incluindo MAPIInitialize(), MAPILogonEx() e MAPIFreeBuffer(), além de criar alguns objetos COM chamando a API CoCreateInstance(), como OlkAccountManager e OlkMail.
Finalmente, ele recupera esses contatos de e-mail da cadeia vinculada um por um e os salva no arquivo temporário que vem do parâmetro da linha de comando. A Figura 4.2 mostra uma captura de tela do arquivo temporário, “%temp%\6827.tmp” neste exemplo, junto com os contatos de e-mail coletados.
Este módulo funcional se concentra em roubar as configurações da conta de e-mail da vítima e as credenciais de seus clientes de e-mail. Também é um módulo protegido pelo empacotador, portanto, faz a mesma coisa que Module1 quando seu ponto de entrada é chamado.
De acordo com minha análise, o arquivo PE descompactado é um arquivo EXE que é outro freeware da NirSoft chamado “ Mail PassView ”. Ele foi originalmente projetado como uma pequena ferramenta de recuperação de senha para clientes de e-mail. O trojan Emotet está usando a versão mais recente—v1.92. A Figura 5.1 é uma captura de tela deste software em execução no meu ambiente de teste.
Examinando seu código e strings constantes, descobrimos que ele poderia obter configurações e credenciais de conta de e-mail dos seguintes clientes de e-mail ou outros clientes que poderiam salvar credenciais de e-mail:
Mozilla Thunderbird, Eudora, Microsoft Outlook, Microsoft Outlook Express, Windows Mail, MSNMessenger, Windows Live Mail, Group Mail, IncrediMail, Yahoo! Correio, Yahoo! Messenger, Hotmail, Google Desktop e Google Talk.
Ele coleta as configurações e credenciais do registro do sistema e dos arquivos de configuração local desses clientes de e-mail. A Figura 5.2 é um segmento do código ASM de uma função comum que tem vários nomes de valores predefinidos.
O software lê repetidamente o nome de usuário, endereço do servidor, porta do servidor e informações semelhantes do registro do sistema por meio desses nomes de valor sob as subchaves ” HKCU\Software\Microsoft\Internet Account Manager\Accounts ” e ” HKCU\Software\Microsoft\Office \Outlook\OMI Account Manager\Accounts “, que são os locais para salvar as configurações e credenciais do Microsoft Outlook e do Microsoft Outlook Express.
Desta vez, a string do parâmetro de linha de comando para este software é “/scomma C:\Users\Bobs\AppData\Local\Temp\8042.tmp”, onde “/scomma” permite que o processo seja executado sem uma janela e salve o arquivo recuperado informações para o arquivo temporário seguido.
Com os módulos funcionais trabalhando para roubar dados confidenciais, o módulo de thread continua monitorando o arquivo temporário até que ele seja criado com as informações roubadas.
Em seguida, ele carrega os dados roubados do arquivo temporário para a memória e exclui o arquivo. Antes de enviar os dados roubados ao servidor C2, ele compacta os dados e os criptografa.
Este exemplo, mostrado na Figura 6.1, é onde ele estava prestes a chamar a API BCryptEncrypt() para criptografar o pacote, que começa em 4790E0. A seção destacada em vermelho é como o cabeçalho do pacote. Ele contém o tipo de pacote (0x3EA) que informa ao servidor C2 que tipo de dados está no pacote, um código hash sha256 (69 35 … 3C 4A) dos dados, um ID do módulo (0x14), bem como o ID da vítima . Os dados subsequentes, marcados em azul, começam com um tamanho de dados (0x398) dos seguintes dados (de 10 55 52 4C … até o final), que são as credenciais compactadas do navegador da Web.
Este módulo de thread usa onze servidores C2 para receber dados roubados do dispositivo da vítima. O IP e as portas desses servidores C2 são criptografados na memória e descriptografados antes de enviar os dados roubados. Os três módulos baixados possuem a mesma lista de servidores C2, que pode ser encontrada na seção “IOC” ao final desta análise.
A Figura 6.2 é uma captura de tela de uma ferramenta de proxy mostrando como o pacote com os dados confidenciais da vítima roubada é enviado para seu servidor C2.
Ele usa o método HTTP Post com uma URL aleatória para enviar os dados roubados no corpo, que consiste em uma chave exportada de 40 horas no início com os dados criptografados a seguir, conforme mostrado na Figura 6.2. O servidor C2 pode descriptografar os dados enviados usando a chave exportada 40H.
Na Parte II desta análise, comecei com um pacote de módulo recebido de um servidor C2 e expliquei a estrutura do pacote. Em seguida, mostrei como o módulo (thread-module) é executado em um thread recém-criado. Em seguida, explicamos como o módulo de thread executa o processo de esvaziamento para executar os módulos funcionais.
Ao discutir os três módulos recebidos, elaborei sobre que tipo de dados o Emotet pode roubar do dispositivo da vítima, como informações de contato de e-mail da conta de e-mail da vítima, configurações da conta de e-mail, credenciais do cliente de e-mail da vítima e credenciais salvas em um ampla variedade de navegadores da web.
Finalmente, voltando ao módulo de thread, o Emotet lê as informações roubadas dos arquivos temporários fornecidos. Em seguida, ele compacta e criptografa os dados, que são enviados usando o método HTTP Post para o servidor C2.
Os clientes da Fortinet já estão protegidos contra esse malware pelos serviços Web Filtering, AntiVirus, FortiMail, FortiClient, FortiEDR e CDR (desarmamento e reconstrução de conteúdo) do FortiGuard, como segue:
A macro maliciosa dentro da amostra do Excel mencionada na Parte I do post pode ser desarmada pelo serviço FortiGuard CDR (desarme e reconstrução de conteúdo).
Todos os URLs relevantes foram classificados como ” Sites maliciosos ” pelo serviço FortiGuard Web Filtering.
A amostra do Excel capturada e o arquivo dll Emotet baixado são detectados como ” VBA/Emotet.2826!tr.dldr ” e ” W32/Emotet.B185!tr ” e são bloqueados pelo serviço FortiGuard AntiVirus.
O FortiEDR detecta o arquivo Excel e o arquivo dll Emotet como maliciosos com base em seu comportamento.
Além dessas proteções, a Fortinet também fornece várias soluções projetadas para ajudar a treinar os usuários na detecção e compreensão de ameaças de phishing:
Incentivamos as organizações, em parceria com a Fortinet, a fazer com que seus usuários finais participem do nossos Treinamentos. Saiba mais com um de nossos consultores.
Fonte: Fortinet
*/ ?>