Skip to content

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.

text
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 (depuis ktmw32.dll/kernel32) aux côtés des appels natifs NtCreateSection, NtCreateProcessEx et NtCreateThreadEx de ntdll. 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'un NtCreateSection(SEC_IMAGE) sur ce handle, d'un RollbackTransaction, et d'un processus créé via NtCreateProcessEx (plutôt que le CreateProcess habituel). Sysmon EID 1 montrera un nouveau processus dont le chemin d'image est suspect ou dont le fichier est manquant ; l'absence d'un flux CreateProcessInternalW normal 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).
Votes

Commentaires(0)