campagne de malware
Recherche sur les menaces

Une campagne de malware tente d’exploiter les fichiers binaires des défenseurs

Les produits de type 'command-and-control' tentent de s’introduire dans les systèmes en se faisant passer pour divers éditeurs ; les charges virales varient, mais les clients Sophos sont protégés.

Nous avons investigué une campagne de ransomware qui a exploité les exécutables et DLL Sophos légitimes en modifiant leur contenu d’origine, en écrasant le code du point d’entrée et en insérant la charge virale déchiffrée en tant que ressource : en d’autres termes, en usurpant l’identité de fichiers légitimes pour tenter de s’introduire dans les systèmes. Une vérification préliminaire indique que tous les fichiers Sophos concernés faisaient partie de la version 2022.4.3 de notre produit Windows Endpoint.

Certes, ce type de comportement malveillant n’est (malheureusement) pas nouveau pour le secteur de la cybersécurité, voire même pour tout développeur de logiciels. Au fil des années, nous avons vu d’autres voleurs d’informations (infostealers) se faire passer pour des programmes d’installation ; nous avons vu, pêle-mêle, de nombreux faux utilitaires, notamment des logiciels anti-malware, sans marque précise, être rebaptisés comme protections Sophos légitimes ; nous avons vu des cybercriminels attaquer le code source fermé et le code source ouvert avec la même ferveur. Plus loin dans cet article, nous vous présenterons précisément les avantages que les attaquants pensent en retirer et la manière avec laquelle les défenseurs peuvent réagir.

campagne de malwareEn général, il ne s’agit que d’une partie du paysage technologique : en fait, au cours de notre enquête sur cette campagne, nous avons également constaté des abus similaires ciblant des fichiers publiés par d’autres défenseurs, notamment AVG, BitDefender, Emsisoft et Microsoft, ainsi que l’utilisation d’une potentielle signature numérique compromise (et définitivement expirée) d’une autre société, ainsi qu’un faux “programme d’installation” prétendant être lié au logiciel d’une autre entreprise, ainsi que des dizaines de téléchargeurs/downloaders malveillants, un programme d’installation MSI et d’autres indicateurs de (tentative) de compromission. Notre investigation s’est donc poursuivie, nous permettant d’alimenter le fichier d’indicateurs de compromission (IoC) sur notre Github ; et les éditeurs concernés ont été contactés en privé.

Les charges virales éventuelles que nous avons vues lors de notre enquête varient : Cobalt Strike, Brute Ratel, Qakbot, Latrodectus, entre autres. Il existe des preuves de l’utilisation par plus d’un groupe cybercriminel, mais une investigation plus approfondie sur l’attribution, ou sur la signature compromise ou le faux programme d’installation mentionné ci-dessus, dépasse la portée de cet article.

Soulignons, toutefois, qu’il est toujours intéressant de s’attarder sur ce type d’évènement lorsqu’il se produit. Dans cet article, nous passerons en revue l’une de nos découvertes et ce que nous avons trouvé en poussant un peu plus loin nos recherches.

Premières découvertes

Le premier événement qui a attiré notre attention concernant cette campagne est venu d’une nouvelle mitigation de Sophos, C2 Interceptor, qui a détecté et signalé une tentative de connexion Brute Ratel C2 depuis le système d’un client début février :

campagne de malware

Figure 1 : Notre nom Sophos apparait, certes, mais en bien mauvaise compagnie

La partie la plus surprenante concernait les informations de version du fichier malveillant HealthApi.dll qui, comme le montre la figure 1, prétend qu’il s’agit du composant Sophos légitime lié à ce nom. Nous avons commencé à rechercher des échantillons présentant les mêmes caractéristiques et nous en avons trouvés une poignée qui semblaient avoir été créés par le même acteur malveillant, notamment une version (utilisant la signature numérique potentiellement compromise mentionnée ci-dessus) et remontant à janvier. Comme indiqué ci-dessus, nous avons vu diverses charges virales être utilisées. Dans le cadre de cet article, nous nous concentrerons principalement sur ce que nous avons vu lorsque nous avons analysé les échantillons déployant Cobalt Strike ou Brute Ratel.

Le faux programme d’installation semble être le moyen par lequel les fichiers corrompus ont pu pénétrer dans les systèmes, au moins dans un certain nombre de cas. Concernant l’accès initial, nous avons identifié, dans certains cas, des chargeurs/loaders JavaScript qui semblaient avoir été envoyés à la victime (ou aux victimes) par courrier électronique.

Caractéristiques générales

Dans les cas que nous avons examinés pour cet article, le code au niveau du point d’entrée a été écrasé par le code du chargeur/loader malveillant et la charge virale chiffrée a été stockée en tant que ressource dans la section dédiée aux ressources. Ainsi, la structure du fichier PE d’origine a dû être modifiée pour accueillir la ressource malveillante supplémentaire, comme le montre la figure 2.

campagne de malware

Figure 2 : Analyse détaillée du fichier PE modifié de manière malveillante

La mise à jour de la structure PE n’est que partielle, par exemple, la table d’exportation n’est pas fixe. Dans une telle situation, les échantillons DLL auront des exportations avec un code incompréhensible (‘cassé’), puisque le code a été écrasé par le code du chargeur/loader malveillant :

campagne de malware

Figure 3 : Le code écrasé

En revanche, les champs d’en-tête nécessaires au chargement correct de l’exécutable (par exemple, la taille de l’image) étaient fonctionnels. Plus particulièrement, la taille de la section des ressources dans la table des sections était modifiée, pour masquer que toutes les ressources du fichier original et non altérée (clean) avaient été remplacées par le fichier de ressource contenant la charge virale chiffrée.

La figure 4 montre une comparaison du SophosFS.exe d’origine avec la version de type cheval de Troie :

campagne de malware

Figure 4 : À gauche, le vrai produit Sophos ; à droite, le travail réalisé par l’attaquant potentiel

DllRegisterServer

Dans l’exemple 25e24385719aede7f4e0359b389a9597cc26df20e1b3a6367bbc04d5d4982fe6, le fichier est une DLL et le code de la fonction d’exportation de DllRegisterServer correspond à ce qui a été écrasé. Nous pouvons voir qu’une clé est en cours de développement au niveau de la pile. Une analyse plus approfondie révélera que cette clé est utilisée comme clé XOR pour décoder la ressource PE obfusquée de l’attaquant.

campagne de malware

Figure 5 : L’attaquant modifie DllRegisterServer ; la clé est visible en bas à droite

Une fois décodé, on retrouve le shellcode qui permettrait à terme de déchiffrer une autre couche pour être injecté en mémoire, puis exécuté. Cet exemple révèle finalement un exécutable sans son en-tête DOS, dans ce cas, Brute Ratel.

campagne de malware

Figure 6 : 2022 a lancé un appel, et il envoie une copie indésirable de Brute Ratel

Pendant ce temps, pour les échantillons Cobalt Strike, la charge virale correspond au shellcode http 64-bits habituel :

campagne de malware

Figure 7 : Le shellcode http 64-bits habituel

Ou bien alternativement, l’exécutable de la balise (beacon) Cobalt Strike :

campagne de malware

Figure 8 : Signes de l’exécutable de la balise/beacon Cobalt Strike : le déchiffreur de la charge virale finale à gauche et la configuration Cobalt Strike extraite à droite

Dans certains cas liés à Cobalt Strike, nous avons vu le chargeur/loader TitanLdr, qui est un shellcode multifonction assez complexe, effectuer le travail de chargement de la charge virale Cobalt Strike. Dans d’autres cas, un shellcode plus simple gérait le processus de chargement de Cobalt Strike. Nous avons également, comme mentionné ci-dessus, noté des chargeurs/loaders JavaScript, qui pouvaient avoir pénétré dans les systèmes clients par email, et qui ont chargé un programme d’installation MSI, qui à son tour a chargé les faux EXE/DLL.

Découvertes ultérieures

Notre investigation s’est poursuivie et, au moment de la publication de cet article, notre fichier IoC (lien ci-dessous) contenait bien plus de 400 entrées. D’autres découvertes plus étranges ont également été révélées. Par exemple, dans au moins un cas, nous avons trouvé un binaire abusé et signé par un certificat (révoqué). La charge virale était Qakbot. Une vérification sur VirusTotal indiquait qu’il s’agissait du seul fichier signé par cette signature particulière, ce qui peut signifier que l’adversaire l’a enregistrée pour son propre usage.

Mais alors … pourquoi ?

Une personne raisonnable pourrait très bien se demander ce que l’attaquant souhaitait accomplir en menant de telles actions. Après tout, les “modifications” ont cassé assez sérieusement les signatures numériques de ces fichiers, à tel point que la plupart des outils ne pouvaient pas du tout identifier les fichiers comme ayant été signés. En effet, ils ne parviennent pas à tromper les processus qui s’appuient sur ces signatures, et si les protections Sophos s’exécutent sur les machines ciblées, ce type de masquage est tout à fait visible pour nous, et nous le stoppons (et partageons nos découvertes avec d’autres défenseurs).

Mais alors … pourquoi ? Pour résumer, ce genre d’action vise à semer la confusion chez quiconque jetterait un coup d’œil rapide aux fichiers. Les acteurs malveillants ne veulent pas attirer l’attention sur eux, donc les noms “joke” ou “133t” sont des mauvais choix ; les fichiers d’apparence légitime, en particulier ceux provenant d’une société de cybersécurité connue, ont plus de chances de passer inaperçus ou de ne pas attirer l’attention des analystes, en particulier lorsqu’une partie du code restant dans les fichiers modifiés est légitime (chaînes, références sources, etc.).

À ce stade tous ces éléments sont-ils annonciateurs d’une vulnérabilité dans le logiciel ? Non, ce qui est à la fois un soulagement (pas de bug = bon signe) et un non-soulagement (aucun moyen de l’empêcher = mauvais signe). Comme nous le verrons dans la section suivante, les fichiers concernés dans ce cas provenaient d’une version spécifique d’un package particulier, non pas parce que ce package contenait un bug, mais simplement parce que l’attaquant a pu obtenir une copie de ce dernier.

Échantillons

À ce stade, cette enquête a découvert des échantillons affectant plusieurs exécutables ou DLL Sophos ; cela s’est produit plus d’une fois avec deux fichiers, même si pour aucun fichier nous n’avons repéré plus d’une version affectée. Une vérification préliminaire indique que tous les fichiers impliqués faisaient partie de la version 2022.4.3 de notre produit Windows Endpoint (la version en cours de déploiement est la 2023.2).

Nous fournissons dans cette section un échantillon des fichiers trouvés au fur et à mesure du déroulement de cette investigation, quelle fonction légitime remplissent-ils dans les produits Sophos et qu’est-ce que l’attaquant tentait-il de réaliser dans chaque cas. La liste est classée par fichier Sophos concerné.

SophosCleanup.exe
Version 3.10.3.1 de Sophos Clean ; le produit est SophosClean, version 3.10.3.
Hachage malveillant : 214540f4440cceffe55424a2c8de1cc43a42e5dcfb52b151ea0a18c339007e37
Vu pour la première fois le 04/03/2024 à 01:50:38 UTC
Un malware se connecte à 185.219.221[.]136:443
SophosFSTelemetry.exe
Version 1.10.7.68 de Sophos File Scanner ; le produit est Sophos File Scanner, version 1.10.7.
Hachage malveillant : 021921800888bc174c40c2407c0ea010f20e6d32c596ed3286ebfe7bd641dd79
Vu pour la première fois le 13/03/2024 à 19:15:25 UTC
Un malware se connecte à topclubfond[.]com.
SophosFX.exe
Version 1.10.7.73 du service Sophos File Scanner ; le produit est Sophos File Scanner, version 1.10.7.
Hachage malveillant : 18303e4b327cb47d131b0a3f3859e4e90d8fa0c40cf961bad7a34b550160e919
Vu pour la première fois le 28/02/2024 à 17:27:14 UTC
Configuration Cobalt Strike : Serveur C2 : “http://devs.ambitenergycorporation[.]com:443/samlss/media.jpg”
SophosIntelixPackager.exe
Version 6.0.0.533 du packager Sophos pour les soumissions Intelix ; le produit est SophosIntelixPackager, version 6.0.0.
Hachage malveillant : 617709e9e728b5e556ef7f98c55e99440d93186855b4a09d59bc4526a6fd82ae
Vu pour la première fois le 15/02/2024 à 18:20:45 UTC
Hébergé sur hxxp://185.117[.]91.230/download/guard64.exe ; Configuration Cobalt Strike “Serveur C2” : “realsepnews.com,/lessen.jpgv” “HttpPostUri”: “/enterprise”
SophosNtpUninstall.exe
Version 1.17.1118 de SophosNtpUninstall.exe ; le produit est Sophos Network Threat Protection, version 1.17.
Hachage malveillant : 28738aac83c5534b5c3228ece92abc3b12c154fdad751a2e73c24633a4d6db71
Vu pour la première fois le 02/02/2024 à 14:48:37 UTC
Cobalt Strike; adresses C2 : hxxps://buygreenstudio[.]com/build/constants/

 

Nous avons vu plusieurs fichiers ciblés par deux tentatives d’altération distinctes. En voici deux, pour montrer à quoi elles ressemblent :

HealthApi.dll
Version 2.9.137 de l’API Sophos Health ; le produit est Sophos Health, version 2.9.
Hachage malveillant : 25e24385719aede7f4e0359b389a9597cc26df20e1b3a6367bbc04d5d4982fe6
Vu pour la première fois le 23/02/2024 à 16:14:10
Hébergé sur l’URL hxxps://du178mamil[.]com/rtl.dll ; Serveur C2 : azuycomp[.]com
Hachage malveillant : ae35666999bd6292bdb0e24aad521c183bac15543d6b4ca27e0c8a3bcc80079c
Vu pour la première fois le 23/02/2024 à 17:44:27
Se connecte à hxxps://businessannually[.]com/persistent.html?lose=true
SophosUninstall.exe
Version 1.15.221.0 de Sophos Endpoint Agent ; le produit est Sophos Endpoint Uninstaller, version 1.15.
Hachage malveillant : 6a67cabf6058aa8a2d488a6233d420658eb803cba9da04f14b76e2b028ab30bf
Vu pour la première fois le 20/02/2024 à 20:22:38 UTC
Configuration Cobalt Strike : Serveur C2 : “usaglobalnews[.]com/Select/play/NX4C69QVQ4I” , “HttpPostUri”: “/design/dumpenv/Z2UC9FG2”,
Hachage malveillant : 86ebfe9d8b3c928fcf80642e88ea3b195b2ba23c6a5c17fdb68de13baac75cd1
Vu pour la première fois le 23/02/2024 à 18:05:45 UTC
Configuration Cobalt Strike ; Serveur C2 : businessannually[.]com/persistent.html ; HttpPostUri – /execute

 

Détections et protections

Plusieurs protections Sophos détectent ou bloquent ces fichiers modifiés de manière malveillante. Ceux-ci incluent ATK/ScLoad-N, ATK-ScLoad-L, ATK/SCLoad-M, ATK/SCLoad-O, Troj/Cobalt-JA, Troj/Mdrop-JXD et la protection dynamique du shellcode, ainsi que la mitigation de l’intercepteur C2 mentionné au tout début de cet article.

Réponses du secteur

Une telle campagne est bruyante et d’autres défenseurs ont également lancé des chasses aux menaces. Nous notons avec plaisir que Palo Alto Networks, qui constate également le même type d’activité, a également publié des informations relatives à cette campagne, notamment une visualisation du flux d’attaque de celle-ci. De plus, certains observateurs signalent une nouvelle souche de malware provisoirement appelée Oyster/CleanUpLoader qui apparaît parallèlement à cette campagne ; Les clients Sophos sont déjà protégés, mais nous continuons à suivre cette évolution avec intérêt.

Comme indiqué ci-dessus, nous avons contacté les entreprises mentionnées dans cet article ainsi qu’un certain nombre d’autres également concernées ; et à mesure que l’investigation progressait, notre démarche de sensibilisation suivait le même rythme. Dans le cadre de ce processus, Bitdefender (l’une des sociétés dont les fichiers binaires sont concernés) a examiné les données relatives à leurs fichiers et nous demande de relayer les éléments suivants :

Bitdefender a été informé de la modification du binaire utilisé dans ces attaques. Bitdefender a reconnu que, étant donné que les binaires ont été utilisés indépendamment, en dehors des fonctionnalités normales du logiciel, aucune autre action n’est requise. Les produits Bitdefender installés sur un système ne sont pas vulnérables à cette méthode de corruption de binaire.

IoC

Un ensemble d’indicateurs de compromission associé à cette campagne est disponible sur notre GitHub. Comme il s’agit d’une investigation toujours en cours, ce dossier pourrait s’étoffer au fil du temps.

Remerciements

Colin Cowie et Jordon Olness de l’équipe MDR Threat Intel ont contribué à cette recherche.

Billet inspiré de Malware campaign attempts abuse of defender binaries, sur le Blog Sophos.