Par Bhabesh Raj Rai, Associate Security Analytics Engineer, LogPoint
Mercredi 22 juillet, Cisco Talos a découvert que l’attaque, lancée par le botnet Prometei, et qui avait pour objectif de miner de la cryptomonnaie était silencieusement actif depuis le mois de mars dernier. Les opérateurs derrière Prometei utilisent une myriade de techniques pour se répandre sur le réseau, comme l’abus du protocole Server Message Block (SMB) pour voler des identifiants, l’exploit EternalBlue, PSExec et WMI. Cisco Talos affirme que c’est la première fois que les opérations de Prometei sont ainsi documentées.
Prometei a une conception modulaire étendue, et l’adversaire se cachant derrière ce botnet maintient activement tous les modules. L’acteur malveillant a doté Prometei de modules auxiliaires tel qu’un Mimikatz modifié (miwalk.exe), un module Tor et un scanner de ports ouverts. Les modules aident le botnet à augmenter sa capacité de compromettre les systèmes pour qu’ils participent à son pool de minage Monero.
Le botnet Prometei a plus de 15 modules exécutables qui sont téléchargés par le module principal à partir du serveur command-and-control (C2) via le protocole HTTP. Le botnet a deux branches principales, une branche C++ chargée des opérations d’extraction de cryptomonnaie et une branche .NET qui se concentre sur le vol d’identifiants, les abus SMB et l’obfuscation. Cependant, les cybercriminels ont conçu le botnet de sorte que les branches principales puissent fonctionner indépendamment les unes des autres.
Le botnet intègre une version modifiée de Mimikatz (miwalk.exe) pour voler des identifiants ainsi que des mots de passe et les envoyer au C2 pour réutilisation. Le C2 partage ensuite les identifiants volés avec d’autres modules qui tentent de vérifier leur validité sur d’autres systèmes utilisant les protocoles SMB et RDP. En cas d’échec, l’exploit EternalBlue est utilisé pour la propagation.
La détection LogPoint
Le botnet utilise diverses tactiques, Techniques et Procédures (TTP) pour accomplir des tâches, telles que le téléchargement de modules à partir de C2, la propagation sur le réseau via SMB, etc. LogPoint peut détecter les TTP, allant du suivi du flux réseau malveillant à l’identification des endpoints compromis.
Détection des indicateurs de compromission (IoC)
À partir des IoC fournis par Talos, nous pouvons créer une liste de hachages, d’URL, de domaines, etc. pour détecter les artefacts.
Sysmon est utilisé pour vérifier les hachages dans les événements de création de processus au niveau des endpoints Windows.
norm_id=WindowsSysmon label="Process" label=Create hash_sha256 IN PROMETEI_HASHES
De même, les pare-feu ou les logs de serveur proxy peuvent être interrogés concernant les URL et les IP associés.
(url IN PROMETEI_URL) OR (resource IN PROMETEI_URL)
source_address IN HOMENET destination_address IN PROMETEI_IPS
Sysmon ou Cisco Umbrella est utilisé pour interroger les logs DNS afin de vérifier les artefacts de domaine.
norm_id=WindowsSysmon label=DNS label=Query query IN PROMETEI_DOMAINS
norm_id=CiscoUmbrella event_category=DNS query IN PROMETEI_DOMAINS
Pour les autres sources de log, nous pouvons utiliser la requête générale.
domain in PROMETEI_DOMAINS
La détection avec des systèmes de protection et de détection d’intrusion
Talos a ajouté et modifié plusieurs règles dans sa mise à jour du 23 juillet, y compris la détection d’activité réseau concernant le botnet Prometei.
(norm_id=Snort OR norm_id=SuricataIDS) message="*Prometei*"
Cette nouvelle règle mise à part, il existe des règles existantes pour détecter l’activité de type Monero-mining.
(norm_id=Snort OR norm_id=SuricataIDS) message="*CryptoMining*Monero*"
Le botnet utilise PowerShell pour télécharger les modules récupérés par Snort/Suricata en fonction de la chaîne de l’agent utilisateur (User Agent) par défaut de PowerShell.
(norm_id=Snort OR norm_id=SuricataIDS) message="*Powershell*UserAgent*"
Le botnet utilise, en dernier recours, le fameux exploit EternalBlue (MS17-0101), également utilisé par WannaCry, et cette opération peut être récupérée par Snort/Suricata si les règles EternalBlue sont activées.
(norm_id=Snort OR norm_id=SuricataIDS) message="*EternalBlue*"
La détection avec une solution Endpoint de détection et réponse (EDR)
Talos a déclaré que le botnet avait été découvert en investiguant les informations de télémétrie provenant de Cisco AMP. Si Cisco AMP est déployé dans l’entreprise, sa fonction de prévention contre les exploits (Exploit Prevention) peut facilement détecter Prometei.
norm_id=CiscoAMP label=Malware label=Detect malware="*Prometei*"
La détection endpoint
Le botnet s’appuie sur des capacités PowerShell pour utiliser des classes .NET internes afin de télécharger des modules à partir de C2. Notre alerte existante peut facilement détecter une telle opération au niveau de PowerShell.
norm_id=WinServer label="Process" label=Create "process"="*\powershell.exe" command="*Net.WebClient*Download*"
À l’avenir, si les itérations du botnet utilisent des commandes codées pour éviter la détection statique, l’activité peut être détectée si la journalisation des blocs de script PowerShell (PowerShell Script Block) est activée.
norm_id=WinServer label="Process" label=Create "process"="*\powershell.exe" command IN ["* -enc *", "* -ec *"]
La journalisation des blocs de script PowerShell consignera la ligne de commande décodée complète dans son ID d’événement 4104.
norm_id=WinServer event_id=4104 script_block="*Net.WebClient*"
Si la journalisation des blocs de script PowerShell est activée, mais que le botnet utilise la version 2 héritée de PowerShell, qui n’a pas de fonction de journalisation avancée, alors les entreprises devront vérifier l’utilisation de PowerShell version 2. Ce n’est pas bon signe si les entreprises détectent que la version 2 de PowerShell est en cours d’utilisation, et une telle activité doit absolument faire l’objet d’une investigation.
norm_id=WinServer event_id=400 hostversion="2.0"
Tous les modules téléchargés sont placés dans le dossier C:\Windows, qui est détecté à l’aide de Sysmon pour examiner d’éventuels envois d’éléments EXE ou DLL dans des dossiers tels que C:\Windows.
norm_id=WindowsSysmon label=File label=Create path="C:\Windows" file IN ["*.exe", "*.dll"]
L’un des modules du botnet est nommé svchost.exe pour lui donner l’apparence d’un binaire légitime de l’hôte de service Windows (Windows Service Host), mais il est placé dans le dossier C:\Windows. Ce processus non fiable peut être détecté en examinant le processus de création d’événements au niveau des logs d’événements Windows.
norm_id=WinServer label="Process" label=Create "process"="*\svchost.exe" -"process"="C:\Windows\System32\svchost.exe"
Il existe également d’autres astuces pour détecter ce processus non fiable, comme regarder son paramètre de ligne de commande (/sha1chk) des plus étranges, qui ressemble à une fonctionnalité de vérification d’intégrité pour les modules téléchargés.
norm_id=WinServer label="Process" label=Create "process"="*\svchost.exe" command="*svchost.exe /sha1chk*"
Le botnet configure également un service UPlugPlay en invoquant le fichier sc.exe natif via l’invite de commande. Cet appel du binaire de contrôle de service par l’invite de commande est détecté en explorant la relation parent-enfant des processus, ou bien nous pouvons utiliser l’alerte existante de LogPoint nommée Nouvelle Création de Service (New Service Creation) qui alerte sur la création d’un nouveau service au niveau des endpoints.
La charge virale principale présente sur l’hôte compromis s’appelle SearchIndexer.exe, un binaire XMRig v5.5.3 déguisé. Une option naïve et inflexible consiste à rechercher directement le nom du processus ou son hachage. La meilleure option pourrait être de rechercher ses paramètres de ligne de commande.
norm_id=WinServer label="Process" label=Create command="*-o stratum+tcp://*"
Nous pouvons également rechercher l’adresse du portefeuille Monero, car il s’agit d’une option de ligne de commande pour la charge virale SearchIndexer.exe.
norm_id=WinServer label="Process" label=Create command="*4A1txQ9L8h8NqF4EtGsZDP5vRN3yTVKynbkyP1jvCiDajNLPepPbBdrbaqBu8fCTcFEFdCtgbeSsTf17B1Mhy*"
The botnet communicates with the C2 server over HTTP and is visible. The command and the result of commands are transferred using RC4 encryption with a key generated on the client computer and stored in the registry values HKLM\SOFTWARE\Microsoft\Fax\MachineKeyId and HKLM\SOFTWARE\Microsoft\Fax\Encrypted\MachineKeyId.
norm_id=WindowsSysmon label=Registry label=Key label=Map target_object="*\SOFTWARE\Microsoft\Fax\*MachineKeyId"
Le module de propagation du botnet modifie la valeur du registre WDigest (une occurrence courante pour les malwares) pour extraire les identifiants en clair.
norm_id=WindowsSysmon label=Registry label=Key label=Map target_object="*SecurityProviders\WDigest\UseLogonCredential" detail="0x00000001"
La dangerosité de ce botnet vient du fait qu’il n’est pas un simple mineur générique, mais qu’il peut aussi être utilisé comme un cheval de Troie normal ou un malware voleur d’informations. Les acteurs malveillants se cachant derrière ce botnet évoluent rapidement, ajoutant ainsi de nouveaux modules pour améliorer la fonctionnalité du botnet.
LogPoint dispose d’alertes préexistantes pour détecter les TTP utilisées par le botnet Prometei, comme pour PowerShell, WMI et Sysmon. Les administrateurs système sont invités à vérifier leurs logs à partir du mois de mars dernier pour repérer d’éventuelles activités du botnet Prometei au sein de leur environnement.