Recherches initiales exposant JOKERSPY

Aperçu de JOKERSPY, découvert en juin 2023, qui a déployé des outils macOS personnalisés et open source pour exploiter une bourse de crypto-monnaies située au Japon.

15 minutes de lectureModèle d'attaque, Campagnes
Recherche initiale exposant JOKERSPY

Principaux points abordés dans cet article

  • Il s'agit d'une première notification d'une intrusion active, qui sera suivie d'autres détails.
  • REF9134 exploite des outils personnalisés et open source pour la reconnaissance et le commandement et contrôle
  • Les cibles de cette activité sont notamment une bourse de crypto-monnaies au Japon

Préambule

Cet article de recherche explore une intrusion récemment découverte que nous appelons REF9134, qui implique l'utilisation de la porte dérobée sh.py pour déployer l'outil d'énumération macOS Swiftbelt. sh.py et xcc ont récemment été qualifiés de JOKERSPY par Bitdefender.

Plus précisément, cette recherche porte sur

  • Comment Elastic Security Labs a identifié la reconnaissance du groupe adverse
  • Les étapes suivies par l'adversaire pour échapper à la détection en utilisant xcc , en installant la porte dérobée sh.py et en déployant des outils d'énumération

Un examen plus approfondi de cette attaque pourrait être publié ultérieurement.

Overview

Fin mai 2023, un adversaire disposant d'un accès à une importante bourse de crypto-monnaies japonaise a déclenché l'une de nos alertes de diagnostic qui a détecté l'exécution d'un binaire ( xcc ). xcc n'est pas reconnu par Apple, et l'adversaire a procédé à une auto-signature en utilisant l'outil natif de macOS, codesign. Bien que cette détection ne soit pas nécessairement inoffensive en soi, le secteur vertical et l'activité supplémentaire que nous avons observés à la suite de ces premières alertes ont attiré notre attention et nous ont incités à y prêter plus d'attention.

Après l'exécution de xcc , nous avons observé que l'acteur de la menace tentait de contourner les autorisations de TCC en créant sa propre base de données TCC et en essayant de remplacer celle qui existait déjà. Le 1er juin, un nouvel outil basé sur Python a été vu s'exécuter à partir du même répertoire que xcc et a été utilisé pour exécuter un outil d'énumération post-exploitation macOS open-source connu sous le nom de Swiftbelt.

Analyse

REF9134 est une intrusion dans un grand fournisseur de services de crypto-monnaie basé au Japon qui se concentre sur l'échange d'actifs pour le commerce de Bitcoin, Ethereum et d'autres crypto-monnaies courantes.

Le binaire xcc

xcc ( d895075057e491b34b0f8c0392b44e43ade425d19eaaacea6ef8c5c9bd3487d8 ) est un binaire multiarchitecture auto-signé écrit en Swift qui est utilisé pour évaluer les permissions actuelles du système. La version observée par Elastic Security Labs est signée XProtectCheck-55554944f74096a836b73310bd55d97d1dff5cd4 et possède une signature de code ressemblant à des charges utiles connues du public et non fiables.

Pour identifier d'autres binaires signés avec le même identifiant, nous avons converti XProtectCheck-55554944f74096a836b73310bd55d97d1dff5cd4 en hexadécimal et effectué une recherche sur VirusTotal pour identifier 3 échantillons supplémentaires ( content :{5850726f74656374436865636b2d35353535343934346637343039366138333662373333313062643535643937643164666635636434} ).

Chacun d'entre eux contenait la même fonctionnalité de base avec des différences structurelles. Ces divergences peuvent indiquer que ces variantes de xcc ont été développées pour contourner les capacités des terminaux qui interféraient avec l'exécution.

Peu après la création de xcc , les chercheurs ont observé que l'auteur de la menace copiait /Users/Shared/tcc.db sur la base de données TCC existante, /Library/Application Support/com.apple.TCC/TCC.db. Cela peut permettre à la menace d'éviter les invites du TCC visibles par les utilisateurs du système tout en abusant d'un répertoire avec des autorisations d'écriture de fichiers étendues.

Artéfacts XCode

Lors de l'analyse de ce binaire, les chercheurs ont identifié deux chemins uniques, /Users/joker/Developer/Xcode/DerivedData/ et /Users/joker/Downloads/Spy/XProtectCheck/XProtectCheck/ , qui se sont révélés anormaux. Le chemin par défaut pour compiler le code avec Xcode est /Users/[nom d'utilisateur]/Developer/Xcode/DerivedData.

Abuser du TCC

Ces autorisations d'introspection sont gérées par la fonction native Transparence, consentement et contrôle (TCC). Les chercheurs ont déterminé que xcc vérifie les autorisations FullDiskAccess et ScreenRecording, ainsi que si l'écran est actuellement verrouillé et si le processus en cours est un client de confiance en matière d'accessibilité.

Une fois l'exécution réussie dans notre environnement Detonate, les résultats suivants ont été affichés :

Une fois la base de données TCC personnalisée placée à l'emplacement prévu, l'auteur de la menace a exécuté le binaire xcc.

Accès initial

Le binaire xcc a été exécuté via bash par trois processus distincts

  • /Applications/IntelliJ IDEA.app/Contents/MacOS/idea
  • /Applications/iTerm.app/Contents/MacOS/iTerm2
  • /Applications/Visual Studio Code.app/Contents/MacOS/Electron.

Bien que nous poursuivions notre enquête et continuions à recueillir des informations, nous sommes fermement convaincus que l'accès initial à ce logiciel malveillant est dû à un plugin malveillant ou rétrogradé ou à une dépendance d'un tiers qui a permis à l'acteur de la menace d'accéder à l'application. Cela correspond au lien établi par les chercheurs de Bitdefender qui ont établi une corrélation entre le domaine codé en dur trouvé dans une version de la porte dérobée sh.py et un tweet concernant un lecteur de code QR de macOS infecté qui s'est avéré avoir une dépendance malveillante.

Bibliothèques cryptographiques déployées

Le 31 mai, des chercheurs ont observé trois DyLibs non natives déployées dans /Users/shared/keybag/ appelées libcrypto.1.0.0.dylib , libncursesw.5.dylib , et libssl.1.0.0.dylib. Sur MacOS, les clés de protection des données des fichiers et du trousseau sont stockées dans des trousseaux de clés et concernent iOS, iPadOS, watchOS et tvOS. À l'heure actuelle, les chercheurs estiment que cette mise en scène a pour but d'échapper à la défense et supposent qu'ils peuvent contenir des vulnérabilités utiles. L'auteur de la menace peut prévoir d'introduire ces vulnérabilités dans des systèmes ou des applications par ailleurs patchés.

La porte dérobée sh.py

sh.py est une porte dérobée Python utilisée pour déployer et exécuter d'autres capacités post-exploitation telles que Swiftbelt .

Le logiciel malveillant charge sa configuration à partir de ~/Public/Safari/sar.dat. Le fichier de configuration contient des éléments essentiels tels que les URL de commande et de contrôle (C2), un délai de mise en veille pour les balises (la valeur par défaut est 5 secondes) et un identifiant unique à neuf chiffres attribué à chaque agent.

Dans le cadre de son balisage périodique, le logiciel malveillant recueille et transmet diverses informations sur le système. Les informations envoyées comprennent

  • Nom d'hôte
  • Nom d'utilisateur
  • Nom de domaine
  • Répertoire actuel
  • Le chemin absolu de l'exécutable binaire
  • Version du système d'exploitation
  • Le système d'exploitation 64 bits est-il
  • Le processus 64 bits est-il
  • Version Python

Vous trouverez ci-dessous un tableau décrivant les différentes commandes pouvant être gérées par la porte dérobée :

CommandementDescription
skArrêtez l'exécution de la porte dérobée
lListe les fichiers du chemin d'accès fourni comme paramètre
cExécuter et renvoyer la sortie d'une commande shell
cdChangez de répertoire et renvoyez le nouveau chemin
xsExécuter un code Python donné en paramètre dans le contexte actuel
xsiDécodez un code Python encodé en Base64 donné en paramètre, compilez-le, puis exécutez-le.
rSupprimer un fichier ou un répertoire du système
eExécuter un fichier à partir du système avec ou sans paramètre
uTélécharger un fichier sur le système infecté
JTélécharger un fichier à partir du système infecté
gObtenir la configuration du logiciel malveillant actuel stockée dans le fichier de configuration
wRemplacer le fichier de configuration du logiciel malveillant par de nouvelles valeurs

SWIFTBELT

Le 1er juin, le système compromis a enregistré une alerte de signature pour MacOS.Hacktool.Swiftbelt, une capacité d'énumération de MacOS inspirée de SeatBelt et créée par le red-teamer Cedric Owens. Contrairement à d'autres méthodes d'énumération, Swiftbelt invoque le code Swift pour éviter de créer des artefacts de ligne de commande. Notamment, les variantes de xcc sont également écrites en Swift.

L'alerte de signature indique que Swiftbelt a été écrit dans /Users/shared/sb et exécuté à l'aide de l'interpréteur de commandes bash, sh. La ligne de commande complète observée par les chercheurs était Users/Shared/sb /bin/sh -c /users/shared/sb \> /users/shared/sb.log 2\>& 1 , démontrant que l'acteur de la menace capturait les résultats dans sb.log tandis que les erreurs étaient dirigées vers STDOUT.

Modèle diamant

Elastic Security utilise le modèle Diamond pour décrire les relations de haut niveau entre les adversaires, les capacités, l'infrastructure et les victimes des intrusions. Bien que le modèle en diamant soit le plus souvent utilisé pour des intrusions uniques et qu'il tire parti de l'enchaînement des activités (section 8) pour créer des relations entre les incidents, un modèle centré sur l'adversaire (section 7.1.4) peut également être utilisé pour créer des liens entre les incidents et les intrusions. permet d'obtenir un diamant unique, bien qu'encombré.

Tactiques et techniques observées

MITRE ATT&CK Tactics

Les tactiques représentent le pourquoi d'une technique ou d'une sous-technique. Il s'agit de l'objectif tactique de l'adversaire : la raison pour laquelle il effectue une action. Voici les tactiques observées par Elastic Security Labs dans le cadre de cette campagne :

MITRE ATT&CK Techniques / Sub techniques

Les techniques et les sous techniques représentent la manière dont un adversaire atteint un objectif tactique en effectuant une action. Voici les techniques observées par Elastic Security Labs dans le cadre de cette campagne :

Logique de détection

YARA

Elastic Security a créé des règles YARA pour identifier cette activité. Vous trouverez ci-dessous les règles de YARA permettant d'identifier la porte dérobée JOKERSPY et l'outil SwiftBelt.

rule Macos_Hacktool_JokerSpy {
    meta:
        author = "Elastic Security"
        creation_date = "2023-06-19"
        last_modified = "2023-06-19"
        os = "MacOS"
        arch = "x86"
        category_type = "Hacktool"
        family = "JokerSpy"
        threat_name = "Macos.Hacktool.JokerSpy"
        reference_sample = "d895075057e491b34b0f8c0392b44e43ade425d19eaaacea6ef8c5c9bd3487d8"
        license = "Elastic License v2"

    strings:
        $str1 = "ScreenRecording: NO" fullword
        $str2 = "Accessibility: NO" fullword
        $str3 = "Accessibility: YES" fullword
        $str4 = "eck13XProtectCheck"
        $str5 = "Accessibility: NO" fullword
        $str6 = "kMDItemDisplayName = *TCC.db" fullword
    condition:
        5 of them
}
rule MacOS_Hacktool_Swiftbelt {
    meta:
        author = "Elastic Security"
        creation_date = "2021-10-12"
        last_modified = "2021-10-25"
        threat_name = "MacOS.Hacktool.Swiftbelt"
        reference_sample = "452c832a17436f61ad5f32ee1c97db05575160105ed1dcd0d3c6db9fb5a9aea1"
        os = "macos"
        arch_context = "x86"
        license = "Elastic License v2"

    strings:
        $dbg1 = "SwiftBelt/Sources/SwiftBelt"
        $dbg2 = "[-] Firefox places.sqlite database not found for user"
        $dbg3 = "[-] No security products found"
        $dbg4 = "SSH/AWS/gcloud Credentials Search:"
        $dbg5 = "[-] Could not open the Slack Cookies database"
        $sec1 = "[+] Malwarebytes A/V found on this host"
        $sec2 = "[+] Cisco AMP for endpoints found"
        $sec3 = "[+] SentinelOne agent running"
        $sec4 = "[+] Crowdstrike Falcon agent found"
        $sec5 = "[+] FireEye HX agent installed"
        $sec6 = "[+] Little snitch firewall found"
        $sec7 = "[+] ESET A/V installed"
        $sec8 = "[+] Carbon Black OSX Sensor installed"
        $sec9 = "/Library/Little Snitch"
        $sec10 = "/Library/FireEye/xagt"
        $sec11 = "/Library/CS/falcond"
        $sec12 = "/Library/Logs/PaloAltoNetworks/GlobalProtect"
        $sec13 = "/Library/Application Support/Malwarebytes"
        $sec14 = "/usr/local/bin/osqueryi"
        $sec15 = "/Library/Sophos Anti-Virus"
        $sec16 = "/Library/Objective-See/Lulu"
        $sec17 = "com.eset.remoteadministrator.agent"
        $sec18 = "/Applications/CarbonBlack/CbOsxSensorService"
        $sec19 = "/Applications/BlockBlock Helper.app"
        $sec20 = "/Applications/KextViewr.app"
    condition:
        6 of them
}

Références

Les éléments suivants ont été référencés tout au long de la recherche ci-dessus :

Observations

Les observables suivants ont été examinés dans le cadre de cette recherche.

ObservableTypeNomRéférence
app.influmarket[.]orgDomainn/adomaine sh.py
d895075057e491b34b0f8c0392b44e43ade425d19eaaacea6ef8c5c9bd3487d8SHA-256/Users/Shared/xccMacos.Hacktool.JokerSpy
8ca86f78f0c73a46f31be366538423ea0ec58089f3880e041543d08ce11fa626SHA-256/Users/Shared/sbMacOS.Hacktool.Swiftbelt
aa951c053baf011d08f3a60a10c1d09bbac32f332413db5b38b8737558a08dc1SHA-256/Users/Shared/sh.pyscript sh.py

Partager cet article