
Servindo payloads apenas para processos permitidos usando o recurso de sistema de arquivos projetado do Windows
Provedor ProjFS. Projeta arquivos onde o conteúdo depende de qual processo os lê. O payload é armazenado criptografado em AES-256-CBC no disco, descriptografado apenas em memória em tempo de execução. Isso não deve contornar nenhum EDR, pois o payload será gravado no disco quando processos permitidos tentarem lê-lo. Todo o resto recebe acesso negado. Isso pode irritar alguns analistas, pois suas ferramentas não o lerão ou simplesmente carregarão um chamariz. Mas você pode facilmente ver que é um ProjFS usando um ponto de reanálise.
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
Resultado: C:\Staging\calc.exe aparece no sistema de arquivos.
cmd.exe ao ler obtém os bytes descriptografados do mimikatzVS2022, abra PhantomFS.sln, compile x64 Release. Requer Windows SDK (cabeçalhos + bibliotecas ProjFS).
Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart
O provedor é executado em integridade média, não é necessário admin (a ativação do recurso ProjFS requer admin).
PhantomFS.exe -keygen
PhantomFS.exe -encrypt <input> -key <64_hex_chars> -out <output.enc>
Formato: [IV aleatório de 16 bytes][Texto cifrado AES-256-CBC com preenchimento 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]
Os callbacks do ProjFS recebem TriggeringProcessImageFileName em cada acesso ao arquivo:
GetFileDataCallback: Verifica o processo em relação às regras, fornece o payload ou bytes do chamarizNotificationCallback PRE_DELETE: Bloqueia a exclusão por processos não permitidosFILE_HANDLE_CLOSED: Chama PrjDeleteFile para forçar a re-hidrataçãoO truque da re-hidratação é necessário porque o ProjFS armazena em cache o conteúdo do arquivo após a primeira leitura. Sem isso, o segundo leitor obteria o que o primeiro leitor recebeu.
PrjStartVirtualizingIO_REPARSE_TAG_PROJFSPrjFlt na altitude 189800 (fltmc.exe)Microsoft-Windows-ProjFSInspiração: