🔍 Contexte

Analyse technique publiée le 1er mai 2026 par Ireneusz Tarnowski (DFIR & CTI Expert) sur Medium. L’article décrit une campagne active de distribution de malwares multi-étapes observée sur une période prolongée, avec une évolution des techniques au fil du temps.

🎯 Vecteur initial : SEO poisoning et malvertising

La campagne repose sur du SEO poisoning et du malvertising via des résultats sponsorisés dans les moteurs de recherche. Les victimes recherchant des outils populaires (“Claude Code”, “NotebookLM download”) sont redirigées vers des pages de phishing hébergées sur des plateformes SaaS légitimes :

  • Squarespace
  • Tilkly
  • Bitbucket Pages

Ces pages ne contiennent pas de code malveillant directement — le payload est chargé via iframe depuis un serveur externe, permettant une livraison sélective (géolocalisation, IP, User-Agent).

☁️ Infrastructure serverless (2e étape)

Les attaquants ont migré vers l’écosystème Cloudflare (Workers et Pages) pour héberger la logique de redirection et de fingerprinting. Le système Cloudflare agit comme sélecteur de plateforme en analysant le header User-Agent pour orienter la victime vers le chemin d’infection approprié (Windows ou macOS).

🖱️ Mécanisme d’exécution : ClickFix

La technique ClickFix est utilisée : la victime est invitée à ouvrir un terminal et exécuter une commande préalablement copiée dans le presse-papiers. Le fichier central install-modal.js orchestre cette logique, avec un module WASM (connector_bg.wasm) délégant la génération de commandes au C2. Des techniques anti-analyse (mesure du timing d’exécution) sont intégrées.

🪟 Chemin d’infection Windows → Pterodo RAT

  • Utilisation de mshta (Living-off-the-Land) pour exécuter un fichier HTA ou script distant sans écriture disque
  • Payload final : fichier claude.mp3 (fichier polyglot MP3 + VBA) — SHA256 : 1df4207e9ad772c0ef96e35a2756626b4af5065f1296bfb7b0520695d4200350
  • Exécution de PowerShell avec payload Base64
  • Génération d’un identifiant victime (MD5 de hostname+username) utilisé comme préfixe de sous-domaine via un DGA
  • Techniques : désactivation TLS, décodage RC4 custom, bypass AMSI par patch en mémoire, exécution IEX
  • Payload final : Pterodo RAT

🍎 Chemin d’infection macOS → AMOS Stealer

  • Commande initiale via curl | zsh avec obfuscation par tr (translation de caractères)
  • Variante initiale : communication C2 via API Telegram (bot6529184364:AAEdwM7o7w1Z5XJxQf5H2tHkVfV1mX2QeQ)
  • Variante récente (Claude AI) : infrastructure HTTP dédiée, chaîne echo → rev → base64 → zsh
  • Header HTTP custom X-R comme mécanisme de contrôle d’accès au payload
  • Téléchargement et exécution du fichier helper (Mach-O Universal Binary x86_64/arm64) — SHA256 : c8fd1222c3f70f91c401b008711629bf053874dfec315a48758a032acd114b1a
  • Loader en mémoire avec décodage multi-couches (XOR, Base64 custom, RC4-like), exécution via pipe vers /bin/zsh
  • Payload final : AMOS (Atomic macOS Stealer)

🦠 Capacités d’AMOS

  • Vol de credentials via dscl.authonly et dialog social engineering (jusqu’à 10 tentatives)
  • Exfiltration : cookies, logins, données de formulaires (Chromium, Firefox)
  • Vol de wallets crypto (extensions navigateur + apps locales : Exodus, Electrum, Atomic, Wasabi)
  • Vol de sessions Telegram (répertoire tdata), Keychain système, données iCloud
  • Remplacement d’archives app.asar dans les wallets crypto (compromission persistante)
  • Persistance via LaunchAgent (toutes les 60 secondes) communiquant avec le C2
  • Télémétrie temps réel vers un backend opérateur
  • Nettoyage des artefacts temporaires post-exfiltration

📋 Type d’article

Analyse technique détaillée à visée éducative et de détection, couvrant la chaîne d’infection complète, les TTPs, les IoCs et les comportements malveillants observés dynamiquement.

🧠 TTPs et IOCs détectés

TTP

  • T1583.006 — Acquire Infrastructure: Web Services (Resource Development)
  • T1608.006 — Stage Capabilities: SEO Poisoning (Resource Development)
  • T1566.002 — Phishing: Spearphishing Link (Initial Access)
  • T1204.002 — User Execution: Malicious File (Execution)
  • T1059.001 — Command and Scripting Interpreter: PowerShell (Execution)
  • T1059.002 — Command and Scripting Interpreter: AppleScript (Execution)
  • T1059.004 — Command and Scripting Interpreter: Unix Shell (Execution)
  • T1218.005 — System Binary Proxy Execution: Mshta (Defense Evasion)
  • T1027 — Obfuscated Files or Information (Defense Evasion)
  • T1027.010 — Obfuscated Files or Information: Command Obfuscation (Defense Evasion)
  • T1562.001 — Impair Defenses: Disable or Modify Tools (AMSI bypass) (Defense Evasion)
  • T1620 — Reflective Code Loading (Defense Evasion)
  • T1568.002 — Dynamic Resolution: Domain Generation Algorithms (Command and Control)
  • T1071.001 — Application Layer Protocol: Web Protocols (Command and Control)
  • T1102.002 — Web Service: Bidirectional Communication (Telegram) (Command and Control)
  • T1041 — Exfiltration Over C2 Channel (Exfiltration)
  • T1539 — Steal Web Session Cookie (Credential Access)
  • T1555.003 — Credentials from Password Stores: Credentials from Web Browsers (Credential Access)
  • T1555 — Credentials from Password Stores (Credential Access)
  • T1547.011 — Boot or Logon Autostart Execution: Plist Modification (LaunchAgent) (Persistence)
  • T1036.005 — Masquerading: Match Legitimate Name or Location (Defense Evasion)
  • T1140 — Deobfuscate/Decode Files or Information (Defense Evasion)
  • T1082 — System Information Discovery (Discovery)
  • T1614 — System Location Discovery (Discovery)
  • T1560.001 — Archive Collected Data: Archive via Utility (Collection)

IOC

Malware / Outils

  • Pterodo (rat)
  • AMOS (Atomic macOS Stealer) (stealer)

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

  • ✅ medium.com — source reconnue (Rösti community) (20pts)
  • ✅ 22537 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 46 IOCs dont des hashes (15pts)
  • ✅ 4/8 IOCs confirmés (MalwareBazaar, ThreatFox, URLhaus, VirusTotal) (15pts)
  • ✅ 25 TTPs MITRE identifiées (15pts)
  • ✅ date extraite du HTML source (10pts)
  • ⬜ aucun acteur de menace nommé (0pts)
  • ⬜ pas de CVE à vérifier (0pts)

IOCs confirmés externellement :

  • 1df4207e9ad772c0… (sha256) → VT (14/76 détections)
  • c8fd1222c3f70f91… (sha256) → VT (14/75 détections)
  • notebooklm-last-version.squarespace.com (domain) → VT (4/91 détections)
  • notebooklm-new-ver.squarespace.com (domain) → VT (3/91 détections)

🔗 Source originale : https://medium.com/@ireneusz.tarnowski/multi-stage-malware-delivery-campaign-using-seo-poisoning-and-serverless-infrastructure-34e05e551fa3