L’illusion du décodage de certificat : Comment Blank Grabber Stealer dissimule son chargeur
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
BlankGrabber est un infostealer basé sur Python qui commence par un chargeur de script batch qui « décode » un étapeur compilé en Rust se faisant passer pour un fichier de certificat. L’étapeur effectue des vérifications de sandbox et de machines virtuelles, décrypte une charge utile intégrée et dépose plusieurs composants malveillants, y compris un client XWorm et un stealer packagé avec PyInstaller. L’exfiltration s’appuie sur des services web publics tels que les APIs des bots Telegram et des points de terminaison de recherche d’IP pour se fondre dans le trafic normal. Le malware altère également les paramètres système, bloque l’accès aux sites de sécurité et tente un contournement UAC pour renforcer la persistance.
Enquête
L’équipe de recherche sur les menaces Splunk a analysé le chargeur initial livré via gofile.io, son utilisation de certutil.exe pour le décodage de la charge utile, et la logique d’anti-analyse de l’étapeur Rust. Ils ont rétroconçu le flux de décryptage AES-GCM/CTR, extrait une archive ZIP intégrée et cartographié l’ensemble des charges utiles résultantes. Les tests comportementaux ont montré une large découverte d’hôte, une capture de webcam, une collecte du presse-papiers et le vol des clés de l’hôte et d’autres artefacts sensibles.
Atténuation
Surveillez les utilisations suspectes de certutil.exe, les commandes PowerShell qui modifient les préférences de Windows Defender et les modifications non autorisées du fichier hosts. Soyez alerté lors de l’exécution de WinRAR/rar.exe depuis des chemins non standard et des recherches DNS vers l’API Telegram ou des services de recherche d’IP connus. Bloquez les noms de fichiers malveillants connus et limitez l’exécution de binaires Python emballés avec PyInstaller non signés à l’aide de politiques de contrôle des applications.
Réponse
Si des indicateurs sont détectés, isolez le point de terminaison, préservez les preuves volatiles et capturez le répertoire %TEMP% pour un examen médico-légal. Supprimez les tâches planifiées ou les entrées Run du registre malveillantes, rétablissez toutes les modifications du fichier hosts, et rétablissez les exclusions de Windows Defender. Effectuez une réinitialisation complète des identifiants pour les identifiants de navigateur potentiellement exposés et les données de portefeuille crypto.
"graph TB %% Class definitions classDef technique fill:#e6f7ff classDef operator fill:#ffcc66 classDef data fill:#d9ead3 %% Nodes u2013 Techniques init_exec["<b>Technique</b> – T1059.003: Windows Command Shell<br/><b>Description</b>: Le script batch exécute certutil pour décoder l’étapeur Rust intégré"] class init_exec technique evasion_vm["<b>Technique</b> – T1497: Évasion de Virtualisation/Sandbox<br/><b>Description</b>: Vérifie les pilotes, les noms d’utilisateur et les UUID pour détecter les environnements d’analyse"] class evasion_vm technique obfuscation["<b>Technique</b> – T1027: Fichiers ou Informations Obfusqués<br/><b>Description</b>: L’exécutable Rust est déguisé en fichier de certificat"] class obfuscation technique decode["<b>Technique</b> – T1140: Déobfuscation/Décodage de Fichiers ou Informations<br/><b>Description</b>: Décryptage AESu2011CTR/GCM de la charge utile cryptée (blank.aes)"] class decode technique load_stager["<b>Technique</b> – T1105: Transfert d’Outils d’Entrée<br/><b>Description</b>: Dépose un exécutable nommé aléatoirement dans %TEMP% et le lance"] class load_stager technique pers_startup["<b>Technique</b> – T1037.005: Scripts d’Initialisation au Démarrage ou à la Connexion (Dossier de Démarrage)"] class pers_startup technique elev_uac["<b>Technique</b> – T1548.002: Mécanisme de Contrôle d’Élévation de l’Abus (contournement UAC du registre)"] class elev_uac technique impair_def["<b>Technique</b> – T1562.004: Affaiblir les Défenses (Désactiver Windows Defender, ajouter une exclusion)"] class impair_def technique hide_hosts["<b>Technique</b> – T1564.012: Cacher les Artéfacts (Modifier le fichier hosts pour bloquer les sites de sécurité)"] class hide_hosts technique data_collection["<b>Technique</b> – T1082: Découverte d’Information Système et collecte associée"] class data_collection data sysinfo["<b>Technique</b> – T1082: Découverte d’Information Système"] class sysinfo technique browser_info["<b>Technique</b> – T1217: Découverte d’Information du Navigateur"] class browser_info technique clipboard["<b>Technique</b> – T1115: Données du Presse-papiers"] class clipboard technique video_capture["<b>Technique</b> – T1125: Capture Vidéo"] class video_capture technique wifi_passwords["<b>Technique</b> – T1016: Découverte de la Configuration Réseau Système (Mots de passe Wi-Fi)"] class wifi_passwords technique product_key["<b>Technique</b> – T1012: Interroger le Registre (clé produit Windows)"] class product_key technique removable_media["<b>Technique</b> – T1025: Données de Média Amovible"] class removable_media technique wmi_queries["<b>Technique</b> – T1047: Instrumentation de Gestion Windows (Requêtes Système)"] class wmi_queries technique archive_data["<b>Technique</b> – T1560.001: Archiver les Données Collectées (Utilitaire RAR)"] class archive_data technique exfil_telegram["<b>Technique</b> – T1041: Exfiltration dans le Canal C2 (API du bot Telegram)"] class exfil_telegram technique exfil_public["<b>Technique</b> – T1048: Exfiltration par Protocole Alternatif (services de partage de fichiers publics)"] class exfil_public technique self_delete["<b>Technique</b> – T1070: Suppression d’Indicateur (Auto-suppression après exfiltration)"] class self_delete technique %% Flow connections init_exec –>|aboutit_à| evasion_vm evasion_vm –>|aboutit_à| obfuscation obfuscation –>|aboutit_à| decode decode –>|aboutit_à| load_stager load_stager –>|active| pers_startup load_stager –>|active| elev_uac load_stager –>|active| impair_def load_stager –>|active| hide_hosts load_stager –>|déclenche| data_collection data_collection –>|inclut| sysinfo data_collection –>|inclut| browser_info data_collection –>|inclut| clipboard data_collection –>|inclut| video_capture data_collection –>|inclut| wifi_passwords data_collection –>|inclut| product_key data_collection –>|inclut| removable_media data_collection –>|inclut| wmi_queries data_collection –>|aboutit_à| archive_data archive_data –>|utilise| exfil_telegram archive_data –>|utilise| exfil_public exfil_telegram –>|suivi_par| self_delete exfil_public –>|suivi_par| self_delete "
Flux d’Attaque
Détections
Élévation de Privilèges (contournement de l’UAC) via FodHelper (via ligne de commande)
Voir
Points de Persistance Possibles [ASEPs – Noyau Software/NTUSER] (via ligne de commande)
Voir
Infiltration/Exfiltration de Données/C2 via Services Outils Tiers Possibles (via proxy)
Voir
Possibilité de Mise en Scène de Données Capturées dans le Dossier Temporaire (via file_event)
Voir
Enumeration Système Possible (via ligne de commande)
Voir
Changements de Chemin d’Environnement (via registry_event)
Voir
Usage Possiblde PING pour Délai d’Exécution (via ligne de commande)
Voir
Opérations Suspectes sur la Clé du Registre Ms-settings (via ligne de commande)
Voir
Utilisation de Certutil pour le Codage de Données et les Opérations de Certificat (via ligne de commande)
Voir
Découverte de Mots de Passe Wi-Fi Possible (via ligne de commande)
Voir
Variables d’Environnement dans les Arguments de Ligne de Commande (via ligne de commande)
Voir
Infiltration/Exfiltration de Données/C2 via Services Outils Tiers Possibles (via dns)
Voir
Découverte de la Configuration Réseau Système Possible (via ligne de commande)
Voir
Énumération Possible de Logiciels Antivirus ou Pare-feu (via création de processus)
Voir
Changements Suspects des Préférences de Windows Defender (via PowerShell)
Voir
Désactiver la Surveillance en Temps Réel de Windows Defender (via PowerShell)
Voir
Binaire/Script Suspect dans la Localisation de Démarrage Automatique (via file_event)
Voir
Tentatives de Communications de Domaines de Lookup IP Possible (via dns)
Voir
Désactiver la Surveillance en Temps Réel de Windows Defender et Autres Changements de Préférences (via ligne de commande)
Voir
IOCs (HashSha256) pour détecter : L’Illusion de Décodage de Certificat : Comment le Stealer Blank Grabber Cache Son Chargeur
Voir
Détection des Communications C2 de BlankGrabber via Requêtes DNS [Windows Sysmon]
Voir
Détecter l’Activité PowerShell de BlankGrabber [Windows PowerShell]
Voir
Exécution de Simulation
Prérequis : Le Contrôle Pré-vol de Télémetrie & Baseline doit avoir réussi.
Motivation : 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 le récit DOIVENT refléter directement les TTPs identifiés et viser à générer la télémetrie exacte attendue par la logique de détection.
-
Narration de l’Attaque & Commandes :
L’adversaire, ayant compromis le point de terminaison avec le stealer BlankGrabber, émet des requêtes DNS vers trois services distincts utilisés par le malware pour le C2 et la reconnaissance :- Domaine API Telegram – utilisé pour obtenir des commandes via un bot Telegram.
Resolve-DnsName -Name api.telegram.org -Type A - Service de vérification Publique-IP – obtient l’adresse IP externe de la victime pour l’exfiltration ultérieure.
Resolve-DnsName -Name api.ipify.org -Type A - Service de partage de fichiers abusé – envoie un petit bloc de données codé via un sous-domaine de
pastebin.com.Resolve-DnsName -Name maliciouspayload.pastebin.com -Type A
Chaque appel est effectué en utilisant la fonction native de PowerShell
Resolve-DnsNamepour s’assurer que les journaux du client DNS sont générés sur l’hôte local. Les trois requêtes mappent directement aux troisblocs de sélection_de la règle Sigma, garantissant une correspondance. - Domaine API Telegram – utilisé pour obtenir des commandes via un bot Telegram.
-
Script de Test de Régression :
# Simulation de C2 DNS BlankGrabber – déclenche la règle de détection $domains = @( "api.telegram.org", "api.ipify.org", "maliciouspayload.pastebin.com" ) foreach ($d in $domains) { Write-Host "Interrogation de $d ..." try { Resolve-DnsName -Name $d -Type A -ErrorAction Stop | Out-Null Write-Host "✅ $d interrogé" } catch { Write-Warning "❌ Échec de l'interrogation de $d : $_" } Start-Sleep -Seconds 2 # léger délai pour imiter le trafic réaliste } -
Commandes de Nettoyage :
# Aucun artefact persistant n'est créé par Resolve-DnsName. # Effacez le cache DNS pour supprimer les entrées résiduelles. ipconfig /flushdns Write-Host "Cache DNS vidé."