Process Doppelgänging
Abuser des transactions NTFS pour charger une charge utile dans une section, puis annuler la transaction afin que l'image malveillante ne soit jamais validée sur le disque avant la création d'un processus depuis cette section.
Process Doppelgänging abuse de la fonctionnalité NTFS transactionnelle (TxF) pour exécuter une charge utile depuis un fichier qui n'existe jamais durablement sur le disque. L'attaquant écrit un exécutable malveillant à l'intérieur d'une transaction NTFS, crée une section image à partir du fichier transactionnel, puis annule la transaction — ne laissant aucun fichier validé — et démarre enfin un processus directement à partir de la section mise en cache. Le résultat est un processus en cours d'exécution dont le fichier d'appui est propre ou absent, déjouant les scanners qui font confiance aux octets de l'image sur le disque.
Fonctionnement
La section image est créée à partir du handle du fichier alors que la
transaction est encore ouverte, de sorte que le chargeur voit les octets
malveillants. Après RollbackTransaction, le système de fichiers rejette les
écritures, mais l'objet section en mémoire conserve la charge utile.
NtCreateProcessEx construit un processus autour de cette section, et un PEB/des
paramètres assemblés manuellement plus NtCreateThreadEx démarrent l'exécution.
CreateTransaction()
hFile = CreateFileTransacted(path, ..., hTransaction)
WriteFile(hFile, maliciousPayload, len) // payload only inside the txn
NtCreateSection(&hSection, ..., SEC_IMAGE, hFile) // section from transacted file
RollbackTransaction(hTransaction) // file never commits to disk
NtCreateProcessEx(&hProc, ..., hSection, ...) // process from the section
// build process parameters / PEB, set up stack
NtCreateThreadEx(&hThread, ..., hProc, entryPoint, ...)Détection & contournement
- Statique — Le chargeur importe
CreateTransaction/CreateFileTransactedW(depuisktmw32.dll/kernel32) aux côtés des appels natifsNtCreateSection,NtCreateProcessExetNtCreateThreadExdentdll. Les logiciels légitimes ne combinent quasiment jamais la création de fichier TxF avec des appels natifs de section/processus, donc ce couplage d'imports est en soi un signal de haute fidélité. - Dynamique — Tracez une écriture de fichier transactionnel
(
NtCreateTransaction,CreateFileTransacted) immédiatement suivie d'unNtCreateSection(SEC_IMAGE)sur ce handle, d'unRollbackTransaction, et d'un processus créé viaNtCreateProcessEx(plutôt que leCreateProcesshabituel). Sysmon EID 1 montrera un nouveau processus dont le chemin d'image est suspect ou dont le fichier est manquant ; l'absence d'un fluxCreateProcessInternalWnormal est notable. - Forensique mémoire — L'image principale du processus est adossée à une section/image mais sans fichier correspondant sur le disque (ou les octets sur le disque diffèrent de l'image mappée). Moneta signale l'image en cours d'exécution comme non adossée ou désynchronisée ; pe-sieve rapporte le module principal comme remplacé/désynchronisé du disque. Volatility, en comparant le chemin d'image du VAD au système de fichiers, révèle un fichier d'appui fantôme.
- Outils — Sysmon/ETW (événements de processus + transaction de fichier),
API Monitor, Process Hacker, Moneta, pe-sieve et Volatility (
vadinfo,dlllist, comparaison chemin d'image vs disque).