🔍 Contexte

Publié le 23 juin 2026 par SentinelLABS (Phil Stokes), cet article présente l’analyse technique d’un implant macOS baptisé macOS.Gaslight, découvert après une mise à jour XProtect d’Apple début juin 2026. L’échantillon avait été soumis sur VirusTotal le 22 mai 2026 et restait non détecté par les moteurs statiques au moment de la publication.

🎯 Attribution et cluster

SentinelLABS attribue avec haute confiance cet implant à un cluster d’activité macOS aligné DPRK (Corée du Nord). Apple détecte l’échantillon sous la règle XProtect MACOS_BONZAI_COBUCH, famille associée par SentinelLABS à l’activité nord-coréenne. Un échantillon BONZAI frère est également détecté par la règle AIRPIPE, également liée à la Corée du Nord.

🛠️ Caractéristiques techniques

Langage et signature :

  • Écrit en Rust, signé ad hoc, identifiant : endpoint-macos-aarch64-5555494492fc075f441637fb9d894913dde3a2ea
  • Architecture : Mach-O aarch64

Commande & Contrôle :

  • Canal C2 via Telegram Bot API (boucle getUpdates)
  • Gestion des codes d’erreur Telegram : BotBlocked, InvalidToken, Conflict (utilisé comme verrou mono-instance)
  • Payloads chiffrés AES-GCM (crate Rust aes-gcm 0.10.3), nonce frais par message via CCRandomGenerateBytes
  • Certificate pinning via SecTrustSetAnchorCertificatesOnly (résistance aux proxies d’inspection)
  • Respect des paramètres proxy système via SCDynamicStoreCopyProxies

Shell interactif (6 commandes) :

  • help, id, shell (via execvp/posix_spawnp), kill, upload (exfiltration Telegram), stop
  • Possible 7e commande focus non entièrement récupérée

Persistance :

  • LaunchAgent avec label com.apple.system.services.activity (usurpation du namespace com.apple.*)
  • Résolution du chemin exécutable via __NSGetExecutablePath
  • Assertion power-management IOPMAssertionCreateWithName pour bloquer la mise en veille

Collecte de données (stealer Python embarqué) :

  • Script Python 6,6 KB encodé en base64
  • Cibles : données navigateurs (Chrome, Brave, Firefox, Safari), historiques Terminal, liste applications, snapshot processus (ps aux), profil système (system_profiler), copie brute de login.keychain-db
  • Archive vers temp/collected_data.zip, exfiltration via Telegram
  • Installateur bash 2 KB fetche CPython 3.10.18 depuis astral-sh/python-build-standalone (arm64 + x86_64)

Configuration opérateur (15 champs serde) : tg_room_id, github_token, github_repo, github_polling_interval, main_upload_url, main_base_url, aes_key, payload_path_linux, payload_path_macos, persist_name_linux, persist_name_macos, persist_type_linux, persist_type_macos, init_python_enable, persist_enable

🤖 Technique distinctive : injection de prompt anti-LLM

L’implant embarque un blob Markdown de 3,5 KB contenant 38 faux messages “system” délimités par des tokens {{DATA}}, conçus pour imiter le scaffold d’un pipeline de triage LLM. Ces messages fabriqués simulent des erreurs système (expiration de token, OOM, saturation disque, échecs répétés) pour pousser un agent LLM à abandonner, tronquer ou refuser l’analyse. Cette technique cible la perception de l’analyste/agent, non le sandbox.

🔒 OPSEC : auto-rédaction du token Telegram

Le constructeur d’URL Telegram remplace le token bot par file/token:redacted lorsque le segment de chemin est le littéral file (0x656c6966 little-endian), empêchant toute récupération du credential dans les logs, erreurs ou artefacts de crash.

📋 Type d’article

Analyse technique approfondie publiée par SentinelLABS, visant à documenter un nouvel implant macOS DPRK et à alerter la communauté CTI sur l’émergence de techniques d’évasion ciblant les pipelines d’analyse assistés par LLM.

🧠 TTPs et IOCs détectés

Acteurs de menace

  • DPRK-aligned threat actor (state-sponsored) —

TTP

  • T1543.001 — Create or Modify System Process: Launch Agent (Persistence)
  • T1059.004 — Command and Scripting Interpreter: Unix Shell (Execution)
  • T1059.006 — Command and Scripting Interpreter: Python (Execution)
  • T1071.001 — Application Layer Protocol: Web Protocols (Command and Control)
  • T1573.001 — Encrypted Channel: Symmetric Cryptography (Command and Control)
  • T1539 — Steal Web Session Cookie (Credential Access)
  • T1555.001 — Credentials from Password Stores: Keychain (Credential Access)
  • T1005 — Data from Local System (Collection)
  • T1560.001 — Archive Collected Data: Archive via Utility (Collection)
  • T1041 — Exfiltration Over C2 Channel (Exfiltration)
  • T1027 — Obfuscated Files or Information (Defense Evasion)
  • T1036.004 — Masquerading: Masquerade Task or Service (Defense Evasion)
  • T1497 — Virtualization/Sandbox Evasion (Defense Evasion)
  • T1057 — Process Discovery (Discovery)
  • T1082 — System Information Discovery (Discovery)
  • T1518 — Software Discovery (Discovery)

IOC

  • SHA256 : 6328567511d88fdc2ae0939c5ef17b7a63d2a833881900de018a4f12f4982525VT · MalwareBazaar
  • SHA256 : 77b4fd46994992f0e57302cfe76ed23c0d90101381d2b89fc2ddf5c4536e77caVT · MalwareBazaar
  • SHA256 : baabf249c77bc54c54ab0e66e15af798bd28aa5b4683554456a8b73ab8741239VT · MalwareBazaar
  • SHA256 : b3c56d689414343589f38394d19ba2fe9a518133281200faa0556ba4e4136394VT · MalwareBazaar
  • SHA1 : 5555494492fc075f441637fb9d894913dde3a2eaVT · MalwareBazaar
  • Fichiers : collected_data.zip
  • Chemins : temp/collected_data.zip
  • Chemins : login.keychain-db

Malware / Outils

  • macOS.Gaslight (backdoor)
  • Atomic macOS Stealer (stealer)

🟢 Indice de vérification factuelle : 92/100 (haute)

  • ✅ sentinelone.com — source reconnue (liste interne) (20pts)
  • ✅ 21867 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 8 IOCs dont des hashes (15pts)
  • ✅ 2/3 IOCs confirmés (MalwareBazaar, ThreatFox, VirusTotal) (12pts)
  • ✅ 16 TTPs MITRE identifiées (15pts)
  • ✅ date extraite du HTML source (10pts)
  • ✅ acteur(s) identifié(s) : DPRK-aligned threat actor (5pts)
  • ⬜ pas de CVE à vérifier (0pts)

IOCs confirmés externellement :

  • 6328567511d88fdc… (sha256) → VT (3/75 détections)
  • 77b4fd46994992f0… (sha256) → VT (10/75 détections)

🔗 Source originale : https://www.sentinelone.com/labs/macos-gaslight-rust-backdoor-turns-prompt-injection-on-the-analyst-not-the-sandbox/