Jia Yu ChanElastic Security Labs

Apelo MaaS: Um ladrão de informações renasce das cinzas

NOVABLIGHT é um infostealer NodeJS desenvolvido e vendido como uma oferta MaaS; ele é usado principalmente para roubar credenciais e comprometer carteiras de criptomoedas.

18 minutos de leituraAnálise de malware
Apelo MaaS: Um ladrão de informações renasce das cinzas

NOVABLIGHT em resumo

NOVABLIGHT é um ladrão de informações de malware como serviço (MaaS) baseado em NodeJS, desenvolvido e vendido por um grupo de ameaças que demonstra proficiência na língua francesa. Isso fica evidente nas discussões e comunicações operacionais em suas principais plataformas de vendas e suporte, Telegram e Discord.

Com base em nossa análise da última versão lançada do NOVABLIGHT, o seguinte trecho de código sugere que o Sordeal Group, o grupo por trás do Nova Sentinel e do MALICORD, também é responsável pelo NOVABLIGHT.

Principais conclusões

  • NOVABLIGHT é um infostealer descrito como uma ferramenta educacional, embora as mensagens do canal do Telegram revelem informações confidenciais e capturas de tela não editadas.
  • As licenças NOVABLIGHT são válidas por até um ano, e os binários podem ser gerados via Telegram ou Discord.
  • Código altamente ofuscado com muitos recursos.

Descoberta

O Elastic Security Labs identificou diversas campanhas que utilizam downloads falsos de instaladores de videogame como uma isca de acesso inicial para infecções de MaaS de usuários da internet. Em um exemplo, a URL http://gonefishe[.]com solicitou que o usuário baixasse um binário e instalasse uma versão em francês de um jogo com nome e descrição comparáveis a um lançado recentemente no Steam.

Distribuição, monetização e comunidade

O grupo anunciou e vendeu seu produto em várias plataformas online, anteriormente Sellix e Sellpass e atualmente Billgang.

O grupo vende uma chave de API, que expira entre 1 e 12 meses. Essa chave pode então ser usada para criar uma instância do NOVABLIGHT por meio de um bot do Telegram ou do Discord.

O grupo promove um programa de indicação em seu canal do Discord com chaves de API como recompensas.

Os usuários têm acesso a um painel hospedado pelo grupo que apresenta as informações coletadas das vítimas. Os seguintes domínios foram identificados, embora outros possam existir:

  • api.nova-blight[.]top
  • shadow.nova-blight[.]top
  • nova-blight[.]site
  • nova-blight[.]xyz
  • bamboulacity.nova-blight[.]xyz

Algumas das imagens usadas no painel estão hospedadas em repositórios do GitHub associados a diferentes contas, o que ajudou a expor mais detalhes sobre o grupo.

A conta do GitHub KSCHcuck1 é um pseudônimo semelhante ao do autor anterior do MALICORD, uma versão gratuita da versão mais antiga do ladrão que foi hospedada no GitHub na conta KSCH-58 (LINK DO ARQUIVO DA WEB). A conta X @KSCH_dsc também possuía semelhanças e estava anunciando ativamente seu "melhor ladrão já lançado" até 2023.

As seguintes contas do GitHub foram identificadas em relação ao grupo:

O canal público deles no Telegram hospeda tutoriais e uma comunidade de usuários. Na captura de imagem a seguir, os usuários estão compartilhando capturas de tela do processo de construção.

Usuários do infostealer estão compartilhando abertamente imagens de itens de luxo e transferências de dinheiro, o que é notável porque o NOVABLIGHT é descrito como sendo exclusivamente para fins educacionais.

Análise NOVABLIGHT

NOVABLIGHT é um ladrão de informações modular e rico em recursos criado no NodeJS com o framework Electron. Seus recursos vão além do simples roubo de credenciais, incorporando métodos de coleta e exfiltração de dados, detecção de sandbox e ofuscação pesada.

Um aspecto notável do processo de construção do malware é sua configuração modular. Embora um cliente possa optar por desabilitar recursos específicos, o código subjacente para essas funções permanece na carga final; ele fica inativo e não será executado com base nos sinalizadores de configuração da compilação.

Os trechos de código neste relatório são de um exemplo não ofuscado da versão 2.0, quando os detalhes de implementação correspondem aos exemplos da versão 2.2, ou do nosso código manualmente desofuscado de um exemplo da versão 2.2, quando eles são diferentes.

Estrutura do código

Da configuração inicial ao roubo de dados, o infostealer é organizado em um pipeline claro e multiestágio, gerenciado por controladores de "fluxo" de alto nível. Os estágios principais são:

  • flow/init: verificações pré-voo (instâncias em execução, privilégios de administrador, conectividade com a internet), verificações antianálise, enumeração de informações do sistema, estabelecimento de persistência, etc.
  • fluxo/injeção: injeção e aplicação de patches (Atomic, Mullvad, Discord, …)
  • fluxo/grabb: Coleta de dados
  • fluxo/Área de transferência: sequestro da área de transferência
  • fluxo/envio: Exfiltração de dados
  • fluxo/desativar: sabotagem do sistema (desativar o Windows Defender, anti-reinicialização do sistema, conectividade de Internet interrompida, …)
  • fluxo/limpeza: Limpeza pós-exfiltração

Para mais informações sobre a estrutura do código, confira este GitHub Gist, que lista as dependências diretas para cada um dos principais módulos e fluxos de execução do NOVABLIGHT.

Detecção anti-depuração e sandbox

O NOVABLIGHT incorpora diversas técnicas para detectar e escapar de ambientes de análise, combinando impressões digitais do ambiente com contramedidas ativas. Essas verificações incluem:

  • Detectando nomes de GPU relacionados à VM (vmware, virtualbox, qemu)
  • Verificando nomes de usuários na lista negra (sandbox, teste, malware)
  • Identificação de arquivos de driver específicos da VM (balloon.sys, qemu-ga)
  • Verificando baixa resolução de tela e falta de dispositivos USB
  • Consultando o GitHub para listas negras de IPs, HWIDs, nomes de usuários, programas, organizações, nomes de GPU, nomes de PC e sistemas operacionais
  • Eliminando ativamente ferramentas de análise e depuração conhecidas encontradas em uma lista remota

As listas negras estão hospedadas no GitHub:

Desabilitar o Defender e tentar desabilitar o Gerenciador de Tarefas

O NOVABLIGHT tenta desabilitar o Windows Defender e os recursos de segurança relacionados ao Windows baixando e executando um script em lote, DisableWD.bat, de um repositório público do GitHub.

O malware afirma ser capaz de desabilitar o Gerenciador de Tarefas, dificultando que um usuário não técnico identifique e elimine o programa malicioso. Ele usa setValues do pacote regedit-rs para definir o valor DisableTaskMgr como 1 em HKCU\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System.

Entretanto, olhando o repositório regedit-rs (v1.0.3 para corresponder), não há funções exportadas chamadas setValues, apenas putValue. Esta funcionalidade pode não funcionar conforme o esperado.

Desativar acesso à Internet

Para interromper a conexão de internet da vítima, o malware emprega dois métodos distintos. O primeiro envolve desabilitar persistentemente o adaptador Wi-Fi, reiniciando-o repetidamente em um loop rápido, utilizando o pacote npm externo wifi-control e sua função resetWiFi .

O segundo método desabilita o adaptador de rede “Ethernet” primário usando o comando netsh , executando-o a cada 5 segundos para desabilitar tentativas de reativação.

Recuperação do sistema de derrota

O malware pode sabotar a recuperação do sistema desabilitando o Ambiente de Recuperação do Windows (reagentc /disable) e excluindo todas as Cópias de Sombra de Volume (vssadmin delete shadows /all) quando o sinalizador antireset estiver habilitado na configuração.

Bloqueando a exclusão de arquivos

Outra função de sabotagem do sistema que pode ser aparente para a vítima envolve tornar o próprio arquivo executável do malware não excluível, modificando suas permissões de segurança por meio de icacls “${filePath}” /deny ${currentUser}:(DE,DC) , onde o DE nega direitos de exclusão e o DC impede a exclusão por meio da pasta pai e, opcionalmente, criando uma caixa de mensagem pop-up contendo uma mensagem de "troll".

Antes de se bloquear, ele também executa um comando do PowerShell para remover a conta da vítima dos seguintes grupos do sistema: Administrators, Power Users, Remote Desktop Users, Administrateurs.

Substituição de endereço da área de transferência

O malware implementa um módulo "clipper" que monitora ativamente a área de transferência da máquina em busca de endereços de criptomoedas ou PayPal e os substitui por endereços definidos na configuração. Se o usuário que criou o payload não forneceu seus próprios endereços, o malware usa como padrão um conjunto codificado, presumivelmente controlado pelos desenvolvedores para capturar fundos de seus usuários menos experientes.

Injeções de aplicação de elétrons

O NOVABLIGHT pode injetar código malicioso em vários aplicativos populares baseados em Electron. As cargas úteis são obtidas dinamicamente do ponto de extremidade https://api.nova-blight[.]top/injections/*targeted_application*/*some_key*, visando aplicativos como:

  • Cliente Discord
  • Carteira Exodus
  • Cliente VPN Mullvad
  • Carteira atômica
  • Cliente de e-mail Mailspring

Conseguimos recuperar todos os módulos de um repositório público do GitHub.

A implementação da injeção é um exemplo clássico de reempacotamento do Electron App: descompactar o arquivo ASAR, reescrever quaisquer arquivos de origem de destino e, em seguida, reempacotá-los. Observando um exemplo envolvendo o cliente Mullvad, ele primeiro descompacta Program Files\\Mullvad VPN\\resources\\app.asar em um diretório temporário, busca uma versão backdoor de account.js de https://api.nova-blight[.]top/injections/mullvad/dVukBEtL8rW2PDgkwdwfbNSdG3imwU8bZhYUygzthir66sXXUuyURunOin9s, substitui o arquivo de origem account.js e, finalmente, o recompacta. Embora ainda possa funcionar para versões mais antigas do Mullvad, como 2025.4, isso não parece funcionar na versão mais recente do Mullvad.

Em um caso semelhante para o cliente Exodus, os desenvolvedores do NOVABLIGHT modificaram a função setPassphrase no módulo principal do aplicativo Exodus, com funcionalidades adicionais de roubo de credenciais.
É assim que main/index.js se parece em uma versão legítima do Exodus 25.28.4:

No index.js trojanizado, as senhas inseridas pelo usuário são exfiltradas por meio de webhooks configuráveis do Discord e do Telegram - usando a API oficial do Telegram ou um proxy personalizado da API do Telegram.

Extração de dados sensíveis do Chrome

Para atingir navegadores baseados em Chromium (Brave, Chrome, Edge) executados na versão 137, o malware baixa um arquivo zip contendo uma ferramenta de descriptografia de dados do Chrome de https://github.com/Hyutop/pandakmc-auto-vote/blob/main/bin.zip.

O repositório do GitHub tenta se disfarçar como uma ferramenta de gerenciamento de votação do Minecraft.

Entretanto, o arquivo zip bin.zip contém o código compilado (decrypt.exe e chrome_decrypt.dll) da versão 0.11.0 do projeto PoC do descriptografador vinculado ao aplicativo Chrome por xaitax.

Enumeração do sistema

Uma vez ativo, o NOVABLIGHT executa um conjunto abrangente de funções de enumeração do sistema projetadas para criar um perfil completo da máquina da vítima e da atividade do usuário. Cada módulo tem como alvo uma informação específica, que é então salva em um diretório local antes de ser carregada no servidor de comando e controle. Os engenheiros de detecção devem observar as implementações específicas de cada técnica e quais fontes de dados fornecem visibilidade suficiente.

  • captureSystemInfo(): Reúne especificações abrangentes de hardware e software para identificar o dispositivo. Isso inclui o ID do hardware (HWID), modelos de CPU e GPU, tamanho da RAM, informações do disco, versão do sistema operacional Windows e uma lista de todos os dispositivos USB conectados.
  • Saída: *configured_path*/System Info.txt

  • captureScreen(): Captura uma imagem completa da área de trabalho da vítima, fornecendo uma visão imediata da atividade atual do usuário.
    • Método: Utiliza a biblioteca screenshot-desktop .
    • Saída: Um arquivo de imagem com registro de data e hora (por exemplo, configured_path/hostname_2025-10-26_14-30-00.png`).
  • captureTaskList(): Obtém uma lista de todos os processos em execução para conscientização situacional, permitindo que o invasor veja quais aplicativos e ferramentas de segurança estão ativos.
    • Método: Executa o comando tasklist /FO CSV /NH.
    • Saída: *configured_path*/TaskManagerInfo.txt
  • captureAVDetails(): Identifica o antivírus ou produto de proteção de endpoint instalado consultando o Centro de Segurança do Windows.
    • Método: Executa o comando do PowerShell Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Format-List
    • Saída: *configured_path*/Avdetails.txt
  • captureClipboardContent(): Exibe o conteúdo atual da área de transferência do usuário, que pode conter informações confidenciais e transitórias, como senhas ou mensagens copiadas.
    • Método: Executa o comando do PowerShell Get-Clipboard.
    • Saída: *configured_path*/Clipboard.txt
  • captureWebcamVideo(): Grava secretamente um vídeo usando a webcam principal do sistema, fornecendo inteligência visual sobre a vítima e seu ambiente.
    • Método: Aproveita a biblioteca direct-synch-show para captura de vídeo.
    • Saída: *configured_path*/Bighead.avi
  • captureWifiPasswords(): Exfiltra as senhas de todas as redes Wi-Fi salvas no dispositivo, permitindo possível movimentação lateral ou acesso a outras redes usadas pela vítima.
    • Método: Executa o comando netsh wlan show profile *wifi_ssid* key=clear para cada perfil.
    • Saída: *configured_path*/WifiPasswords.txt
  • getFilesUrgents: Esta funcionalidade exfiltra arquivos no disco de acordo com um conjunto de palavras-chave como segue: backup, default, code, discord, token, passw, mdp, motdepasse, mot_de_passe, login, secret, account, acount, apacht, banque, bank, matamask, wallet, crypto, exdous, 2fa, a1f, memo, compone, finance, seecret, credit, cni, esses arquivos são arquivados como files.zip e então enviados para o C2.

Exfiltração de dados

Existem 3 canais para os dados roubados: o painel oficial da web de propriedade do grupo NOVABLIGHT, a API do webhook do Discord e a API do Telegram. O status desses canais é incerto, pois a API de proxy principal e o painel da web estão inativos no momento, o que pode interromper a funcionalidade dos canais do Discord e do Telegram se eles dependerem da mesma infraestrutura de proxy.

O painel da web já foi o canal oficial de exfiltração, pois era anunciado como sua principal plataforma de gerenciamento de dados.

A implementação do Telegram primeiro tenta enviar os dados para uma URL de proxy configurada, o código verifica se a URL contém a string req neste caso https://bamboulacity.nova-blight[.]xyz/req/dVukBEtL8rW2PDgkwdwfbNSdG3imwU8bZhYUygzthir66sXXUuyURunOin9s.

Se a URL do proxy não estiver configurada ou não atender à condição, o módulo volta a se comunicar diretamente com a API oficial do Telegram (em https://api.telegram[.]org/bot*token*/sendMessage) usando um userId, chatId e botToken configurados para enviar os dados roubados.

Ao contrário do módulo do Telegram, a implementação do webhook do Discord é muito mais simples. Ele utiliza uma única URL para exfiltração sem mecanismo de fallback. As amostras analisadas usaram consistentemente o URL do proxy personalizado para essa finalidade.

O NOVABLIGHT emprega uma infraestrutura redundante e multicamadas. Em vez de depender de um único host de upload, o que criaria um único ponto de falha, o malware utiliza uma combinação de serviços legítimos de hospedagem de arquivos de terceiros e seu próprio backend dedicado. A seguir está a lista extraída de domínios e endpoints:

  • https://bashupload[.]com
  • https://litterbox.catbox[.]moe/resources/internals/api.php
  • https://tmpfiles[.]org/api/v1/upload
  • https://oshi[.]at/
  • http://sendfile[.]su/
  • https://wsend[.]net
  • https://api.gofile[.]io/servers
  • https://gofile[.]io/uploadFiles
  • https://rdmfile[.]eu/api/upload
  • https://bamboulacity.nova-blight[.]xyz/file/

Dados direcionados

O NOVABLIGHT executa rotinas direcionadas projetadas para roubar credenciais e arquivos de sessão de uma lista específica de softwares instalados. A lista selecionada está disponível neste GitHub Gist.

Técnicas de ofuscação

Mapeamento de matriz

A primeira técnica a ser abordada é o uso do mapeamento de matrizes pelo malware. O script inicializa uma única matriz global grande __p_6Aeb_dlrArray com valores de diferentes tipos e codificações, o que representa quase todos os valores literais usados no script.

Após substituir referências de índice de matriz, muitos pequenos pedaços de string que compõem uma string completa são divididos e concatenados em tempo de execução, mas, neste estágio, o número de versão do NOVABLIGHT pode ser identificado facilmente.

Codificação de string

A segunda técnica usada para ocultar strings é o uso da codificação base91. O wrapper de função __p_xIFu_MAIN_STR é chamado com um argumento inteiro.

O inteiro é um índice de um mapeamento de matriz secundária __p_9sMm_array que contém strings codificadas. Ele recupera a string codificada e a passa para a rotina de decodificação __p_xIFu_MAIN_STR_decode.

__p_xIFu_MAIN_STR_decode irá então decodificá-lo usando um alfabeto personalizado:
vFAjbQox\>5?4K$m=83GYu.nBIh\<drPaN\^@%Hk:D_sSyz"ER9/p,(*JwtfO)iUl&C\[~\}\{|Z+gX1MqL;60!e]T#2cVW7 e retornar a string decodificada.

Ofuscação de padrões de acesso

Em vez de acessar objetos e funções diretamente, o código usa objetos “proxy” intermediários achatados com chaves mutiladas, envolvendo objetos em outra camada de objetos para ocultar os padrões de acesso originais.

Por exemplo, a função __p_LQ1f_flat_… recebe um objeto plano __p_w3Th_flat_object. Este objeto contém 3 acessadores get para propriedades, um dos quais retorna o sinalizador disableNetwork recuperado da configuração e um wrapper para uma chamada do despachante (__p_jGTR_dispatcher_26). Em todo o código, há um padrão em que os nomes das propriedades começam com empretecerian.js, que também é o nome do arquivo de script. A função chamada pode então acessar os objetos e funções reais por meio desse objeto simples preenchido pelo chamador.

Ofuscação de fluxo de controle

Parte do caminho de execução do código é roteado por meio de um despachante central, __p_jGTR_dispatcher_26, no qual o primeiro nome do argumento recebe uma sequência de ID curta.

Cada ID é mapeado para uma função distinta. Por exemplo, o ID jgqatJ é referenciado pelo módulo modules/init/Troll.js e é responsável por uma caixa de mensagem pop-up “troll”.

Variáveis proxy

Primeiro, a ofuscação transforma a sintaxe da função em “sintaxe de parâmetros restantes”, que substitui os parâmetros por uma matriz que armazena valores de variáveis em vez de variáveis diretas. O código então referencia a matriz com valores numéricos. Por exemplo, a função __p_xIFu_MAIN_STR_decode não é chamada com parâmetros diretos. Em vez disso, seus argumentos são primeiro colocados no array __p_A5wG_varMask (linha 22), e a função é programada para recuperá-los de índices predefinidos. Por exemplo, na linha 25, o índice -36 do array armazena o índice do caractere "c" em uma string armazenada em __p_A5wG_varMask[171].

NOVABLIGHT e MITRE ATT&CK

A Elastic usa a estrutura MITRE ATT&CK para documentar táticas, técnicas e procedimentos comuns que ameaças persistentes avançadas usam contra redes corporativas.

Táticas

Técnicas

Conclusão

NOVABLIGHT mostra como até mesmo malwares menos conhecidos podem causar impacto. Ao oferecer uma ferramenta refinada e fácil de usar por meio de plataformas como Telegram e Discord, seus criadores tornaram mais fácil para qualquer pessoa se envolver em crimes cibernéticos.

Além disso, essa ameaça não é estática. Nossa análise confirma que o NOVABLIGHT está em desenvolvimento contínuo e ativo. Essa evolução contínua garante que o NOVABLIGHT continuará sendo uma ameaça persistente e relevante no futuro próximo.

Detectando NOVABLIGHT

YARA

O Elastic Security criou regras YARA para identificar essa atividade.

rule Windows_Infostealer_NovaBlight {
    meta:
        author = "Elastic Security"
        creation_date = "2025-07-18"
        last_modified = "2025-07-28"
        os = "Windows"
        arch = "x86"
        category_type = "Infostealer"
        family = "NovaBlight"
        threat_name = "Windows.Infostealer.NovaBlight"
        reference_sample = "d806d6b5811965e745fd444b8e57f2648780cc23db9aa2c1675bc9d18530ab73"

    strings:
        $a1 = "C:\\Users\\Administrateur\\Desktop\\Nova\\"
        $a2 = "[+] Recording..." fullword
        $a3 = "[+] Capture start" fullword
    condition:
        all of them
}

Observações

Os seguintes observáveis foram discutidos nesta pesquisa.

ObservávelTipoNomeReferência
ed164ee2eacad0eea9dc4fbe271ee2b2387b59929d73c843281a8d5e94c05d64SHA-256NOVABLIGHT VERSÃO 2.2
39f09771d70e96c7b760b3b6a30a015ec5fb6a9dd5bc1e2e609ddf073c2c853dSHA-256NOVABLIGHT VERSÃO 2.1
97393c27195c58f8e4acc9312a4c36818fe78f2ddce7ccba47f77a5ca42eab65SHA-256NOVABLIGHT VERSÃO 2.0
api.nova-blight[.]topDomínioPainel NOVABLIGHT
shadow.nova-blight[.]topDomínioPainel NOVABLIGHT
nova-blight[.]siteDomínioPainel NOVABLIGHT
nova-blight[.]xyzDomínioPainel NOVABLIGHT
bamboulacity.nova-blight[.]xyzDomínioPainel NOVABLIGHT

Referências

Os seguintes itens foram referenciados ao longo da pesquisa acima:

Compartilhe este artigo