Préambule
Elastic Security Labs a identifié un ensemble d'intrusions incorporant plusieurs modules malveillants et exploitant des pilotes vulnérables pour désactiver des solutions de sécurité connues (EDR) pour le minage de crypto-monnaie. En outre, l'équipe a découvert des capacités permettant d'établir la persistance, d'installer une porte dérobée non documentée auparavant et d'exécuter un crypto-miner. Nous appelons cet ensemble d'intrusion REF4578 et la charge utile principale GHOSTENGINE (des recherches tangentes menées par l'équipe d'Antiy ont nommé certaines parties de cet ensemble d'intrusion HIDDENSHOVEL).
Principaux points abordés dans cet article
- Les auteurs de logiciels malveillants ont incorporé de nombreux mécanismes de contingence et de duplication
- GHOSTENGINE s'appuie sur des pilotes vulnérables pour mettre fin et supprimer des agents EDR connus susceptibles d'interférer avec le mineur de monnaie déployé et bien connu.
- Cette campagne a été d'une complexité peu commune pour assurer l'installation et la persistance du mineur XMRIG.
Analyse du code
On May 6, 2024, at 14:08:33 UTC, the execution of a PE file named Tiworker.exe
(masquerading as the legitimate Windows TiWorker.exe
file) signified the beginning of the REF4578 intrusion. The following alerts were captured in telemetry, indicating a known vulnerable driver was deployed.
Une fois exécuté, ce fichier télécharge et exécute un script PowerShell qui orchestre l'ensemble du processus d'exécution de l'intrusion. L'analyse a révélé que ce binaire exécute une ligne de commande PowerShell codée en dur pour récupérer un script obscurci, get.png,
, qui est utilisé pour télécharger d'autres outils, modules et configurations de l'attaquant C2-, comme le montre la capture d'écran ci-dessous.
GHOSTENGINE
GHOSTENGINE est responsable de la récupération et de l'exécution des modules sur la machine. Il utilise principalement le protocole HTTP pour télécharger des fichiers à partir d'un domaine configuré, avec une IP de secours au cas où les domaines ne seraient pas disponibles. En outre, il utilise le protocole FTP comme protocole secondaire avec des informations d'identification intégrées. Vous trouverez ci-dessous un résumé du déroulement de l'exécution :
Ce script télécharge et exécute clearn.png
, un composant conçu pour purger le système des restes d'infections antérieures appartenant à la même famille mais à une campagne différente ; il supprime les fichiers malveillants sous C:\Program Files\Common Files\System\ado
et C:\PROGRA~1\COMMON~1\System\ado\
et supprime les tâches planifiées suivantes par leur nom :
Microsoft Assist Job
System Help Center Job
SystemFlushDns
SystemFlashDnsSrv
La présence de ces artefacts de tâches programmées peut être le signe d'une infection antérieure.
Pendant son exécution, il tente de désactiver Windows Defender et de nettoyer les canaux suivants du journal des événements Windows :
Application
Security
Setup
System
Forwarded Events
Microsoft-Windows-Diagnostics-Performance
Microsoft-Windows-AppModel-Runtime/Operational
Microsoft-Windows-Winlogon/Operational
get.png
désactive Windows Defender, active les services à distance et efface le contenu de :
C:\Windows\Temp\
C:\Windows\Logs\
C:\$Recycle.Bin\
C:\windows\ZAM.krnl.trace
get.png
vérifie également que le volume C:\
dispose d'au moins 10 MB d'espace libre pour télécharger les fichiers, en les stockant dans C:\Windows\Fonts
. Si ce n'est pas le cas, il essaiera de supprimer les fichiers volumineux du système avant de rechercher un autre volume approprié disposant de suffisamment d'espace et de créer un dossier sous $RECYCLE.BIN\Fonts
.
Pour obtenir la résolution DNS actuelle pour les noms de domaine C2, GHOSTENGINE utilise une liste codée en dur de serveurs DNS, 1.1.1.1
et 8.8.8.8
.
Ensuite, pour établir la persistance, get.png
crée les tâches planifiées suivantes en tant que SYSTEM
:
- OneDriveCloudSync utilise
msdtc
pour exécuter le service malveillant DLLC:\Windows\System32\oci.dll
toutes les 20 minutes (décrit plus loin). - DefaultBrowserUpdate pour lancer
C:\Users\Public\run.bat,
qui télécharge le scriptget.png
et l'exécute toutes les 60 minutes. - OneDriveCloudBackup exécute
C:\Windows\Fonts\smartsscreen.exe
toutes les 40 minutes
get.png
met fin à tous les processus curl.exe
et à tout processus PowerShell dont la ligne de commande contient *get.png*
, à l'exception du processus en cours. Il s'agit d'un moyen de mettre fin à toute instance du logiciel malveillant en cours d'exécution.
Ce script télécharge ensuite config.txt
, un fichier JSON contenant les hachages des fichiers PE qu'il a récupérés. Ce fichier vérifie si des binaires mis à jour doivent être téléchargés en contrôlant les hachages des fichiers précédemment téléchargés lors d'infections antérieures.
Enfin, get.png
télécharge tous ses modules et divers fichiers PE. Vous trouverez ci-dessous un tableau contenant une description de chaque fichier téléchargé :
chemin | Type | Description |
---|---|---|
C:\Windows\System32\drivers\aswArPots.sys | Pilote du noyau | Pilote vulnérable d'Avast |
C:\Windows\System32\drivers\IObitUnlockers.sys | Pilote du noyau | Pilote vulnérable de IObit |
C:\Windows\Fonts\curl.exe | Exécutable PE | Utilisé pour télécharger des fichiers via cURL |
C:\Windows\Fonts\smartsscreen.exe | Exécutable PE | La charge utile principale (GHOSTENGINE), dont l'objectif principal est de désactiver les instruments de sécurité, de terminer l'infection initiale et d'exécuter le mineur. |
C:\Windows\System32\oci.dll | Service DLL | Persistence/updates module |
backup.png | Script Powershell | Backdoor module |
kill.png | Script Powershell | Un script PowerShell qui injecte et exécute un fichier PE chargé de tuer les capteurs de sécurité. |
Modules GHOSTENGINE
GHOSTENGINE déploie plusieurs modules qui peuvent altérer les outils de sécurité, créer une porte dérobée et vérifier les mises à jour de logiciels.
Contrôleur d'agent EDR et module de minage : smartsscreen.exe
Ce module met principalement fin à tout processus actif de l'agent EDR avant de télécharger et d'installer un crypto-miner.
Le logiciel malveillant analyse et compare tous les processus en cours avec une liste codée en dur d'agents EDR connus. S'il y a des correspondances, il met d'abord fin à l'agent de sécurité en exploitant le fichier Avast Anti-Rootkit Driver aswArPots.sys
avec l'IOCTL 0x7299C004
pour mettre fin au processus par PID.
smartscreen.exe
est ensuite utilisé pour supprimer le binaire de l'agent de sécurité avec un autre pilote vulnérable, iobitunlockers.sys
de IObit, avec l'IOCTL 0x222124
.
smartscreen.exe
télécharge ensuite le programme d'exploitation du client XMRig (WinRing0x64.png
) à partir du serveur C2 sous la forme taskhostw.png
. Enfin, il exécute XMRig, ses pilotes et le fichier de configuration config.json
, lançant ainsi le processus d'extraction.
Update/Persistence module: oci.dll
Le script PowerShell crée une DLL de service (oci.dll
), une DLL fantôme chargée par msdtc
. L'architecture de la DLL varie en fonction de la machine ; elle peut être de 32 bits ou de 64 bits. Sa fonction principale est de créer une persistance du système et de télécharger toutes les mises à jour des serveurs C2 en téléchargeant le script get.png
depuis le C2 et en l'exécutant.
Chaque fois que le service msdtc
démarre, il charge oci.dll
pour lancer le one-liner PowerShell qui exécute get.png
:
Module de terminaison de l'agent EDR : kill.png
kill.png
est un script PowerShell qui injecte un shellcode dans le processus en cours, en décryptant et en chargeant un fichier PE dans la mémoire.
Ce module est écrit en C++ et les auteurs ont intégré la redondance dans son fonctionnement. Cette redondance est évidente dans la réplication de la technique utilisée dans smartsscreen.exe
pour terminer et supprimer les binaires de l'agent EDR ; elle scrute continuellement les nouveaux processus.
Module de porte dérobée Powershell : backup.png
Le script PowerShell fonctionne comme une porte dérobée, permettant l'exécution de commandes à distance sur le système. Il envoie continuellement un objet JSON codé en base64 contenant un identifiant unique, dérivé de l'heure actuelle et du nom de l'ordinateur, tout en attendant des commandes codées en base64. Les résultats de ces commandes sont ensuite renvoyés.
Dans cet exemple, eyJpZCI6IjE3MTU2ODYyNDA3MjYyNiIsImhvc3QiOiJhbmFseXNpcyJ9
est l'objet JSON encodé en Base64 :
$ echo "eyJpZCI6IjE3MTU2ODYyNDA3MjYyNiIsImhvc3QiOiJhbmFseXNpcyJ9" | base64 -D
{"id":"171568624072626","host":"analysis"}
Configuration du mineur
XMRig est un mineur de crypto-monnaie légitime, qui a documenté l'utilisation et les éléments du fichier de configuration ici. Comme indiqué au début de cette publication, le but ultime de l'intrusion REF4578 était d'accéder à un environnement et de déployer un mineur de crypto-monnaie Monero persistant, XMRig.
Nous avons extrait le fichier de configuration du mineur, ce qui s'est avéré extrêmement précieux car il nous a permis d'établir un rapport sur l'ID de paiement Monero et de suivre les statistiques du travailleur et du pool, les crypto-monnaies extraites, les ID de transaction et les retraits.
Vous trouverez ci-dessous un extrait du fichier de configuration REF4578 XMRig :
{
"autosave": false,
"background": true,
"colors": true,
...truncated...
"donate-level": 0,
"donate-over-proxy": 0,
"pools": [
{
"algo": "rx/0",
"coin": "monero",
"url": "pool.supportxmr[.]com:443",
"user": "468ED2Qcchk4shLbD8bhbC3qz2GFXqjAUWPY3VGbmSM2jfJw8JpSDDXP5xpkMAHG98FHLmgvSM6ZfUqa9gvArUWP59tEd3f",
"keepalive": true,
"tls": true
...truncated...
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
"verbose": 0,
"watch": true,
"pause-on-battery": false,
"pause-on-active": false
}
ID de paiement Monero
Monero est une crypto-monnaie basée sur la blockchain qui met l'accent sur l'obscurcissement et la fongibilité afin de garantir l'anonymat et la confidentialité. L'identifiant de paiement est une pièce jointe arbitraire et facultative qui consiste en 32 octets (64 caractères hexadécimaux) ou 8 octets (dans le cas d'adresses intégrées).
En utilisant l'ID de paiement de l'extrait de configuration ci-dessus (468ED2Qcchk4shLbD8bhbC3qz2GFXqjAUWPY3VGbmSM2jfJw8JpSDDXP5xpkMAHG98FHLmgvSM6ZfUqa9gvArUWP59tEd3f
), nous pouvons voir les statistiques des travailleurs et du pool sur l'un des sites du pool minier Monerorépertoriés dans la configuration.
En outre, nous pouvons voir les hachages des transactions, que nous pouvons consulter sur l'explorateur de la blockchain Monero. Notez que si les transactions remontent à quatre mois, cela n'indique que le gain monétaire potentiel de ce travailleur et de ce compte spécifiques.
En utilisant le Blockchain Explorer et l'un des hashs de transaction que nous avons obtenu à partir de l'ID de paiement, nous pouvons voir la clé publique, le montant retiré et le moment où il l'a été. Notez que ces clés publiques sont utilisées avec des adresses uniques, ou des adresses furtives, avec lesquelles l'adversaire utilise ensuite une clé privée pour débloquer les fonds.
In the above example for transaction 7c106041de7cc4c86cb9412a43cb7fc0a6ad2c76cfdb0e03a8ef98dd9e744442
we can see that there was a withdrawal of 0.109900000000
XMR (the abbreviation for Monero) totaling $14.86 USD. The Monerao Mining Pool site shows four transactions of approximately the same amount of XMR, totaling approximately $60.70 USD (January - March 2024).
Au moment de la publication de cette étude, il y a encore des mineurs actifs connectés à l'identifiant de paiement REF4578.
Bien que cet identifiant de paiement spécifique ne semble pas rapporter gros, il est évident que REF4578 a pu utiliser ce jeu d'intrusion avec succès. D'autres victimes de cette campagne pourraient avoir des identifiants de paiement différents utilisés pour suivre les intrusions, qui pourraient être combinés pour obtenir un gain global plus important.
Logiciels malveillants et MITRE ATT&CK
Elastic utilise le cadre MITRE ATT& CK pour documenter les tactiques, techniques et procédures communes que les menaces utilisent contre les réseaux d'entreprise.
Tactiques
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.
Techniques
Les techniques représentent la manière dont un adversaire atteint un objectif tactique en effectuant une action.
- Interprète de commandes et de scripts : PowerShell
- Interprète de commandes et de scripts : Shell de commande Windows
- Tâche programmée/Job : Tâche programmée
- Suppression de l'indicateur : Effacer les journaux d'événements de Windows
- Mascarade
- Injection de processus
- Découverte du processus
- Exfiltration par le canal C2
- Encodage des données
- Détournement de ressources
- Arrêt de service
Atténuer les effets de GHOSTENGINE
Détection
Le premier objectif du logiciel malveillant GHOSTENGINE est de neutraliser les solutions de sécurité des points d'extrémité et de désactiver certains journaux d'événements Windows, tels que les journaux de sécurité et de système, qui enregistrent la création de processus et l'enregistrement de services. Il est donc essentiel de donner la priorité à la détection et à la prévention de ces actions initiales :
- Suspicious PowerShell Execution (Exécution suspecte de PowerShell)
- Exécution à partir de répertoires inhabituels
- Élever les privilèges pour assurer l'intégrité du système
- Déploiement de pilotes vulnérables et mise en place de services associés en mode noyau.
Une fois que les pilotes vulnérables sont chargés, les possibilités de détection diminuent considérablement et les entreprises doivent trouver des terminaux compromis qui cessent de transmettre des journaux à leur SIEM.
Le trafic réseau peut être généré et identifiable si les enregistrements DNS pointent vers des domaines connus du pool minier sur des ports bien connus tels que HTTP (80
) et HTTPS (443
). Stratum est également un autre protocole réseau populaire pour les mineurs, par défaut, sur le port 4444
.
L'analyse de cet ensemble d'intrusions a révélé les règles de détection et les événements de prévention du comportement suivants :
- Téléchargements suspects de PowerShell
- Contrôle de service généré par l'interpréteur de script
- Création de tâches locales programmées
- Exécution d'un processus à partir d'un répertoire inhabituel
- Svchost frai Cmd
- Relation parent-enfant inhabituelle
- Effacer les journaux d'événements Windows
- Falsification de Microsoft Windows Defender
- Possibilité d'escalade des privilèges via une DLL manquante
- Masquage binaire via un chemin d'accès non sécurisé
La prévention
Prévention des fichiers malveillants :
Prévention de l'injection de codes-barres :
Prévention de la création de fichiers par les pilotes vulnérables(Windows.VulnDriver.ArPot et Windows.VulnDriver.IoBitUnlocker )
YARA
Elastic Security a créé des règles YARA pour identifier cette activité.
Observations
Toutes les observables sont également disponibles au téléchargement dans les formats ECS et STIX.
Les observables suivants ont été examinés dans le cadre de cette recherche.
Observable | Type | Nom | Référence |
---|---|---|---|
2fe78941d74d35f721556697491a438bf3573094d7ac091b42e4f59ecbd25753 | SHA-256 | C:\Windows\Fonts\smartsscreen.exe | Module contrôleur GHOSTENGINE EDR |
4b5229b3250c8c08b98cb710d6c056144271de099a57ae09f5d2097fc41bd4f1 | SHA-256 | C:\Windows\System32\drivers\aswArPots.sys | Pilote vulnérable Avast |
2b33df9aff7cb99a782b252e8eb65ca49874a112986a1c49cd9971210597a8ae | SHA-256 | C:\Windows\System32\drivers\IObitUnlockers.sys | Pilote vulnérable Iobit |
3ced0552b9ecf3dfecd14cbcc3a0d246b10595d5048d7f0d4690e26ecccc1150 | SHA-256 | C:\Windows\System32\oci.dll | Module de mise à jour et de persistance (64 bits) |
3b2724f3350cb5f017db361bd7aae49a8dbc6faa7506de6a4b8992ef3fd9d7ab | SHA-256 | C:\Windows\System32\oci.dll | Module de mise à jour et de persistance (32 bits) |
35eb368c14ad25e3b1c58579ebaeae71bdd8ef7f9ccecfc00474aa066b32a03f | SHA-256 | C:\Windows\Fonts\taskhostw.exe | Client du mineur |
786591953336594473d171e269c3617d7449876993b508daa9b96eedc12ea1ca | SHA-256 | C:\Windows\Fonts\config.json | Fichier de configuration du mineur |
11bd2c9f9e2397c9a16e0990e4ed2cf0679498fe0fd418a3dfdac60b5c160ee5 | SHA-256 | C:\Windows\Fonts\WinRing0x64.sys | Conducteur de mine |
aac7f8e174ba66d62620bd07613bac1947f996bb96b9627b42910a1db3d3e22b | SHA-256 | C:\ProgramData\Microsoft\DeviceSync\SystemSync\Tiworker.exe | Stade initial |
6f3e913c93887a58e64da5070d96dc34d3265f456034446be89167584a0b347e | SHA-256 | backup.png | Module de porte dérobée GHOSTENGINE |
7c242a08ee2dfd5da8a4c6bc86231985e2c26c7b9931ad0b3ea4723e49ceb1c1 | SHA-256 | get.png | Chargeur GHOSTENGINE |
cc4384510576131c126db3caca027c5d159d032d33ef90ef30db0daa2a0c4104 | SHA-256 | kill.png | Module de terminaison GHOSTENGINE EDR |
download.yrnvtklot[.]com | Domain | Serveur C2 | |
111.90.158[.]40 | ipv4-addr | Serveur C2 | |
ftp.yrnvtklot[.]com | Domain | Serveur C2 | |
93.95.225[.]137 | ipv4-addr | Serveur C2 | |
online.yrnvtklot[.]com | Domain | Serveur C2 |
Références
Les éléments suivants ont été référencés tout au long de la recherche ci-dessus :