European Cyber Week – Retrouvez-nous sur le stand 30

SectopRat : Analyse d’un stealer déployé en multistager MSI

Temps de lecture : 16 min

Le format MSI est depuis longtemps détourné comme stager : il supporte nativement des Custom Actions (DLL, PowerShell, JScript) exécutées à l’installation, souvent dans un contexte de privilèges élevés, et sa structure interne complique l’analyse statique. Surtout, il ne déclenche pas les mêmes réflexes de méfiance qu’un exécutable brut , il installe, il exécute, il disparaît dans les logs comme n’importe quel logiciel.

L’échantillon analysé ici exploite cette surface à deux niveaux : un MSI parent qui pose les bases, et un MSI secondaire qui déploie SectopRAT.

Le fichier MSI : un installeur comme les autres ?

Le fichier MSI analysé (0cfcfac10d0a3fa907498667a7b8057d0e95c5f6fd40d0de07452914178f0e71) se présente comme un installeur Windows classique, construit avec Advanced Installer 17.1.2. Ses métadonnées internes indiquent un auteur nommé « Burning Secrets » et un sujet : « EarlyLifeCrisis ». Ce fichier se fait donc passer pour un installateur de jeu pour adulte. Il ne comporte pas de signature numérique. Sa date de création interne, au 11/12/2009, semble manifestement falsifiée : il s’agit de la valeur par défaut d’Advanced Installer.

description du fichier name type value

Le MSI embarque 78 fichiers, dont plusieurs DLL légitimes signées par Caphyon SRL, l’éditeur d’Advanced Installer.

Un MSI fonctionnel comme couverture

Ce qui rend ce MSI efficace comme stager, c’est qu’il se comporte comme un installeur légitime.

Un fichier MSI, construit avec Advanced Installer, est susceptible d’embarquer des DLL signées valides, avec différentes fonctionnalités comme SoftwareDetector.dll pour l’inventaire des logiciels installés ou encore PowerShellScriptLauncher.dll pour l’exécution de scripts PS1 lors de l’installation. Ces composants ne sont pas systématiquement présents, mais leur apparition dans un MSI n’a rien de surprenant : ils font partie du framework de l’outil et correspondent à des usages courants.

De la même façon, un installeur qui télécharge des composants distants et enchaîne des installations secondaires n’est pas, en soi, un signal d’alerte. C’est un pattern répandu dans la distribution logicielle : récupérer des prérequis, déployer des modules complémentaires… etc.

L’attaquant tire parti de cette banalité. Les comportements malveillants, téléchargement des payloads, déchiffrement, persistance, sont enveloppés dans un packaging qui correspond à ce qu’on peut raisonnablement attendre d’une installation logicielle.

La chaîne d’infection : deux voies, deux objectifs

Le MSI s’appuie sur un script Powershell identifié sur notre plateforme GLIMPS Malware.

interface glimps malware expert analyse moteur multiscript

Ce script télécharge et met en place deux payloads en parallèle :

MSI parent
├── Voie 1 , Frappe immédiate (fileless)
│   └── Téléchargement d'un assembly .NET chiffré en AES-256-CBC ```new30h.jar```
│       └── Chargement en mémoire → stealer de credentials navigateur
│
└── Voie 2 , Implant persistant
    └── Téléchargement d'un MSI secondaire ```MicrosoftEdgeUpdateTaskMachineCoreC.msi```
        └── Tâche planifiée → rundll32 → XOR decrypt → SectopRAT

extrait du code "microsoftedgeupdatetackmachinecorec msi

Voie n°1 : Le stealer fileless

Le premier payload arrive déguisé en fichier .jar. Il n’a de Java que l’extension : c’est un assembly .NET chiffré en AES-256-CBC, clé et IV hardcodés dans le script PowerShell du MSI.

Paramètre Valeur
Algorithme AES-256-CBC
Clé 2B7E151628AED2A6ABF7158809CF4F3C762E7160F38B4DA16C940A258F4A89C7
IV 000102030405060708090A0B0C0D0E0F

Une fois déchiffré en mémoire et chargé via [Reflection.Assembly]::Load(), il se révèle :

  • WbElevation.BrowserKeyDecryptor (we4ftg.exe). C’est un stealer .NET asynchrone entièrement fileless, il ne touche jamais le disque sous sa forme lisible.

capture d'écran file viewer glimps malware expert

Ses cibles sont les navigateurs. Chrome, Chromium, Firefox : credentials, cookies, données de paiement. Il embarque SharpInjector, un framework d’injection de processus complet, et utilise rstrtmgr.dll (Windows Restart Manager) pour déverrouiller les bases de données navigateur en cours d’utilisation.

L’exfiltration se fait vers dns-providersa2.com, domaine enregistré le 12 mars 2026, soit, cinq jours avant l’analyse. Hébergé derrière Njalla reposant sur un enregistrement orienté anonymat avec un WHOIS masqué; les pays déclarés étants Saint Kitts et Nevis. Le domaine imite un fournisseur DNS légitime. L’URI de callback https://dns-providersa2[.]com/check redirige vers un domaine dom.top1vpn[.]ru dont le certificat généré via Let’s Encrypt semble renouvelé souvent.

certificate

Ce payload est conçu pour une frappe rapide et silencieuse : il s’exécute, collecte, exfiltre, disparaît. On peut imaginer que c’est un fichier de premier effet, au cas ou l’autre charge ne peut être implantée.

Voie n°2 : L’implant persistant

La deuxième voie installe un MSI secondaire téléchargé depuis main45.b-cdn.net, présenté sous le nom MicrosoftEdgeUpdateTaskMachineCoreC.msi qui imite un mécanisme de mise à jour de Microsoft Edge. Les métadonnées internes « MpAsDesc » faisant référence à Microsoft Malware Protection. Au passage, lui aussi a comme « last_saved_date » le 11/12/2009 ce qui i

ndique aussi la valeur par défaut du packager MSI. Ce qui est incohérent avec la date de la mise à jour de ses streams…

extrait code avec mise en surbrillance la date de création et de sauvegarde

Ce MSI dépose deux fichiers dans C:\ProgramData\Microsoft\NetFramework\ :

  • olecli32ba_Win.dll , loader .NET de 10 Ko, compilé le 26 février 2026, se présentant comme « igfxCUIServiceN » (imitation Intel Graphics CUI Service). Une petite erreur de SECOPS qui pointe l’environnement de build : C:\Users\Ardor\AppData\Local\Temp\DllExporter\olecli32.pdb.

  • cmiaisupportSYS.dll , conteneur chiffré de 1,6 Mo, déguisé en DLL PE32. Timestamp COFF falsifié à ~1982. DllMain zeroed. Imports et exports chiffrés. Le fichier est inutilisable par le loader Windows standard , il n’est pas conçu pour être chargé via LoadLibrary. Sa section .debug2 est artificiellement gonflée (technique de zip bomb) pour entraver l’analyse par certains outils statiques mais cette heuristique est identifiée par notre plateforme d’analyse.

La persistance est assurée par un script PowerShell embarqué dans les tables MSI (!_StringData). Plutôt que de réutiliser le nom « Edge », le malware crée une tâche planifiée qui imite le processus OneDrive légitime, avec un SID Windows valide hardcodé et un suffixe numérique aléatoire pour contourner les détections par nom fixe :

extrait code

La tâche se déclenche à chaque ouverture de session (AtLogOn). Un délai aléatoire de 2 à 3 secondes précède l’exécution immédiate post-installation.

XorExtract : le loader reconstitué

La classe principale du loader s’appelle XorExtract. Son algorithme a été entièrement reconstitué par décompilation manuelle du bytecode IL .NET.

Le loader lit cmiaisupportSYS.dll comme données brutes

extrait données brutes

puis il effectue les opérations suivantes :

1. Lit un entier 32-bit à l’offset 0x5FE → longueur du payload (913 408 bytes)

extrait byte

2. Extrait le blob chiffré à partir de l’offset 0x602

blob chiffré

3. Vérifie le marqueur 0xDEADC0DE après le blob

marqueur 0xdeadc0de après le blob

4. Applique un XOR cyclique avec la clé {0, 1, 2, ..., 31}

application wor cyclique

La vérification confirme le résultat : les premiers octets déchiffrés donnent 4D 5A 90 00..., l’en-tête MZ d’un exécutable Windows. L’assembly résultant est chargé en mémoire via Assembly.Load(). Aucun fichier déchiffré n’est écrit sur le disque.

capture d'écran glimps malware expert file viewer hex

Avant d’exécuter ce déchiffrement, le loader s’impose une routine anti-sandbox (DelayExecutor) : calcul de 100 000 racines carrées pour saturer le CPU, suivi d’un sleep aléatoire de 1 à 3 secondes. Ces deux mécanismes combinés visent à dépasser les timeouts des environnements d’analyse automatisée.

extrait code msi

SectopRAT / ArechClient2 : le payload principal

Le payload déchiffré (fdhfghfghfgh.exe, sha256 2c1630f00a7903d2895e648571a5e302475ef1ca56daa862050ae298c06d0309) est détecté en statique comme SectopRAT, alias ArechClient2, un RAT/infostealer .NET.

extrait glimps malware expert observables virus name

Dans GLIMPS Malware Expert, le Deep Engine nous précise les éléments ayant participé à sa décision de classer ce fichier comme malveillant :

extrait deep engine glimps malware expert analyse sectoprat msi

Afin d’essayer de qualifier cette menace, nous décidons d’effectuer le reverse de ce fichier .NET.

Point d’entrée , boucle principale (wh.a())

extrait code stathread

Capacités stealer

La configuration est pilotée par StealerSettingConfigParce (DataContract JSON, reçu du C2. On notera l’appellation « Parce » et non « Parse », caractéristique d’un SectopRat) :

Module Flag Config Données ciblées
Navigateurs (actif par défaut) Logins, mots de passe, autofill, cookies, cartes bancaires (Chrome, Edge, Firefox, tous profils)
OsCrypt (actif par défaut) Clé DPAPI de Chrome (encrypted_key) pour déchiffrer les credentials
Discord discord: true Tokens d’authentification
Steam steam: true Fichiers de session
Telegram telegram: true Données de session
FTP ftp: true Credentials clients FTP
VPN vpn: true Credentials clients VPN
Fichiers files: true Fichiers par extension (liste grabber)
Fingerprint (actif par défaut) HW, OS, langue, pays, ville, IP publique, timezone, résolution, screenshot

Structure du résultat (ScanResult) envoyé au C2 :

Structure Du Résultat Envoyé Au C2 Image

Capacités RAT

Capacité Indicateurs techniques
Session TCP persistante Socket, TcpClient, IPEndPoint, BeginSend, EndSend, SocketAsyncEventArgs
Capture d’écran temps réel BitmapData, Screen, Rectangle, Graphics
Keylogging keybd_event (Win32 API)
Clipboard monitoring/hijacking OpenClipboard, CloseClipboard, SetClip, GetClipboard
Exécution de processus ProcessStartInfo, Process.Start()
Téléchargement de payload DownloadData (WebClient)
Upload de données HttpClient, MultipartFormDataContent, SendAsync
Compression GZipStream, ZipFile
Sérialisation DataContractSerializer, JavaScriptSerializer
Reconnaissance réseau IPGlobalProperties, GetIPGlobalProperties

Toutes les chaînes sont déchiffrées à l’exécution par Module.c() (ConfuserEx). L’ensemble des IoCs réseau a néanmoins été extrait par déchiffrement statique , voir section dédiée.

Extraction des adresses C2 , Déchiffrement statique ConfuserEx

Les adresses C2 ont été extraites par déchiffrement statique de la fonction <Module>.c(int, int, int) (ConfuserEx string encryption).

Méthode

  1. Décompilation de <Module>.c (overload index 1, token 0x060001F5) via REpythonNET

  2. Reconstruction de l’algorithme : XOR sur ressource embarquée (resource, 282 KB), avec offset et longueur calculés depuis les 3 arguments entiers

  3. Extraction des triplets (A_0, A_1, A_2) par décompilation des 343 callers identifiés

  4. Déchiffrement Python de tous les triplets résolus

Algorithme reconstitué

Voici un algorithme permettant de déchiffrer les éléments chiffrés dans ce SectopRat

algorithme reconstitué

Ce que cette analyse nous révèle est que cette instance présente deux caractéristiques qui méritent d’être soulignées:

  • hidden desktop. le sample ouvre un bureau virtuel invisible (CreateDesktop + SetThreadDesktop) pour interagir avec les navigateurs sans visibilité pour l’utilisateur. C’est la technique signature de cette famille SectopRAT: manipuler des sessions navigateur actives en direct, sans déclencher d’alerte visuelle.

  • architecture C2 en trois canaux. Cette instance implémente des mécanismes de résilience de C2 progressifs : un canal primaire TCP et deux mécanismes de repli activés en mode dégradé.

Canal Mécanisme Configuration
1 , Primaire TCP direct → 179.61.145.140:9000 xk.b (IP) + xk.c (port)
2 , Repli BSC Dead-drop resolver via Binance Smart Chain : round-robin sur 12 nœuds RPC publics, eth_call() sur le contrat 0x67b4af41467a51e0816752a6b223c7c55ae71957 → nouvelle IP C2 xk.k (adresse contrat, AES-CBC déchiffré avec xk.i)
3 , Repli DNS Résolution DNS de be142f61-9b8a-42e3-9639-9e4a3798d67b.com, activée après 50 échecs cumulés TCP + BSC xk.j (hostname AES-CBC déchiffré avec xk.i)

La clé AES-256 maître xk.i déchiffre les configurations des canaux de repli ; la clé de session xk.g chiffre le trafic TCP. L’opérateur met à jour l’IP C2 dans le storage du contrat BSC , infrastructure décentralisée et non saisissable tant que la blockchain existe.

L’IP du canal primaire a été extraite par déchiffrement statique ConfuserEx (fonction <Module>.c(int, int, int), XOR sur ressource embarquée de 282 Ko). Elle est référencée dans nos bases de CTI comme rat, sectop. L’identifiant de campagne extrait est carina_v2_v2.

L’hypothèse la plus probable étant que cette chaine fait partie d’une infrastructure SectopRAT dont la campagne est carina_v2_v2.

Les features de vol de données identifiées sont les suivantes :

  • Credentials, cookies, cartes bancaires , tous navigateurs Chrome et Gecko

  • 24 extensions de crypto wallets : MetaMask, Coinbase, Binance Chain Wallet, Phantom, Ronin, Atomic Wallet, TronLink, et 17 autres (vol de seeds et clés privées depuis les extensions de navigateur)

  • Steam, Telegram, Discord, FileZilla (FTP), NordVPN, OpenVPN, ProtonVPN

  • Keylogging, capture d’écran, clipboard monitoring , incluant la substitution silencieuse d’adresses crypto dans le presse-papiers

  • Fingerprinting complet de la machine : IP publique, géolocalisation, matériel, logiciels, processus

La configuration est modulaire : chaque module de vol est activable ou désactivable par le C2 via la classe ScanningArgs. SectopRAT n’est donc pas un outil générique et automatique, c’est un implant opéré activement.

Conclusion de l’analyse

Ce MSI est une chaîne à plusieurs étages où chaque maillon apporte un niveau de sophistication propre.

La stratégie d’ensemble est cohérente avec la montée en puisse inéluctable des outils permettant de générer des fichiers et infrastructures malveillantes. Dans notre exemple deux payloads aux objectifs complémentaires sont déployés en parallèle, chacun indépendant de l’autre. Si l’artefact final ne peut s’implanter, le stealer fileless aura déjà collecté et exfiltré. Les deux peuvent coexister sans interférence. L’analyse approfondie de cette menace nous permet de la qualifier comme appartenant à une campagne carina_v2_v2 de SectopRAT.

Observables et indicateurs de compromission

Indicateurs de compromission

Type Valeur Contexte
sha256 0cfcfac10d0a3fa907498667a7b8057d
0e95c5f6fd40d0de07452914178f0e71
MSI stager principal
sha256 f69b998c75ca3c8a84cdd4191efaedfb0
4faea42d8eeb2446c1911709299123a
MSI secondaire (faux Edge Update)
sha256 05014843844ee265afee90e5b5489e9fa
4efc4b17293ed91701376767c8ac5a2
Loader .NET XorExtract (olecli32ca_Win.dll)
sha256 51706f55c0da0a99606124f2c25
d1109223e38796b03c64546177f08d77c194f
Authentihash loader olecli32ca_Win.dll
sha256 614788471ee5474b7bbc09c5bb4e2
0a2be7362ddf1eaa4b2f78e2e5d81a8e53c
cmiaisupportSYS.dll ,
conteneur chiffré (original)
sha256 3ac00474450d3c7c7252864666165
c591bdd9bf1bb28c58d9b60fa812949a18c
cmiaisupportSYS.dll ,
après suppression zip bomb
sha256 ac7a644b79b6e1d1cf33ff39be243e
484b4110a7a749d1179a7c9f22538ba38c
Assembly .NET chiffré (new30h.jar)
sha256 5062d43c6c8486b263de5a9c6da60
e4ff2e4a184f85d655d5d5f7553842f643e
Stealer WbElevation.BrowserKeyDecryptor (we4ftg.exe)
sha256 6e0146fae6444b3382ba3b12627d0a
00856b11261e91590ef0f1fcda9ebda595
PE auto-extrait CAPE , stealer (we4ftg.exe)
sha256 2c1630f00a7903d2895e648571a
5e302475ef1ca56daa862050ae298c06d0309
SectopRAT / ArechClient2 (fdhfghfghfgh.exe)
sha256 5ead45bc83c4fee8955212a5d8fc
987164b13d149f6752d463381dddc444c5bd
PE auto-extrait CAPE , SectopRAT
ip-dst|port 179.61.145.140:9000 C2 SectopRAT TCP , confirmé MISP event 104436 + OpenCTI (confiance 100 %)
domain dns-providersa2.com C2 stealer fileless (Njalla, créé 2026-03-12)
url https://dns-providersa2.com/check URI de callback C2 stealer
domain main45.b-cdn.net Serveur de staging (BunnyCDN)
url https://main45.b-cdn.net/new26/MicrosoftEdge
UpdateTaskMachineCoreC.msi
URL de téléchargement MSI secondaire
url https://main45.b-cdn.net/new26/new30h.jar URL de téléchargement stealer chiffré
domain be142f61-9b8a-42e3-9639-9e4a3798d67b.com Domaine fallback DNS SectopRAT (canal 3)
blockchain-address 0x67b4af41467a51e0816752a6b223c7c55ae71957 Contrat BSC dead-drop,
stocke l’IP C2 courante (canal 2)
campaign-id carina_v2_v2 Identifiant de campagne SectopRAT
filepath C:\ProgramData\Microsoft\Net
Framework\olecli32ba_Win.dll
Loader SectopRAT (emplacement non standard)
filepath C:\ProgramData\Microsoft\Net
Framework\cmiaisupportSYS.dll
Payload SectopRAT chiffré
filepath \Microsoft\crds.rtt Fichier de persistance secondaire SectopRAT
scheduled-task OneDrive Standalone Update Task
-S-1-5-21-3829038537-938744780-V*
Persistance SectopRAT au logon (SID hardcodé,
suffixe aléatoire)
pdb C:\Users\Ardor\AppData\Local\Temp
\DllExporter\olecli32.pdb
Artefact de compilation ,
username développeur « Ardor »

Observables

Artefacts observés mais non spécifiques à cette menace, à contextualiser avec d’autres signaux.

Type Valeur Contexte
regkey Software\Microsoft\Windows\CurrentVersion\Run Persistance au démarrage (mécanisme générique)
regkey SOFTWARE\Policies\Microsoft\Windows Defender\Exclusions\Processes Exclusion Defender (mécanisme générique)
regkey SOFTWARE\Policies\Microsoft\Windows Defender\Spynet Désactivation SpyNet (mécanisme générique)

Cartographie MITRE ATT&CK

ID Technique Implémentation
T1566 Phishing , Spearphishing Attachment MSI déguisé en mise à jour Edge
T1036 Masquerading Noms imitant Edge, OneDrive, Intel, OLE
T1547.005 Scheduled Task/Job Tâche AtLogOn via PowerShell
T1059.001 PowerShell Script embarqué dans !_StringData MSI
T1218.011 Rundll32 Loader exécuté via rundll32.exe ... ApiNet
T1027 Obfuscated Files or Information Payload XOR-chiffré, strings runtime, noms obfusqués
T1620 Reflective Code Loading Assembly.Load(bytes) , stage 3 fileless
T1497 Virtualization/Sandbox Evasion CPU burn + délais aléatoires
T1555.003 Credentials from Web Browsers Logins, cookies, CB via SQLite Chrome/Firefox
T1528 Steal Application Access Token Tokens Discord
T1056.001 Keylogging keybd_event
T1113 Screen Capture Screenshot via GDI+
T1115 Clipboard Data Monitoring/hijacking presse-papier
T1539 Steal Web Session Cookie Cookies navigateurs
T1041 Exfiltration Over C2 Channel HTTP multipart + socket TCP
T1132 Data Encoding Compression GZip avant exfiltration
T1568 Dynamic Resolution Dead-drop BSC : IP C2 lue depuis le smart contract 0x67b4af41... via eth_call()
T1102 Web Service 12 nœuds RPC BSC publics
(binance.org, defibit.io, ninicoin.io) comme canal de résolution C2

Annexes

Nœuds RPC BSC utilisés comme dead-drop resolvers

Le payload effectue un round-robin sur les 12 nœuds suivants pour interroger le contrat 0x67b4af41467a51e0816752a6b223c7c55ae71957 via eth_call() :

# URL
1 https://bsc-dataseed1.binance.org/
2 https://bsc-dataseed2.binance.org/
3 https://bsc-dataseed3.binance.org/
4 https://bsc-dataseed4.binance.org/
5 https://bsc-dataseed1.defibit.io/
6 https://bsc-dataseed2.defibit.io/
7 https://bsc-dataseed3.defibit.io/
8 https://bsc-dataseed4.defibit.io/
9 https://bsc-dataseed1.ninicoin.io/
10 https://bsc-dataseed2.ninicoin.io/
11 https://bsc-dataseed3.ninicoin.io/
12 https://bsc-dataseed4.ninicoin.io/

Extensions de navigateur ciblées, portefeuilles crypto

24 extensions Chrome/Edge/Firefox ciblées pour l’extraction de seeds phrases et clés privées :

Extension ID Chrome
MetaMask nkbihfbeogaeaoehlefnkodbefgpgknn
Coinbase Wallet hnfanknocfeofbddgcijnmhnfnkdnaad
Binance Chain Wallet fhbohimaelbohpjbbldcngcnapndodjp
Brave Wallet odbfpeeihdkbihmopkbjmoonfanlbfcl
TronLink ibnejdfjmmkpcnlpebklmnkoeoihofec
Yoroi ffnbelfdoeiohenkjibnmadjiehjhajb
Atomic Wallet fhilaheimglignddkjgofkcbgekhenbh
Guarda Wallet hpglfhgfnhbgpjdenjgmdgoeiappafln
Math Wallet afbcbjpbpfadlkmhmclhkeeodmamcflc
Nifty Wallet jbdaocneiiinmjbjlgalhcelgbejmnid
Equal Wallet blnieiiffboillknjnepogjhkgnoapac
Jaxx Liberty cjelfplplebdjjenllpjcblmjkfcffne
BitApp Wallet fihkakfobkmkjojpchpfgcmhfjnmnfpi
iWallet kncchdigobghenbbaddojjnnaogfppfj
Wombat amkmjjmmflddogmhpjloimipbofnfjih
MEW CX nlbmnnijcnlegkjjpcfjclmcfggfefdm
Guild Wallet nanjmdknhkinifnkgdcggcfnhdaammmj
Saturn Wallet nkddgncdjgjfcddamfgcmfnlhccnimig
Ronin Wallet fnjhmkhhmkbjkkabndcnnogagogbneec
Terra Station ailfbnbfobpmeekipheeijimdpnlpgpp
Harmony Wallet fnnegphlobjdpkhecapkijjdkgcjhkib
Coin98 Wallet aeachknmefphepccionboohckonoeemg
TON Crystal cgeeodpfagjceefiefladfphplkenlfk
KardiaChain Wallet pdadjkfkgcafgbceimcpbkalnfnepbnk

Auteurs : Sylvio Hoarau et Caroline Fernandez