AlloySecureGroup/PhantomFS
GitHub: AlloySecureGroup/PhantomFS
PhantomFS 利用 Windows ProjFS 投射虚拟诱饵文件,在攻击者或内部威胁访问时即时触发事件日志与桌面告警,实现对横向移动和未授权访问的高置信度检测。
Stars: 19 | Forks: 2
虚假文件,真实安全。
适用于 Windows 的虚拟蜜罐文件系统——将攻击者引诱至看似真实的目录中,然后当场将其抓获。
## 什么是 PhantomFS?
PhantomFS 使用 **Windows Projected File System (ProjFS)** 来呈现一个充满逼真诱饵文件的虚拟目录——财务报告、SSH 密钥、API 凭证、HR 电子表格、保密协议 (NDA) ——这些文件仅存在于内存中。在攻击者(或内部威胁)打开其中一个文件之前,不会有任何数据被写入磁盘。
当文件被触碰的那一刻,PhantomFS 将会:
- 写入一条 **Windows Event Log** 条目(Application 日志,来源为 `PhantomFS`)
- 向活动的桌面会话发送 **Toast 通知**
- 记录确切的文件名、时间戳和进程上下文
- 当通过网络共享访问时——捕获 **SMB 用户名和源地址**
由于合法用户没有理由打开他们没有存放在那里的文件,因此每一次警报都具有高置信度。无需调整规则,无需 ML,无云依赖——仅需一个原生 Windows 驱动程序和一个独立的可执行文件。
## 功能特性
| 特性 | 详情 |
|---|---|
| **零痕迹诱饵** | 按需投射文件——除非攻击者读取文件,否则不会向磁盘写入任何内容 |
| **Windows Event Log** | 事件 ID 1001(文件读取)、1002(创建占位符)、1003(启动)、1004(停止) |
| **Toast 警报** | 通过 Windows PowerShell 发送即时的桌面通知——甚至可以通过 RDP 生效 |
| **远程会话记录** | 当 PID 4 触发访问时,通过 `NetSessionEnum` 捕获 SMB 用户名和源地址 |
| **自动清理** | 经过可配置的延迟后删除具象化的合成文件;在下一次访问时恢复为虚拟状态 |
| **可配置模板** | PDF、XLSX、DOCX、JSON、CSV、PEM、纯文本——全部由配置中的 XML 模板提供 |
| **单文件冷却** | 可配置的节流(默认 15 秒),防止工具读取多个数据块时引发警报洪流 |
| **合成文件列表** | 可直接嵌入的 XML 列表,包含逼真的文件名和真实的字节大小 |
| **单一可执行文件** | `PhantomFS.exe` + `PhantomFS.exe.config`——无需安装程序 |
## 系统要求
- Windows 10 版本 1809(内部版本 17763)或更高版本——推荐使用 Windows 11
- .NET Framework 4.8
- 启用 **Windows Projected File System** 可选功能(`Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart`)
- 需要管理员权限才能启动虚拟根目录
## 快速开始
### 简单命令(推荐)
1. 从 [Releases](https://github.com/AlloySecureGroup/PhantomFS/releases) 下载 `PhantomFS-v1.1.0-x64.zip` 并解压
2. 以管理员身份运行——启用 ProjFS,`Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart`
3. 执行 `.\PhantomFS.exe --virtroot C:\PhantomFS\Virtual\Documents --syntheticonly`
4. 在资源管理器中浏览至 `C:\PhantomFS\Virtual\Documents`——你将会看到诱饵文件
5. 打开其中一个——观察 Toast 弹出,并检查 **Event Viewer → Windows Logs → Application**
## 配置说明
所有设置都位于 `PhantomFS.exe.config` 中。**所有键均为可选**——省略某个键将使用表中所示的默认值。
### `
` 节
```
true
true
true
true
15
false
true
true
300
true
```
| 键 | 默认值 | 起始版本 | 描述 |
|---|---|---|---|
| `enableEventLog` | `true` | 1.0.0 | 写入 Windows Application 事件日志 |
| `enableToast` | `true` | 1.0.0 | 发送桌面 Toast 通知 |
| `alertOnOpen` | `true` | 1.0.0 | 在首次创建占位符时发出警报(目录浏览) |
| `alertOnRead` | `true` | 1.0.0 | 在实际读取文件数据时发出警报 |
| `toastCooldownSeconds` | `15` | 1.0.0 | 相同文件路径的 Toast 之间的最短间隔秒数 |
| `verbose` | `false` | 1.0.0 | 用于诊断的额外控制台输出 |
| `virtRoot` | _(参数 1)_ | 1.0.0 | 从配置中覆盖虚拟根路径,而不是使用命令行 |
| `sourceRoot` | _(空)_ | 1.0.0 | 可选的真实后端目录——在纯合成模式下留空 |
| `syntheticOnly` | `true` | 1.0.0 | 仅提供 `` 中列出的文件 |
| `autoCleanupEnabled` | `true` | **1.1.0** | 在延迟后删除具象化的合成文件并恢复为虚拟状态 |
| `autoCleanupDelaySeconds` | `300` | **1.1.0** | 在具象化之后、文件被删除前的秒数(清理计时器每 30 秒运行一次) |
| `resolveRemoteIPs` | `true` | **1.1.0** | 通过 DNS 将 SMB 客户端主机名解析为 IP 地址;如果查找延迟无法接受,则设为 `false` |
### 远程会话记录
当通过 SMB 共享访问文件时,PhantomFS 会检测到调用者为 PID 4(Windows System 进程 / 内核 SMB 驱动程序),并自动调用 `NetSessionEnum` 来识别远程用户。Event Log 条目和 Toast 通知将包含:
```
PhantomFS — Honeypot File Content Read
File : Documents\Q4_Financial_Report_2024.pdf
Process : System (PID 4)
Remote : CORP\jsmith @ DESKTOP-A1B2C3D [192.168.1.45]
```
**远程记录的要求:**
- Server 服务必须正在运行(只要共享处于活动状态,它就会自动启动)
- PhantomFS 必须运行在托管该共享的计算机上
- `resolveRemoteIPs` 要求客户端计算机可以通过 DNS 解析
### 自动清理行为
在合成文件被打开并具象化(内容写入磁盘)后,后台计时器每 30 秒检查一次,并删除其具象化时间超过 `autoCleanupDelaySeconds` 的文件。删除后的文件将恢复为虚拟的 ProjFS 占位符——下一次访问会重新触发 ProjFS 回调,就好像该文件从未被打开过一样。
如果文件在清理计时器触发时仍处于打开状态,将被无误跳过,并在下一个 30 秒周期重试。
### 添加诱饵文件
在配置中的 `` 下添加条目:
```
\Documents,true,0,1744586986
\Documents\Q4_Financial_Report_2024.pdf,false,8192,1744586986
\Documents\Employee_Salaries_2024.xlsx,false,4096,1743942586
\IT\Keys,true,0,1744586986
\IT\Keys\deploy_key.pem,false,3247,1742354986
```
### 添加内容模板
```
```
## Event Log 参考
打开 **Event Viewer → Windows Logs → Application** 并按来源 `PhantomFS` 进行筛选。
| 事件 ID | 级别 | 含义 |
|---|---|---|
| 1001 | 警告 | 读取了诱饵文件的数据(适用时包含远程用户/IP) |
| 1002 | 警告 | 创建了诱饵文件占位符(文件被浏览/执行 stat) |
| 1003 | 信息 | PhantomFS 已启动——记录了虚拟根路径和设置 |
| 1004 | 信息 | PhantomFS 已正常停止 |
## CI/CD — GitHub Actions
PhantomFS 在 `.github/workflows/build.yml` 中提供了一个工作流,可并行编译 **x64** 和 **ARM64** 版本,并在每次发布版本标签时发布 GitHub Release。
## 从源码构建
```
# 需要 .NET Framework 4.8 SDK 或 Visual Studio Build Tools
csc.exe /platform:x64 /r:System.Xml.dll /out:PhantomFS.exe src\PhantomFS.cs
```
`csc.exe` 通常位于:
```
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe
```
## 部署建议
- **工作站陷阱**——在登录时作为计划任务运行;任何发往 `\\hostname\PhantomFS\Virtual` 的横向移动都会触发即时警报,并附带攻击者的用户名和源 IP
- **文件服务器蜜罐**——在真实的共享旁放置一个指向虚拟根目录的 `\Finance` 共享;远程会话记录可以准确识别是哪个账户浏览了诱饵
- **开发者机器**——在 `~\Documents` 中显示虚假的 AWS 密钥和 SSH 密钥;内部或供应链攻击会在数据外泄之前触发警报
- **物理隔离网段**——设置 `resolveRemoteIPs=false` 以在外部查找被阻止的环境中跳过 DNS;仍然可以捕获 NetBIOS 计算机名
## 许可证
```
MIT License
Copyright (c) 2026 Alloy Secure
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
## 免责声明——可接受的使用
提供 PhantomFS **仅供合法的防御性安全用途**——包括入侵检测、威胁研究,以及在您拥有或获得明确书面授权监控的系统上进行授权的渗透测试。
**您需全权负责确保对 PhantomFS 的使用符合所有适用的地方、国家及国际法律**,包括但不限于计算机欺诈、窃听、隐私和就业相关的法律。未经适当授权在系统或网络上部署 PhantomFS 可能是非法的。
PhantomFS 的作者和贡献者:
- 不作**任何明示或暗示的保证**,也不对特定用途的适用性负责
- 对因使用或滥用本软件而产生的任何直接、间接、附带或后果性损害**概不负责**
- 对于在任何环境中部署 PhantomFS 而导致的任何数据丢失、系统损坏、法律责任或对第三方的损害**不承担任何责任**
**使用风险自负。** 使用 PhantomFS 即表示您已阅读、理解本免责声明,并同意受其条款的约束。
## 致谢
基于 [Windows Projected File System API](https://docs.microsoft.com/en-us/windows/win32/projfs/projected-file-system) 构建——与支持 WSL2 和 OneDrive Files On-Demand 的技术相同。
灵感来源于我作为 Thinkst 研究员的工作 💚 `https://citation.thinkst.com/talk/94782`标签:AI合规, AMSI绕过, PE 加载器, ProjFS, StruQ, 威胁检测, 蜜罐, 证书利用, 诱饵文件