Clickfix sur macOS : Campagne de Malware AppleScript Utilise des Prompts Terminal pour Voler des Données
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
La campagne de malware AppleScript cible les utilisateurs de macOS via une technique ClickFix en les persuadant d’exécuter manuellement des commandes shell décodées en base64 dans le Terminal. Ces commandes récupèrent un voleur AppleScript qui collecte les données des navigateurs, les portefeuilles de crypto-monnaies, les documents locaux et d’autres informations sensibles, puis les exfiltre vers des serveurs contrôlés par les attaquants. Comme aucun binaire traditionnel n’est écrit sur le disque, l’activité est plus difficile à repérer avec un AV classique. L’opération repose sur plusieurs domaines trompeurs et des ports de service inhabituels pour le trafic de commandement et de contrôle.
Analyse de la Campagne AppleScript
Les chercheurs ont examiné les sites de phishing, le JavaScript responsable de distribuer la charge utile, et l’AppleScript utilisé pour la collecte et l’exfiltration. La cartographie de l’infrastructure a révélé des domaines tels que cryptoinfo-news.com and odyssey1.to, ainsi que des services exposés sur les ports 22, 80, 3333, et 5201. La charge utile AppleScript emballe les données volées dans un fichier ZIP à /tmp/out.zip et utilise curl pour le télécharger vers un point d’accès distant.
Atténuation
Les défenseurs devraient bloquer les domaines malveillants identifiés et limiter les connexions sortantes sur des ports peu communs. Renforcez les hôtes macOS en restreignant l’utilisation d’AppleScript et de shell, en surveillant les modèles d’exécution base64-d | bash , et en appliquant des contrôles CORS stricts dans les environnements web. La formation de sensibilisation à la sécurité devrait mettre en évidence les pages de phishing qui demandent aux utilisateurs de copier-coller et d’exécuter des commandes Terminal.
Réponse
Lorsque ces modèles d’indicateurs sont détectés, avertissez le SOC, isolez le système affecté, et capturez les artefacts temporaires et l’historique des shells. Effectuez un examen médico-légal du répertoire /tmp , quarantainez les archives ZIP suspectes, et corrélez le trafic sortant avec les serveurs et ports C2 connus identifiés dans la campagne.
graph TB %% Class definitions classDef technique fill:#e0f7fa %% Node definitions initial_access[« <b>Accès Initial</b> – <b>T1659 Injection de Contenu</b>: Les victimes chargent une page de phishing qui injecte une commande malveillante. »] class initial_access technique execution_copy_paste[« <b>Exécution</b> – <b>T1204.004 Exécution Utilisateur : Copie et Collage Malveillants</b>: L’utilisateur copie une commande base64 et l’exécute dans le Terminal. »] class execution_copy_paste technique execution_proxy[« <b>Exécution</b> – <b>T1127 Exécution via Proxy des Utilitaires Développeur de Confiance</b>: Décode et exécute l’AppleScript via des utilitaires macOS natifs. »] class execution_proxy technique execution_xpc[« <b>Exécution</b> – <b>T1559.003 Communication Inter-Processus : Services XPC</b>: L’AppleScript exploite XPC pour les appels internes. »] class execution_xpc technique collection_browser_disc[« <b>Collecte</b> – <b>T1217 Découverte d’Informations sur les Navigateurs</b>: L’AppleScript énumère les profils Firefox et Chromium. »] class collection_browser_disc technique collection_creds[« <b>Collecte</b> – <b>T1555.003 Informations d’Identification des Stockages de Mots de Passe : Navigateurs Web</b>: Vole des cookies, des identifiants enregistrés, et des données de portefeuille crypto. »] class collection_creds technique archive[« <b>Collecte</b> – <b>T1560.001 Archivage via Utilitaire</b>: Empaquette les fichiers dans un ZIP en utilisant ditto. »] class archive technique exfiltration[« <b>Exfiltration</b> – <b>T1020 Exfiltration Automatisée</b>: Télécharge le ZIP sur un serveur contrôlé par l’attaquant via curl. »] class exfiltration technique c2_web[« <b>Commande et Contrôle</b> – <b>T1102 Service Web</b>: Communique avec le C2 via HTTP avec CORS permissif. »] class c2_web technique c2_ssh[« <b>Commande et Contrôle</b> – <b>T1021.004 Services à Distance : SSH</b>: L’attaquant maintient un accès SSH pour un contrôle supplémentaire. »] class c2_ssh technique defense_compress[« <b>Évasion de Détection</b> – <b>T1027.015 Compression</b>: Utilise la compression pour cacher les données de la charge utile. »] class defense_compress technique defense_file_delete[« <b>Évasion de Détection</b> – <b>T1070.004 Suppression de Fichiers</b>: Supprime les répertoires temporaires et les archives. »] class defense_file_delete technique credential_cookie[« <b>Accès aux Identifiants</b> – <b>T1539 Vol de Cookies de Session Web</b>: Utilise les cookies volés pour usurper des sessions. »] class credential_cookie technique %% Connections initial_access u002du002d>|mène à| execution_copy_paste execution_copy_paste u002du002d>|mène à| execution_proxy execution_proxy u002du002d>|utilise| execution_xpc execution_proxy u002du002d>|collecte| collection_browser_disc collection_browser_disc u002du002d>|collecte| collection_creds collection_creds u002du002d>|archive| archive archive u002du002d>|exfiltre| exfiltration exfiltration u002du002d>|utilise| c2_web c2_web u002du002d>|remplacement| c2_ssh exfiltration u002du002d>|couvre ses traces| defense_compress exfiltration u002du002d>|couvre ses traces| defense_file_delete collection_creds u002du002d>|active| credential_cookie
Flux d’Attaque
Détections
Détecter l’Utilisation Malveillante de Curl pour l’Exfiltration de Données sur macOS [Création de Processus Windows]
Voir
Détection du Décodage Base64 et de l’Exécution Bash sur macOS [Création de Processus Linux]
Voir
IOCs (SourceIP) à détecter : Le Guide Complet pour Chasser Cobalt Strike – Partie 2 : 10+ Recettes HuntSQL pour Trouver Cobalt Strike
Voir
IOCs (DestinationIP) à détecter : Le Guide Complet pour Chasser Cobalt Strike – Partie 2 : 10+ Recettes HuntSQL pour Trouver Cobalt Strike
Voir
Atomic MacOS Stealer – Activité FileGrabber
Voir
Voir
Exécution de Simulation
Prérequis : Le Contrôle de Pré-vol de Télémétrie & Baseline 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 le récit reflètent directement les TTP identifiés et visent à générer la télémétrie exacte attendue par la logique de détection.
-
Narration & Commandes d’Attaque :
-
L’attaquant envoie un email de phishing contenant la commande en une ligne :
echo "cHJpbnQoJ0NhdXNlJykK" | base64 -d | bash(La charge utile se décode en
print('Cause')– un espace réservé pour tout script Bash malveillant.) -
Un utilisateur non avisé copie la ligne et la colle dans le Terminal.
-
macOS génère un processus
bashdont la ligne de commande correspond exactement au modèlebase64 -d | bash, satisfaisant le critère de sélection de la règle Sigma.exécution. -
L’interpréteur Bash exécute la charge utile décodée, complétant l’action malveillante (par exemple, établir un shell inversé, télécharger des outils supplémentaires).
-
-
Script de Test de Régression : Le script ci-dessous automatise les étapes 1 à 3, reproduisant la télémétrie nécessaire pour la validation.
#!/bin/bash # ------------------------------------------------- # Simuler l'exécution macOS Base64-décodage-et-Bash # ------------------------------------------------- # Charge utile encodée en base64 (affiche "Compromission") PAYLOAD="cHJpbnQoJ0NvbXByb21pc2UnKQ==" # Exécute la ligne en une seule commande exactement comme le ferait un attaquant echo "$PAYLOAD" | base64 -d | bash # Quitte avec le statut de la commande Bash exit $? -
Commandes de Nettoyage : Supprimez tous les fichiers temporaires ou les processus en arrière-plan qui auraient pu être créés par la charge utile (remplacez par un nettoyage spécifique à la charge utile si nécessaire).
#!/bin/bash # Nettoyage simple - s'assurer qu'aucun processus enfant Bash ne persiste pkill -f "base64 -d | bash" 2>/dev/null # Si la charge utile a créé des fichiers, les supprimer (exemple d'espace réservé) rm -f /tmp/malicious_script.sh 2>/dev/null