Source : Jamf Threat Labs (blog Jamf) — Analyse technique d’un nouvel infostealer macOS baptisé « DigitStealer », observé comme non détecté sur VirusTotal au moment de l’analyse, distribué via une image disque se faisant passer pour l’outil légitime DynamicLake.

🔎 Découverte et distribution

  • Le malware est livré dans une image disque non signée « DynamicLake.dmg » et imite l’utilitaire légitime DynamicLake (légitime signé Team ID XT766AV9R9), mais distribué via le domaine factice https[:]//dynamiclake[.]org.
  • Le paquet inclut un fichier « Drag Into Terminal.msi » (extension inhabituelle sur macOS) incitant l’utilisateur à exécuter un one‑liner curl | bash pour contourner Gatekeeper et lancer l’infection en mémoire.

⚙️ Chaîne d’exécution et évasion

  • Étape 1 (dropper) : récupération d’un script obfusqué/base64 via Cloudflare Pages (pages.dev), exécution en mémoire, vérifications de locale (AppleLocale) et contrôles anti‑analyse/anti‑VM ciblant Apple Silicon M2+ via sysctl (FEAT_BTI, FEAT_SSBS, FEAT_ECV, FEAT_RPRES). Utilisation systématique de nohup curl -fSsl et exécution via osascript (AppleScript/JXA) ou bash.
  • Hébergement des charges sur pages.dev, rendant le blocage global difficile sans faux positifs.

🧩 Charges malveillantes

  • Payload 1 (AppleScript en clair) : demande le mot de passe utilisateur, exfiltre identifiants et fichiers vers https[:]//goldenticketsshop[.]com (/api/credentials et /api/grabber), exécute « tccutil reset All », archive et envoie de petits fichiers (Desktop, Documents, Downloads) et des Notes en clair, stocke les mots de passe validés dans ~/..txt, puis télécharge un AppleScript modifiant l’app.asar de Ledger Live via un téléchargement multi‑parties (fusion de 3 composants) afin d’échapper aux détections mono‑fichier.
  • Payload 2 (JXA obfusqué) : collecte et exfiltration de données de navigateurs (Chrome, Brave, Edge, Firefox…), de portefeuilles crypto (Ledger, Electrum, Exodus, Coinomi…), de la base de trousseau ~/Library/Keychains/login.keychain-db, de configurations VPN (OpenVPN, Tunnelblick) et du dossier Telegram tdata.
  • Payload 3 (JXA obfusqué – ciblage Ledger Live) : tue le processus Ledger Live, lit ~/Library/Application Support/Ledger Live/app.json, remplace data.endpoint par une URL/identifiants fournis par l’attaquant, puis réécrit le JSON.
  • Payload 4 (persistance + backdoor) : installe un Launch Agent qui récupère dynamiquement sa charge via un enregistrement TXT hébergé sur goldenticketsshop[.]com, télécharge un agent JXA persistant qui boucle toutes les ~10 s, envoie le MD5 de l’UUID matériel et attend de nouveaux scripts AppleScript/JS du C2 pour exécution.

🧠 Constat principal

  • La campagne démontre une sophistication accrue: exécution en mémoire, multi‑étapes, anti‑analyse matérielle ciblant M2+, abus de services légitimes (Cloudflare Pages) et persistance dynamique. L’article met en avant la difficulté de détection par signatures statiques et l’intérêt d’approches comportementales.

IOC et TTPs

  • IoCs:
    • Image disque: DynamicLake.dmg; fichier « Drag Into Terminal.msi »
    • Hash (annoncé) : SHA‑256 5c73987e642b8f8067c2f2b92af9fd923c25b2ec
    • Domaines/hosts: dynamiclake[.]org; 67e5143a9ca7d2240c137ef80f2641d6.pages[.]dev (ex: /c9c114433040497328fe9212012b1b94.aspx); goldenticketsshop[.]com (endpoints /api/credentials, /api/grabber; enregistrement TXT pour backdoor)
  • TTPs:
    • Initial access: image DMG usurpée, « drag‑to‑terminal », extension .msi trompeuse, typosquatting
    • Exécution: curl | bash en mémoire; AppleScript/JXA via osascript; nohup pour résilience
    • Évasion/défense: vérification locale AppleLocale; sysctl FEAT_BTI/SSBS/ECV/RPRES (ciblage M2+), évitement VM/Intel/M1; hébergement sur pages.dev; charges scindées; remplacement multi‑parties de app.asar; reset TCC
    • Collecte/exfiltration: navigateurs, portefeuilles crypto, login.keychain-db, VPN (OpenVPN/Tunnelblick), Telegram tdata, Notes en clair; envoi vers goldenticketsshop[.]com
    • Persistance/C2: Launch Agent téléchargeant une charge via TXT record; agent JXA pollant le C2 toutes ~10s avec MD5 de l’UUID matériel

Type d’article et objectif

  • Publication de recherche technique visant à documenter les techniques, charges utiles et indicateurs liés à l’infostealer macOS « DigitStealer ». 🧪

🧠 TTPs et IOCs détectés

TTP

Initial access: image DMG usurpée, ‘drag-to-terminal’, extension .msi trompeuse, typosquatting; Exécution: curl | bash en mémoire; AppleScript/JXA via osascript; nohup pour résilience; Évasion/défense: vérification locale AppleLocale; sysctl FEAT_BTI/SSBS/ECV/RPRES (ciblage M2+), évitement VM/Intel/M1; hébergement sur pages.dev; charges scindées; remplacement multi-parties de app.asar; reset TCC; Collecte/exfiltration: navigateurs, portefeuilles crypto, login.keychain-db, VPN (OpenVPN/Tunnelblick), Telegram tdata, Notes en clair; envoi vers goldenticketsshop[.]com; Persistance/C2: Launch Agent téléchargeant une charge via TXT record; agent JXA pollant le C2 toutes ~10s avec MD5 de l’UUID matériel

IOC

Image disque: DynamicLake.dmg; fichier ‘Drag Into Terminal.msi’; Hash: SHA-256 5c73987e642b8f8067c2f2b92af9fd923c25b2ec; Domaines/hosts: dynamiclake[.]org; 67e5143a9ca7d2240c137ef80f2641d6.pages[.]dev; goldenticketsshop[.]com


🔗 Source originale : https://www.jamf.com/blog/jtl-digitstealer-macos-infostealer-analysis/