Malware Découvert dans un Dépôt Tendance de Hugging Face
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Les chercheurs de HiddenLayer ont découvert du code malveillant hébergé dans le dépôt Hugging Face Open-OSS/privacy-filter qui imite un projet légitime d’OpenAI. Le dépôt contenait un script loader.py qui récupérait une commande PowerShell depuis jsonkeeper.com, laquelle téléchargeait un fichier batch de deuxième étape et un voleur d’informations basé sur Rust. La charge utile exfiltre les identifiants, les données de navigateur, les fichiers de portefeuilles de cryptomonnaies et les captures d’écran, puis se supprime après l’exécution d’une tâche planifiée à une seule exécution.
Enquête
L’analyse a identifié six étapes depuis l’appât initial jusqu’au voleur d’informations final basé sur Rust, y compris une exécution PowerShell cachée, un téléchargeur qui récupère update.bat depuis api.eth-fastscan.org, et un fichier batch qui crée un script runner temporaire et une tâche planifiée transitoire. Un trafic réseau a été observé vers un domaine C2 recargapopular.com et un domaine connexe welovechinatown.info. Plusieurs dépôts Hugging Face sous l’utilisateur anthfu ont été trouvés réutilisant le même chargeur et l’URL C2.
Atténuation
Bloquez les domaines et URL malveillants listés à la périphérie du réseau et désactivez l’exécution de scripts PowerShell non signés sur les points d’aboutissement. Supprimez tous les fichiers téléchargés depuis les dépôts compromis et révoquez tout identifiant qui aurait pu être récupéré. Mettez en place une surveillance stricte pour la création de tâches planifiées suspectes et pour les lignes de commande PowerShell anormales.
Réponse
Isolez tout hôte qui a exécuté le loader ou start.bat, considérez-le comme entièrement compromis et reconstruisez le système. Faites tourner tous les mots de passe stockés, cookies de session, jetons OAuth et identifiants de portefeuilles de cryptomonnaies. Recherchez des connexions historiques vers les domaines malveillants et pour la présence des chemins de fichiers indiqués et des noms de tâches planifiées.
"graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef file fill:#ffcc99 classDef process fill:#ff9966 classDef malware fill:#ff6666 classDef credential fill:#ccffcc classDef exfil fill:#c0c0c0 classDef operator fill:#ff9900 %% Node definitions malicious_repo["<b>Ressource</b> – <b>Dépôt Hugging Face</b><br/>Contient les fichiers malveillants start.bat et loader.py"] class malicious_repo file action_user_execution_link["<b>Action</b> – <b>T1204.001 Exécution par l’utilisateur : Lien malveillant</b><br/>La victime clique sur un lien vers le dépôt malveillant"] class action_user_execution_link action file_start_bat["<b>Fichier</b> – start.bat<br/>Script batch invoqué par la victime"] class file_start_bat file file_loader_py["<b>Fichier</b> – loader.py<br/>Chargeur Python qui vérifie la somme de contrôle et désactive la vérification SSL"] class file_loader_py file action_user_execution_file["<b>Action</b> – <b>T1204.002 Exécution par l’utilisateur : Fichier malveillant</b><br/>La victime exécute loader.py"] class action_user_execution_file action action_proxy_execution["<b>Action</b> – <b>T1127 Exécution de Proxy d’utilitaires de développeur de confiance</b><br/>loader.py lance PowerShell avec contournement et fenêtre cachée"] class action_proxy_execution action process_powershell["<b>Processus</b> – PowerShell<br/>Exécute la ligne de commande distante"] class process_powershell process action_taint_shared_content["<b>Action</b> – <b>T1080 Corruption de contenu partagé</b><br/>PowerShell oneu2011liner télécharge update.bat depuis api.ethu2011fastscan.org"] class action_taint_shared_content action file_update_bat["<b>Fichier</b> – update.bat<br/>Script batch qui ajoute des exclusions pour Defender et crée une tâche planifiée"] class file_update_bat file action_hide_artifacts["<b>Action</b> – <b>T1564.012 Masquage d’artefacts : Exclusions de fichiers/chemins</b><br/>Ajoute des exclusions de Microsoft Defender pour les fichiers charge utile"] class action_hide_artifacts action action_hijack_execution["<b>Action</b> – <b>T1574 Détournement du flux d’exécution</b><br/>Crée une tâche planifiée oneu2011shot MicrosoftEdgeUpdateTaskCore pour exécuter la charge utile en tant que SYSTEM"] class action_hijack_execution action process_scheduled_task["<b>Processus</b> – Tâche Planifiée<br/>Exécute la charge utile Rust avec des privilèges SYSTEM"] class process_scheduled_task process malware_rust_payload["<b>Malware</b> – Charge utile Rust<br/>Effectue des vérifications antiu2011analyse et désactive AMSI/ETW"] class malware_rust_payload malware action_credential_collection["<b>Action</b> – <b>T1555 Collecte d’identifiants à partir de magasins de mots de passe</b><br/>Le voleur d’informations extrait les identifiants de Chromium, Firefox, Discord et des portefeuilles"] class action_credential_collection credential action_credential_files["<b>Action</b> – <b>T1552.001 Identifiants non sécurisés : Identifiants dans les fichiers</b><br/>Collecte les fichiers de seed SSH, FTP, VPN et de portefeuilles"] class action_credential_files credential action_os_credential_dump["<b>Action</b> – <b>T1003 Vidage des identifiants du système d’exploitation</b><br/>Récupère les clés de navigateur chiffrées"] class action_os_credential_dump credential action_screen_capture["<b>Action</b> – <b>T1113 Capture d’écran</b><br/>Capture des captures d’écran de plusieurs moniteurs"] class action_screen_capture malware action_data_encoding["<b>Action</b> – <b>T1132 Encodage des données</b><br/>Emballe les données dans un JSON compressé en gzip"] class action_data_encoding malware action_exfiltration["<b>Action</b> – <b>T1567.002 Exfiltration via service web</b><br/>Envoie les données encodées via HTTPS vers recargapopular.com"] class action_exfiltration exfil %% Connections malicious_repo –>|contient| file_start_bat malicious_repo –>|contient| file_loader_py action_user_execution_link –>|conduit à| file_start_bat action_user_execution_link –>|conduit à| file_loader_py file_start_bat –>|exécuté par| action_user_execution_file file_loader_py –>|exécuté par| action_user_execution_file action_user_execution_file –>|déclenche| action_proxy_execution action_proxy_execution –>|lance| process_powershell process_powershell –>|télécharge| file_update_bat file_update_bat –>|exécute| action_hide_artifacts action_hide_artifacts –>|crée| action_hijack_execution action_hijack_execution –>|engendre| process_scheduled_task process_scheduled_task –>|exécute| malware_rust_payload malware_rust_payload –>|effectue| action_credential_collection malware_rust_payload –>|effectue| action_credential_files malware_rust_payload –>|effectue| action_os_credential_dump malware_rust_payload –>|effectue| action_screen_capture malware_rust_payload –>|encode| action_data_encoding action_data_encoding –>|exfiltre| action_exfiltration "
Flux d’attaque
Détections
Appeler des méthodes .NET suspectes depuis Powershell (via powershell)
Voir
IOC (HashSha256) pour détecter : Malware trouvé dans le dépôt Hugging Face "Open-OSS/privacy-filter"
Voir
IOC (IP Source) pour détecter : Malware trouvé dans le dépôt Hugging Face "Open-OSS/privacy-filter"
Voir
IOC (IP Destination) pour détecter : Malware trouvé dans le dépôt Hugging Face "Open-OSS/privacy-filter"
Voir
Détection de la communication C2 malveillante dans le dépôt Hugging Face [Connexion réseau Windows]
Voir
Activité PowerShell et CMD cachée pour exécution malveillante [Création de processus Windows]
Voir
Exécution de simulation
Prérequis : Le contrôle préalable de la télémétrie & des bases doit avoir réussi.
Justification : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et la narration DOIVENT refléter directement les TTP identifiés et viser à générer la télémétrie exacte attendue par la logique de détection. Les exemples abstraits ou non liés conduiront à un mauvais diagnostic.
-
Narration de l’attaque et commandes :
L’attaquant a obtenu un point d’appui sur un poste de travail Windows et souhaite exécuter une charge utile malveillante avec des droits élevés tout en restant invisible pour l’utilisateur. Il/elle :- Crée un one-liner PowerShell qui ouvre une fenêtre CMD cachée (
/k) et l’escalade immédiatement en utilisantStart-Process -Verb RunAs. - Exécute ce one-liner à partir d’une session PowerShell existante, s’assurant que l’arborescence des processus contient à la fois une instance PowerShell cachée and une instance CMD lancée avec
/k. - Le CMD élevé peut ensuite être utilisé pour télécharger et exécuter la charge utile finale.
- Crée un one-liner PowerShell qui ouvre une fenêtre CMD cachée (
-
Script de test de régression :
# --------------------------------------------------------- # Script d'adversaire simulé – PowerShell caché + CMD RunAs # --------------------------------------------------------- $maliciousCmd = "cmd.exe /k echo L'attaquant s'est élevé && ping -n 5 127.0.0.1" $psCommand = "-ExecutionPolicy Bypass -WindowStyle Hidden -Command `"Start-Process -FilePath 'powershell.exe' -ArgumentList `"$maliciousCmd`" -Verb RunAs`"" # Lance PowerShell caché qui exécute à son tour le CMD élevé Start-Process -FilePath "powershell.exe" -ArgumentList $psCommand -WindowStyle Hidden -
Commandes de nettoyage :
# Terminer tous les processus CMD élevés persistants créés par le test Get-Process -Name "cmd" -ErrorAction SilentlyContinue | Where-Object { $_.StartInfo.Arguments -match "/k echo L'attaquant s'est élevé" } | Stop-Process -Force # Supprimer éventuellement tous les fichiers temporaires s'ils ont été créés (aucun dans cette démo simple)