ProjFS 提供程序。投影文件,其内容取决于哪个进程读取它们。有效载荷以 AES-256-CBC 加密存储在磁盘上,仅在运行时在内存中解密。这不应该绕过任何 EDR,因为当允许的进程尝试读取时,有效载荷会被写入磁盘。其他所有进程都会被拒绝访问。这可能会惹恼一些分析人员,因为他们的工具无法读取它,或者只是加载一个诱饵。但你可以很容易地通过重解析点看出这是 ProjFS。
1) 生成密钥: PhantomFS.exe -keygen
2) 加密有效载荷: PhantomFS.exe -encrypt mimikatz.exe -key <key> -out mimikatz.enc
3) 提供服务: PhantomFS.exe C:\Staging -file mimikatz.enc -key <key> -decoy C:\Windows\System32\calc.exe
示例:
PhantomFS.exe C:\Staging -file mimikatz.enc -key 7ed5a44412447be587b2ca2e4eacb17d41c869360663ae0fea1d0caca159483c -decoy C:\Windows\System32\calc.exe
结果:文件系统出现 C:\Staging\calc.exe。
cmd.exe 读取时获得解密后的 mimikatz 字节VS2022,打开 PhantomFS.sln,构建 x64 Release。需要 Windows SDK(ProjFS 头文件和库)。
Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart
提供程序以中等完整性运行,无需管理员权限(ProjFS 功能激活确实需要管理员权限)。
PhantomFS.exe -keygen
PhantomFS.exe -encrypt <input> -key <64_hex_chars> -out <output.enc>
格式:[16字节随机IV][带PKCS7填充的AES-256-CBC密文]
PhantomFS.exe <root_dir> -file <payload.enc> -key <hex> -decoy <benign_file>
[-name <virtual_filename>]
[-allow <process_substring>] (可重复,默认:powershell.exe, pwsh.exe, cmd.exe)
[-deny-read <process_substring>] (可重复)
[-quiet]
ProjFS 回调在每次文件访问时接收 TriggeringProcessImageFileName:
GetFileDataCallback:根据规则检查进程,提供有效载荷或诱饵字节NotificationCallback PRE_DELETE:阻止非允许进程删除文件FILE_HANDLE_CLOSED:调用 PrjDeleteFile 强制重新水合重新水合技巧是必要的,因为 ProjFS 在第一次读取后会缓存文件内容。如果没有它,第二个读取者将获得第一个读取者所接收到的内容。
PrjStartVirtualizing API 调用IO_REPARSE_TAG_PROJFS 重解析点PrjFlt 微过滤器(fltmc.exe)Microsoft-Windows-ProjFS ETW 提供程序灵感来源: