GlassWorm attaque Mac : Nouvelle infrastructure, nouvelles astuces
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
L’acteur malveillant derrière GlassWorm a pivoté d’une activité axée sur Windows à macOS, distribuant des extensions malveillantes pour VS Code qui récupèrent des charges utiles JavaScript chiffrées grâce à des pointeurs C2 dérivés de la blockchain Solana. Cette vague étend les capacités en ajoutant la trojanisation de portefeuilles matériels tout en continuant de voler un large éventail d’identifiants à travers les navigateurs, les outils de développement et le Trousseau macOS. L’infrastructure inclut une adresse de portefeuille Solana et une IP réutilisée d’opérations précédentes de GlassWorm, suggérant une continuité dans les outils et l’hébergement de l’opérateur. Les chercheurs ont observé plus de 50 000 téléchargements avant que les extensions ne soient supprimées, indiquant une exposition significative dans les environnements de développement.
Enquête
Koi Security a identifié trois extensions malveillantes pour VS Code sur le marché Open VSX et a relié leur flux de commandement et de contrôle à un portefeuille Solana en plus d’une adresse IP partagée précédemment associée à GlassWorm. Les implants intègrent un délai d’exécution de 15 minutes, puis déchiffrent et exécutent une charge utile JavaScript AES-256-CBC. Sur macOS, la persistance est établie via LaunchAgents. Les cibles de collecte incluent les portefeuilles de navigateurs et les données de portefeuilles de bureau, les jetons d’accès aux développeurs, les clés SSH, et le matériel du Trousseau macOS. Le logiciel malveillant organise les données volées sous /tmp/ijewf/ avant leur exfiltration vers un chemin de serveur ressemblant à /p2p. Il tente également de remplacer les applications légitimes de compagnons de portefeuilles matériels—comme Ledger Live et Trezor Suite—par des versions trojanisées pour capturer des secrets et transactions de grande valeur.
Atténuation
Renforcez les contrôles entourant les outils de développement en appliquant une liste blanche d’extensions et en exigeant un examen de sécurité pour les extensions VS Code, notamment celles provenant de marchés ouverts. Déployez des détections à l’exécution pour les modèles d’exécution différée et la création ou modification suspecte de LaunchAgents. Surveillez et bloquez l’activité sortante suspecte associée aux recherches C2 dérivées de Solana, et ajoutez des détections de réseau pour les connexions inhabituelles à l’IP réutilisée identifiée. Exigez une authentification multi-facteurs pour les comptes de développeurs et de cloud et mettez en œuvre des vérifications d’intégrité des portefeuilles matériels (validation de l’éditeur, notarisation/vérification des signatures, et canaux de mise à jour logicielle contrôlés).
Réponse
Déclenchez des alertes sur les nouveaux ou modifiés LaunchAgents, l’accès anormal aux magasins de Trousseau, et les tentatives de récupération des points d’extrémité C2 référencés par Solana. Mettez en quarantaine et supprimez les extensions malveillantes pour VS Code, puis éradiquer toute persistance associée à LaunchAgent. Réalisez une analyse médico-légale ciblée sur /tmp/ijewf/ pour déterminer l’échelle de la mise en scène des identifiants et confirmer quelles données ont été collectées. Validez l’intégrité des applications de portefeuilles matériels (Ledger Live, Trezor Suite) et réinstallez à partir de sources fiables si l’on soupçonne une altération. Réinitialisez les identifiants touchés, faites tourner les clés SSH et les jetons de développeur, invalidez les sessions, et élargissez la chasse à travers les points d’extrémité pour les mêmes IDs d’extensions, chemins de fichiers, et artefacts de persistance.
"graph TB %% Class Definitions classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef operator fill:#ff9900 classDef tool fill:#cccccc %% Nodes action_initial_access["<b>Action</b> – Accès initial"] class action_initial_access action technique_vs_code_ext["<b>Technique</b> – T1176.002: Extension VS Code IDE malveillante<br/><b>Description</b>: L’adversaire délivre une extension malveillante pour Visual Studio Code qui exécute du code sur le système de la victime."] class technique_vs_code_ext technique technique_delay["<b>Technique</b> – T1497.003: Délai d’exécution<br/><b>Description</b>: Le logiciel malveillant attend un certain temps (ex.: 15 minutes) avant d’exécuter sa charge utile pour échapper à l’analyse."] class technique_delay technique technique_decrypt["<b>Technique</b> – T1027.009 / T1027.004: Déchiffrement de charge utile AESu2011256u2011CBC<br/><b>Description</b>: La charge utile chiffrée est déchiffrée en mémoire en utilisant AESu2011CBC avec une clé de 256u2011bit."] class technique_decrypt technique technique_c2_retrieve["<b>Technique</b> – T1573.001: Récupérer le point d’extrémité de la blockchain Solana<br/><b>Description</b>: L’adresse du serveur C2 est stockée sur une blockchain publique et récupérée par le logiciel malveillant."] class technique_c2_retrieve technique technique_c2_fetch["<b>Technique</b> – T1048.003: Transfert de données de protocole non chiffré<br/><b>Description</b>: Le logiciel malveillant contacte le point d’extrémité C2 en utilisant un protocole non chiffré (ex.: HTTP)."] class technique_c2_fetch technique technique_persistence_agent["<b>Technique</b> – T1543.001: Installation de LaunchAgent<br/><b>Description</b>: Un fichier plist de LaunchAgent est placé dans le répertoire LaunchAgents de l’utilisateur pour assurer la persistance."] class technique_persistence_agent technique technique_persistence_daemon["<b>Technique</b> – T1543.004: Installation de LaunchDaemon<br/><b>Description</b>: Un fichier plist de LaunchDaemon est placé dans le répertoire LaunchDaemons du système pour assurer la persistance."] class technique_persistence_daemon technique technique_modify_plist["<b>Technique</b> – T1647: Modifier le fichier PLIST<br/><b>Description</b>: L’attaquant édite le plist pour altérer le comportement de lancement ou ajouter des commandes malveillantes."] class technique_modify_plist technique technique_dump_keychain["<b>Technique</b> – T1555.001 / T1555.002: Extraction du Trousseau<br/><b>Description</b>: Le matériel d’identification du Trousseau macOS est extrait."] class technique_dump_keychain technique technique_steal_keys["<b>Technique</b> – T1552.001 / T1552.004: Vol de clés privées et de jetons<br/><b>Description</b>: Les clés privées de cryptomonnaie et les jetons d’authentification sont récoltés."] class technique_steal_keys technique technique_stage_data["<b>Technique</b> – T1074: Données mises en scène<br/><b>Description</b>: Les fichiers collectés sont copiés dans /tmp/ijewf pour une exfiltration ultérieure."] class technique_stage_data technique technique_archive["<b>Technique</b> – T1560.001 / T1560.003: Archiver les données collectées<br/><b>Description</b>: Les données sont compressées dans un format d’archive (par ex.: zip)."] class technique_archive technique technique_exfil["<b>Technique</b> – T1048.003: Exfiltration par canal non chiffré non-C2<br/><b>Description</b>: L’archive mise en scène est envoyée via un canal non chiffré non lié au C2 principal."] class technique_exfil technique technique_priv_esc["<b>Technique</b> – T1548.006: Manipulation de TCC<br/><b>Description</b>: La base de données macOS Transparency, Consent, and Control est modifiée pour obtenir des privilèges plus élevés."] class technique_priv_esc technique technique_impact["<b>Technique</b> – T1496.002: Remplacer Ledger Live / Trezor Suite<br/><b>Description</b>: Les applications légitimes de portefeuilles de cryptomonnaie sont échangées avec des versions trojanisées pour capturer les actifs des utilisateurs."] class technique_impact technique %% Connections action_initial_access –>|utilise| technique_vs_code_ext technique_vs_code_ext –>|déclenche| technique_delay technique_delay –>|entraîne| technique_decrypt technique_decrypt –>|établit| technique_c2_retrieve technique_c2_retrieve –>|contacte| technique_c2_fetch technique_c2_fetch –>|installe| technique_persistence_agent technique_c2_fetch –>|installe| technique_persistence_daemon technique_persistence_agent –>|modifie| technique_modify_plist technique_persistence_daemon –>|modifie| technique_modify_plist technique_modify_plist –>|active| technique_dump_keychain technique_dump_keychain –>|active| technique_steal_keys technique_steal_keys –>|stocke dans| technique_stage_data technique_stage_data –>|archive| technique_archive technique_archive –>|exfiltre via| technique_exfil technique_exfil –>|facilite| technique_priv_esc technique_priv_esc –>|active| technique_impact "
Flux d’attaque
Détections
Tentative possible de découverte de mots de passe du navigateur MacOS (via cmdline)
Voir
IOC (SourceIP) à détecter : GlassWorm passe à Mac : Nouvelle infrastructure, nouvelles astuces
Voir
IOC (DestinationIP) à détecter : GlassWorm passe à Mac : Nouvelle infrastructure, nouvelles astuces
Voir
IOC (Emails) à détecter : GlassWorm passe à Mac : Nouvelle infrastructure, nouvelles astuces
Voir
Détection d’accès au Trousseau macOS par GlassWorm [Création de processus sous Linux]
Voir
Exécution potentielle d’AppleScript pour accéder au Trousseau sur macOS [Création de processus sous Linux]
Voir
Détection de la communication C2 par blockchain Solana par GlassWorm [Proxy]
Voir
Exécution de simulation
Prérequis : Vérification préliminaire de la télémétrie et de la base doit être réussie.
Raisonnement : 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 TTP identifiés et viser à générer exactement la télémétrie attendue par la logique de détection. Des exemples abstraits ou non pertinents entraîneront un mauvais diagnostic.
-
Récit de l’attaque & Commandes :
Un attaquant qui a déjà compromis un compte utilisateur macOS aux privilèges faibles souhaite récupérer un mot de passe de compte de service stocké dans le Trousseau sous l’étiquettepass_users_for_script. Pour éviter de déposer un binaire séparé, l’attaquant écrit un AppleScript en une seule ligne qui invoque l’outil intégrésecurityviado shell script. Le script est exécuté directement dans la session de l’utilisateur, produisant un événement de création de processus avec la ligne de commande exacte que la règle Sigma correspond.# Crée un élément de test dans le Trousseau (uniquement pour la démonstration; le véritable attaquant viserait un élément existant) security add-generic-password -a attacker -s pass_users_for_script -w SuperSecret123 # Exécute l'AppleScript qui lit le mot de passe osascript -e 'do shell script "security find-generic-password -s '''pass_users_for_script''' -w"' -
Script de test de régression :
#!/usr/bin/env bash set -euo pipefail # Étape 1 : S'assurer que l'entrée de Trousseau cible existe (idempotente) if ! security find-generic-password -s pass_users_for_script -w >/dev/null 2>&1; then security add-generic-password -a attacker -s pass_users_for_script -w SuperSecret123 fi # Étape 2 : Exécuter l'AppleScript qui déclenche la règle de détection echo "[+] Exécution de l'AppleScript pour lire l'entrée du Trousseau..." osascript -e 'do shell script "security find-generic-password -s '''pass_users_for_script''' -w"' -
Commandes de nettoyage :
# Supprimer l'élément de test du Trousseau pour laisser le système propre security delete-generic-password -s pass_users_for_script echo "[+] Nettoyage terminé : entrée de test du Trousseau supprimée."