Ce n'est pas la première fois que l'industrie du jeu est la cible d'attaquants qui compromettent les développeurs de jeux, insèrent des portes dérobées dans l'environnement de développement d'un jeu et font ensuite distribuer leurs logiciels malveillants comme logiciels légitimes. En avril 2013, Kaspersky Lab a signalé qu'un jeu populaire avait été modifié pour y inclure une porte dérobée en 2011. Cette attaque a été attribuée aux auteurs que Kaspersky a appelé groupe Winnti.

Une fois de plus, de nouvelles attaques de la chaîne d'approvisionnement ont récemment attiré l'attention des chercheurs d'ESET. Cette fois, deux jeux et une application de plateforme de jeu ont été compromis pour inclure une porte dérobée. Étant donné que ces attaques visaient principalement l'Asie et l'industrie du jeu, il n'est pas surprenant qu'elles soient l'œuvre du groupe décrit dans le rapport de Kaspersky : « Winnti - Plus qu'un simple jeu ».

Trois cas, une seule porte dérobée

Bien que les logiciels malveillants utilisent des configurations différentes dans chaque cas, les trois logiciels concernés comprenaient le même code de porte dérobée et ont été lancés en utilisant le même mécanisme. Alors que deux des produits compromis n'incluent plus la porte dérobée, l'un des développeurs concernés distribue toujours la version cheval de Troie. Ironiquement, le jeu, produit par le développeur thaïlandais Electronics Extreme, s'appelle Infestation. Nous avons essayé de les informer à plusieurs reprises, par différents canaux, depuis début février, mais sans succès apparent.

Regardons comment la charge utile malveillante est intégrée, avant d’examiner les détails de la porte dérobée elle-même.

Intégration de la charge utile

Le code de la charge utile est démarré très tôt lors de l'exécution du fichier exécutable de la backdoor. Juste après le point d'entrée PE, l'appel standard à l'initialisation C Runtime (__scrt_common_main_seh in Figure 1) est branché pour lancer la charge utile malveillante avant tout le reste (Figure 2). Cela peut suggérer que les cybercriminels ont changé une configuration de compilation plutôt que le code source lui-même.

Figure 1 : Version nettoyée du point d'entrée du fichier exécutable

Figure 2 : Point d'entrée de fichier exécutable compromis

Le code ajouté à l'exécutable déchiffre et lance la porte dérobée en mémoire avant de reprendre l'exécution normale du code d'initialisation C Runtime et tout le code suivant de l'application hôte. Les données utiles incorporées ont une structure spécifique, comme le montre la Figure 3, qui est analysée par le code de déballage ajouté.

Figure 3 : Structure de charge utile intégrée

Il inclut une clé RC4 (soit XORed avec 0x37) qui est utilisée pour déchiffrer un nom de fichier et le fichier DLL intégré.

La charge utile malveillante

La charge utile malveillante réelle est assez petite et ne contient qu'environ 17 Ko de code et de données.

Configuration

Les données de configuration, présentées à la Figure 4, sont simplement constituées d’une liste de chaînes de caractères séparées par des espaces.

Figure 4 : Données de configuration de la charge utile

La configuration se compose de quatre champs :

  1. URL du serveur C&C.
  2. Variable (t) utilisée pour déterminer le temps de sommeil en millisecondes avant de continuer l'exécution. Le temps d'attente est choisi au hasard entre 2/3 t et 5/3 t.
  3. Une chaîne identifiant une campagne.
  4. Une liste de noms de fichiers exécutables séparés par des points-virgules. Si l'un d'eux est en cours, la porte dérobée arrête son exécution.

Les chercheurs d'ESET ont identifié cinq versions de la charge utile :

Truncated SHA-1 PE Compile time (UTC) C&C server URL
a045939f 2018-07-11 15:45:57 https://bugcheck.xigncodeservice[.]com/Common/Lib/Common_bsod.php
a260dcf1 2018-07-11 15:45:57 https://bugcheck.xigncodeservice[.]com/Common/Lib/Common_Include.php
dde82093 2018-07-11 15:45:57 https://bugcheck.xigncodeservice[.]com/Common/Lib/common.php
44260a1d 2018-08-15 10:59:09 https://dump.gxxservice[.]com/common/up/up_base.php
8272c1f4 2018-11-01 13:16:24 https://nw.infestexe[.]com/version/last.php

Dans les trois premières variantes, le code n'a pas été recompilé, mais les données de configuration ont été éditées dans le fichier DLL lui-même. Le reste du contenu est une copie octet pour octet.

Infrastructure C&C

Les noms de domaine ont été soigneusement choisis pour avoir l'air d'être liés à l'éditeur de jeux ou d'applications. Le domaine apex a été configuré pour rediriger vers un site légitime pertinent en utilisant le service de redirection Namecheap, tandis que le sous-domaine pointe vers le serveur C&C malveillant.

Domain name Registration date Redirection target
xigncodeservice.com 2018-07-10 09:18:17 https://namu.wiki/[w]/XIGNCODE
gxxservice.com 2018-08-14 13:53:41 None or unknown
infestexe.com 2018-11-07 08:46:44 https://www.facebook.com/infest.[in].[th]

Subdomain name IP addresses Provider
bugcheck.xigncodeservice.com 167.99.106[.]49, 178.128.180[.]206 DigitalOcean
dump.gxxservice.com 142.93.204[.]230 DigitalOcean
nw.infestexe.com 138.68.14[.]195 DigitalOcean

Au moment d'écrire ces lignes, aucun des domaines ne se résout et les serveurs C&C ne répondent pas.

Rapport de reconnaissance

Un identifiant de bot est généré à partir de l'adresse MAC de la machine. La porte dérobée transmet au serveur C&C des informations sur la machine telles que le nom d'utilisateur, le nom de l'ordinateur, la version Windows et la langue du système et attend les commandes.  Les données sont cryptées en XOR avec la clé « *&b0i0rong2Y7un1 » et encodées en base64. Les données reçues du serveur C&C sont chiffrées à l'aide de la même clé.

Commandes

Cette porte dérobée assez simple ne comprend que quatre commandes qui peuvent être utilisées par l'attaquant :

  • DownUrlFile
  • DownRunUrlFile
  • RunUrlBinInMem
  • UnInstall

Les commandes sont assez explicites. Elles permettent à l'attaquant de lancer des exécutables supplémentaires à partir d'une URL donnée.

La dernière est peut-être moins évidente à saisir. La commande « Désinstaller » ne supprime pas le logiciel malveillant du système. Après tout, il est intégré dans un exécutable légitime qui doit encore être exécuté. Plutôt que de supprimer quoi que ce soit, il désactive le code malveillant en définissant la valeur de registre suivante à 1 :

  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\ImageFlag

Lorsque la charge utile est démarrée, la valeur du registre est interrogée et l'exécution est interrompue si elle est définie. Peut-être les attaquants tentent-ils de réduire la charge de leurs serveurs C&C en évitant les rappels de victimes inintéressantes.

Deuxième niveau

D'après la télémétrie ESET, l'une des charges utiles de deuxième niveau livrées aux victimes est Win64/Winnti.BN. D'après ce que nous pouvons dire, son compte-gouttes a été téléchargé sur HTTPS depuis api.goallbandungtravel[.]com. Nous l'avons vu installé en tant que service Windows et en tant que DLL dans C:\Windows\System32, utilisant les noms de fichiers suivants :

  • cscsrv.dll
  • dwmsvc.dll
  • iassrv.dll
  • mprsvc.dll
  • nlasrv.dll
  • powfsvc.dll
  • racsvc.dll
  • slcsvc.dll
  • snmpsvc.dll
  • sspisvc.dll

Les échantillons que nous avons analysés étaient en fait assez gros, chacun d'eux représentant environ 60 Mo. Ceci n'est toutefois valable qu’en apparence, car la taille réelle ou le fichier PE est compris entre 63 Ko et 72 Ko, selon la version. Les fichiers de logiciels malveillants contiennent simplement un grand nombre de fichiers propres qui y sont ajoutés. Ceci est probablement fait par le composant qui supprime et installe ce service malveillant.

Une fois le service exécuté, il ajoute l'extension.doc à son chemin DLL, lit ce fichier et le décrypte en utilisant RC5. Le fichier MUI déchiffré contient un code indépendant de la position à l'offset 0, la clé RC5 est dérivée du numéro de série du disque dur et de la chaîne « f@Ukd!rCto R$ ». - nous n'avons pu obtenir aucun fichier MUI ni le code qui les installe en premier. Ainsi, nous ne connaissons pas le but exact de ce service malveillant.

Les versions récentes du logiciel malveillant incluent un mécanisme de mise à jour automatique, utilisant le serveur C&C http://checkin.travelsanignacio[.]com. Ce serveur C&C a servi la dernière version des fichiers MUI cryptés avec une clé RC5 statique. Le serveur C&C n'a pas répondu pendant notre analyse.

Cibles

Commençons par déterminer qui n’est pas ciblés. Au début de la charge utile, le logiciel malveillant vérifie si la langue du système est le russe ou le chinois (Figure 5). Dans les deux cas, le logiciel malveillant s'arrête de fonctionner. Il n'y a pas d'autre solution : les attaquants ne sont tout simplement pas intéressés par les ordinateurs configurés avec ces langues.

Figure 5 : Vérifications linguistiques avant l'exécution de la charge utile

Statistiques de distribution

La télémétrie d’ESET montre que les victimes se trouvent principalement en Asie, la Thaïlande ayant la plus grande part du gâteau. Étant donné la popularité de l'application compromise qui est toujours distribuée par son développeur, il ne serait pas surprenant que le nombre de victimes soit de l'ordre de dizaines ou de centaines de milliers.

Conclusion

Les attaques de la chaîne d'approvisionnement sont difficiles à détecter du point de vue du consommateur. Il est impossible de commencer à analyser chaque logiciel que nous utilisons, surtout avec toutes les mises à jour régulières qu'on nous encourage ou qu'on nous demande d'installer. Nous faisons donc confiance aux éditeurs de logiciels pour que les fichiers qu'ils distribuent ne contiennent pas de logiciels malveillants. C'est peut-être la raison pour laquelle de nombreux groupes ciblent les développeurs de logiciels : le fait de compromettre le fournisseur leur offre un botnet aussi populaire que le logiciel qui est piraté. Cependant, l'utilisation d'une telle technique présente un inconvénient : une fois que le système est découvert, l'attaquant perd le contrôle et les ordinateurs peuvent être nettoyés grâce à des mises à jour régulières.

Nous ne connaissons pas les motifs des attaquants en ce moment. S'agit-il simplement d'un gain financier? Y a-t-il des raisons pour lesquelles les trois produits concernés proviennent de développeurs asiatiques et sont destinés au marché asiatique? Ces attaquants utilisent-ils un botnet dans le cadre d'une opération d'espionnage plus vaste?

Les produits ESET détectent cette menace comme Win32/HackedApp.Winnti.A, Win32/HackedApp.Winnti.B, la charge utile comme Win32/Winnti.AG et le deuxième niveau en tant que Win64/Winnti.BN.

Indicateurs de compromission (IoCs)

Échantillons de fichier compromis (Win32/HackedApp.Winnti.A et B)

SHA-1 Compile Time (UTC) RC4 key Payload SHA-1
474b1c81de1eafe93602c297d701418658cf6feb Mon Jul 16 07:37:14 2018 207792894 a045939f
47dd117fb07cd06c8c6faa2a085e0d484703f5fd Wed Jul 25 06:44:09 2018 207792894 a045939f
54b161d446789c6096362ab1649edbddaf7145be Tue Sep 4 08:02:38 2018 165122939 a260dcf1
67111518fe2982726064ada5b23fd91d1eb3d48e Wed Sep 19 09:51:44 2018 17858542 dde82093
0f31ed081ccc18816ca1e3c87fe488c9b360d02f Fri Sep 28 05:32:30 2018 17858542 dde82093
5e2b7b929471ac3ba22a1dfa851fac1044a698dc Tue Oct 16 05:09:15 2018 17858542 dde82093
132e699e837698ef090e3f5ad12400df1b1e98fa Thu Oct 18 02:53:03 2018 17858542 dde82093
d4eaf47253fe59f11a06517bb9e2d5e8b785abf8 Thu Nov 1 07:00:55 2018 17858542 dde82093
7cf41b1acfb05064518a2ad9e4c16fde9185cd4b Tue Nov 13 10:12:58 2018 1729131071 8272c1f4
7f73def251fcc34cbd6f5ac61822913479124a2a Wed Nov 14 03:50:18 2018 19317120 44260a1d
dac0bd8972f23c9b5f7f8f06c5d629eac7926269 Tue Nov 27 03:05:16 2018 1729131071 8272c1f4

Certains de ces hashes nt été retirés à la demande de l'un des vendeurs. Si, pour une raison particulière, vous en avez besoin, communiquez avec nous à threatintel@eset.com.

Échantillons de la charge utile (Win32/Winnti.AG)

SHA-1 C&C server URL
a045939f53c5ad2c0f7368b082aa7b0bd7b116da https://bugcheck.xigncodeservice[.]com/Common/Lib/Common_bsod.php
a260dcf193e747cee49ae83568eea6c04bf93cb3 https://bugcheck.xigncodeservice[.]com/Common/Lib/Common_Include.php
dde82093decde6371eb852a5e9a1aa4acf3b56ba https://bugcheck.xigncodeservice[.]com/Common/Lib/common.php
8272c1f41f7c223316c0d78bd3bd5744e25c2e9f https://nw.infestexe[.]com/version/last.php
44260a1dfd92922a621124640015160e621f32d5 https://dump.gxxservice[.]com/common/up/up_base.php

Échantillons du deuxième niveau (Win64/Winnti.BN)

Dropper délivré par api.goallbandungtravel[.]com.

SHA-1 Compile Time (UTC) C&C server URL prefix
4256fa6f6a39add6a1fa10ef1497a74088f12be0 2018-07-25 10:13:41 None
bb4ab0d8d05a3404f1f53f152ebd79f4ba4d4d81 2018-10-10 09:57:31 http://checkin.travelsanignacio[.]com

Matrice MITRE ATT&CK

ID Description
T1195 Supply Chain Compromise
T1050 New Service
T1022 Data Encrypted
T1079 Multilayer Encryption
T1032 Standard Cryptographic Protocol (RC4, RC5)
T1043 Commonly Used Port (80,443)
T1009 Binary Padding