La campagne Safari de la Corée du Nord livre des RATs
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
L’article décrit un nouveau cadre de malware macOS appelé Mach-O Man qui a été lié à l’unité Chollima célèbre du groupe Lazarus. Le malware est distribué via des comptes Telegram compromis et de fausses invitations à des réunions qui persuadent les cibles d’exécuter une commande ClickFix sur leurs appareils. La boîte à outils comprend plusieurs binaires Mach-O conçus pour rassembler les détails de l’hôte, maintenir la persistance et voler les identifiants ainsi que les données des navigateurs, l’exfiltration ayant lieu via Telegram. La campagne semble se concentrer sur les échanges de cryptomonnaies et d’autres organisations du secteur financier.
Enquête
Les chercheurs ont identifié un binaire de préparation nommé teamsSDK.bin qui a été téléchargé et exécuté via une séquence de commandes malveillante. Des composants supplémentaires, y compris D1yCPUyk.bin, minst2.bin, et macrasv2, ont ensuite été utilisés pour énumérer le système, créer un LaunchAgent pour la persistance et récolter les extensions de navigateur, les données du trousseau d’accès et les cookies. La communication de commande et contrôle s’appuyait sur un serveur HTTP basé sur Go qui exposait un endpoint /info non authentifié et divulguait un jeton API de bot Telegram. Les enquêteurs ont également trouvé des services d’accès à distance tels que RDP, WinRM et Chrome Remote Desktop exposés sur l’hôte C2.
Atténuation
Les utilisateurs devraient éviter d’interagir avec des liens de réunion non sollicités et confirmer la légitimité de toute commande terminale suggérée lors de conversations inattendues. Les organisations devraient surveiller les LaunchAgents non autorisés, exiger une signature de code de confiance pour les binaires macOS, et restreindre l’exécution de fichiers inconnus. Les défenses du réseau devraient bloquer les connexions sortantes vers des serveurs HTTP basés sur Go suspects et signaler le trafic utilisant l’agent utilisateur Go-http-client . Les jetons de bot Telegram devraient être protégés contre l’exposition, et les services de bureau à distance devraient être sécurisés avec des contrôles d’accès au privilège le plus bas.
Réponse
Les équipes de sécurité devraient détecter l’exécution de fichiers .bin inconnus et surveiller la création de LaunchAgents nommés com.onedrive.launcher. Des alertes devraient également être déclenchées sur les connexions sortantes vers des infrastructures suspectes utilisant l Go-http-client agent utilisateur, ainsi que les requêtes POST répétées vers /info des points de terminaison. Les défenseurs devraient surveiller une activité inattendue de l’API Telegram liée à des jetons de bot non familiers. Une analyse complète de l’hôte devrait être réalisée pour identifier et retirer tous les binaires malveillants, suivi de la réinitialisation des identifiants pour tout compte qui pourrait avoir été compromis.
"graph TB %% Section de définition des classes classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ffcc99 classDef process fill:#e6ffe6 classDef file fill:#ffe6cc classDef service fill:#e6e6ff %% Définitions des nœuds initial_access_user_execution["<b>Action</b> – <b>T1204.001 Exécution par l’utilisateur</b><br/>La victime clique sur un lien malveillant « fix » dans une réunion Telegram qui exécute une commande curl"] class initial_access_user_execution action tool_curl["<b>Outil</b> – <b>Nom</b> : curl<br/><b>Description</b> : utilitaire en ligne de commande pour transférer des données vers ou depuis un serveur"] class tool_curl tool file_teamsSDK_bin["<b>Fichier</b> – <b>Nom</b> : teamsSDK.bin (Machu2011O)<br/><b>Description</b> : Binaire de préparation téléchargé et exécuté"] class file_teamsSDK_bin file process_curl_download["<b>Processus</b> – téléchargement et exécution par curl de teamsSDK.bin"] class process_curl_download process malware_teamsSDK["<b>Malware</b> – <b>Nom</b> : teamsSDK<br/><b>Description</b> : contacte le C2 après exécution"] class malware_teamsSDK malware service_go_http["<b>Service</b> – Serveur HTTP basé sur Go<br/><b>Port</b> : 80/443<br/><b>Endpoint</b> : /info (non authentifié)"] class service_go_http service process_c2_communication["<b>Processus</b> – Communique avec le C2 via HTTP POST vers /info"] class process_c2_communication process file_minst2_bin["<b>Fichier</b> – <b>Nom</b> : minst2.bin"] class file_minst2_bin file process_install_launchagent["<b>Processus</b> – Installe le LaunchAgent plist pour la persistance"] class process_install_launchagent process malware_fake_onedrive["<b>Malware</b> – Faux binaire “OneDrive” lancé à la connexion"] class malware_fake_onedrive malware tool_macrasv2["<b>Outil</b> – <b>Nom</b> : macrasv2<br/><b>Description</b> : extrait les entrées du trousseau d’accès, les mots de passe des navigateurs, les cookies, les extensions"] class tool_macrasv2 tool process_keychain_extraction["<b>Processus</b> – Extrait les données du trousseau d’accès macOS et du navigateur"] class process_keychain_extraction process action_discovery_system_info["<b>Action</b> – <b>T1082 Découverte des informations système</b><br/>Collecte l’ID du CPU, le nom d’hôte, l’utilisateur, les applications installées"] class action_discovery_system_info action action_discovery_software["<b>Action</b> – <b>T1518 Découverte de logiciels</b><br/>Énumère les navigateurs et extensions installés</b>"] class action_discovery_software action service_telegram_bot["<b>Service</b> – API de Bot Telegram<br/><b>Objectif</b> : Recevoir les identifiants exfiltrés"] class service_telegram_bot service process_exfiltration["<b>Processus</b> – Envoie les données collectées au bot Telegram"] class process_exfiltration process action_content_injection["<b>Action</b> – <b>T1659 Injection de contenu</b><br/>Le point de terminaison /info non authentifié permet le téléchargement de fichiers arbitraires"] class action_content_injection action action_dynamic_resolution["<b>Action</b> – <b>T1568 Résolution dynamique</b><br/>Résout le domaine C2 à l’exécution"] class action_dynamic_resolution action %% Connexions initial_access_user_execution –>|utilise| tool_curl tool_curl –>|télécharge| file_teamsSDK_bin file_teamsSDK_bin –>|exécuté par| process_curl_download process_curl_download –>|exécute| malware_teamsSDK malware_teamsSDK –>|communique avec| service_go_http service_go_http –>|reçoit des données via| process_c2_communication process_c2_communication –>|déclenche| file_minst2_bin file_minst2_bin –>|installe| process_install_launchagent process_install_launchagent –>|crée| malware_fake_onedrive malware_fake_onedrive –>|exécute à la connexion| action_discovery_system_info action_discovery_system_info –>|mène à| action_discovery_software action_discovery_software –>|fournit des données à| tool_macrasv2 tool_macrasv2 –>|effectue| process_keychain_extraction process_keychain_extraction –>|donne des données à| process_exfiltration process_exfiltration –>|envoie à| service_telegram_bot malware_teamsSDK –>|permet| action_content_injection action_content_injection –>|autorise| file_minst2_bin malware_teamsSDK –>|permet| action_dynamic_resolution action_dynamic_resolution –>|résout| service_go_http "
Flux d’attaque
Détections
Modification des permissions des fichiers du dossier Tmp suspect sur MacOS (via ligne de commande)
Vue
Tentative d’exécution suspecte de Curl [MacOS] (via ligne de commande)
Vue
IOCs (HashSha256) pour détecter : Safari de la Corée du Nord : Chasse aux RATs
Vue
Détection du déploiement du kit de malware Mach-O Man [Création de processus Linux]
Vue
Exécution de simulation
Prérequis : La vérification de télémétrie et de la base doit être réussie.
Justification : Cette section détaille l’exécution précise de la technique de l’adversaire (T1546.006/T1587.001) conçue pour déclencher la règle de détection. Les commandes reflètent un déploiement réaliste « vivre de la terre » des binaires Mach‑O Man.
-
Narrative de l’attaque & Commandes :
- Un attaquant qui a déjà pris pied sur l’hôte macOS copie les quatre binaires Mach‑O Man depuis un emplacement de préparation (
/tmp/stage) vers un répertoire accessible en écriture (/usr/local/bin). - Les binaires sont rendus exécutables et lancés séquentiellement pour imiter les phases d’initialisation, de reconnaissance, de persistance et de vol d’identifiants du kit.
- La persistance est obtenue en écrivant un plist de démon de lancement pointant vers
minst2.bin.
# Étape 1 – Préparer les binaires (simulé par une copie depuis un dossier d'actifs de test) mkdir -p /usr/local/bin/macho cp ./assets/teamsSDK.bin /usr/local/bin/macho/ cp ./assets/D1YrHRTg.bin /usr/local/bin/macho/ cp ./assets/minst2.bin /usr/local/bin/macho/ cp ./assets/macrasv2 /usr/local/bin/macho/ # Étape 2 – Les rendre exécutables chmod +x /usr/local/bin/macho/*.bin # Étape 3 – Exécuter les binaires de préparation et de reconnaissance /usr/local/bin/macho/teamsSDK.bin & /usr/local/bin/macho/D1YrHRTg.bin & # Étape 4 – Installer la persistance (daemon de lancement) pour minst2.bin cat <<'EOF' > /Library/LaunchDaemons/com.macho.minst2.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key><string>com.macho.minst2</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/macho/minst2.bin</string> </array> <key>RunAtLoad</key><true/> </dict> </plist> EOF sudo launchctl load -w /Library/LaunchDaemons/com.macho.minst2.plist # Étape 5 – Exécuter le composant de vol/exfil d'identifiants /usr/local/bin/macho/macrasv2 & - Un attaquant qui a déjà pris pied sur l’hôte macOS copie les quatre binaires Mach‑O Man depuis un emplacement de préparation (
-
Script de test de régression : (script bash autonome qui reproduit les étapes ci-dessus)
#!/usr/bin/env bash set -euo pipefail # --- VARIABLES ------------------------------------------------- BIN_DIR="/usr/local/bin/macho" ASSET_DIR="$(pwd)/assets" PLIST="/Library/LaunchDaemons/com.macho.minst2.plist" # --- PRÉ‑VÉRIFICATION ------------------------------------------- if [[ $(id -u) -ne 0 ]]; then echo "Le script nécessite les droits root pour installer le daemon de lancement. Re‑lancez avec sudo." exit 1 fi # --- DÉPLOYER LES BINAIRES -------------------------------------- mkdir -p "$BIN_DIR" for bin in teamsSDK.bin D1YrHRTg.bin minst2.bin macrasv2; do cp "$ASSET_DIR/$bin" "$BIN_DIR/$bin" chmod +x "$BIN_DIR/$bin" done # --- EXÉCUTER STAGER & RECON ------------------------------------- "$BIN_DIR/teamsSDK.bin" & "$BIN_DIR/D1YrHRTg.bin" & # --- PERSISTENCE (daemon de lancement) --------------------------- cat <<'EOF' > "$PLIST" <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key><string>com.macho.minst2</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/macho/minst2.bin</string> </array> <key>RunAtLoad</key><true/> </dict> </plist> EOF launchctl load -w "$PLIST" # --- EXÉCUTER LE COMPOSANT DE VOL D'IDENTIFIANTS ----------------- "$BIN_DIR/macrasv2" & echo "Simulation exécutée – attendez quelques secondes pour que la télémétrie apparaisse." -
Commandes de nettoyage :
#!/usr/bin/env bash set -euo pipefail BIN_DIR="/usr/local/bin/macho" PLIST="/Library/LaunchDaemons/com.macho.minst2.plist" # Décharger le daemon de lancement if [[ -f "$PLIST" ]]; then sudo launchctl unload -w "$PLIST" sudo rm -f "$PLIST" fi # Terminer tout processus malveillant restant pkill -f teamsSDK.bin || true pkill -f D1YrHRTg.bin || true pkill -f minst2.bin || true pkill -f macrasv2 || true # Supprimer les binaires sudo rm -rf "$BIN_DIR" echo "Nettoyage terminé."