Skip to content

Process Ghosting

Marquer un fichier de charge utile en suppression différée avant de le mapper dans une section et de créer un processus, de sorte que l'exécutable a disparu du disque au moment où le processus s'exécute — ne laissant aucune image analysable.

Process Ghosting est un proche cousin de Doppelgänging qui évite totalement TxF. L'attaquant crée un fichier, le place immédiatement dans un état de suppression différée (delete-pending), écrit la charge utile malveillante, mappe une section image à partir du handle encore ouvert, puis ferme le handle — ce qui finalise la suppression. Un processus est ensuite créé à partir de la section, de sorte qu'il s'exécute depuis une image dont le fichier d'appui n'existe plus, déjouant l'analyse de l'image sur disque et de nombreux rappels de fichiers des EDR.

Fonctionnement

Définir FileDispositionInformation avec DeleteFile = TRUE planifie la suppression du fichier à la fermeture du dernier handle, mais le fichier reste accessible en écriture et mappable jusque-là. La section image est créée alors que le handle est encore ouvert, de sorte que le chargeur lit la charge utile ; la fermeture du handle supprime le fichier mais laisse l'objet section valide pour NtCreateProcessEx.

text
hFile = CreateFileW(path, ..., DELETE | GENERIC_WRITE/READ, ...)
NtSetInformationFile(hFile, FileDispositionInformation, {DeleteFile=TRUE})
WriteFile(hFile, maliciousPayload, len)
NtCreateSection(&hSection, ..., SEC_IMAGE, hFile)    // section from delete-pending file
CloseHandle(hFile)                                   // file is now deleted from disk
NtCreateProcessEx(&hProc, ..., hSection, ...)         // process from the section
NtCreateThreadEx(&hThread, ..., hProc, entryPoint, ...)

Détection & contournement

  • Statique — Le chargeur importe NtSetInformationFile (utilisé avec FileDispositionInformation/FileDispositionInformationEx) avec NtCreateSection(SEC_IMAGE), NtCreateProcessEx et NtCreateThreadEx. Le drapeau d'accès DELETE sur CreateFile suivi d'une création de section sur le même handle est un schéma de code distinctif rarement vu dans les chargeurs bénins.
  • Dynamique — Surveillez un CreateFile ouvert avec un accès DELETE, un appel SetInformationFile de disposition de suppression, l'écriture de la charge utile, la création de la section image, et un CloseHandle qui supprime le fichier avant que le nouveau processus ne soit entièrement construit. Un minifiltre / rappel du système de fichiers observant une section mappée à partir d'un fichier ensuite immédiatement supprimé est le déclencheur canonique.
  • Forensique mémoire — Le fichier d'image principal du processus en cours d'exécution est supprimé ou inaccessible : interroger le chemin d'image donne un chemin qui n'existe plus sur le disque, ou la section n'a pas de fichier d'appui valide. Moneta et pe-sieve signalent le module principal comme non adossé / désynchronisé du disque ; Volatility montre une image VAD dont l'objet fichier pointe vers un fichier disparu ou en suppression différée.
  • Outils — Rappels de fichiers des minifiltres / EDR, Sysmon/ETW (événements de fichier + processus), Process Hacker, Moneta, pe-sieve et Volatility (chemin d'image vs disque, vadinfo, filescan). Elastic et plusieurs EDR proposent des règles dédiées au ghosting fondées sur la séquence suppression-différée- puis-exécution.
Votes

Commentaires(0)