🔍 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 viaCCRandomGenerateBytes - 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(viaexecvp/posix_spawnp),kill,upload(exfiltration Telegram),stop- Possible 7e commande
focusnon entièrement récupérée
Persistance :
- LaunchAgent avec label
com.apple.system.services.activity(usurpation du namespacecom.apple.*) - Résolution du chemin exécutable via
__NSGetExecutablePath - Assertion power-management
IOPMAssertionCreateWithNamepour 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 delogin.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 :
6328567511d88fdc2ae0939c5ef17b7a63d2a833881900de018a4f12f4982525— VT · MalwareBazaar - SHA256 :
77b4fd46994992f0e57302cfe76ed23c0d90101381d2b89fc2ddf5c4536e77ca— VT · MalwareBazaar - SHA256 :
baabf249c77bc54c54ab0e66e15af798bd28aa5b4683554456a8b73ab8741239— VT · MalwareBazaar - SHA256 :
b3c56d689414343589f38394d19ba2fe9a518133281200faa0556ba4e4136394— VT · MalwareBazaar - SHA1 :
5555494492fc075f441637fb9d894913dde3a2ea— VT · 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/