PamStealer passe à Swift avec une chaîne de déchiffrement côté serveur
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Une nouvelle variante du voleur d’informations PamStealer pour macOS introduit un changement architectural majeur de Rust à Swift. Le malware mis à jour repose sur une chaîne de décryptage côté serveur alimentée par un utilitaire personnalisé appelé pkgunpack, nécessitant une interaction active du C2 pour déchiffrer et exécuter la charge utile de la deuxième étape. Il utilise également des mécanismes de persistance en couches tout en ciblant les identifiants de navigateur, les données du Trousseau et les métadonnées système étendues.
Enquête
Les laboratoires de menace de Jamf ont analysé la nouvelle variante de PamStealer après l’avoir identifiée dans un faux installateur de portefeuille de crypto-monnaie nommé Wavel. L’enquête a révélé une chaîne d’exécution en plusieurs étapes commençant par un module de dépôt JXA compilé, suivi d’une étape basée sur zsh qui effectue des échanges de clés en direct, et d’une seconde étape basée sur Swift responsable du vol de crédentiels et du profilage système.
Atténuation
Les utilisateurs doivent éviter de télécharger des applications depuis des sources non officielles, en particulier des logiciels se faisant passer pour des portefeuilles de crypto-monnaie. Les organisations doivent surveiller les éléments d’arrière-plan suspects sur macOS et les modifications non autorisées des fichiers de configuration de shell tels que .zshrc. Les contrôles de sécurité des points de terminaison capables de détecter la signature de code ad hoc, la reparentalisation de processus anormale et l’exécution de shell inhabituelle peuvent également réduire l’exposition.
Réponse
Lors de la détection d’activité de PamStealer, isolez le point de terminaison macOS concerné du réseau pour empêcher toute communication supplémentaire de commande et de contrôle et toute exfiltration de données. Effectuez une analyse médico-légale pour déterminer l’étendue du vol de crédentiels, en portant une attention particulière aux données du navigateur et au Trousseau macOS. Examinez les journaux système pour détecter toute création non autorisée de LaunchAgent, les éléments d’arrière-plan suspects et l’activité de shell inattendue.
Flux d’attaque
Nous mettons encore à jour cette partie.
Détections
Signature forcée d’application modifiée (via cmdline)
L’utilitaire d’archivage macOS pointe vers un répertoire suspect (via cmdline)
Utilisation suspecte de Ditto pour l’archivage de fichiers et l’exfiltration sur macOS (via process_creation)
Tentative d’exécution suspecte de Curl [MacOS] (via cmdline)
L’archive a été créée dans le dossier temporaire de macOS (via file_event)
Résiliation des processus auxiliaires de navigateur pour le déverrouillage des crédentiels [Création de processus Windows]
Détecter l’utilisation de xattr et codesign pour les techniques de contournement dans la variante PamStealer [Événement de fichier Linux]
Exécution de script JXA PamStealer via Zsh [Création de processus Linux]
Exécution de simulation
-
Récit et commandes de l’attaque : L’attaquant cherche à déployer une charge utile qui évite la détection sur disque. Pour ce faire, il utilise une commande qui décode une chaîne encodée en Base64 et la transmet directement à un
zshsous-shell en utilisant le-sdrapeau. Pour empêcher un enquêteur de relier facilement le processus malveillant à la session shell d’origine, l’attaquant enveloppe la charge utile dans une fonction nomméedaemon_function, l’exécute en arrière-plan en utilisant&, et quitte immédiatement le shell actuel pour rompre le lien de l’arbre de processus. -
Script de test de régression :
#!/bin/bash # Simulation de l'exécution de JXA PamStealer via zsh # Définir la charge utile "malveillante" comme un nom de fonction et une commande # La charge utile est transmise à zsh -s pour imiter la TTP PAYLOAD="daemon_function() { echo '[!] CHARGE UTILE MALVEILLANTE EXÉCUTÉE'; }; daemon_function & ; exit 0" # Exécutez la charge utile exactement comme la règle de détection l'attend echo "$PAYLOAD" | zsh -s -
Commandes de nettoyage :
# Le nettoyage est minimal car la commande est transmise et ne crée pas de fichiers persistants. # Nous devons seulement nous assurer qu'aucun processus en arrière-plan issu de la simulation ne fonctionne encore. pkill -f "daemon_function"