Por Threat Intelligence Team

O Chaes é uma ameaça documentada originalmente em novembro de 2020 pela Cybereason em ataques visando o roubo de dados de clientes de um dos mais relevantes marketplaces da América Latina e de sua empresa de serviços financeiros. Em janeiro de 2022, a Avast publicou um novo estudo sobre a ameaça e, na ocasião, foi registrado que os operadores do malware incorporaram novas instituições à sua lista de alvos, passando a atacar clientes de um banco estatal brasileiro e de outro marketplace no país. Em nossa análise, também foi possível observar mecanismos preparados para extrair dados de correntistas de outra instituição financeira pública brasileira.

Nestes ataques, não há a exploração de qualquer vulnerabilidade no ambiente destas empresas, mas se busca tomar o controle do navegador do usuário para que seus dados de acesso a estas plataformas sejam roubados em meio à navegação ou extraídos do Google Chrome.

Imagem 1 – Trecho do código em que alguns alvos são definidos. Fonte: Tempest

Preparação do ambiente

Nessa campanha, o vetor de infecção pelo Chaes segue como documentado pela Avast em janeiro, sendo baseado em um arquivo no formato MSI, o qual é distribuído por meio de websites adulterados para que se pareçam com uma fonte para a atualização de software, sobretudo do Java. A tática visa persuadir o usuário a fazer o download e executar a atualização falsa.

O MSI malicioso foi criado usando o programa Advanced Installer e contém um Custom Action que executa um script em JavaScript, cujo código contém um longo comentário no qual o adversário adota a técnica de Binary Padding, aumentando o tamanho do arquivo para que sistemas automáticos de segurança tenham dificuldade em analisá-lo, devido às restrições com relação ao tamanho dos arquivos. Este comentário faz com que o arquivo tenha mais de 100MB e ao removê-lo seu tamanho passa a ser de 14KB.

Imagem 2 – Comentário presente no código com objetivo de aumentar o tamanho do arquivo. Fonte: Tempest

O arquivo JavaScript é previamente ofuscado e sua função é instalar o Python, o NodeJS e outros módulos necessários para que scripts adicionais da ameaça possam ser executados. O script inicia uma sessão do PowerShell com o parâmetro “-WindowStyle Hidden”, o que faz com que a janela do PowerShell não seja exibida, tornando essa fase do ataque imperceptível ao usuário. Após isso, ele repassa os comandos por meio da escrita direta na linha de comandos do PowerShell, o que evita que tais comandos sejam gravados nos logs do sistema. Muitas destas atividades são executadas por meio do binário wmic.exe, ou Windows Management Instrumentation Command-Line Utility, um utilitário que permite executar funcionalidades do WMI via linha de comando.

|Imagem 3 – Diversas funções da ameaça que utilizam o WMIC. Fonte: Tempest

O WMI é uma funcionalidade presente no Windows que permite executar uma série de atividades no sistema operacional com privilégios administrativos e de forma remota. Trata-se de um mecanismo que é frequentemente abusado por adversários e que não havia sido documentado em análises anteriores sobre o Chaes. O que sugere uma constante evolução da ameaça.

Nesta fase do ataque, a ameaça também grava um arquivo que é usado como Killswitch, de modo a evitar que todo o processo seja executado mais de uma vez. O arquivo fica armazenado em “C:\Users\<USER>\AppData\Roaming” e seu nome é a combinação do nome do usuário logado com o nome do computador.

Imagem 4 – Exemplo do arquivo utilizado como killswitch. Fonte: Tempest

Segundo estágio

Após preparar o ambiente, um dos comandos enviados para a sessão do PowerShell executa um script em Python que inicia o segundo estágio da ameaça. Assim como no caso de seus outros componentes, o script em Python, salvo com o nome main.py, se encontra totalmente ofuscado e tem a função de ativar mecanismos de persistência.

Imagem 5 – Início do código responsável por estabelecer persistência através do agendador de tarefas. Fonte: Tempest

O script em Python se comunica com o endereço https://dev-chaes3[.]blogspot[.]com/ que funciona como um dead drop, oferecendo o caminho para que a ameaça possa baixar os componentes de seu próximo estágio por meio da página de um blog, mas que também distribui um outro script em Python que será executado no computador das vítimas pelo segundo estágio da ameaça. 

Ao se comunicar com este blog, o dead drop responde com um valor encriptado que se encontra em uma determinada posição do código html do blog. Este valor corresponde a um outro script em Python.

Imagem 6 – Valor criptografado no blog. Fonte: Tempest

Terceiro estágio

O terceiro estágio da ameaça é responsável por capturar diversas informações sobre o sistema da vítima e as enviar para o primeiro servidor de comando e controle (C2) do Chaes de forma criptografada. Este tipo de coleta é atualizada periodicamente e seu conteúdo vai desde o nome do usuário logado até os programas instalados no computador da vítima. 

{
   "request-type":8,
   "uuid":"USERPC15DF551483FA7B2",
   "install-id":"",
   "user":"user",
   "computername":"",
   "version":"chs-0.0000",
   "windows":"Windows-7-6.1.7601-SP1",
   "process-list":[
      [
         "System Idle Process",
         "",
         "0",
         "0"
      ]
   ],
   "bios-info":"\\\\\\\\USER\\nHotfix(es): [04]: KB2670838\\n,
   "disks-info":"",
   "ifconfigme":{
      "ip_addr":"",
      "remote_host":"unavailable",
      "user_agent":"python-requests/2.28.1",
      "port":34400,
      "method":"GET",
      "encoding":"gzip, deflate",
      "mime":"*/*",
      "via":"1.1 google",
      "forwarded":""
   },
   "hostname":"",
   "location":false,
   "screensize":"",
   "appdata":"C:\\\\Users\\AppData\\\\Roaming",
   "proc":{
      "Name":"5th Gen Intel(R) Core(TM) i5 @ 2.80GHz",
      "NumberOfCores":"4"
   },
   "mem":"0",
   "disk":{
      "HomeDrive":"C:",
      "Capacity":"",
      "FreeSpace":"",
      "SerialNumber":""
   },
   "installed-apps":[
      {
         "name":"Google Chrome",
         "version":"0",
         "publisher":"Google LLC"
      }
   ],
   "win32username":"user"
}

Trecho de código 1 – Exemplo de informações coletadas pela ameaça no terceiro estágio de infecção. Fonte: Tempest

Quarto Estágio

Ao receber o pacote com dados sobre o computador da vítima, o primeiro C2 responde com um, dentre vários scripts em Python possíveis de serem usados nesta fase do ataque, de modo que os adversários possuem a liberdade de executar qualquer código no computador da vítima.

Durante nossas análises, foi possível constatar que os scripts enviados para a vítima funcionavam como módulos, sendo carregados dinamicamente e em momentos específicos. O primeiro é um módulo que atua como um teste, executando um comando de sleep, ação que apenas faz com que o computador aguarde por um determinado período de tempo. Já o segundo módulo, se trata de um script em Python identificado como chremows que instala dependências do framework NodeJS e posteriormente executa um script no formato desse framework. 

Imagem 7 – Definições presentes no script chremows. Fonte: Tempest.

A principal vantagem da adoção do NodeJS por desenvolvedores de malware tem relação com o fato de que essa ferramenta permite a execução de código em JavaScript sem depender do navegador. No entanto, desde o primeiro relatório do Chaes foi documentado o uso do NodeJS de modo a abusar de uma biblioteca para este framework, chamada Puppeteer, a qual permite que o atacante controle o navegador Chrome/Chromium, navegue pelo website alvo como se fosse o usuário logado, faça scraping do seu conteúdo e a captura de prints de tela, roubando as informações da vítima.

Imagem 8 – Funcionalidades do Puppeteer. Fonte: Reprodução.

Quinto Estágio

A exemplo do quarto estágio, o script em NodeJS, denominado bremows, também pode ser carregado dinamicamente com códigos e funcionalidades variadas ao critério dos adversários. Para funcionar, ele precisa de diversas dependências, uma dessas é Puppeteer, usada para se comunicar com o navegador Chrome/Chromium e controlá-lo de forma que o usuário não perceba qualquer comportamento suspeito em seu computador.

Imagem 9 -Definições presentes no script bremows. Fonte: Tempest

Assim que passa a controlar o Chrome/Chromium da vítima, o script bremows se conecta a um segundo servidor de comando e controle via Websocket. Com este tipo de acesso ao dispositivo da vítima, os adversários podem exercer um grande controle sobre a máquina infectada.

Em meio à execução deste estágio da ameaça, o binário wmic.exe é por várias vezes usado para obter dados do computador da vítima.

Todos os ícones de atalho do Windows que antes apontavam para o Google Chrome são alterados para que o script Python do segundo estágio seja executado ao invés do navegador. A execução do script é feita usando parâmetros que permitam que este seja decifrado e executado a partir da mesma pasta na qual o malware está instalado, usando um nome aleatório e com a extensão “.json”.  

Imagem 10 – Ícone do Google Chrome adulterado pelos adversários. Fonte: Tempest

Com todos os seus componentes ativados, o Chaes monitora o acesso aos sites elegíveis ao ataque e intercepta os dados sensíveis do usuário (como login e senha)  no momento em que este está acessando o website de interesse do atacante. Todos os dados são enviados por meio de requisições HTTP/HTTPS do tipo POST para o segundo servidor de comando e controle e também para um terceiro servidor, o qual não é envolvido nos estágios anteriores do ataque.

Comentário do analista

O Chaes é uma ameaça desenvolvida com uma preocupação considerável em manter o processo de infecção fragmentado em múltiplos scripts carregados dinamicamente, os quais são acionados de maneira a deixar poucos rastros no disco e com a comunicação criptografada, de modo que os atacantes possuem uma liberdade muito grande para executar código na máquina da vítima a qualquer momento.

Entretanto, trata-se de um malware que depende do Chrome/Chromium, de ferramentas como o Python e NodeJS e de binários do sistema operacional, como o wmic.exe que, estes sim, deixam rastros que podem ajudar na atividade de threat hunting ou no monitoramento.

Compartilhamos abaixo as oportunidades de detecção e os IOCs ligados a esta ameaça.

Oportunidade de Detecção

#1

#2

#3

#4

#5

MITRE ATT&CK Techniques

IOCs

DeadDrop

https://dev-chaes3[.]blogspot[.]com/

IP C&C

18.231[.]166[.]119

18.230[.]122[.]127

54.207[.]61[.]146

Arquivos

File: envolved_1.msi

SHA256: 69efd76deec6c071cd692716fe81c2bef9292efcd522a2aacd5f21eac3ab2301

SHA1: 07184e073d56f318bce8367e8fad5a36fda34e96

MD5: 46ddc8f357f45998f6f12ad7d7551689

File: __main__.py

SHA256: 27f13731c5f5994238ee60be5f055b3265b343fcdc78ae8add2176f8fcc93a3c

SHA1: de2f8ff77f14baae5892b94a4822aee53a1a28c4

MD5: f0abf9c199995e671ded652155d31000

Referências

CHAES: Novel Malware Targeting Latin American E-Commerce. Cyberreason. 17 Novembro 2020.

Chasing Chaes Kill Chain. Avast. 25 Janeiro 2022.