Un rootkit sophistiqué capable de s'insérer dans les couches basses des ordinateurs Windows - le firmware de la carte mère - fait des victimes depuis 2020 après avoir disparu des radars pendant environ trois ans. Le rootkit, surnommé CosmicStrand par les chercheurs de Kaspersky Lab, est furtif et hautement persistant car son code est stocké profondément dans l'UEFI, en dehors du champ de détection de la plupart des programmes de sécurité. L'interface UEFI (Unified Extensible Firmware Interface) est l'équivalent moderne du BIOS. C'est le firmware qui contient les pilotes nécessaires pour initialiser et configurer tous les composants matériels d'un ordinateur avant que le système d'exploitation principal ne démarre et ne prenne le relais. Alors que les rootkits BIOS étaient relativement courants il y a de nombreuses années, l'UEFI offre de meilleures protections de sécurité, de sorte que les logiciels malveillants le ciblant sont relativement rares.
Qu'est-ce que CosmicStrand ?
Le rootkit CosmicStrand est apparu à l'origine en 2016 et a fait des victimes jusqu'en 2017, lorsqu'il a été documenté par des chercheurs de la société chinoise de cybersécurité Qihoo360. Il semblait alors avoir disparu du radar jusqu'à récemment, lorsque des chercheurs de Kaspersky Lab ont détecté de nouvelles variantes et victimes en Chine, au Vietnam, en Iran et en Russie. « Sur la base de notre analyse de l'infrastructure utilisée pour les deux variantes, nous estimons que l'ancienne a été utilisée entre fin 2016 et mi-2017, et que l'actuelle était active en 2020 », ont déclaré les chercheurs de Kaspersky dans un rapport publié cette semaine. Les deux variantes ont été trouvées dans les images de firmware des cartes mères Asus et Gigabyte, en particulier celles basées sur le chipset Intel H81. Ce qui suggère qu'il existe une vulnérabilité potentiellement exploitable dans les versions UEFI utilisées par ces cartes mères.
Cependant, les chercheurs n'ont pas été en mesure de confirmer comment l'implant est livré. Si une vulnérabilité existe, son exploitation nécessite probablement un accès local à l'ordinateur, par exemple via un autre programme malveillant exécuté à l'intérieur du système d'exploitation qui écraserait ou corrigerait alors l'UEFI. La présence d'une vulnérabilité dans le firmware ne serait pas inhabituelle, surtout compte tenu de l'âge des cartes mères concernées - le chipset H81 a été lancé fin 2013 et prend en charge les processeurs Intel de 4e génération (Haswell). Depuis 2013, de nombreuses vulnérabilités ont été découvertes dans les implémentations UEFI de différents fournisseurs et la sécurité des micrologiciels n'a pas fait l'objet du même niveau d'examen minutieux de la part des fabricants qu'aujourd'hui.
Une autre possibilité de déploiement du rootkit CosmicStrand, mentionnée par Qihoo360 en 2017, passe par la modification de produits au niveau de la supply chain, que ce soit dans l'usine ou plus tard chez un distributeur ou un vendeur. CosmicStrand est utilisé comme mécanisme de persistance à long terme car le code survit aux redémarrages du système d'exploitation et même à la réinstallation de l'OS et aux effacements de disque dur. La seule façon de le supprimer est de reflasher l'UEFI, qui est stocké dans sa propre puce de mémoire flash SPI dédiée. Une fois déployé sur un système, CosmicStrand injecte du code malveillant dans le noyau Windows pendant le processus de démarrage du système d'exploitation, puis déploie un composant malveillant au niveau de l'OS téléchargé à partir d'un serveur de commande et de contrôle (C2).
Comment fonctionne CosmicStrand ?
Dans l'UEFI, CosmicStrand est déployé en tant que variante modifiée de manière malveillante (corrigée) d'un pilote EFI légitime appelé CSMCORE. Ce driver facilite normalement le démarrage de la machine en mode hérité via MBR (enregistrement de démarrage principal) au lieu du style de partition GPT plus moderne qui utilise une partition de démarrage dédiée.
Les attaquants modifient le pointeur vers la fonction de service de démarrage HandleProtocol afin que chaque fois que cette fonction dans le pilote est appelée, il exécute d'abord leur code malveillant. Ce choix n'est pas accidentel et est vital pour la chaîne d'infection. Le problème avec le stockage du code dans UEFI est qu'il s'arrête une fois que l'exécution est passée au système d'exploitation. Les pilotes UEFI sont essentiellement un pont nécessaire dans les premières étapes de la routine de démarrage d'un ordinateur jusqu'à ce que le système d'exploitation prenne le relais et commence à communiquer directement avec les composants matériels initialisés. Ainsi, les attaquants ont besoin d'un moyen de continuer à pousser leur code malveillant à travers les différentes étapes du processus de démarrage.
Ces étapes incluent le code du chargeur de démarrage, celui du noyau Windows et finalement arriver au kernel lui-même. En accrochant la fonction HandleProtocol, les attaquants s'assurent que leur code est exécuté à un moment où celui du chargeur de démarrage a été chargé en mémoire mais n'a pas encore été démarré. Cela leur permet de modifier une autre fonction du chargeur de démarrage appelée Archpx64TransferTo64BitApplicationAsm. Elle est appelée ultérieurement lorsque le chargeur Windows est transféré en mémoire. Lorsque cela se produit, le code malveillant modifie (accroche) une autre fonction, cette fois dans le chargeur Windows, appelée OslArchTransferToKernel. Comme son nom l'indique, cette fonction transmet l'exécution au noyau Windows et la modification garantit que cela se produit en exécutant d'abord le code de l'attaquant. Comme prévu, la prochaine étape consiste à injecter du code dans le noyau Windows lui-même.
« Avant que le noyau Windows n'ait eu la chance de s'exécuter, CosmicStrand configure un autre crochet dans la ZwCreateSection », ont expliqué les chercheurs de Kaspersky. « Le code malveillant est copié dans l'image de ntoskrnl.exe en mémoire, et les premiers octets de ZwCreateSection sont écrasés pour y rediriger. Nous notons que les attaquants ont pris soin de placer le code malveillant à l'intérieur de l'espace libre du .text de ntoskrnl.exe section, ce qui rend cette redirection beaucoup moins visible aux yeux des éventuels produits de sécurité ». Le hook du noyau inclut également du code qui tente de désactiver PatchGuard, un mécanisme de sécurité Windows qui tente d'empêcher les modifications frauduleuses du code du noyau. Il alloue également de l'espace mémoire pour du shellcode supplémentaire.
L'implant de noyau
Une fois qu'il a établi son exécution dans le noyau Windows, le code CosmicStrand attend 10 minutes pour permettre aux autres composants Windows de démarrer, puis teste la connectivité Internet de l'ordinateur. Pour ce faire, il communique directement avec l'interface de périphérique de transport au lieu d'utiliser les fonctions de l'API réseau du noyau Windows qui peuvent être surveillées par des produits de sécurité. L'implant établit ensuite une connexion à son serveur C2 à partir duquel il télécharge du code par morceaux de 528 octets pour le réassembler en shellcode et le charger dans le noyau. « Malheureusement, nous n'avons pas pu obtenir une copie des données provenant du serveur C2 », ont déclaré les chercheurs. « Nous avons cependant trouvé un échantillon en mode utilisateur en mémoire sur l'une des machines infectées que nous avons pu étudier, et pensons qu'il est lié à CosmicStrand. Cet échantillon est un exécutable qui exécute des lignes de commande afin de créer un utilisateur (" aaaabbbb") sur la machine de la victime et ajoutez-la au groupe d'administrateurs locaux ». La présence de ce composant en mode utilisateur suggère que le shellcode téléchargé depuis le C2 sert de s'adresser à plusieurs implants livrés sous forme d'exécutables PE et les chercheurs soupçonnent qu'il pourrait y en avoir plus avec des fonctionnalités différentes.
Origine et victimes du rootkit
Bien que les chercheurs n'aient pas été en mesure de lier définitivement CosmicStrand à un acteur de menace particulier, ils ont trouvé des modèles de code similaires au botnet MyKings, qui serait d'origine chinoise et a été utilisé en 2020 pour livrer des cryptomineurs. Cela suggère que CosmicStrand a également été créé par un acteur malveillant parlant chinois ou qui a accès à des ressources de logiciels malveillants partagées entre des groupes de menaces chinois. Les victimes identifiées jusqu'à présent étaient basées en Chine, au Vietnam, en Iran et en Russie et semblent être des particuliers plutôt que des organisations de secteurs industriels particuliers. Cependant, Kaspersky n'a de visibilité que sur les utilisateurs de ses propres produits, de sorte que d'autres victimes pourraient exister dans le monde, d'autant plus qu'il n'est pas facile de détecter les implants CosmicStrand et que les attaquants derrière sont prudents dans la sélection des victimes.
« L'aspect le plus frappant de ce rapport est que cet implant UEFI semble avoir été utilisé dans la nature depuis la fin de 2016 - bien avant que les attaques UEFI ne commencent à être décrites publiquement », ont déclaré les chercheurs. « Cette découverte soulève une dernière question : si c'est ce que les attaquants utilisaient à l'époque, qu'utilisent-ils aujourd'hui ? Les multiples rootkits découverts jusqu'à présent mettent en évidence un angle mort dans notre industrie qui doit être résolu le plus tôt possible ».