Au milieu de 2020, les chercheurs d'ESET ont commencé à analyser de multiples campagnes, attribuées par la suite au groupe Gelsemium, et ont retrouvé la version la plus ancienne du logiciel malveillant remontant à 2014. Les victimes de ces campagnes sont situées en Asie de l'Est ainsi qu'au Moyen-Orient et comprennent des gouvernements, des organisations religieuses, des fabricants d'électronique et des universités.
Points clés de ce rapport :
- Les chercheurs d'ESET pensent que Gelsemium est derrière l'attaque de la chaîne d'approvisionnement contre BigNox qui a été précédemment signalée comme l'opération NightScout.
- Les chercheurs d'ESET ont découvert une nouvelle version de Gelsemium, un logiciel malveillant complexe et modulaire, appelé par la suite Gelsemine, Gelsenicine et Gelsevirine.
- De nouvelles cibles ont été découvertes, notamment des gouvernements, des universités, des fabricants d'électronique et des organisations religieuses en Asie de l'Est et au Moyen-Orient.
- Gelsemium est un groupe de cyberespionnage actif depuis 2014.
La répartition géographique des cibles de Gelsemium est visible dans la figure 1.
Composants de Gelsemium
Toute la chaîne de Gelsemium peut sembler simple à première vue, mais les configurations exhaustives, implantées à chaque étape, modifient à la volée les paramètres de la charge utile finale, ce qui la rend plus difficile à comprendre. Les comportements analysés ci-dessous sont liés à la configuration. Par conséquent, les noms de fichiers et les chemins peuvent être différents dans d'autres échantillons. La plupart des campagnes que nous avons observées suivent ce que nous décrivons ici.
Gelsemine : Le dropper
La première étape de Gelsemium est un gros dropper écrit en C++ à l'aide de la bibliothèque Microsoft Foundation Class (MFC). Cette étape contient les binaires de plusieurs autres étapes. La taille du dropper varie entre 400 et 700 Ko environ, ce qui est inhabituel et serait encore plus important si les huit exécutables intégrés n'étaient pas compressés. Les développeurs utilisent la bibliothèque zlib , liée statiquement, pour réduire considérablement la taille globale. Derrière cet exécutable surdimensionné se cache un mécanisme complexe mais flexible, capable de déposer différentes étapes en fonction des caractéristiques de l'ordinateur victime, comme la « bitness » (32 bits ou 64 bits) ou les privilèges (utilisateur standard ou administrateur). Presque toutes les étapes sont compressées, situées dans la section des ressources du PE et mappées dans l'espace d'adresse mémoire du même composant. La figure 3 illustre toutes les étapes du composant Gelsemine.
Gelsenicine : Le chargeur
Gelsenicine est un chargeur qui récupère Gelsevirine et l'exécute. Il existe deux versions différentes du chargeur - toutes deux sont des DLL. Elles diffèrent cependant par le contexte dans lequel Gelsemine est exécuté.
Pour les victimes disposant de privilèges d'administrateur, Gelsemine dépose Gelsenicine dans C:\Windows\System32\spool\prtprocs\x64\winprint.dll (DLL en mode utilisateur pour le processeur d'impression) qui est ensuite automatiquement chargé par le service Windows spoolsv . Pour écrire un fichier dans le répertoire %WINDIR%/system32 , les privilèges d'administrateur sont obligatoires, d'où l'exigence mentionnée précédemment.
Users with standard privileges compromised by Gelsemine drop Gelsenicine under a different directory that does not require administrator privileges. The DLL chrome_elf.dll is dropped under CommonAppData/Google/Chrome/Application/Library/.
Les utilisateurs ayant des privilèges standard sont compromis par Gelsemine déposent Gelsenicine sous un autre répertoire qui ne nécessite pas de privilèges d'administrateur. La DLL chrome_elf.dll est déposée sous CommonAppData/Google/Chrome/Application/Library/.
Gelsevirine : Le plug-in principal
Gelsevirine est la dernière étape de la chaîne et il est appelé MainPlugin par ses développeurs, d'après le nom de la DLL et aussi le chemin PDB trouvé dans les anciens échantillons (Z:\z_code\Q1\Client\Win32\Release\MainPlugin.pdb). Il est également utile de mentionner que si les défenseurs parviennent à obtenir cette dernière étape seuls, elle ne fonctionnera pas parfaitement car elle nécessite que ses arguments aient été configurés par Gelsenicine.
La configuration utilisée par Gelsenicine contient un champ nommé controller_version qui, selon nous, correspond au versioning utilisé par les opérateurs pour ce plug-in principal. La figure 4 présente une chronologie des différentes versions que nous avons observées dans la nature. Notez que les dates sont approximatives.
Liens et outils supplémentaires
Au cours de notre enquête, nous avons rencontré des logiciels malveillants intéressants décrits dans les sections suivantes.
- Opération NightScout (BigNox) : En janvier 2021, un autre chercheur d'ESET a analysé et rédigé un article sur l'opération NightScout, une attaque par chaîne d'approvisionnement compromettant le mécanisme de mise à jour de NoxPlayer, un émulateur Android pour PC et Mac, qui fait partie de la gamme de produits BigNox comptant plus de 150 millions d'utilisateurs dans le monde. L'enquête a mis en évidence un certain chevauchement entre cette attaque de la chaîne d'approvisionnement et le groupe Gelsemium. Les victimes initialement compromises par cette attaque de la chaîne d'approvisionnement ont ensuite été compromises par Gelsemine. Parmi les différentes variantes examinées, la « variante 2 » de l'article présente des similitudes avec le logiciel malveillant Gelsemium.
- OwlProxy : Ce module existe également en deux variantes - versions 32 et 64 bits - et contient donc une fonction permettant de tester la version de Windows, comme dans les composants de Gelsemium.
- Chrommme : Chrommme est une porte dérobée que nous avons trouvée lors de nos aventures dans l'écosystème Gelsemium. Les similitudes de code avec les composants Gelsemium sont presque inexistantes, mais de petits indicateurs ont été trouvés au cours de l'analyse, ce qui nous amène à penser qu'il est d'une certaine manière lié au groupe. Le même serveur C&C a été trouvé dans Gelsevirine et Chrommme, les deux utilisent deux serveurs C&C. Chrommme a été trouvé sur la machine d'une organisation également compromise par le groupe Gelsemium.
Conclusion
Le biome de Gelsemium est très intéressant : il présente peu de victimes (selon notre télémétrie) avec un grand nombre de composants adaptables. Le système de plug-in montre que ses développeurs ont une connaissance approfondie du C++. De petites similitudes avec des outils de logiciels malveillants connus mettent en lumière des chevauchements intéressants et possibles avec d'autres groupes et activités passées. Nous espérons que cette recherche incitera d'autres chercheurs à publier sur le groupe et à révéler d'autres racines liées à cette biosphère de logiciels malveillants.
Une liste complète et détaillée des indicateurs de compromission (IoC) et des échantillons est disponible dans notre white paper et sur GitHub.
Pour toute demande de renseignements ou pour soumettre des échantillons liés à ce sujet, contactez-nous à l'adresse threatintel@eset.com.
Pour en savoir plus sur la façon dont les services de renseignement sur les menaces peuvent améliorer la posture de cybersécurité de votre organisation, visitez la page ESET Threat Intelligence page.