CYBER THREAT INTELLIGENCE

Taskloader à l'origine d'une chaîne d'infection par Pay-per-Install

26 min

En juin 2023, nous avons observé plusieurs alertes qui semblaient venir de différentes sources. Une recherche rapide dans notre télémétrie nous a permis d’identifier un grand nombre de machines infectées chez nos clients. Le vecteur d’infection initial était le même, mais des comportements différents pouvaient parfois être constatés.

Début août, les serveurs continuaient de façon intermittente à livrer les payloads, et certains malwares n’étaient toujours pas détectés par les moteurs antivirus. Bien que l’activité de l’infrastructure et les charges utiles de TaskLoader aient été mises en évidence dès 2016, nous l’avons vu distribuer des malwares plus récents, tels que CustomerLoader et l’injecteur DotRunpex via BYOVD (Bring Your Own Vulnerable Driver) pour tenter d’arrêter des processus protégés.

De manière générale, l’attaque présente des TTP identiques à ceux rencontrés mi-2022 dans la campagne NullMixer. Elle suit plusieurs principes similaires bien qu’avec une infrastructure différente et de nouveaux malwares.

Nous avons profité de cette occasion pour étudier davantage la distribution de ce malware et pour présenter certaines techniques courantes d’analyse de malware qu’il est possible d’utiliser contre cette menace commune et définir ses capacités, tout en fournissant une source fiable d’information et d’analyse qui permettrait à la communauté d’investiguer plus efficacement sur ces menaces.

Après analyse, nous avons des raisons de penser qu’il s’agit ici d’une partie d’une campagne de PPI (Pay-per-Install). Ce type d’Infrastructure-as-a-Service permet aux cybercriminels de payer un fournisseur pour lancer leurs malwares sur des machines infectées.

Table des matières

Vecteur d’infection

Sitool.exe – Étape 1

Tempexec Delphi Installer – Étape 2

Inetinfo.exe – Étape 3

CustomerLoader

DotRunpeX

LgoogLoader

Fabookie

SmokeLoader

Liste des IoC

Aperçu

Le schéma suivant présente le flux d’exécution du malware.

 

Vecteur d’infection

Le malware initial vient du site crack4windows[.]com, qui propose gratuitement diverses sortes de logiciels pirates. Il s’agit là d’un vecteur commun de distribution de malwares. À titre d’exemple, nous avons constaté que certaines des infections étaient dues au téléchargement du logiciel TamoGraph Site Survey, utilisé pour mesurer l’intensité du signal des réseaux sans fil dans un bâtiment.

Le site promeut aussi d’autres logiciels plus communs, mais distribuant tous le même malware. Ce site affiche de fausses « étoiles », un compteur de téléchargements et des messages de remerciement dans différentes langues pour crédibiliser l’activité et donner confiance aux utilisateurs.

Le téléchargement contient un fichier texte avec des instructions :

TamoGraph Site Survey Crack 8.0 Build 271 
Download link: http[:]//free3pc[.]site/download?id=GDtfLsBrxfU&s=C0B24C23 
Zip Password: GDtfLsBrxfU_062123

Trois autres domaines « d’hébergement de fichiers » ont été identifiés à ce stade. Nous avons remarqué que le mot de passe contient toujours la date de téléchargement. La charge utile est hébergée sur ces sites qui, lorsqu’on y accède, tentent de se faire passer pour des sites légitimes de partage de fichiers. Toutefois, ils ne peuvent pas être utilisés en tant que tels ou contactés.

Comme le malware configure des taches planifiées pour persister, il a été surnommé « TaskLoader » par d’autres chercheurs. Il exécute aussi un binaire appelé sitool.exe, dont le nom de fichier original est sihost.exe, pour se mêler à des outils par défaut de Windows. Le lendemain de notre enquête initiale, le hash de ce dropper était différent ; le malware est mis à jour régulièrement, mais avec peu d’effet sur son taux de détection.

Sitool.exe – Étape 1

Sitool est la première étape de TaskLoader, et est assez simple. Une rapide analyse avec DiE nous montre qu’il s’agit d’un binaire .NET obfusqué.

Du fait de la manière dont .NET fonctionne, il est souvent possible de le décompiler depuis un IL (Intermediate Language) vers quelque chose d’assez similaire à son code source. Si la manière dont .NET fonctionne vous intéresse, une excellente conférence DEFCON porte sur les malwares en .NET. La courbe d’entropie ne présente pas de zones d’entropie notables, ce qui signifie que le logiciel n’est sans doute pas packé ou chiffré. Les zones chiffrées peuvent montrer des valeurs d’entropie se situant autour de 7,2 à 7,9.

Ici, nous avons simplement utilisé un outil classique, de4dot, pour déobfusquer le binaire. En l’ouvrant avec dnSpy, nous pouvons lire une partie de son code déobfusqué. Il semble s’agir d’un simple créateur de tâches assorti de fonctionnalités anti-analyse basiques. L’image suivante présente les principales fonctions utilisées par ce binaire.

Fonction Main qui créée et lance des tâches planifiées.

Le binaire récupère un fichier texte JSON encodé qu’il utilise pour télécharger une nouvelle charge utile et l’exécuter depuis un dossier temporaire. Le domaine depuis lequel la charge est récupérée diffère selon les cas ; ici il s’agit du domaine avkit[.]org.

Après un fuzzing des paramètres ID sur les domaines utilisés au cours des attaques les plus récentes, nous avons émulé la fonction de décodage « DecryptSimpleString » pour pouvoir lire le contenu JSON.

Bien que nous ayons trouvé plusieurs payloads encodés différemment, au moment où nous écrivons, tous, une fois décodés, donnent le même résultat :

[{"m_guid":"<Date>","m_name":"weblo","m_fileurl":"http://hiapps[.]site/getmodule","m_cmdline":"/verysilent /n /pro /channel oki","m_log":""}]

De là, nous sommes parvenus à trouver un nouveau domaine à partir duquel un payload est distribué, hiapps[.]site. La ligne de commande est elle aussi spécifique à ce payload, nous permettant de mieux identifier ce programme.

Dans l’illustration qui suit, l’URL montre que ce site distribue des payloads depuis 2017, et certains échantillons de 2016 que nous avons trouvés sur VirusTotal comportaient déjà des références au domaine avkit[.]org.

$ strings -a -el 1233132217d54e63701e4701c8e2cd28c475eed63707a87050ca2a17a5d1a08d.bin
[...]
SoftwareMail.RuTechPartnerLogComponentsDse
SoftwareMail.RuTechPartnerLogComponentsVbm
SoftwareMail.RuTech
/transfer "down" "{0}" "{1}"
bitsadmin.exe
location.txt
www.avkit.org
UA-71688099-1
54.171.215.105
Start
[...]

Chaînes du précédent échantillon montrant que avkit[.]org et les identifiants Google Container (vus plus tard) sont restés les mêmes.

Tempexec Delphi Installer – Étape 2

Une fois cette charge récupérée, elle est renommée en 18 caractères aléatoires, placée dans le dossier Temp de Windows et exécutée. À des fins pratiques, nous l’avons renommée « Tempexec ». Voici un exemple de ligne de commande :

C:UsersuserAppDataLocalTemp\y7i2l2t6j1f0ttcts1v2r3r4a7k8k6r3.exe /verysilent / n /pro /channel oki

Delphi est un langage qui a évolué de Turbo Pascal pour Windows, et qui est fréquemment utilisé pour créer des assistants d’installation.

Delphi est aussi souvent choisi par les auteurs de logiciels malveillants. Des débats ont eu lieu à ce sujet et des rapports ont été publiés par des éditeurs de sécurité tels que Mandiant.

InnoSetup est un assistant d’installation en Delphi. Ce programme permet aux développeurs de créer des installateurs pour Windows. Ces installateurs sont souvent utilisés comme packers par les auteurs de malwares, puisque les programmes légitimes qui y ont recours sont fréquemment tagués comme malveillants par les logiciels de sécurité. Cette stratégie leur permet de faire passer l’alerte pour un faux positif à ce stade. [1][2]

Rien ici de très compliqué. Comme on le voit dans PEStudio, la section Overlay (des données simplement annexées à un PE) contient la signature InnoSetup. Le payload peut être extrait par innoextract, un outil open source.

Quelques versions plus récentes de cette étape, vues en août 2023, utilisent de très anciennes versions (antérieures à 1.1.0) d’InnoSetup, qu’innoextract ne peut pas extraire. Néanmoins, à l’heure où nous écrivons, nous n’avons pas encore vu ces nouvelles versions présenter des comportements malveillants, ou s’exécuter avec succès. Nous pensons donc qu’en l’espèce ce payload est encore en cours de développement.

InnoSetup peut être scripté ; aussi, selon l’arborescence des processus, il exécute un second processus seulement utilisé pour lancer le binaire inetinfo avec les arguments en ligne de commande hérités de son parent.

Inetinfo.exe – Étape 3

C’est là que réside la principale fonctionnalité de TaskLoader. À nouveau, il s’agit d’un binaire en .NET obfusqué avec Reactor. Il commence par initialiser une classe avec un dictionnaire associant des clés à certains payloads.

Les classes KControl présentent une méthode Start qui télécharge et exécute une charge utile en fonction de leurs clés via la classe ProviderUrl.

Cette classe interroge aussi iplogger[.]org pour fournir à l’attaquant un moyen d’enregistrer quelles adresses IP ont exécuté un payload particulier.

Elle vérifie aussi les clés de registre correspondant à chaque payload afin de savoir si le malware a déjà été installé.

Il est intéressant de voir que la fonction RunItems appelle method_2 qui envoie des informations telles que l’adresse IP et le pays où le payload est exécuté vers un tableau de bord Google Analytics. Ceci sous-entend que le loader pourrait faire partie d’une campagne de Loader-as-a-Service. En effet, le fait que des données de ce type soient transmises à des services tels qu’iplogger et GAnalytics est courant dans le cadre d’opérations de Pay-per-Install.

Nous avons pu extraire les données du tableau de bord Google Analytics en mode debug :

ContainerClass.Ec = "oki";

ContainerClass.Tid = "UA-71688099-1";

ContainerClass.HomeDom = "freesmartsoft[.]com";

Les options de ligne de commande comportaient aussi des fonctionnalités complémentaires :

Les Payloads

Dans cette section nous passons en revue les différents payloads que nous avons vus déployés dans notre télémétrie. Nous faisons brièvement référence aux malwares que nous avons observés, tout en soulignant les références et techniques qui nous ont aidés dans cette analyse, fournissant des mises à jour là où nous avons vu des changements. Il ne s’agit pas d’une liste exhaustive de tous les payloads que TaskLoader est susceptible de diffuser, car ils peuvent évoluer au fil du temps. Il s’agit plutôt de montrer l’intention générale : habituellement, des activités criminelles visant à obtenir un accès initial à un réseau ou à étendre une infrastructure.

CustomerLoader

Les échantillons observés se basent sur les versions plus récentes de DotRunpeX, un injecteur .NET identifié in the wild par  CheckpointResearch in March, 15 2023 and studied again after it regained popularity by the Sekoia.io analysts in July, 12 2023, who studied the a new loader who also used it and dubbed it CustomerLoader. We saw the same C2 servers (such as 5[.]42[.]94[.]169) that were mentioned in Sekoia’s article. 

Comme ces éléments ont été largement documentés dans d'autres articles et que les différences que nous avons rencontrées sont très mineures, nous ne les analyserons pas davantage.

DotRunpeX

De nombreux payloads que nous avons observés utilisent le fichier DotRunpeX pour injecter le malware dans le processus. Toutefois, lors de l’exécution pour une analyse dynamique, nous avons constaté les mêmes alertes que celles auxquelles nous pouvions nous attendre de la part de cet injecteur, dont des contournements de l’UAC documentés par Checkpoint Research.

Ce fichier .inf a été copié-collé depuis des projets GitHub open source.

Article de blog par Oddvarmoe sur le contournement de l’UAC avec CMSTP.

L’utilisation d’outils tels qu’OldRod Deobfuscator n’a donné aucun résultat, ce qui signifie qu’il s’agit d’une version qui a été modifiée pour contourner les outils d’analyse courants. Ce type d’obfuscation a déjà été observé par Checkpoint Research dans l’article mentionné plus tôt.

Alors que les précédents articles ont documenté DotRunpeX utilisant le pilote procexp, le pilote chargé ici est Zemana.sys. L’exploitation de ce pilote légitime s’avère être une technique pour arrêter des EDR. Cette technique est devenue populaire en mai 2023 lorsqu’un utilisateur se faisant appeler spyboy a fait la promotion d’un outil à 3 000 dollars pour fermer tous les antivirus et EDR. Elle a depuis été reproduite dans des projets open source. La technique BYOVD (Bring Your Own Vulnerable Driver) est utilisée pour fermer des processus protégés et est désormais couramment observée in the wild. Elle est à présent courante chez les adversaires et l’utilisation de ce pilote par l’injecteur DotRunpeX est également conforme à ce que les chercheurs ont constaté.

Post Twitter "EDR killer tools be like"

Le CERT-PL a récemment publié un excellent article sur l’extraction de logiciels malveillants intégrés dans les ressources de l’injecteur, ce qui justifiait des recherches plus poussées sur les payloads. Nous avons donc utilisé leur outil de dumping de clés pour poursuivre notre analyse.

LgoogLoader

Une fois extrait et déchiffré, nous constatons qu’un des payloads tente de passer pour une version légitime de l’outil Windows ShellRunas de Sysinternals. Nous l’avons identifié comme LgoogLoader. Puisque nous n’avons vu que peu d’analyses techniques de ce malware, nous avons décidé que c’était là l’occasion d’obtenir plus d’informations sur son fonctionnement interne.

Le binaire commence par charger quelques chaînes sur la pile puis les déchiffre avec de simples opérations XOR. Celles-ci correspondent à des noms de fonctions qui seront probablement utilisées pour résoudre leurs adresses.

Au vu de ces chaînes, nous pouvons supposer qu’elles seront utilisées pour résoudre dynamiquement l’adresse de ces fonctions. La même opération est répétée plusieurs fois avec des chaînes différentes.

Le déchiffrement de « kernel32.dll », « GetModuleHandle », « VirtualAlloc » et « GetProcAddress » indique généralement que cet échantillon résoudra l’adresse de certaines fonctions et allouera de la mémoire pour se déchiffrer et exécuter la charge malveillante sans toucher au disque. En général, il s’agit du comportement de ce que l’on appelle des malwares « packés ».

Avec ces informations, nous avons décidé de trouver quels imports ce binaire utilisait avec le framework Miasm. Ce framework nous permet de créer des scripts Python qui émulent l’exécution de code avec son propre JIT. Aussi, nous pouvons intercepter certains appels WinAPI pour inspecter et modifier leur comportement, ce qui nous permet de contourner les techniques anti-debug sans avoir à les patcher manuellement. Autre avantage : si le script est bien écrit, il peut être utilisé pour décompresser de futurs échantillons similaires. Bien que dans ce cas, comme nous le verrons ensuite, un script de debug sera plus adapté.

Nous avons aussi été confrontés à des techniques anti-debug, telles que vérifier qu’un Display est présent ou ouvrir des Raw Devices comme le MBR, afin de vérifier leurs noms.

Il serait assez fastidieux de patcher manuellement chaque vérification, aussi nous avons préparé un script x64dbg pour automatiser notre processus de debugging.

Cela échouera généralement à une étape ou à une autre, selon l’échantillon. Au lieu d’essayer de patcher le flux de contrôle de la fonction pour ignorer les vérifications du paramètre EDID, nous avons décidé qu’il était plus simple d’ajouter à notre machine virtuelle la clé de registre suivante :

HKEY_LOCAL_MACHINESYSTEMControlSet001EnumDISPLAYDefault_Monitor<monitor>Device ParametersEDID.

Une des techniques anti-debug utilisées par LgoogLoader consiste à tenter d’ouvrir son propre fichier en accès exclusif. Lorsqu’un processus de debug est lancé, un handle du fichier est stocké lorsque l’évènement CREATE_PROCESS_DEBUG_EVENT se produit. Si ce handle n’est pas fermé, le fichier ne peut pas être ouvert avec accès exclusif. Il s’agit d’un problème connu avec x64dbg, mais il n’est pas présent dans d’autres debuggers tels que OllyDbg, ce qui le rend peu fiable.

Après ces vérifications anti-debug et anti-VM, le malware s’injecte dans un autre processus à l’aide de la technique d’injection RunPE. Nous n’entrerons pas ici dans les détails de son fonctionnement, mais il consiste à créer un nouveau processus en mode suspendu, et à utiliser VirtualAllocEx et WriteProcessMemory pour écrire son payload dans ce processus fils. Il utilise aussi l’appel SetThreadContext, puis l’appel ResumeThread pour modifier le flux d’exécution du thread principal du processus fils.

Nous pouvons ensuite nous concentrer sur le nouveau processus à l’aide du debugger et reprendre le thread pour voir le flux d’exécution du payload. Nous commençons alors à voir que le processus tente de télécharger sa configuration chiffrée contenant un payload. Néanmoins, le domaine observé dans nos infections était déjà inactif lorsque nous l’avons analysé.

Voici le script `x32dbg` que nous avons utilisé pour automatiser l’analyse jusqu’au moment de l’injection. Il n’est pas fait pour être utilisé tel quel et fonctionner avec tous les échantillons. Toutefois, il donne une idée de la manière de procéder pour écrire des scripts analysant de tels binaires.

bc ; Clear breakpoints
bphwc

bp CreateFileW
run
rtr ; run to return
step
bpd CreateFileW

; Find first Hardware MBR name check

zzz 100

find eip,"8D85C8F7FFFF68????????50"
log "found {0}", $result
bp $result

run

; Patch name
memset ebp-838, A, 32

; Find second hardware Display device name check
find eip,"8D8540FDFFFF68????????50"
log "found {0}", $result
bp $result  

run

; Patch name
memset ebp-2C0, A, 64

; AntiDebug - Opening itself and trying to set info
bpe CreateFileW

run
run

; Patch CreateFile stack to succeed
mov [esp+8], 00080000
mov [esp+C], 00000007
rtr
step

; Patch set file information handle, this isn't important
bp SetFileInformationByHandle
run
rtr
mov eax, 1
step

; Patch second CreateFile
run
mov [esp+8], 00080000
mov [esp+C], 00000007
rtr
step
run

; Patch second SetFileInfo
rtr
mov eax, 1
step

; disable these breakpoints and move forward
bpd CreateFileW
bpd SetFileInformationByHandle

; Another round of GetProcAddress

bp GetProcessHeap
run
rtr
step

bpd GetProcessHeap
bp CreateProcessW
run
rtr
step

; Here it should resume the thread which it hijacked in the new process
bp SetThreadContext
run

; Continue by attaching to the new process with a debugger and resuming the thread.
; Or 
; Look at [[esp+4]+0xb8] (It should contain the _CONTEXT structure from the SetThreadContext call), this gives us the EIP.
; You can dump the executable with tools such as pd64.exe and adjust its context in the debugger as you wish.

Fabookie

Fabookie est un malware qui cible les publicités Facebook. Dans notre cas, les échantillons tentent de se déguiser en tant que dxdiag.exe, un outil DirectX légitime.

Fabookie vole les cookies de session Facebook des navigateurs Web et utilise les requêtes de l’API Facebook Graph pour collecter plus de détails sur le profil d’un utilisateur, les méthodes de paiement connectées, le solde du compte, ses amis, etc. Ces informations d’identification détournées peuvent ensuite être utilisées pour lancer des publicités en utilisant le compte de la victime. L’exemple suivant contacte ses serveurs C&C et télécharge une image qui contient le payload Fabookie final.

Nous avons ajouté les domaines et les hashs dans notre liste d’IoC, mais nous ne nous pencherons pas davantage sur ce malware, car il est en effet déjà connu.

SmokeLoader

SmokeLoader est un outil modulaire permettant de télécharger des malwares. Il a été observé pour la première fois en 2011. Il utilise de l’obfuscation de code, une résolution des fonctions d’API et une détection de sandbox à des fins d’évasion. Après exécution, il établit sa persistance et contacte un serveur C&C pour télécharger des payloads supplémentaires, dont des chevaux de Troie bancaires et des ransomwares. Les serveurs C&C que nous avons vus étaient déjà inactifs au moment où nous les avons examinés. SmokeLoader utilise également des techniques d’injection de processus pour être furtif. Au fil des ans, il a subi diverses mises à jour et révisions, ce qui en fait une menace sophistiquée en constante évolution.

Le fonctionnement interne de ce loader mérite un article dédié. Cependant, il existe déjà de la littérature datant de quelques années décrivant la majorité de ses fonctionnalités.

Conclusion

Après une analyse approfondie des données et patterns dans notre télémétrie, il est clair que les infections que nous avons constatées s’intègrent dans une campagne de PPI coordonnée. L’utilisation de vecteurs courants d’infection initiale et le fait que les serveurs C&C soient encore actifs montrent que l’opération est en cours, exploitant des méthodes de compromission simples, mais éprouvées et efficaces.

Ce qui est préoccupant, c’est la longue histoire et l’adaptabilité de cette infrastructure. Le fait que certains aspects remontent à 2016 démontre à la fois sa résilience et son cycle de développement continu, y compris sa capacité à diffuser de nouvelles formes de malwares, comme CustomerLoader.

Nous avons présenté quelques techniques d’analyse qui peuvent être utilisées pour étudier cette menace plus en profondeur. Les entreprises doivent mettre à jour leurs listes d’IoC et mettre en œuvre des mesures de sécurité strictes. Nous continuerons de surveiller de près cette menace et de fournir des mises à jour quand de plus amples informations seront disponibles.

IoC

Bien qu’une liste d’IoC soit fournie, elle devrait être utilisée davantage comme une référence pour d’autres chercheurs et pour la communauté de la cybersécurité au sens large, plutôt que comme une méthode de détection infaillible. L’EDR d’HarfangLab utilise des règles Sigma et Yara pour bloquer les menaces décrites dans cet article.

Fabookie Stealer

072cdef00c51d1c76eaa74cfc008890cd95288a745796963b441236ada7c1f73 

07d7f33376901a832dbdb441e57d72390d28225cd5fe5042f9048e5d55f40493

155dd3b4d2665fc6486167b4f8ee758f5a848039216c76614ebf3167990e9ec6

2c389fe6cbdf4948992278c96a3341f7d05659c5fd913d8eccea651961f496fd

us[.]imgjeoigaa[.]com

app[.]nnnaajjjgc[.]com

DotRunpeX (LgoogStealer)

b120d8658812d9d5dd2b0322b3e7aefa5d34ee2acaebdf15a8ef2d73f9743f22

2f4daafe79aa0dc29829991c3983f35cae602c8e6ab1de28f7cfc95e2160a66

109[.]206[.]241[.]33

CustomerLoader (DotRunpeX)

3d85c2571969b2a54f61f766f8b4ec4e167048d9b28b63ef742e7c0114d4f575

4c9b551910643eb2c5a4adaf517f41cf1c5035c1526b11f108accd970e675e31

SmokeLoader

1df80330b824fe5e09ee3b12f1cdab76c223a627b54ccda3188945317c1f90a4

Initial Compromise Websites

crack4windows[.]com

free1app[.]site

free2app[.]site

free3app[.]site

freesmartsoft[.]com

Sitool.exe (TaskLoader Stage 1)

a6d9ebae8cadfd1f6e90cc8ebaf88eeee9dc98e73c10cd9d0c67fef35099e96f

e2dcb80bcf46dbd1d44adb6ee0cd7a39e2c4829632fd94c83bba70c3907c52fb

7bbca270f423c44dbcf5bcbe1db17fbbd9e701619dea1ef9c6086b7ecee8c6bb

video-box[.]org

avkit[.]org

Tempexec Delphi Installer

b278922ccdd484c70503d72ed4f747b77a869b40e7f632d1bef6a2f80011de36

61581f8f1f64f392d7c887f1f6ae2ea0b6638b5deb2a9731094ae64f3d7d43d4

9c81817acd4982632d8c7f1df3898fca1477577738184265d735f49fc5480f07

hiapps[.]site

Inetinfo

37517181539521918488ce48e50196caf3afdfc1a87cec9bc524e8fc065ed81e

hhk[.]ghwiwwhh[.]com

ashoktodmal[.]com

45[.]12[.]253[.]74

85[.]217[.]144[.]228