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.
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é.
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.
La configuration se compose de quatre champs :
- URL du serveur C&C.
- 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.
- Une chaîne identifiant une campagne.
- 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.
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 |