
Distribuzione di payload solo a processi autorizzati utilizzando la funzionalità del file system proiettato di Windows.
Provider ProjFS. Proietta file il cui contenuto dipende da quale processo li legge. Il payload è memorizzato crittografato con AES-256-CBC su disco, decrittato solo in memoria durante l'esecuzione. Questo non dovrebbe bypassare nessun EDR poiché il payload viene scritto su disco quando i processi autorizzati tentano di leggerlo. Tutto il resto riceve accesso negato. Questo potrebbe far arrabbiare alcuni analisti poiché i loro strumenti non lo leggeranno o caricheranno semplicemente un decoy. Ma puoi facilmente vedere che si tratta di un ProjFS che utilizza un reparse point.
1) Generate key: PhantomFS.exe -keygen
2) Encrypt payload: PhantomFS.exe -encrypt mimikatz.exe -key <key> -out mimikatz.enc
3) Serve: PhantomFS.exe C:\Staging -file mimikatz.enc -key <key> -decoy C:\Windows\System32\calc.exe
Example:
PhantomFS.exe C:\Staging -file mimikatz.enc -key 7ed5a44412447be587b2ca2e4eacb17d41c869360663ae0fea1d0caca159483c -decoy C:\Windows\System32\calc.exe
Risultato: C:\Staging\calc.exe appare nel filesystem.
cmd.exe leggendolo ottiene byte mimikatz decrittatiVS2022, apri PhantomFS.sln, compila x64 Release. Richiede Windows SDK (header + librerie ProjFS).
Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart
Il provider viene eseguito a integrità media, non è necessario admin (l'attivazione della funzionalità ProjFS richiede admin).
PhantomFS.exe -keygen
PhantomFS.exe -encrypt <input> -key <64_hex_chars> -out <output.enc>
Formato: [16 byte random IV][Testo cifrato AES-256-CBC con padding PKCS7]
PhantomFS.exe <root_dir> -file <payload.enc> -key <hex> -decoy <benign_file>
[-name <virtual_filename>]
[-allow <process_substring>] (repeatable, default: powershell.exe, pwsh.exe, cmd.exe)
[-deny-read <process_substring>] (repeatable)
[-quiet]
Le callback di ProjFS ricevono TriggeringProcessImageFileName ad ogni accesso al file:
GetFileDataCallback: Controlla il processo rispetto alle regole, fornisce il payload o i byte decoyNotificationCallback PRE_DELETE: Blocca i processi non autorizzati dall'eliminazioneFILE_HANDLE_CLOSED: Chiama PrjDeleteFile per forzare la re-idratazioneIl trucco della re-idratazione è necessario perché ProjFS mette in cache il contenuto del file dopo la prima lettura. Senza di esso, il secondo lettore otterrebbe ciò che ha ricevuto il primo lettore.
PrjStartVirtualizing API callIO_REPARSE_TAG_PROJFS reparse pointsPrjFlt all'altitudine 189800 (fltmc.exe)Microsoft-Windows-ProjFSIspirazione: