SOC Prime Bias: Moyen

30 Mar 2026 15:41

Dites Mon Nom : Comment MioLab construit un Empire de Voleurs sur MacOS

Author Photo
Ruslan Mikhalov Chef de la Recherche sur les Menaces chez SOC Prime linkedin icon Suivre
Dites Mon Nom : Comment MioLab construit un Empire de Voleurs sur MacOS
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

MioLab est un voleur d’informations macOS distribué commercialement, ciblant des victimes de grande valeur telles que les ingénieurs logiciels, les cadres et les investisseurs en cryptomonnaie. Il se propage via la publicité malveillante et une chaîne d’infection ClickFix, puis lance un binaire compact en C qui vole les identifiants de navigateur, les enregistrements de gestionnaire de mots de passe, les fichiers de portefeuille de cryptomonnaie et les données de Trousseau d’accès macOS. Les informations volées sont mises en scène dans un répertoire temporaire, compressées en une archive, et exfiltrées avec une requête POST curl vers un domaine malveillant. L’opération inclut également un panneau de contrôle basé sur le web, le support de proxy et l’accès à une API adaptés aux grands groupes de cybercriminalité.

Investigation

Le rapport décrit les caractéristiques statiques du malware, son comportement à l’exécution, et l’éventail large de sources de données ciblées, y compris Chrome, Firefox, Safari, Telegram, Discord, Apple Notes, et les applications de portefeuille matériel. L’analyse de l’infrastructure indique un hébergement à sécurité renforcée en Russie, une rotation répétée des domaines, et un backend partagé lié à une opération de phishing d’airdrop de tokens Web3. Les enquêteurs ont également extrait des indicateurs clés tels que les lignes de commande, les chemins de dossiers temporaires et les URL d’exfiltration.

Atténuation

Les défenseurs devraient former les utilisateurs à reconnaître les fausses invitations à entrer des identifiants, surveiller l’abus des binaires intégrés tels que dscl, osascript et curl, bloquer les domaines malveillants connus, appliquer la signature de code, et restreindre l’accès aux données de profil de navigateur et aux fichiers de Trousseau. La logique de détection devrait également se concentrer sur les modèles d’exécution de processus du malware et le comportement de mise en scène d’archive sous /var/folders.

Réponse

Si MioLab est détecté, isoler le Mac affecté, capturer les artefacts de mémoire volatile et de système de fichiers, bloquer les domaines C2 et IPs associés, révoquer les identifiants exposés et les clés de portefeuille de cryptomonnaie, et effectuer un examen médico-légal complet de tous les emplacements de données ciblés. Le contenu de détection des endpoints doit être mis à jour avec les lignes de commande observées, et les équipes doivent rechercher des chaînes d’infection similaires dans l’environnement.

"graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#ccffcc %% Malware node malware_miolab["<b>Malware</b> – <b>Name</b>: MioLab Infostealer<br/><b>Description</b>: Voleur d’informations macOS à plusieurs étapes"] class malware_miolab malware %% Initial Access initial_access["<b>Action</b> – <b>T1204.002 Exécution de l’utilisateur</b>: La victime ouvre un DMG malveillant ou un exécutable Unix livré via l’ingénierie sociale"] class initial_access action %% Execution execution_unix_shell["<b>Action</b> – <b>T1059.004 Shell Unix</b>: La charge utile exécute des commandes shell via sh, système et AppleScript"] class execution_unix_shell action %% Defense Evasion defense_evasion["<b>Action</b> – <b>T1564.011 Cacher les artefacts</b>: Termine Terminal, supprime les attributs de quarantaine et applique l’obfuscation de chaîne XOR (T1027)"] class defense_evasion action %% Discovery discovery_info["<b>Action</b> – <b>T1589 Collecter les informations de l’hôte de la victime</b>: Utilise <code>system_profiler</code> pour collecter des détails sur le matériel et le système d’exploitation"] class discovery_info action %% Credential Access credential_access["<b>Action</b> – <b>T1056 Capture d’entrée</b> et <b>T1555.001/002 Vidage de crédentiel</b>: Affiche une fausse boîte de dialogue de mot de passe Préférences Système via AppleScript, valide avec dscl, vide les fichiers de Trousseau et extrait les bases de données de navigateur, les cookies et les jetons de session"] class credential_access action %% Collection collection_staging["<b>Action</b> – <b>T1074.001 Mise en scène de données locales</b> et <b>T1560 Archiver les données collectées</b>: Collecte des fichiers, des notes et des portefeuilles crypto, met en scène dans un répertoire temporaire et compresse en archive ZIP"] class collection_staging action %% Exfiltration exfiltration_curl["<b>Action</b> – <b>T1041 Exfiltration sur canal C2</b> et <b>T1102.003 Protocoles Web</b>: Télécharge l’archive ZIP via <code>curl</code> POST vers un service web malveillant"] class exfiltration_curl action %% Command and Control c2_proxy["<b>Action</b> – <b>T1090.002 Proxy</b> et <b>T1659 Injection de contenu dynamique</b>: Le trafic est routé via des serveurs proxy contrôlés par l’attaquant et des domaines d’injection"] class c2_proxy action %% Tool nodes tool_applescript["<b>Outil</b> – <b>Nom</b>: AppleScript<br/><b>But</b>: Affiche une IU d’invite de crédentiel"] class tool_applescript tool tool_dscl["<b>Outil</b> – <b>Nom</b>: dscl<br/><b>But</b>: Valide les crédentiels capturés"] class tool_dscl tool tool_curl["<b>Outil</b> – <b>Nom</b>: curl<br/><b>But</b>: Envoie l’archive collectée au serveur distant"] class tool_curl tool tool_system_profiler["<b>Outil</b> – <b>Nom</b>: system_profiler<br/><b>But</b>: Récupère les informations système"] class tool_system_profiler tool %% Connections showing the attack flow malware_miolab –>|délivre| initial_access initial_access –>|déclenche| execution_unix_shell execution_unix_shell –>|active| defense_evasion defense_evasion –>|permet| discovery_info discovery_info –>|fournit des données à| credential_access credential_access –>|utilise| tool_applescript credential_access –>|utilise| tool_dscl credential_access –>|mène à| collection_staging collection_staging –>|compresse et met en scène| exfiltration_curl exfiltration_curl –>|utilise| tool_curl exfiltration_curl –>|envoie des données à| c2_proxy c2_proxy –>|routés à travers| tool_curl %% Styling assignments class initial_access,execution_unix_shell,defense_evasion,discovery_info,credential_access,collection_staging,exfiltration_curl,c2_proxy action class tool_applescript,tool_dscl,tool_curl,tool_system_profiler tool class malware_miolab malware "

Flux d’attaque

Exécution de Simulation

Prérequis : Le Contrôle Pré‑décollage de la Télémétrie & Baseline doit être réussi.

Raisonnement : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTP identifiés et viser à générer la télémétrie exacte attendue par la logique de détection.

  • Narration & Commandes de l’Attaque :

    1. Terminer la session Terminal de l’utilisateur – Le malware désactive d’abord l’invite de commande standard pour forcer l’utilisateur à suivre un flux d’interface utilisateur contrôlé.
      killall Terminal
    2. Présenter une fausse invite de crédentiels – Utilisant osascript, l’attaquant affiche une boîte de dialogue AppleScript qui imite un avertissement des paramètres système, incitant l’utilisateur à saisir son mot de passe.
      osascript -e 'display dialog "Vous devez configurer les paramètres système avant de lancer cette application." default answer "" with hidden answer'
    3. Valider les crédentiels collectés – Le mot de passe capturé est vérifié contre le service d’annuaire local avec dscl . -authonly. Un retour réussi confirme que le crédentiel est correct.
      dscl . -authonly "$USER" "$HARVESTED_PASSWORD"
    4. Mettre en scène et comprimer la charge utile d’exfiltration – L’attaquant archive les données collectées (par exemple, ~/.ssh/id_rsa) dans une archive zip utilisant ditto, la préparant pour le téléchargement.
      ditto -c -k --sequesterRsrc /var/folders/*/DataStaging /tmp/exfil.zip
  • Script de Test de Régression : (Bash – exécute la séquence exacte pour déclencher la règle)

    #!/usr/bin/env bash
    set -euo pipefail
    
    echo "[*] Démarrage de la simulation MioLab..."
    
    # 1. Kill Terminal
    echo "[+] Fermeture de Terminal"
    killall Terminal
    
    # 2. Fausse invite AppleScript (simulée - aucune interaction utilisateur)
    echo "[+] Affichage de fausse invite de crédentiels"
    osascript -e 'display dialog "Vous devez configurer les paramètres système avant de lancer cette application." default answer "" with hidden answer' >/dev/null 2>&1
    
    # 3. Vérification de crédentiels (en utilisant l'utilisateur actuel & un mot de passe fictif)
    echo "[+] Vérification des crédentiels collectés"
    HARVESTED_PASSWORD="P@ssw0rd!"   # Dans un scénario réel, ce serait le mot de passe volé
    dscl . -authonly "$USER" "$HARVESTED_PASSWORD" || true   # ignorer l'échec pour la démo
    
    # 4. Mise en scène des données & compression
    echo "[+] Compression des données mises en scène"
    STAGING_DIR=$(mktemp -d)
    echo "données exemple" > "$STAGING_DIR/exemple.txt"
    ditto -c -k --sequesterRsrc "$STAGING_DIR" /tmp/exfil.zip
    
    echo "[*] Simulation terminée. Vérifiez l'alerte dans SIEM."
  • Commandes de Nettoyage : (Supprime les artefacts générés et restaure la session)

    #!/usr/bin/env bash
    set -euo pipefail
    
    echo "[*] Nettoyage des artefacts de simulation MioLab..."
    
    # Supprimer l'archive zip factice
    rm -f /tmp/exfil.zip
    
    # Supprimer le répertoire de mise en scène temporaire s'il existe
    [[ -d "$STAGING_DIR" ]] && rm -rf "$STAGING_DIR"
    
    # Redémarrer éventuellement Terminal pour l'utilisateur
    open -a Terminal
    
    echo "[*] Nettoyage terminé."