Fichiers analysés
L'exécutable fait 207 872 octets et s'identifie comme NanoCore Client.exe version 1.2.2.0 ; son SHA-256 correspond à son nom de fichier.
| Fichier | Taille (octets) | SHA-256 | Nature |
|---|---|---|---|
exe_rat.zip | 161 738 | e23f8a0562d63e66fe610dc9cc0572aa51510de6766fea84a62af1247056c3a6 | Archive ZIP chiffrée en AES (mot de passe infected) |
51ef4a78…f6753.exe | 207 872 | 51ef4a7863a921980f5c3f3522449faaf851c5a6c3f1c12e8cf186ce593f6753 | Échantillon principal : PE32 GUI, assembly .NET (CIL pur) |
plugin_19968.dll.bin | 19 968 | 61e9d5c0727665e9ef3f328141397be47c65ed11ab621c644b5bbf1d67138403 | Bibliothèque de base des plugins (NanoCore.ClientPlugin) |
plugin_SurveillanceEx_100352.dll.bin | 100 352 | 01e3b18bd63981decb384f558f0321346c3334bb6e6f97c31c6c95c4ab2fe354 | Plugin « SurveillanceEx » |
uac_task_template.xml | 1 278 | 311a6b79025c4a4f65fc57f5c34fce6b3c51c9b8088f40d247be589d2a9ce817 | Modèle XML de tâche planifiée (contournement d'UAC) |
Autres empreintes de l'échantillon : MD5 292bc05e8da008c1c146069c53782afb, SHA-1 ecc8c355ebc50034a371f1b18dca073cc2b5181e. Autres empreintes de l'archive : MD5 fe534166ebba6601caae7474e282a5ea, SHA-1 babdd5c22dc4c7316e0ea027b933168f040f5856.
Caractéristiques de l'échantillon : 3 sections, 71 types, 464 méthodes, 19 imports P/Invoke, non signé, point d'entrée ClientLoaderForm.Main. MVID 426fff4d-c208-4bdc-b784-e45b84513c2d, GUID d'assembly 6d55dc7f-761f-447b-bef5-4a3b649a2621, date de build lue dans la configuration : 2026-10-08 13:13 UTC.
Méthode
L'analyse est entièrement statique : l'échantillon n'a jamais été exécuté et aucun réseau n'a été contacté.
- Extraction.
unzipne gère pas le chiffrement AES de l'archive et7zétait absent ; l'archive a été ouverte avecpyzipperdans un environnement Python temporaire, puis identifiée avecfileetsha256sum. - Inspection avec REA 6.4.0. Les commandes
inspect-managed-artifact,inspect-managed-members,inspect-managed-native-boundariesetinspect-pe-resourcesont donné l'identité du fichier, 2 252 appels entre méthodes, 19 imports natifs et une ressourceRT_RCDATAd'entropie 8,0. - Ghidra 12.1.4. Import réussi (403 procédures), mais son décompilateur lit le bytecode CIL comme du x86 et produit du pseudo-code inutilisable ; il n'a servi qu'à confirmer la structure.
- Décompilation CIL.
ilspycmd8.2.0.7535 a produit environ 9 900 lignes de C#. - Déchiffrement de la configuration. PBKDF2 (SHA-1, 8 itérations) initialisé avec le GUID d'assembly donne la clé et l'IV d'un AES-128-CBC ; il livre une clé DES de 8 octets, qui déchiffre ensuite les données (Deflate puis sérialiseur maison).
- Décodage des 189 chaînes. La routine d'Eazfuscator a été réécrite en Python à partir du code décompilé, sans exécuter celui de l'échantillon. Deux constantes internes (1607814 et 1611930) sont retrouvées à l'identique et les 189 chaînes donnent du texte lisible.
Configuration extraite
Les serveurs C2 sont pg999asia[.]net et pg999slot2022[.]com, tous deux sur le port 80 ; les valeurs ci-dessous sont lues directement après déchiffrement.
| Paramètre | Valeur |
|---|---|
| C2 primaire | pg999asia[.]net:80 |
| C2 de secours | pg999slot2022[.]com:80 |
| Groupe | VietNamBlackHat |
| Mutex | 79b88cab-4b67-435c-bffd-973c7016a4f3 |
| Version | 1.2.2.0 |
| DNS personnalisés | 8.8.8.8 et 8.8.4.4 |
| Activé | RunOnStartup, RequestElevation, BypassUserAccountControl, ClearZoneIdentifier, PreventSystemSleep, EnableDebugMode, KeyboardLogging |
| Désactivé | SetCriticalProcess, ClearAccessControl, ActivateAwayMode |
| Délais (ms) | connexion 4000, redémarrage 5000, keep-alive 30000, LAN 2500, WAN 8000 |
| Tampon / paquet max (octets) | 65 535 / 10 485 760 |
La configuration embarque aussi deux assemblies .NET (les plugins) et un modèle XML de tâche planifiée exécutée avec les privilèges maximaux.
Comportement
Le client s'installe discrètement, s'élève, persiste, puis attend les ordres de l'opérateur ; les plugins sont chargés en mémoire.
- Lancement discret : formulaire invisible, réduit et absent de la barre des tâches.
- Élévation et persistance : relance avec
runas, cléSoftware\Microsoft\Windows\CurrentVersion\Run, tâche planifiée créée parschtasks.exe /create /f /tn "{0}" /xml "{1}", lecture deEnableLUApour juger l'état d'UAC. - Évasion : suppression du flux
:Zone.Identifier(marque de provenance Internet). - Identifiant victime :
MachineGuidlu dansHKLM\SOFTWARE\Microsoft\Cryptography. - Protocole C2 : TCP asynchrone, keep-alive, paquets chiffrés ; commandes de base, de transfert de fichiers par blocs avec hachage, et de gestion des plugins.
- Fichiers locaux :
settings.bin,settings.bak,storage.dat,catalog.dat,run.dat,task.dat,client.loget des*.datpour les plugins en cache. - Fausse boîte d'installation : les réglages
ShowInstallationDialog,InstallationDialogTitleetInstallationDialogMessageexistent mais ne sont pas renseignés dans cette configuration.
Plugin SurveillanceEx
Ses commandes et ses imports natifs montrent un module de surveillance complet ; le fonctionnement détaillé est déduit des noms et des API, pas retracé de bout en bout.
- Keylogger : entrée brute, titre de fenêtre, presse-papiers.
- Journaux : touches, applications et DNS (lecture du cache DNS Windows).
- Mots de passe : commandes pour outils d'envoi, clients de messagerie et navigateurs.
- Injection de processus :
CreateProcess,NtUnmapViewOfSection,WriteProcessMemory,SetThreadContext,ResumeThread— probablement pour lancer des outils de récupération de mots de passe dans un processus légitime (inférence).
Indicateurs de compromission
Les domaines sont écrits sous forme défangée ([.]) pour éviter tout clic accidentel.
| Type | Valeur |
|---|---|
| SHA-256 de l'échantillon | 51ef4a7863a921980f5c3f3522449faaf851c5a6c3f1c12e8cf186ce593f6753 |
| SHA-256 du plugin de base | 61e9d5c0727665e9ef3f328141397be47c65ed11ab621c644b5bbf1d67138403 |
| SHA-256 du plugin SurveillanceEx | 01e3b18bd63981decb384f558f0321346c3334bb6e6f97c31c6c95c4ab2fe354 |
| Domaines C2 (port 80) | pg999asia[.]net, pg999slot2022[.]com |
| Mutex | 79b88cab-4b67-435c-bffd-973c7016a4f3 |
| Groupe | VietNamBlackHat |
| GUID d'assembly | 6d55dc7f-761f-447b-bef5-4a3b649a2621 |
| MVID | 426fff4d-c208-4bdc-b784-e45b84513c2d |
| Artefacts sur l'hôte | entrée ...\CurrentVersion\Run, tâche créée par schtasks.exe /create ... /xml, fichiers *.dat et client.log |
Limites et recommandations
La configuration et les chaînes sont fiables car lues après déchiffrement ; le comportement des plugins est déduit et n'a pas été observé.
Limites
- Aucune exécution : le comportement est déduit du code et de la configuration, pas observé.
- Aucune recherche externe : les hachages et domaines n'ont pas été soumis à des services de renseignement sur les menaces, et les domaines n'ont pas été résolus. L'attribution « NanoCore » repose sur le nom d'assembly, la structure des classes et les API.
- Le plugin SurveillanceEx n'a pas été analysé méthode par méthode.
- Le GUID
522D4B77-C8AA-4E06-9D54-CF406F661572, présent dans les chaînes décodées, a un rôle non déterminé. - Le déroulement exact du contournement d'UAC n'a pas été retracé.
Recommandations
- Bloquer les deux domaines C2 au niveau DNS et proxy, et les rechercher dans les journaux.
- Chercher le mutex, les tâches planifiées créées avec
/xml, les entréesRunrécentes et les fichiers*.datouclient.logdans les profils utilisateurs. - Ajouter les trois hachages aux listes de blocage de l'EDR.
- En cas d'infection avérée, considérer comme compromis les mots de passe saisis ou enregistrés et le contenu du presse-papiers.
- Compléter par une analyse dynamique en laboratoire isolé et une analyse complète du plugin SurveillanceEx.