L’industrie du jeu toujours dans la mire d’attaquants en Asie | WeLiveSecurity

L’industrie du jeu toujours dans la mire d’attaquants en Asie

Les développeurs de jeux asiatiques sont à nouveau ciblés dans les attaques de la chaîne d’approvisionnement, via la distribution de logiciels malveillants dans les logiciels légitimement signés

Les développeurs de jeux asiatiques sont à nouveau ciblés dans les attaques de la chaîne d’approvisionnement, via la distribution de logiciels malveillants dans les logiciels légitimement signés

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-1PE Compile time (UTC)C&C server URL
a045939f2018-07-11 15:45:57https://bugcheck.xigncodeservice[.]com/Common/Lib/Common_bsod.php
a260dcf12018-07-11 15:45:57https://bugcheck.xigncodeservice[.]com/Common/Lib/Common_Include.php
dde820932018-07-11 15:45:57https://bugcheck.xigncodeservice[.]com/Common/Lib/common.php
44260a1d2018-08-15 10:59:09https://dump.gxxservice[.]com/common/up/up_base.php
8272c1f42018-11-01 13:16:24https://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 nameRegistration dateRedirection target
xigncodeservice.com2018-07-10 09:18:17https://namu.wiki/[w]/XIGNCODE
gxxservice.com2018-08-14 13:53:41None or unknown
infestexe.com2018-11-07 08:46:44https://www.facebook.com/infest.[in].[th]
Subdomain nameIP addressesProvider
bugcheck.xigncodeservice.com167.99.106[.]49, 178.128.180[.]206DigitalOcean
dump.gxxservice.com142.93.204[.]230DigitalOcean
nw.infestexe.com138.68.14[.]195DigitalOcean

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-1Compile Time (UTC)RC4 keyPayload SHA-1
7cf41b1acfb05064518a2ad9e4c16fde9185cd4bTue Nov 13 10:12:58 201817291310718272c1f4
7f73def251fcc34cbd6f5ac61822913479124a2aWed Nov 14 03:50:18 20181931712044260a1d
dac0bd8972f23c9b5f7f8f06c5d629eac7926269Tue Nov 27 03:05:16 201817291310718272c1f4

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-1C&C server URL
a045939f53c5ad2c0f7368b082aa7b0bd7b116dahttps://bugcheck.xigncodeservice[.]com/Common/Lib/Common_bsod.php
a260dcf193e747cee49ae83568eea6c04bf93cb3https://bugcheck.xigncodeservice[.]com/Common/Lib/Common_Include.php
dde82093decde6371eb852a5e9a1aa4acf3b56bahttps://bugcheck.xigncodeservice[.]com/Common/Lib/common.php
8272c1f41f7c223316c0d78bd3bd5744e25c2e9fhttps://nw.infestexe[.]com/version/last.php
44260a1dfd92922a621124640015160e621f32d5https://dump.gxxservice[.]com/common/up/up_base.php

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

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

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

Matrice MITRE ATT&CK

IDDescription
T1195Supply Chain Compromise
T1050New Service
T1022Data Encrypted
T1079Multilayer Encryption
T1032Standard Cryptographic Protocol (RC4, RC5)
T1043Commonly Used Port (80,443)
T1009Binary Padding

Discussion