Fake Maccy Stealer

Infostealer macOS · Rust ARM64 · Observé pour la première fois le 26 juin 2026

Présentation

Fake Maccy Stealer est une campagne de vol d'identifiants sur macOS qui usurpe le gestionnaire de presse-papiers légitime Maccy afin de distribuer un infostealer développé en Rust au moyen d'un flux d'exécution trompeur dans l'Éditeur de scripts. Au lieu d'exploiter une vulnérabilité, la campagne s'appuie sur la confiance de l'utilisateur, la persistance via les éléments d'ouverture et la furtivité après exécution pour collecter des identifiants, des données de navigateur et le contenu du presse-papiers, tout en maintenant un canal de commande chiffré actif. La campagne a été identifiée et analysée par l'équipe Threat Intelligence EDR de ManageEngine lors de l'étude d'une opération de vol d'identifiants sur macOS exploitant des workflows d'applications fiables et des chemins d'exécution trompeurs.

L'attaquant a enregistré maccyapp[.]com comme domaine similaire au projet Maccy légitime, distribué depuis maccy.app et via les versions GitHub du développeur Alexey Rodionov. Le faux domaine fournit une image disque maccy.dmg, un format qui n'a jamais figuré dans l'historique des versions légitimes de Maccy, exclusivement distribuées sous forme de Maccy.app.zip. La victime y est dirigée par des résultats de recherche optimisés pour le SEO, affichés à côté de la fiche du projet authentique. Ce qui distingue cette campagne de la plupart des activités récentes d'infostealers sur macOS est la surface d'exécution. Au lieu du flux de copier-coller dans Terminal utilisé par les campagnes ClickFix visant macOS, Fake Maccy Stealer fournit un script JavaScript for Automation (JXA) qui s'ouvre dans l'Éditeur de scripts de macOS lorsque le DMG est monté. L'utilisateur est invité à cliquer sur Exécuter. L'Éditeur de scripts est une application Apple propriétaire bénéficiant de la confiance totale du système ; les protections contre le collage dans Terminal ajoutées à macOS Tahoe 26.4 ne s'y appliquent pas. La charge utile malveillante est masquée sous la fenêtre visible par un remplissage d'espaces, derrière un code décoratif qui cite l'URL légitime de l'App Store comme faux signal de confiance.

Une fois exécuté, le dropper place un binaire Mach-O natif ARM64, compilé en Rust, dans un faux paquet d'application nommé Finder.app. Il utilise l'icône authentique d'Apple Finder copiée depuis /System/Library/CoreServices/ ainsi que l'identifiant de paquet com.apple.finder.monitor. Le binaire s'exécute comme un second processus Finder dans le Moniteur d'activité, visuellement impossible à distinguer du véritable processus. La persistance est établie au moyen des éléments d'ouverture et des API LSSharedFileList et SMAppService, en évitant délibérément LaunchAgents et LaunchDaemons, sur lesquels la couverture de détection est la plus dense.

Le logiciel malveillant collecte les identifiants du Trousseau macOS, les mots de passe et cookies enregistrés dans les navigateurs ainsi que le contenu du presse-papiers, chiffre les données recueillies avec ChaCha20-Poly1305 (RFC 8439), puis les exfiltre vers https://avengerflow[.]com/api/sync. Le canal C2 est bidirectionnel : le serveur renvoie des réponses chiffrées, ce qui fait de l'implant une porte dérobée de vol d'identifiants plutôt qu'un infostealer à exécution unique. Lors de sa première soumission à VirusTotal, l'échantillon n'était détecté que par un moteur sur 70. La campagne s'inscrit dans un schéma documenté d'opérateurs MaaS russophones ciblant les professionnels macOS au moyen de leurres liés aux outils de développement. Le dropper JXA met en œuvre quatre contrôles indépendants de géorestriction visant la CEI, fondés sur le fuseau horaire, le code pays, la langue de saisie du clavier et l'architecture du processeur ; il s'arrête silencieusement sur les machines associées à la Russie ou à onze autres pays alignés sur la CEI.

CHAÎNE D'ATTAQUE OPÉRATIONNELLE · DU FAUX DMG MACCY À L'EXFILTRATION DES IDENTIFIANTS
  1. Départ

    Domaine similaire

    maccyapp[.]com via un résultat de recherche optimisé pour le SEO

  2. ÉTAPE 1

    Téléchargement du faux DMG Maccy

    Format maccy.dmg non utilisé par le projet légitime

  3. ÉTAPE 2 — UTILISATEUR

    Le script JXA s'ouvre dans l'Éditeur de scripts

    L'utilisateur clique sur Exécuter (« ⌘ + R ») — aucun Terminal ni copier-coller

  4. ÉTAPE 3

    Géorestriction CEI → URL C2 déchiffrée avec RC4

    Quatre contrôles anti-ciblage ; clé dérivée de l'empreinte du système

  5. ÉTAPE 4

    Téléchargement et installation du binaire Rust

    Icône Finder clonéeSignature de code ad hoc
  6. ÉTAPE 5

    Enregistrement de la persistance via un élément d'ouverture

    LSSharedFileList + SMAppService — apparaît comme « Finder » dans Réglages Système

  7. ÉTAPE 6

    Vol d'identifiants et capture du presse-papiers

    Trousseau · SQLite des navigateurs · NSPasteboard · interception PAM

  8. IMPACT

    Exfiltration ChaCha20-Poly1305 → C2 actif

    POST HTTPS vers avengerflow[.]com · bidirectionnel — l'hôte est traité comme un implant actif

Le leurre de l'Éditeur de scripts est ce qui distingue cette campagne des flux ClickFix reposant sur Terminal. Le geste d'approbation est le même — cliquer sur Exécuter dans une application Apple de confiance — mais il contourne entièrement les protections contre le collage dans Terminal ajoutées à macOS Tahoe 26.4.

Tactiques, techniques et procédures

Fake Maccy Stealer superpose sept couches distinctes de contournement au cours des phases d'accès initial, d'exécution, de persistance, de contournement des défenses, d'accès aux identifiants et d'exfiltration. La densité de techniques est la plus élevée dans le contournement des défenses, où le logiciel malveillant associe usurpation, obscurcissement, géorestriction pour contourner les sandbox, indicateurs de fenêtre masquée et détournement des contrôles de confiance au sein d'une même chaîne de distribution.

DÉTAIL DES TECHNIQUESTechniques principales · Fake Maccy Stealer
TACTIQUETECHNIQUESACTION DE FAKE MACCY STEALER
Accès initialUn domaine similaire optimisé pour le SEO (maccyapp[.]com) fournit un DMG malveillant aux utilisateurs qui recherchent le gestionnaire de presse-papiers Maccy légitime.
ExécutionLa victime clique sur Exécuter dans l'Éditeur de scripts de macOS afin d'exécuter le dropper JXA obscurci. Aucun exploit ni CVE. L'utilisateur approuve l'exécution par l'intermédiaire d'une application Apple propriétaire de confiance.
PersistanceLe dropper JXA enregistre le faux Finder.app comme élément d'ouverture au moyen de l'ancienne API LSSharedFileList et de la nouvelle SMAppService (ServiceManagement.framework), afin que le logiciel malveillant survive au redémarrage. L'entrée apparaît sous le nom « Finder », avec l'icône authentique d'Apple Finder, dans Réglages Système → Général → Ouverture.
Contournement des défensesL'identifiant de paquet com.apple.finder.monitor imite la convention DNS inversée d'Apple. Le binaire est nommé F8C06C86 (huit caractères hexadécimaux, vraisemblablement propres à chaque hôte afin d'empêcher le partage des IOC de hachage). L'icône authentique de Finder est copiée depuis /System/Library/CoreServices/. LSUIElement=true et LSBackgroundOnly=true suppriment toute icône du Dock et toute interface. Les fichiers de configuration et les marqueurs utilisent des noms de fichiers cachés (.config, .lock, .Maccy). Le script JXA applique l'inversion de chaînes, des calculs XOR sur les codes de caractères et des constructeurs Function() encodés en URI pour masquer sa logique. Le binaire Rust utilise ChaCha20-Poly1305 pour toutes les données exfiltrées. La surface de confiance de l'Éditeur de scripts est détournée pour contourner l'évaluation de quarantaine de Gatekeeper.
Accès aux identifiantsLes entrées du Trousseau sont extraites via SecItemCopyMatching ciblant kSecClassGenericPassword. Les bases d'identifiants des navigateurs (Chrome Login Data, Firefox logins.json, éléments du Trousseau Safari) sont consultées directement via libsqlite3.dylib. Le logiciel malveillant est également lié à libpam.2.dylib, la bibliothèque Pluggable Authentication Module, qui peut intercepter les mots de passe sudo et les réponses aux boîtes de dialogue d'authentification du système.
DécouverteLe dropper JXA collecte le fuseau horaire, le code pays, la langue de saisie du clavier et l'architecture du processeur avant de s'exécuter. Le binaire Rust collecte operatingSystemVersion et l'identifiant matériel via IOKit.framework afin d'établir l'empreinte de l'hôte et d'étiqueter la télémétrie de campagne.
CollecteLe contenu du presse-papiers est capturé via NSPasteboard.generalPasteboard. Les bases d'identifiants des navigateurs, les entrées du Trousseau et les artefacts d'authentification système sont lus dans le stockage local. Le logiciel malveillant cible un appareil que l'utilisateur a expressément configuré pour gérer des données sensibles du presse-papiers ; le choix du leurre est donc délibérément aligné sur l'objectif de collecte.
Commande et contrôlePOST HTTPS vers avengerflow[.]com/api/sync via NSURLSession. Le canal est bidirectionnel. Tout le trafic est chiffré avec ChaCha20-Poly1305 (RFC 8439). Le domaine C2 est placé derrière Cloudflare (172.67.210.219, 104.21.93.138), avec une origine backend présumée sur AWS EC2 en Espagne (51.92.110.33). Les balises portent le préfixe de campagne codé en dur MacOSapp1.
ExfiltrationToutes les données collectées sont chiffrées avec ChaCha20-Poly1305 et envoyées sur le canal HTTPS C2 existant. Le format de balise C2 confirmé est MacOSapp1{"data":"<blob chiffré>"}. Un horodatage de balise confirmé, 2026-06-26 07:38:02 UTC, a été récupéré dans la propre base de données cache SQLite du logiciel malveillant.
Reconnaissance / Élév. de privilèges / Mouvement latéral / Impact—Non observé dans cette campagne. Le logiciel malveillant fonctionne entièrement dans le contexte de la session utilisateur et ne tente aucune élévation de privilèges ni aucun mouvement latéral.
ÉTAPE 1T1189 · T1204.002

Le leurre du domaine similaire

Maccy est un gestionnaire de presse-papiers open source très utilisé, distribué depuis maccy.app et GitHub, développé et signé par Alexey Rodionov (Team Identifier MN3X4648SC). L'attaquant a enregistré maccyapp[.]com comme domaine quasi identique et l'a optimisé afin qu'il apparaisse dans les résultats de recherche à côté de la fiche du projet légitime. Le domaine malveillant prétend distribuer Maccy version 2.7.3, un numéro de version auquel ne correspond aucune balise GitHub dans le référentiel authentique.

La charge utile est fournie sous la forme maccy.dmg. Le projet Maccy officiel n'a jamais distribué de DMG ; toutes les versions légitimes sont publiées sous forme de Maccy.app.zip sur GitHub. Cette différence de format constitue le premier signal détectable. Le SHA-256 de l'image disque malveillante (45bd0e321aa85b63b5dee4e87465e4088546eea5da6efb9c96847023384c48c9) ne correspond au hachage d'aucune version légitime de Maccy. Les binaires Maccy authentiques sont signés avec un Apple Developer ID, notariés avec ticket incorporé et validés par Gatekeeper sans avertissement. La charge utile malveillante est signée ad hoc, sans Team Identifier, et est explicitement rejetée par spctl --assess.

Le choix du leurre est délibéré. Les gestionnaires de presse-papiers sont utilisés de manière disproportionnée par les développeurs, les administrateurs IT et les professionnels de la sécurité, qui copient et collent régulièrement des données sensibles : jetons d'API, clés SSH, phrases de récupération, mots de passe temporaires et codes 2FA. Sur un tel hôte, le presse-papiers forme un cache structuré de secrets récemment utilisés. La campagne vise à compromettre l'outil auquel ses cibles confient précisément ces données.

ÉTAPE 2T1059.007 · T1027.010 · T1553

Le dropper JXA de l'Éditeur de scripts

Lorsque la victime monte le DMG, un fichier JXA .scpt compilé s'ouvre automatiquement dans l'Éditeur de scripts de macOS. La partie visible du script contient un bloc de configuration court et plausible, faisant référence à l'URL officielle de Maccy dans l'Apple App Store, ainsi que des instructions demandant d'appuyer sur ⌘ + R ou de cliquer sur le bouton Exécuter. L'URL de l'App Store constitue un signal de confiance délibéré, mais ne joue aucun rôle fonctionnel. La véritable charge utile est une routine JXA fortement obscurcie, masquée sous la fenêtre visible de l'éditeur par un remplissage d'espaces.

Pourquoi l'Éditeur de scripts contourne les protections macOS : il s'agit d'une application Apple propriétaire bénéficiant de la confiance totale du système. Les protections contre le collage dans Terminal de macOS Tahoe 26.4 ciblent la surface d'attaque précise où les victimes sont invitées à coller des commandes dans Terminal. Ces contrôles n'ont aucun effet sur du code exécuté en cliquant sur Exécuter dans l'Éditeur de scripts. macOS affiche bien un avertissement « développeur non identifié » lorsque le script s'exécute, mais il s'agit de la même invite que les utilisateurs ont été conditionnés à ignorer pendant des années, et le leurre est conçu pour les amener à faire exactement cela.

L'obscurcissement du script JXA repose sur trois techniques superposées. Inversion des chaînes : les constantes sont stockées à l'envers et assemblées à l'exécution. Arithmétique XOR sur les codes de caractères : chaque caractère est dérivé d'opérations arithmétiques appliquées à des nombres entiers. Constructeurs Function() encodés en URI : l'instruction Function('return decodeURIComponent(\'%69%6d%70%6f%72%74\')')() produit 'import' à l'exécution. Le résultat est un dropper dont le texte source ne contient aucune URL C2 ni aucun chemin de fichier lisible.

Le script JXA importe trois frameworks macOS via le pont Objective-C : Cocoa (interface utilisateur, NSWorkspace, NSFileManager), IOKit (énumération du matériel) et CoreFoundation (requêtes de fuseau horaire et de paramètres régionaux). Ces imports servent de base aux quatre contrôles de géorestriction exécutés avant le téléchargement de toute charge utile.

Étape 3T1082 · T1027

Géorestriction CEI et déchiffrement de l'URL C2 lié à la machine

Avant de télécharger ou d'installer quoi que ce soit, le dropper JXA exécute quatre contrôles indépendants afin d'interrompre l'exécution sur les machines associées à la Russie ou à dix autres pays alignés sur la CEI. Ce modèle est cohérent avec le comportement d'opérateurs MaaS russophones cherchant à éviter de créer des victimes susceptibles de déposer une plainte dans leur propre pays, une pratique documentée dans plusieurs familles d'infostealers macOS actives dans le même écosystème.

  • Contrôle du fuseau horaire :NSTimeZone.localTimeZone.name comparé à 12 identifiants CEI, notamment Europe/Moscow, Asia/Almaty, Europe/Minsk et des zones apparentées.
  • Contrôle du code pays :CFLocaleCopyPreferredLanguages comparé à l'expression régulière RU|BY|KZ|AM|AZ|KG|MD|TJ|UZ|TM|GE.
  • Contrôle de la source de saisie du clavier :TISCreateInputSourceList énuméré par rapport à une liste d'identifiants de langue de clavier de la CEI.
  • Contrôle de l'architecture :sysctlbyname("hw.optional.arm64") indique ARM64 ou x86_64 au C2, ce qui permet au serveur de fournir le binaire approprié. Ce contrôle confirme que le ciblage principal porte sur Apple Silicon.

L'URL C2 est stockée dans le script JXA sous forme de blob chiffré avec RC4, distinct du chiffrement ChaCha20-Poly1305 utilisé dans le binaire Rust. La clé de déchiffrement RC4 est dérivée des résultats des quatre contrôles de géorestriction concaténés dans une empreinte système de 32 octets. De ce fait, l'URL C2 se déchiffre en une valeur différente sur chaque machine ; un chercheur qui extrait le blob chiffré du code source du script ne peut pas récupérer l'URL sans exécuter les contrôles sur un hôte admissible. L'extraction statique de l'URL C2 à partir du seul script du dropper est impossible.

Étape 4T1036.005 · T1564.001 · T1564.003 · T1553

Usurpation de Finder et persistance via les éléments d'ouverture

Une fois les contrôles de géorestriction validés, le dropper JXA télécharge le binaire Rust depuis l'URL C2 déchiffrée au moyen de NSURLSession et construit sur le disque la structure suivante :

Structure du faux bundle Finder.app
~/Library/Application Support/com.apple.finder.monitor/
<!-- mimic Apple reverse-DNS naming convention -->
└── Finder.app/
    ├── Contents/
    │   ├── Info.plist          (LSUIElement=true · LSBackgroundOnly=true)
    │   ├── MacOS/
    │   │   └── F8C06C86        (944,464 bytes — Rust ARM64 infostealer)
    │   └── Resources/
    │       └── AppIcon.icns    (copied from /System/Library/CoreServices/Finder.app)
    ├── .config                 (34 bytes — C2 URL plaintext: https://avengerflow.com/api/sync)
    ├── .lock                   (0 bytes — single-instance mutex)
    └── .Maccy                  (0 bytes — clipboard monitoring marker)

Trois aspects de cette structure sont spécifiquement conçus pour éviter la détection. Le nom de répertoire com.apple.finder.monitor imite la convention DNS inversée utilisée par Apple pour ses propres services en arrière-plan. Le paquet s'appelle Finder.app et utilise une copie de l'icône authentique d'Apple Finder récupérée dans le chemin système, ce qui crée dans le Moniteur d'activité un second processus visuellement identique au véritable Finder. Le nom de l'exécutable qu'il contient se compose de huit caractères hexadécimaux dérivés de l'hôte et semble varier à chaque installation, empêchant le partage des IOC de hachage binaire au niveau du nom de fichier.

Le Info.plist définit LSUIElement=true (aucune icône dans le Dock) et LSBackgroundOnly=true (aucune interface), de sorte que le processus s'exécute de manière entièrement invisible. Après avoir écrit le paquet, le dropper auto-signe le binaire au moyen de codesign -fs - --deep (signature ad hoc), ce qui entraîne un rejet par Gatekeeper lors d'une évaluation avec spctl --assess. Cependant, le binaire a déjà été autorisé lorsque l'utilisateur a approuvé le script dans l'Éditeur de scripts ; Gatekeeper ne le réévalue donc pas à ce stade.

La persistance est enregistrée simultanément au moyen de deux API : l'ancienne LSSharedFileList (LSSharedFileListInsertItemURL sur kLSSharedFileListSessionLoginItems) et la nouvelle SMAppService de ServiceManagement.framework. L'élément d'ouverture obtenu apparaît dans Réglages Système → Général → Ouverture sous le nom « Finder », avec l'icône authentique d'Apple Finder. La base de données Background Task Manager (BTM) l'enregistre sous 2.com.apple.finder.monitor avec l'état [enabled, allowed, visible, notified].

Le choix d'utiliser les éléments d'ouverture plutôt que LaunchAgents ou LaunchDaemons est important sur le plan opérationnel. La couverture de détection de ~/Library/LaunchAgents/*.plist et /Library/LaunchDaemons/*.plist est bien établie dans les outils de sécurité macOS. La persistance via LSSharedFileList et SMAppService bénéficie d'une surveillance nettement moindre, et l'entrée de la base de données BTM n'est pas examinée par défaut dans la plupart des inventaires d'outils de sécurité.

Étape 5T1555.001 · T1555.003 · T1115 · T1041 · T1573.001

Vol d'identifiants et exfiltration

Le binaire Rust s'exécute silencieusement, toutes les entrées et sorties étant redirigées vers /dev/null. Il fonctionne entièrement dans le contexte de la session utilisateur et ne tente aucune élévation de privilèges. Les données auxquelles il peut accéder dans ce contexte sont néanmoins nombreuses.

Identifiants du Trousseau : le binaire appelle SecItemCopyMatching avec kSecClassGenericPassword, kSecAttrService, kSecReturnData et kSecReturnAttributes. Cette chaîne d'API extrait les entrées de mots de passe génériques du trousseau de session, notamment les mots de passe Wi-Fi et applicatifs ainsi que les identifiants stockés par les gestionnaires de mots de passe et les navigateurs utilisant le Trousseau comme backend.

Identifiants des navigateurs : un accès SQLite direct via libsqlite3.dylib cible les bases Login Data et Cookies de Chrome, les fichiers logins.json et key4.db de Firefox ainsi que les éléments du Trousseau Safari. Les cookies de session sont capturés en conservant leurs indicateurs de sécurité, ce qui permet le détournement de session sans devoir casser un second facteur d'authentification.

Contenu du presse-papiers :NSPasteboard.generalPasteboard capture tout ce que l'utilisateur copie pendant l'exécution du processus. Il s'agit précisément des données qu'un utilisateur de gestionnaire de presse-papiers s'attend à retrouver : mots de passe, jetons, phrases de récupération et codes de récupération copiés dans le cadre du travail habituel.

Interception PAM : le binaire est lié à libpam.2.dylib, la bibliothèque Pluggable Authentication Module. Il peut ainsi intercepter des événements d'authentification système et éventuellement capturer les mots de passe saisis dans des invites sudo ou des boîtes de dialogue de sécurité du système après l'installation.

Les données collectées sont chiffrées avec ChaCha20-Poly1305, variante IETF conforme à la RFC 8439. La présence de la chaîne expand 32-byte k dans les chaînes du binaire confirme la constante sigma de ChaCha20 issue du crate Rust chacha20poly1305. Chaque blob chiffré présente la structure suivante : [version : 1 octet = 0x02] [nonce : 12 octets] [texte chiffré : N octets] [balise Poly1305 : 16 octets]. Le corps de la balise utilise le format MacOSapp1{"data":"<blob chiffré>"}, confirmé dans la propre base de données cache SQLite du logiciel malveillant, qui a enregistré un contact C2 le 2026-06-26 07:38:02 UTC avec https://avengerflow.com/api/sync.

Le canal C2 est bidirectionnel. Une réponse C2 capturée contenant un blob chiffré confirme que le serveur renvoie des commandes à l'implant. Un hôte compromis doit être traité comme un implant actif, et non comme une fuite ponctuelle d'identifiants. Tous les identifiants doivent être considérés comme exposés et renouvelés, et toutes les sessions actives doivent être invalidées.

Aspect de la chaîne d'attaque dans la télémétrie des terminaux

Aspect de la chaîne d'attaque dans la télémétrie des terminaux

Comment réagit Malware Protection Plus

Démonstration du processus de détection, d'investigation et de confinement d'une infection confirmée par Fake Maccy Stealer.

Indicateurs de compromission

Les indicateurs sont répartis entre, d'une part, les IOC comportementaux et structurels durables, qui résistent au changement de variante, et, d'autre part, les IOC réseau volatils, liés à l'infrastructure de cette campagne précise et susceptibles de changer si l'opérateur la reconstruit.

Chemins du système de fichiers (durables)

7 indicateurs

Artefacts structurels cohérents d'une variante de campagne à l'autre. Ces chemins résultent de choix délibérés destinés à imiter les conventions de nommage d'Apple et ne changeront pas entre les mises à jour du binaire.

  • ~/Library/Application Support/com.apple.finder.monitor/Root malware directory — presence is high-confidence indicator
  • ~/Library/Application Support/com.apple.finder.monitor/Finder.app/Contents/MacOS/Rust binary location — binary name (e.g. F8C06C86) rotates per host
  • ~/Library/Application Support/com.apple.finder.monitor/.config34-byte plaintext C2 URL file
  • ~/Library/Application Support/com.apple.finder.monitor/.MaccyZero-byte clipboard monitoring marker
  • ~/Library/Caches/com.apple.finder.monitor/SQLite cache containing confirmed C2 contact timestamps
  • ~/Library/HTTPStorages/com.apple.finder.monitor/HTTP storage artifacts
  • Bundle identifier: com.apple.finder.monitorFake Apple bundle identifier — not used by any legitimate Apple software

Modèles de processus et d'identité (durables)

4 modèles

Indicateurs comportementaux et de signature qui subsistent lorsque le binaire est remplacé.

  • Finder.app running from path other than /System/Library/CoreServices/High-confidence indicator of active infection
  • codesign: Signature=adhoc · TeamIdentifier=not set on Finder.appReal Finder is signed with Apple Root CA; ad-hoc signing is unambiguous
  • Login Item named "Finder" with path outside /System/Library/CoreServices/BTM entry: 2.com.apple.finder.monitor
  • C2 beacon prefix: MacOSapp1{"data":"...Campaign identifier hardcoded in Rust binary

Comportement réseau (volatil)

5 indicateurs

Ces indicateurs sont liés à l'infrastructure actuelle de la campagne. Bloquez-les au niveau du DNS et du proxy lorsque cela est possible, mais considérez-les comme volatils : l'opérateur peut changer de domaine sans modifier les autres comportements.

  • avengerflow[.]comC2 domain — Cloudflare-fronted
  • https://avengerflow[.]com/api/syncConfirmed C2 endpoint (cache DB timestamp: 2026-06-26 07:38:02 UTC)
  • 172.67.210.219Cloudflare front IP
  • 104.21.93.138Cloudflare front IP
  • 51.92.110.33 (ec2-51-92-110-33.eu-south-2.compute.amazonaws.com)Suspected C2 origin — AWS EC2 eu-south-2 (Spain)

Hachages de fichiers (volatils)

2 hachages

Les hachages binaires changeront à chaque nouvelle compilation de l'opérateur. Utilisez les indicateurs comportementaux comme détection principale. Le nom du binaire (p. ex. F8C06C86) semble varier à chaque installation. Considérez ces hachages comme des éléments de confirmation et non comme des détections principales.

  • 45bd0e321aa85b63b5dee4e87465e4088546eea5da6efb9c96847023384c48c9SHA-256 — maccy.dmg sample (1/70 VT at first submission)
  • 0b7529782694bee95f784a854ef3abb8f4056f61408fbc0f72cfafa5e416bc73SHA-256 — EDR capture variant

Recommandations de détection

La détection fondée sur les signatures échoue largement contre cette campagne. Le binaire Rust n'était détecté que par un moteur sur 70 lors de sa première soumission et son nom varie à chaque installation. La chaîne comportementale est différente : un second processus Finder provenant d'un chemin non système, un élément d'ouverture « Finder » situé hors du chemin CoreServices et du trafic POST HTTPS issu d'un paquet signé ad hoc portant cet identifiant constituent chacun une anomalie. Ensemble, ils ne laissent aucun doute.

  1. 01

    Second processus Finder issu d'un chemin non système

    Télémétrie des processus

    Générez une alerte pour tout processus nommé Finder, ou dont le nom d'affichage est Finder, lorsque le chemin de l'exécutable ne commence pas par /System/Library/CoreServices/Finder.app. Le véritable Finder s'exécute toujours depuis ce chemin. Tout écart constitue un indicateur de confiance élevée d'une activité d'usurpation.

    Pourquoi cela fonctionne : Le logiciel malveillant ne peut pas modifier le chemin depuis lequel son binaire s'exécute. Le faux paquet est installé dans la bibliothèque de l'utilisateur et cette différence de chemin est permanente, vérifiable au moyen d'une seule règle EDR. Aucun faux positif n'est attendu : aucun logiciel légitime n'exécute un processus nommé Finder hors du chemin CoreServices.

  2. 02

    Audit des éléments d'ouverture : Finder depuis un chemin non système

    Persistance / Télémétrie BTM

    Énumérez les éléments d'ouverture et générez une alerte pour toute entrée nommée « Finder » ou portant l'identifiant de paquet com.apple.finder.monitor dont le chemin d'application ne correspond pas à /System/Library/CoreServices/Finder.app. Auditez l'entrée de la base BTM (sfltool dumpbtm) et le fichier backgrounditems.btm dans ~/Library/Application Support/com.apple.backgroundtaskmanagementagent/.

    Pourquoi cela fonctionne : la persistance via les éléments d'ouverture est le mécanisme précis qu'utilise cette campagne pour éviter la détection des LaunchAgents et LaunchDaemons. L'audit des éléments d'ouverture comble cette lacune. La base de données BTM enregistre l'identifiant de paquet, qui contient la chaîne propre à la campagne com.apple.finder.monitor.

  3. 03

    Signature de code ad hoc du paquet Finder.app

    Télémétrie de signature de code

    Surveillez les paquets d'application nommés Finder.app dont Signature=adhoc et TeamIdentifier=non défini. Le Finder macOS légitime est signé par Apple avec une chaîne Developer ID complète et passe la notarisation. Un paquet nommé Finder et signé ad hoc est sans ambiguïté illégitime.

    Pourquoi cela fonctionne : le logiciel malveillant utilise codesign -fs - pour s'auto-signer, ce qui constitue le minimum nécessaire à l'exécution d'un paquet d'application macOS. Il ne peut pas usurper la chaîne de signature d'Apple. Cette différence de signature est permanente et détectable sans analyse comportementale.

  4. 04

    Éditeur de scripts exécutant un JXA qui récupère du contenu réseau

    Télémétrie EDR / des processus

    Générez une alerte lorsque Script Editor.app lance des processus enfants qui accèdent à des ressources réseau, écrivent des fichiers dans ~/Library/Application Support/, appellent codesign ou LSSharedFileListInsertItemURL. L'utilisation normale de l'Éditeur de scripts n'implique ni écriture de fichiers hors du répertoire de travail de l'utilisateur ni enregistrement d'éléments d'ouverture.

    Pourquoi cela fonctionne : la surface d'exécution de l'Éditeur de scripts est ce qui contourne les protections contre le collage dans Terminal. La surveillance de l'Éditeur de scripts comme surface d'exécution, de la même manière que les EDR surveillent osascript et bash, détecte l'étape d'exécution initiale de cette campagne sans devoir faire correspondre un hachage.

  5. 05

    Processus autre qu'un navigateur lisant les bases d'identifiants des navigateurs

    Télémétrie d'accès aux fichiers

    Générez une alerte lorsqu'un processus autre que Google Chrome, Firefox, Safari ou un composant auxiliaire de navigateur reconnu lit Login Data, logins.json, key4.db ou login.keychain-db. Le faux processus Finder accède directement à ces fichiers au moyen de libsqlite3.dylib.

    Pourquoi cela fonctionne : les navigateurs lisent légitimement leurs propres magasins d'identifiants. Un processus nommé Finder qui lit une base SQLite de Chrome n'est pas un navigateur. Le modèle d'accès aux fichiers constitue l'indicateur direct de l'étape de vol d'identifiants.

  6. 06

    Accès au Trousseau depuis un processus non système et autre qu'un navigateur

    Télémétrie du Trousseau / framework Security

    Surveillez les appels SecItemCopyMatching avec kSecClassGenericPassword provenant de processus situés hors des chemins /Applications/ ou /System/. Le faux binaire Finder s'exécute depuis la bibliothèque de l'utilisateur et émet des requêtes Trousseau depuis ce contexte de chemin.

    Pourquoi cela fonctionne : l'accès au Trousseau par un processus usurpant Finder mais s'exécutant depuis un chemin non système est anormal. Les frameworks de sécurité des terminaux sur macOS peuvent exposer le chemin du processus appelant avec les appels d'API du Trousseau, ce qui rend cette corrélation possible.

  7. 07

    POST HTTPS sortant depuis l'identifiant de paquet com.apple.finder.monitor

    Télémétrie réseau / DNS / proxy

    Générez une alerte pour les connexions sortantes vers avengerflow[.]com ou les requêtes POST HTTPS provenant de l'identifiant de paquet com.apple.finder.monitor. Le Finder légitime n'émet pas de requêtes POST HTTPS sortantes ; toute activité réseau issue de cet identifiant de paquet est malveillante.

    Pourquoi cela fonctionne : la télémétrie réseau sur macOS peut être attribuée aux identifiants de paquets d'applications. Le format de balise C2 (MacOSapp1{...}) constitue également une chaîne distinctive susceptible d'apparaître dans le déchiffrement TLS ou l'inspection du proxy, lorsqu'ils sont disponibles.

Recommandations de durcissement

Les contrôles sont classés selon l'effort de mise en œuvre. Action rapide = déployable en quelques jours par une configuration MDM standard ou manuelle. Standard=nécessiteune modification du workflow ou un déploiement de stratégie sur les terminaux gérés.

  1. Vérifier que les téléchargements de Maccy proviennent uniquement des sources officielles

    Action rapide

    L'application Maccy légitime est distribuée exclusivement depuis maccy.app, la page des versions GitHub (github.com/p0deje/Maccy/releases), le Mac App Store (éditeur Alexey Rodionov, Team Identifier MN3X4648SC) et Homebrew (brew install --cask maccy). Chaque build légitime est fourni sous forme de Maccy.app.zip, jamais en .dmg. Tout DMG prétendant être Maccy doit être considéré comme suspect.

    Vérification : exécutez codesign -dvvv Maccy.app et confirmez Authority=Developer ID Application: Alexey Rodionov (MN3X4648SC), Notarization Ticket=stapled et Format=app bundle with Mach-O universal (x86_64 arm64). Une signature ad hoc ou l'absence de Team Identifier signale un build illégitime.

  2. Bloquer le domaine de distribution au niveau du DNS et du proxy

    Action rapide

    Bloquez maccyapp[.]com (distribution) et avengerflow[.]com (C2) au niveau des résolveurs DNS et du proxy sortant. Le domaine de distribution est un IOC permanent : le projet Maccy légitime ne l'utilisera jamais et son blocage ne présente aucun risque métier. Le domaine C2 doit être considéré comme volatil, mais bloqué pendant la durée de cette campagne.

    Remarque : le C2 est derrière Cloudflare ; le seul blocage par adresse IP est donc insuffisant. Un blocage DNS au niveau du domaine est nécessaire.

  3. Auditer les éléments d'ouverture à la recherche d'entrées anormales sur les Mac gérés

    Action rapide

    Exécutez sfltool dumpbtm afin d'énumérer les entrées de la base BTM sur les terminaux gérés. Signalez tout élément d'ouverture dont l'identifiant de paquet contient com.apple.finder et dont le chemin ne correspond pas à /System/Library/CoreServices/Finder.app. Il s'agit du contrôle unique le plus fiable pour repérer une infection par Fake Maccy Stealer à l'échelle d'un parc géré.

    Chemin :/private/var/db/com.apple.backgroundtaskmanagement/BackgroundItems-v*.btm et ~/Library/Application Support/com.apple.backgroundtaskmanagementagent/backgrounditems.btm

  4. Traiter l'Éditeur de scripts comme une surface d'exécution surveillée

    Standard

    macOS Tahoe 26.4 a ajouté des protections contre le collage dans Terminal afin de contrer les attaques de type ClickFix. L'Éditeur de scripts n'est pas couvert par cette protection. Les outils de sécurité et la télémétrie des terminaux doivent traiter Script Editor.app comme une surface d'exécution surveillée, au même titre que osascript et bash, et signaler toute exécution JXA ou AppleScript qui déclenche des connexions réseau, l'écriture de fichiers dans les répertoires Library ou l'enregistrement d'un élément d'ouverture.

    Action pratique : ajoutez l'Éditeur de scripts à la stratégie de surveillance des terminaux comme surface d'exécution à haut risque. Générez une alerte lorsque l'Éditeur de scripts lance des processus enfants qui effectuent des activités réseau ou de persistance. Envisagez des restrictions MDM sur l'accès à l'Éditeur de scripts pour les fonctions qui n'en ont pas besoin.

  5. Réduire l'exposition persistante des identifiants du Trousseau et des navigateurs

    Standard

    Cette campagne extrait les entrées du Trousseau et les mots de passe enregistrés dans les navigateurs sans élévation de privilèges, au moyen d'API accessibles à tout processus exécuté dans le contexte utilisateur. Les organisations qui stockent des identifiants sensibles dans la saisie automatique des navigateurs ou sous forme d'entrées génériques du Trousseau s'exposent à une compromission complète des identifiants après une seule exécution réussie. La migration vers des gestionnaires de mots de passe d'entreprise dotés de contrôles d'accès au niveau des processus réduit la valeur des identifiants accessibles à un infostealer exécuté dans le contexte utilisateur.

    Action de réponse : pour toute infection confirmée, considérez comme compromis l'ensemble des entrées du Trousseau, des mots de passe enregistrés dans les navigateurs et du contenu du presse-papiers pendant la période d'infection, puis renouvelez-les immédiatement.

Références principales

Sources sur lesquelles cette page est fondée. Les affirmations techniques proviennent de l'analyse d'échantillons, de la documentation MITRE ATT&CK, de la documentation de sécurité des plateformes et de recherches indépendantes sur les logiciels malveillants macOS.

Découvrez comment vos terminaux macOS résistent à un stealer déguisé en Finder.

Malware Protection Plus détecte les modèles comportementaux que les outils fondés sur les signatures ne voient pas.