🔍 Contexte

Publié le 18 octobre 2026 sur le blog Objective-See par Patrick Wardle, cet article présente l’analyse technique complète de Heartbreaker, un ransomware macOS précédemment inconnu et non détecté, découvert sur VirusTotal par Megan Carney. L’échantillon avait été soumis en mai 2025 et reste, au moment de la publication, non détecté par tous les moteurs antivirus de VirusTotal.

🎯 Caractéristiques du malware

  • Type : Ransomware métamorphique ciblant macOS (ARM64 / Apple Silicon)
  • Langage : Rust, signé ad hoc, binaire Mach-O 64 bits
  • Cible : Fichiers dans le répertoire ~/Downloads de l’utilisateur
  • Extension ajoutée : .heartbreaker
  • Chiffrement : AES-256-GCM avec une clé statique codée en dur (g_w\`:D2Xq6Yxez-5{#3mfd=VcB.Qhsub`), identique pour toutes les victimes
  • Format des fichiers chiffrés : nonce 12 octets || ciphertext || tag GCM 16 octets
  • Note de rançon : README.txt déposé sur le Bureau, demande de 0,003 BTC

🔄 Mécanisme métamorphique

Heartbreaker embarque son propre code source Rust (main.rs, build.rs) via la macro include_str!. À chaque exécution, il :

  1. Localise les sections balisées par METAMORPHIC_MARKER_START / METAMORPHIC_MARKER_END
  2. Supprime les artefacts de la génération précédente (fonctions junk, variables aléatoires)
  3. Randomise les identifiants de variables (préfixe r_)
  4. Génère 15 nouvelles fonctions junk (func_*) sans logique fonctionnelle
  5. Réorganise aléatoirement l’ordre des fonctions
  6. Compile le nouveau source via cargo build --release
  7. Remplace le binaire en cours d’exécution par le nouveau compilé

Ce mécanisme repose sur la bibliothèque mimicore (dépôt GitHub supprimé), dont le successeur apparent metacore reste public. Chaque génération embarque le source transformé, permettant une mutation continue.

🔒 Persistance

Heartbreaker installe un LaunchAgent à ~/Library/LaunchAgents/com.network.startup.plist (label : com.myapp.startup) pour s’exécuter à chaque connexion utilisateur, afin de chiffrer les nouveaux fichiers ajoutés à ~/Downloads.

🔓 Déchiffrement possible

La clé AES-GCM étant statique et codée en dur dans le binaire, un décrypteur Python a été développé et publié. La récupération des fichiers est possible sans paiement de rançon.

🛡️ Détection comportementale

L’outil open-source RansomWhere? (basé sur Apple Endpoint Security Framework et analyse entropique) détecte Heartbreaker en observant la création rapide de fichiers à haute entropie par un processus non approuvé, indépendamment de son hash ou de ses signatures statiques.

📋 Type d’article

Analyse technique approfondie d’un échantillon de malware macOS inédit, combinant reverse engineering statique, analyse dynamique, récupération du code source embarqué et validation d’une approche de détection générique comportementale.

🧠 TTPs et IOCs détectés

TTP

  • T1486 — Data Encrypted for Impact (Impact)
  • T1547.011 — Plist Modification (Persistence)
  • T1027.005 — Indicator Removal from Tools (Defense Evasion)
  • T1027 — Obfuscated Files or Information (Defense Evasion)
  • T1129 — Shared Modules (Execution)
  • T1036 — Masquerading (Defense Evasion)

IOC

  • Fichiers : heartbreaker
  • Fichiers : README.txt
  • Fichiers : modified_source.rs
  • Chemins : ~/Library/LaunchAgents/com.network.startup.plist
  • Chemins : ~/Downloads/
  • Chemins : ~/Desktop/README.txt

⚠️ À propos de ces IOC — ils sont extraits automatiquement de l’article original le 25 octobre 2026 et n’ont pas fait l’objet d’une vérification externe. Un indicateur peut avoir été réattribué depuis : une IP de C2 peut redevenir un service légitime, un domaine sinkholé peut changer de propriétaire. Aucune garantie d’exactitude ni d’actualité — contrôlez leur validité avant tout usage opérationnel, en particulier avant de les injecter dans une blocklist ou un SIEM.

Malware / Outils

  • Heartbreaker (ransomware)
  • mimicore (other)
  • metacore (other)
  • RansomWhere? (tool)

🟡 Indice de vérification factuelle : 50/100 (moyenne)

  • ⬜ objective-see.org — source non référencée (0pts)
  • ✅ 26374 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 6 IOCs (IPs/domaines/CVEs) (10pts)
  • ⬜ pas d’IOC vérifié (0pts)
  • ✅ 6 TTPs MITRE identifiées (15pts)
  • ✅ date extraite du HTML source (10pts)
  • ⬜ aucun acteur de menace nommé (0pts)
  • ⬜ pas de CVE à vérifier (0pts)

🔗 Source originale : https://objective-see.org/blog/blog_0x8A.html