Zoel-Manchon/phosphor
GitHub: Zoel-Manchon/phosphor
一款 Rust 桌面文件完整性监控器,通过 SHA-256 基准线和 HMAC 签名实现实时防篡改检测。
Stars: 0 | Forks: 0
# ◆ phosphor
一款使用 Rust 编写的桌面端**文件完整性监控器** (FIM) —— 锁定文件夹的 SHA-256 基准线,随后进行实时监控,并在发生任何修改、添加或删除的瞬间即时呈现。采用琥珀色 CRT 界面,设计上具备防篡改特性。

## 功能说明
1. **锁定 (Anchor)** —— 选择一个文件夹;phosphor 会遍历该文件夹,为每个文件计算 SHA-256 值,并将该快照(`.phosphor.json`)保存为可信基准线。
2. **监控 (Watch)** —— 后台线程订阅文件系统事件;一旦文件发生更改,phosphor 会立即重新验证并显示结果 —— 无需轮询。
3. **报告 (Report)** —— 每一处偏差都会被分类并进行颜色编码:**✗ 已修改**,**+ 已添加**,**− 已删除**。当目录树完全匹配时,显示绿色的 **✔ 完整性正常**。
## 架构
```
flowchart TB
subgraph UI["ui/ — presentation (egui, amber-CRT)"]
APP[PhosphorApp
immediate-mode state] THEME[theme] end subgraph CORE["core/ — domain, zero UI deps"] BASE[baseline
scan · hash · persist] INT[integrity
diff → findings] WATCH[watcher
fs events → mpsc] IGN[ignore
gitignore-style globs] SIGN[signing
HMAC-SHA256] REP[report
JSON / CEF export] end OS[(OS FS events
inotify · FSEvents · Win32)] DISK[(.phosphor.json
signed baseline)] SIEM[(SIEM
JSON / CEF)] APP --> BASE & INT & WATCH & IGN & SIGN & REP & THEME BASE <--> DISK SIGN -.signs/verifies.-> DISK WATCH -.subscribes.-> OS OS -.events.-> WATCH REP --> SIEM BASE -.uses.-> IGN ``` **核心部分**是纯且同步的 —— 每个模块(哈希计算、差异比对、忽略规则匹配、HMAC、导出)都在无 UI 的隔离环境中通过了单元测试。**watcher** 隔离了所有的并发逻辑:`notify` 运行一个 OS 线程,并通过 `mpsc` 通道将信号向下推送,由 UI 在每一帧进行排空,从而确保永不阻塞。没有共享内存锁,也没有数据竞争 —— 这一切都在编译阶段得到了保证。 ## 检测与签名流程 ``` sequenceDiagram actor Op as Operator participant UI as PhosphorApp participant W as watcher thread participant OS as filesystem participant C as core participant D as .phosphor.json Op->>UI: set folder + HMAC key Op->>UI: anchor UI->>C: scan (skip ignored) → SHA-256 all files C->>D: write baseline + HMAC-SHA256 tag Op->>UI: watch live UI->>W: start watching Note over OS: attacker edits a file OS-->>W: change event W-->>UI: signal (mpsc) UI->>C: re-scan + diff vs baseline C-->>UI: findings UI-->>Op: ✗ MODIFIED + desktop notification Note over D: attacker can't forge a new baseline:
no HMAC key, no valid signature ``` ## 功能特性 - **锁定 / 验证 / 监控** —— SHA-256 基准线,支持手动或实时检查。 - **重置基准线** —— 将当前状态接受为新的可信快照。 - **忽略模式** —— gitignore 风格的规则(默认会跳过 `target`、`node_modules`、`.git`、`*.log`、`*.tmp`),可在应用内编辑。 - **HMAC 签名的基准线** —— 设置密钥后,`.phosphor.json` 将使用 HMAC-SHA256 进行签名,并在常量时间内完成验证。攻击者如果修改了文件*并且*重写了基准线,在没有密钥的情况下依然无法伪造合法签名。*Quis custodiet ipsos custodes* —— 谁来监视监视者。 - **桌面提醒** —— 在执行监控任务时,一旦检测到更改就会触发原生通知,因此非常适合作为无人值守的后台监控工具。 - **SIEM 导出** —— 将检测结果输出为结构化的 JSON 或 CEF (ArcSight) 格式,以便接入 SOC pipeline。 ## 为什么选用 SHA-256 而不是时间戳? 修改时间会撒谎 —— 它们可以被伪造,可以通过 `cp -p` 保留,也可以被希望让篡改不被察觉的攻击者随意重置。但内容哈希做不到这一点:哪怕只改变一个字节,摘要值也会随之改变。这正是 FIM 的核心前提,也是哈希链审计日志和区块链背后相同的防篡改基础技术。 ## 技术 Rust · eframe/egui (原生 GUI,琥珀色 CRT 主题) · sha2 · hmac · walkdir · notify (跨平台 FS 事件) · notify-rust (桌面提醒) · serde。 跨平台支持:`notify` 在底层映射为 inotify (Linux)、FSEvents (macOS) 和 ReadDirectoryChanges (Windows)。 ## 构建与运行 这是一款原生桌面应用 —— 建议直接在宿主 OS 上运行。关于原生 Windows 构建,请参阅 **BUILD_WINDOWS.md**(推荐:流畅的 GPU 渲染、原生对话框,以及最小化时依然能触发的通知)。 ``` cargo run --release cargo test cargo clippy -- -D warnings ``` ## 路线图 - [ ] 通过口令生成 Argon2 派生密钥(目前直接使用 HMAC 密钥) - [ ] 在标签页中支持监控多个文件夹 - [ ] 支持用于无头运行的定时重新扫描 ## 许可证 MIT © Zoel Manchón
immediate-mode state] THEME[theme] end subgraph CORE["core/ — domain, zero UI deps"] BASE[baseline
scan · hash · persist] INT[integrity
diff → findings] WATCH[watcher
fs events → mpsc] IGN[ignore
gitignore-style globs] SIGN[signing
HMAC-SHA256] REP[report
JSON / CEF export] end OS[(OS FS events
inotify · FSEvents · Win32)] DISK[(.phosphor.json
signed baseline)] SIEM[(SIEM
JSON / CEF)] APP --> BASE & INT & WATCH & IGN & SIGN & REP & THEME BASE <--> DISK SIGN -.signs/verifies.-> DISK WATCH -.subscribes.-> OS OS -.events.-> WATCH REP --> SIEM BASE -.uses.-> IGN ``` **核心部分**是纯且同步的 —— 每个模块(哈希计算、差异比对、忽略规则匹配、HMAC、导出)都在无 UI 的隔离环境中通过了单元测试。**watcher** 隔离了所有的并发逻辑:`notify` 运行一个 OS 线程,并通过 `mpsc` 通道将信号向下推送,由 UI 在每一帧进行排空,从而确保永不阻塞。没有共享内存锁,也没有数据竞争 —— 这一切都在编译阶段得到了保证。 ## 检测与签名流程 ``` sequenceDiagram actor Op as Operator participant UI as PhosphorApp participant W as watcher thread participant OS as filesystem participant C as core participant D as .phosphor.json Op->>UI: set folder + HMAC key Op->>UI: anchor UI->>C: scan (skip ignored) → SHA-256 all files C->>D: write baseline + HMAC-SHA256 tag Op->>UI: watch live UI->>W: start watching Note over OS: attacker edits a file OS-->>W: change event W-->>UI: signal (mpsc) UI->>C: re-scan + diff vs baseline C-->>UI: findings UI-->>Op: ✗ MODIFIED + desktop notification Note over D: attacker can't forge a new baseline:
no HMAC key, no valid signature ``` ## 功能特性 - **锁定 / 验证 / 监控** —— SHA-256 基准线,支持手动或实时检查。 - **重置基准线** —— 将当前状态接受为新的可信快照。 - **忽略模式** —— gitignore 风格的规则(默认会跳过 `target`、`node_modules`、`.git`、`*.log`、`*.tmp`),可在应用内编辑。 - **HMAC 签名的基准线** —— 设置密钥后,`.phosphor.json` 将使用 HMAC-SHA256 进行签名,并在常量时间内完成验证。攻击者如果修改了文件*并且*重写了基准线,在没有密钥的情况下依然无法伪造合法签名。*Quis custodiet ipsos custodes* —— 谁来监视监视者。 - **桌面提醒** —— 在执行监控任务时,一旦检测到更改就会触发原生通知,因此非常适合作为无人值守的后台监控工具。 - **SIEM 导出** —— 将检测结果输出为结构化的 JSON 或 CEF (ArcSight) 格式,以便接入 SOC pipeline。 ## 为什么选用 SHA-256 而不是时间戳? 修改时间会撒谎 —— 它们可以被伪造,可以通过 `cp -p` 保留,也可以被希望让篡改不被察觉的攻击者随意重置。但内容哈希做不到这一点:哪怕只改变一个字节,摘要值也会随之改变。这正是 FIM 的核心前提,也是哈希链审计日志和区块链背后相同的防篡改基础技术。 ## 技术 Rust · eframe/egui (原生 GUI,琥珀色 CRT 主题) · sha2 · hmac · walkdir · notify (跨平台 FS 事件) · notify-rust (桌面提醒) · serde。 跨平台支持:`notify` 在底层映射为 inotify (Linux)、FSEvents (macOS) 和 ReadDirectoryChanges (Windows)。 ## 构建与运行 这是一款原生桌面应用 —— 建议直接在宿主 OS 上运行。关于原生 Windows 构建,请参阅 **BUILD_WINDOWS.md**(推荐:流畅的 GPU 渲染、原生对话框,以及最小化时依然能触发的通知)。 ``` cargo run --release cargo test cargo clippy -- -D warnings ``` ## 路线图 - [ ] 通过口令生成 Argon2 派生密钥(目前直接使用 HMAC 密钥) - [ ] 在标签页中支持监控多个文件夹 - [ ] 支持用于无头运行的定时重新扫描 ## 许可证 MIT © Zoel Manchón
标签:egui, Rust, 可视化界面, 桌面应用, 网络流量审计, 通知系统