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 :
Commandement | Description |
---|---|
sk | Arrêtez l'exécution de la porte dérobée |
l | Liste les fichiers du chemin d'accès fourni comme paramètre |
c | Exécuter et renvoyer la sortie d'une commande shell |
cd | Changez de répertoire et renvoyez le nouveau chemin |
xs | Exécuter un code Python donné en paramètre dans le contexte actuel |
xsi | Décodez un code Python encodé en Base64 donné en paramètre, compilez-le, puis exécutez-le. |
r | Supprimer un fichier ou un répertoire du système |
e | Exécuter un fichier à partir du système avec ou sans paramètre |
u | Télécharger un fichier sur le système infecté |
J | Télécharger un fichier à partir du système infecté |
g | Obtenir la configuration du logiciel malveillant actuel stockée dans le fichier de configuration |
w | Remplacer 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 :
- Interprète de script et de commande
- Détournement de la Dylib
- Exploitation potentielle de l'exécution des privilèges
- Abus potentiel Mécanisme de contrôle de l'élévation
- Cacher les artefacts
- Mascarade
- Obfusquer des fichiers ou des informations
- Sabotage des contrôles de confiance
- Découverte de la fenêtre d'application
- Capture d'écran
- Logiciel Crytpoistic
- Données du système local
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.
Observable | Type | Nom | Référence |
---|---|---|---|
app.influmarket[.]org | Domain | n/a | domaine sh.py |
d895075057e491b34b0f8c0392b44e43ade425d19eaaacea6ef8c5c9bd3487d8 | SHA-256 | /Users/Shared/xcc | Macos.Hacktool.JokerSpy |
8ca86f78f0c73a46f31be366538423ea0ec58089f3880e041543d08ce11fa626 | SHA-256 | /Users/Shared/sb | MacOS.Hacktool.Swiftbelt |
aa951c053baf011d08f3a60a10c1d09bbac32f332413db5b38b8737558a08dc1 | SHA-256 | /Users/Shared/sh.py | script sh.py |