Relatório de pesquisa de ameaças do FortiGuard Labs

Plataformas afetadas: Microsoft Windows
Partes afetadas: Usuários do Windows
Impacto: Coleta informações confidenciais dos computadores das vítimas e entrega e executa módulos maliciosos no dispositivo das vítimas.
Nível de gravidade: Crítico

Dridex é um malware Trojan, também conhecido como Bugat ou Cridex, que é capaz de roubar informações confidenciais de máquinas infectadas e executar módulos maliciosos (dll).
O FortiGuard Labs recentemente capturou novas campanhas de e-mail de phishing que incluíam um anexo de documento Excel especialmente criado. Uma pesquisa profunda foi feita sobre um deles e descobriu que assim que o documento Excel malicioso é aberto na máquina da vítima, ele baixa uma nova variante do Dridex.

O e-mail de phishing da variante Dridex

A Figura 1.1 mostra um dos e-mails de phishing recentes com um anexo malicioso do Excel infectado com Dridex.

Figure 1.1 – Text of a recently captured phishing email
Figura 1.1

Como você pode ver, este e-mail se disfarça como enviando dados de Tarifas de Importação a um cliente e, em seguida, pedindo a ele / ela para ver os detalhes abrindo o arquivo Excel em anexo (neste caso, “HF7.TRANS 2021.08.09.xlsb”) .

Análise da macro dentro do documento Excel

Quando o destinatário abre o documento Excel anexado, ele contém uma mensagem na parte superior do documento em letras vermelhas em negrito solicitando que “ative as macros”. No entanto, o Excel exibe uma barra amarela de “Aviso de Segurança” informando ao usuário final que as macros estão desativadas no momento, com a implicação de que clicar no botão “Ativar Conteúdo” pode ser arriscado, conforme mostrado na Figura 2.1.

Figure 2.1 – Excel displays a warning bar when opening the infected Excel document
Figura 2.1

Olhando para os detalhes internos do arquivo do Excel, descobri que ele não só usava a macro de execução automática (VBA), mas também a macro do Excel 4.0. Há uma função de execução automática chamada Workbook_Open () na Macro (VBA), que é chamada automaticamente quando o arquivo do Excel é aberto.

O código abaixo incluí:

Sub Workbook_Open ()
ActiveWorkbook.Sheets (“Macro1”). Range (“A1”). Value = Environ (“allusersprofile”) &
“\ KgmsgJbgP.sct”
End Sub

Ele apenas define o valor Environ (“allusersprofile”) & “\ KgmsgJbgP.sct” (“C: \ ProgramData \ KgmsgJbgP.sct” no ambiente de teste) para a célula “$ A $ 1” de uma planilha chamada “Macro1”.

“Macro1” é uma planilha oculta que contém e executa a Macro do Excel 4.0, que é definida no arquivo “xl \ workbook.xml” conforme mostrado na Figura 2.2.

Figure 2.2 – Excel 4.0 Macro sheet is defined in “Workbook.xml”
Figura 2.2

Os macros do Excel 4.0 usam fórmulas em várias células para executar o código. Contanto que você dê a ela uma célula inicial, ela executa o código de cima para baixo e, em seguida, da esquerda para a direita.

Após a macro de execução automática (VBA) ser executada, a macro do Excel 4.0 é executada automaticamente a partir da célula “Macro1! $ A $ 4”.

O macro do Excel 4.0 extrai dados de um monte de células dentro da planilha “Macro1” em um arquivo local, cujo caminho de arquivo é salvo em $ A $ 1, que é “C: \ ProgramData \ KgmsgJbgP.sct”. Os dados extraídos são um aplicativo HTML (arquivo .hta) com uma parte do código VBScript. A última etapa da macro do Excel 4.0 é executar este arquivo “KgmsgJbgP.sct” usando o comando “mshta”, que é = EXEC (CONCATENATE (“mshta”, CHAR (34), A1, CHAR (34))).

O comando final a ser executado é “mshta.exe C: \ ProgramData \ KgmsgJbgP.sct“. “Mshta.exe” é um programa padrão do Windows usado para executar um aplicativo html (arquivo .hta) com HTML, HTML dinâmico e uma ou mais linguagens de script suportadas pelo Internet Explorer, como VBScript ou JScript.

Aplicação do HTML usado para baixar o malware Dridex

Figure 3.1 – Malicious VBScript code in the extracted hta file
Figura 3.1

O código VBScript, conforme mostrado na figura 3.1, inclui uma matriz de dez URLs que se vinculam ao arquivo do Dridex. Ele baixa o Dridex desses dez URLs em um loop for para um arquivo local, “% ALLUSERSPROFILE% \ icXBOuZukiASGnpfVowZ.dll”, que está codificado neste código VBScript. Quando o Dridex é baixado com sucesso, ele executa “wmic.exe” (a linha de comando WMI) para criar um novo processo de “rundll32.exe”.
O código simplificado é parecido com este:

CreateObject (“Wscript.Shell”). Exec (“wmic process call create \” Rundll32.exe% ALLUSERSPROFILE% \ icXBOuZukiASGnpfVowZ.dll ReportDeviceAdd \ “”)

Finalmente, Rundll32.exe carrega o arquivo de carga útil Dridex “icXBOuZukiASGnpfVowZ.dll” e chama sua função de exportação, chamada “ReportDeviceAdd”, para executar suas funções maliciosas.

Mergulhando no arquivo do malware Dridex baixado

Figure 4.1 – The Dridex variant’s export function list in IDA Pro
Figura 4.1

A Figura 4.1 mostra a lista de funções de exportação do Dridex no IDA Pro. Ele contém duas funções: DllEntryPoint () é a função de entrada para esta dll. E FWroeeWqoinnmw () é a função de entrada real. Uma coisa estranha aqui é que não há função para “ReportDeviceAdd”, que deve ser o ponto de partida desta variante Dridex.

Para descobrir isso, analisamos a estratégia interna que o Rundll32.exe usa para carregar um módulo e, em seguida, chamar sua função de exportação. A Figura 4.2 mostra a lista de funções de exportação do arquivo de carga útil do Dridex depois de descompactado. Ele oferece seis funções de exportação. A quarta função é “ReportDeviceAdd”.

Figure 4.2 – The export function list of unpacked payload file
Figura 4.2

Aqui estão as etapas de como o Dridex é carregado pelo Rundll32.exe.

As etapas usadas por Rundll32 para carregar uma dll e chamar a função de exportação:

  1. Rundll32.exe chama a API LoadLibrary () para carregar a dll na memória e implantá-la de acordo com sua estrutura PE.
  2. Ele primeiro chama a função de ponto de entrada da dll – DllEntryPoint () – para inicializar o módulo.
  3. Em seguida, ele chama API GetProcAddress () com o nome de função “ReportDeviceAdd” para obter o endereço da função do módulo inicializado na etapa 2.
  4. O Rundll32.exe então chama o endereço da função obtido na etapa 3.

Este arquivo também contém um programa semelhante a um descompactador para se proteger de ser pesquisado por pessoas. Ele faz a descompactação na etapa 2 quando o DllEntryPoint () do arquivo do malware é chamado.

A partir deste ponto, Rundll32.exe é capaz de obter ReportDeviceAdd chamando a API GetProcAddress ().

Técnicas de anti-análise usadas no Dridex

A maioria dos malwares modernos inclui técnicas de anti-análise em seu código para evitar que seja analisado.

Esta variante Dridex usa técnicas anti-análise semelhantes a outra variante Dridex que foi analisada no ano passado, que são:

  • Todas as APIs estão ocultas e são encontradas pelo código hash de seu nome.
  • Strings inteiras de constantes são criptografadas na memória e descriptografadas antes de usar.
  • Algumas APIs são chamadas de maneira elaborada para gerar uma exceção (0x80000003) propositalmente. Em seguida, ele captura a exceção na função de manipulador de exceção para realmente chamar a API.

Formato do pacote enviado ao servidor C2

O Dridex coleta dados confidenciais do dispositivo infectado da vítima, que são colocados em um pacote formatado, criptografado e enviado ao servidor C2.

A Figura 5.1 é uma captura de tela do primeiro pacote para um servidor C2 que estava para ser criptografado. Todos os pacotes para o servidor C2 têm o mesmo formato de pacote. Como exemplo, o formato do pacote abaixo, que foi separado em muitos campos por um tubo vermelho na captura de tela.

A parte selecionada são dados comuns para todos os pacotes, o que é referido como um “cabeçalho do pacote” nesta análise.

Figure 5.1 – The first packet to the C2 server before encrypted
Figura 5.1
OffsetLengthData
0x000x01The length of the victim’s ID string.
0x010x29The victim’s ID string, which is variable.
0x2A0x20The hard drive’s volume Information for the infected device.
0x4A0x02Dridex version information—which is 0x56B9 in this variant.
0x4C0x04A dword mixed with infected Windows version information.
0x500x04Packet Type Identification. 0x18F8C844 is for the first packet.
0x540x01Windows platform. 0x20 for 32-bit, 0x40 for 64-bit.
0x55variableCollected data from the victim’s system.
A Tabela 5.1 explica o conteúdo de cada campo no formato do pacote.
  • A string de identificação da vítima contém o nome do computador, sublinhado e um código hash MD5 de uma string que inclui o nome do computador, o nome do usuário e a data de instalação do sistema Windows.
  • As informações de volume do disco rígido são um valor MD5 feito de dados de informações de volume de “C: \” e a data de instalação do Windows.
  • 0x56B9 são dados codificados no malware, possivelmente a versão do malware.
  • 0x11C1B11D é um conjunto de dados misto de informações de versão do Windows, que é obtido do resultado das APIs GetVersionEx () e GetSystemInformation ().
  • O Dridex tem cinco IDs de tipo de pacote nesta variante, usados ​​para notificar o servidor C2. Eles são 0x18F8C844, 0x69BE7CEE, 0x11041F01, 0xD3EF7577 e 0x32DC1DF8.
  • Os dados após 0x20 indicam que o sistema Windows da vítima é uma plataforma de 32 bits.

Os valores de campo de cada cabeçalho de pacote Dridex (exceto para o tipo de pacote ID) são os mesmos para todos os pacotes na mesma máquina.

Os dados coletados (começando do deslocamento 0x55) são anexados ao cabeçalho do pacote, que possui dois campos: o tamanho dos dados coletados (quatro bytes na ordem de bytes da rede) e os dados coletados em seguida.

Envio de informações coletadas para o servidor C2

Como na versão anterior, o endereço IP e a porta dos servidores C2 são codificados nos dados. Abaixo está a lista de IPs em binário dos três servidores C2.

.data: 72C6D02C dd 2C94B67h; IP: 103.75.201.2
.data: 72C6D030 dw 1BBh; porta: 443
.data: 72C6D032 dd 6C01DF9Eh; IP: 158.223.1.108
.data: 72C6D036 dw 1851h; porta: 6225
.data: 72C6D038 dd 0F21C16A5h; IP: 165.22.28.242
.data: 72C6D03C dw 1238h; porta: 4664

O malware escolhe um endereço IP e um par de portas em um loop “for”. Uma vez que uma conexão com o servidor C2 é estabelecida com sucesso, ela é usada ao longo da vida do processo.

“0x18F8C844” é o ID do pacote para o primeiro pacote. Os dados coletados consistem em todo o software instalado (incluindo o nome e a versão do software) e todas as variáveis ​​de ambiente definidas no sistema infectado.

Ele obtém as informações do software instalado uma a uma enumerando as subchaves na chave “HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall” no registro do sistema.

Também rouba os valores das variáveis ​​de ambiente definidas no sistema da vítima. Na máquina de teste, eles são ALLUSERSPROFILE, APPDATA, CommonProgramFiles, COMPUTERNAME, ComSpec, FP_NO_HOST_CHECK, HOMEDRIVE, HOMEPATH, LOCALAPPDATA, LOGONSERVER, number_of_processors, OS, Path, PATHEXT, PROCESSOR_ARCHITECTURE, PROCESSOR_IDENTIFIER, PROCESSOR_LEVEL, PROCESSOR_REVISION, ProgramData, ProgramFiles, PSModulePath, PUBLIC , QT_AUTO_SCREEN_SCALE_FACTOR, SystemDrive, SystemRoot, TEMP, TMP, USERDOMAIN, USERNAME, USERPROFILE, VS140COMNTOOLS e windir.

Ele chama a API GetEnvironmentStringsW () para obter todos os valores das variáveis de ambiente acima. A Figura 6.1 mostra um conjunto parcial dos pares nome-valor obtidos na memória.

Figure 6.1 – Display of obtained environment variables in the victim’s device
Figura 6.1 – Exibição das variáveis de ambiente obtidas no dispositivo da vítima

Assim que o primeiro pacote é concluído, o Dridex criptografa o pacote e o envia ao servidor C2 usando o método HTTP POST. Ele chama um grupo de APIs para enviar e receber os dados, como InternetConnectW (), HttpOpenRequestW (), HttpSendRequestW (), HttpQueryInfoW () e InternetReadFile ().

Infelizmente, seus servidores C2 ficaram inativos durante a análise, por isso não foi possível enviar / receber dados de / para os servidores C2. Mas de acordo com seu fluxo de trabalho de código, poderíamos criar um servidor C2 falso do Dridex para simular os comportamentos do servidor para receber e responder ao Dridex para continuar a pesquisa. A análise a seguir é baseada nesses dados simulados.

Implantando um Módulo Malicioso do Servidor C2

Depois de receber o pacote de resposta ao primeiro pacote do servidor C2, ele envia o segundo pacote (ID do pacote 0x11041F01) sem dados coletados. Ele deve responder com um módulo malicioso (arquivo dll) no pacote de resposta. Dridex verifica o pacote de resposta comparando o código hash do pacote, que são os primeiros quatro bytes do pacote. Em seguida, o Dridex envia outro pacote (ID do pacote 0xD3EF7577) para informar ao servidor C2 que recebeu o módulo com sucesso.

Figure 7.1 - A module extracted from the second response packet.
Figura 7.1 – Um módulo extraído do segundo pacote de resposta.

O segundo pacote de resposta contém um módulo criptografado (dll). Depois que o Dridex verifica o pacote recebido, ele descriptografa o módulo que é como os dados de memória exibidos na parte inferior da Figura 7.1.

Dridex então prossegue para implantar este módulo malicioso na máquina da vítima e, em seguida, cria uma tarefa agendada para executar o módulo. Vamos ver como isso acontece.

Para manter o módulo em execução secretamente na máquina da vítima, o Dridex usa um programa padrão do Windows para carregá-lo e executá-lo. Ele escolhe aleatoriamente um par de programa do Windows (exe) e um arquivo dll de “% windir% \ system32” que o programa escolhido deve carregar. Em seguida, o Dridex pode substituir o arquivo dll escolhido com o módulo recebido. Portanto, uma vez que o programa escolhido é iniciado, o módulo malicioso dentro da dll escolhida é executado.

Desta forma, a vítima apenas supõe que um programa do Windows está sendo executado, não um módulo de malware.

A Figura 7.2 é uma captura de tela do par recém-escolhido do programa Windows e do arquivo dll de “% windir% \ system32 \”

Figure 7.2 – Chosen Windows program and dll
Figura 7.2 – Programa e dll escolhido para Windows

Dridex copia o programa do Windows escolhido (desta vez, é “sdclt.exe”) em uma pasta recém-criada, com string aleatória (como “Okuo”) na pasta “% appdata%”. Enquanto isso, ele lê a dll escolhida (“slc.dll”) na memória e então sobrescreve seus dados com o módulo malicioso trabalhado a partir da resposta ao segundo pacote. Por fim, o Dridex chama o API WriteFile () para salvá-lo na mesma pasta do programa do Windows copiado. A partir de agora, sempre que o programa do Windows – “sdclt.exe” – é iniciado, ele carrega e executa o “slc.dll” que contém o módulo malicioso.

O Dridex então cria uma tarefa agendada no sistema Windows infectado para conseguir persistência na máquina da vítima. A ação da tarefa é apenas iniciar o programa do Windows copiado (ou seja, “sdclt.exe”) e é acionado para repetir esta ação a cada 30 minutos.

A Figura 7.3 mostra uma captura de tela do “Agendador de tarefas” com a tarefa adicionada chamada “Tixvzwbtojdsmg”, bem como os arquivos “sdclt.exe” e “slc.dll” copiados na pasta “Okuo”.

Figure 7.3 – Added scheduled task and copied Window program and dll files.
Figura 7.3 – Tarefa agendada adicionada e programa do Windows copiado e arquivos dll.

Além de adicionar à tarefa agendada, ele também chama a API CreateProcessW () para executar “sdclt.exe” uma vez logo após ter sido implantado.

Antes de sair do Dridex, ele envia um pacote com a ID 0x69BE7CEE para informar ao servidor C2 que o malware foi instalada com sucesso na máquina da vítima. A Figura 7.4 é um trecho de código prestes a gerar e enviar esse pacote.

Figure 7.4 – Code snippet of handling packet 0x69BE7CEE
Figura 7.4 – Snippet de código do pacote de manuseio 0x69BE7CEE

Conclusão – Variante Dridex

Agora você aprendeu como a campanha de malware Dridex é executado, incluindo o e-mail de phishing, como o código malicioso dentro do documento Excel anexado é executado para extrair um arquivo de aplicativo HTML e, finalmente, como um Rundll32.exe é chamado para executar o Dridex do arquivo baixado.

Foi elaborado o comportado de como essa variante do Dridex se comunica com o ervidor C2, os campos contidos no pacote, como ele solicita um módulo malicioso ao servidor C2 e como o módulo é implantado no sistema infectado.

Também foi realizado um fluxograma de como o Dridex se comunica com os servidores C2 abaixo na Figura 8.1. Mostra claramente quais pacotes e dados foram enviados ao servidor C2 e quando ele recebeu o módulo malicioso. Isso ajuda a entender melhor todo o processo.

Figure 8.1 - Communication flow chart between Dridex and its C2 server.
Figura 8.1 – Fluxograma de comunicação entre Dridex e seu servidor C2.

Proteções Fortinet

Os clientes Fortinet já estão protegidos contra esse malware pelos serviços de Filtragem da Web, AntiVírus e FortiEDR do FortiGuard, da seguinte maneira:

Os URLs de download foram classificados como “Sites Maliciosos” pelo serviço FortiGuard Web Filtering.
O documento Excel anexado e o arquivo do Dridex baixado são detectados como “MSExcel / Dridex.AC! Tr” e “W32 / Dridex.HMAH! Tr” e são bloqueados pelo serviço FortiGuard AntiVirus.

Os usuários do FortiMail são protegidos pelo FortiGuard AntiVirus, que detecta o documento original do Excel como um anexo malicioso no e-mail de phishing.

O FortiEDR detecta o arquivo executável baixado como malicioso com base em seu comportamento.

IOCs

URLs:

“hxxps[:]//assettagger[.]saleseos[.]com/Classes/PHPExcel/Shared/JAMA/examples/RLFBubHuLTnm[.]php”
“hxxps[:]//reportingdashboard[.]mobilisedev[.]co[.]uk/includes/6WSSUhQrM[.]php”
“hxxps[:]//loans[.]uhuruloans[.]com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/X8av4FUl7STEot3[.]php”
“hxxps[:]//practice[.]haylawdesign[.]com/wp-content/themes/twentynineteen/template-parts/content/jE4zYiuJ0iIw[.]php”
“hxxps[:]//kings[.]inforwizztechnologies[.]com/wp-content/plugins/aapside-master/elementor/widgets/tfOSpcBiZpffptj[.]php”
“hxxps[:]//pizzaplus[.]com[.]ng/wp-content/themes/twentytwentyone/template-parts/content/TZ6qTYLx7l[.]php”
“hxxps[:]//efshub[.]com/PHPMailer-master/examples/images/zunuLqqNQIGJPht[.]php”
“hxxps[:]//user[.]kasikoi[.]info/static/lib/ckeditor/skins/moono/2h80F9GORDfIB[.]php”
“hxxps[:]//deepsource[.]in/ncsitebuilder/css/flag-icon-css/flags/1×1/wcToKXeb7FxQ[.]php”
“hxxps[:]//ebanking[.]hentostreasury[.]com/account/umSqqCiyMf[.]php”

C2 Sever IP and Port:

“103.75.201.2:443” 
“158.223.1.108:6225”
“165.22.28.242:4664”

Sample SHA-256:

[HF7.TRANS 2021.08.09.xlsb]
59C8D87A450F0647BEA930EBA1AA692B75D82DEF1358F1601C4FE9A561B4707E
[DTCZ SHIP_2021.08.09.xlsb]
C8065BD2A1443FF988E9BA95022554F6EE302E9BCB4082C3D9B2B8D74C5A4BE5 
[icxbouzukiasgnpfvowz.dll]
6556E4029CF50C9538F4E02D0BCCA5356F28E6870E62838E164020A31B3DF096

REFERÊNCIAS:

https://www.fortinet.com/blog/threat-research/new-dridex-variant-being-spread-by-crafted-excel-document

https://www.fortinet.com/fortiguard/labs?utm_source=blog&utm_campaign=fortiguard-labs

https://www.fortinet.com/resources/cyberglossary/phishing?utm_source=blog&utm_campaign=phishing

https://www.fortinet.com/support-and-training/support-services/fortiguard-security-subscriptions/web-filtering.html?utm_source=blog&utm_campaign=web-filtering