Ju571nK/sigil
GitHub: Ju571nK/sigil
轻量级 Rust 文件完整性监控代理,专为 AI 编码代理时代设计,实时监测敏感文件变更并向 SIEM 输出哈希锚定的结构化事件。
Stars: 1 | Forks: 0
# Sigil






一个小型 Rust 代理,用于监视 macOS 和 Windows 上的敏感文件,并为您的 SIEM 生成结构化的、哈希锚定的 JSONL 事件。基于 AI 编码代理时代构建:如今至关重要的是 MCP 配置、启动代理、凭证目录以及其他传统 FIM 工具未将其视为关键层级的静默投放。
每个事件都是独立的一行 JSON 对象:
```
{
"schema_version": 1,
"event_id": "019e0cea-42f1-7ef3-9a6a-1721e98ee2ba",
"ts": "2026-05-10T07:14:32.512Z",
"host_id": "a2e1f4c9b8d7",
"agent_version": "0.1.0",
"severity": "warn",
"source": {"kind": "file_system"},
"subject": {"kind": "path", "value": "/Users/alice/.cursor/mcp.json"},
"evidence": {
"kind": "file_change",
"change_kind": "modified",
"before_hash": "blake3:a31f1c7e9d8b…",
"after_hash": "blake3:0d72f8a4c6e8…",
"size_after": 2148,
"evidence_quality": "definitive"
},
"target_id": "team-mcp-allowlist"
}
```
## 为什么选择 Sigil?
- **小巧、诚实、仅限主机。** 纯用户空间。没有内核模块,没有 eBPF,没有回传数据。只有一个二进制文件和一个 YAML 策略文件。
- **哈希锚定事件。** 每次观察都带有 blake3 哈希值(修改前/修改后)和一个 `evidence_quality` 标记,因此 SIEM 可以区分出干净的观察与那些被合并或延迟的观察。
- **版本化的 schema。** `schema_version` 是约定的一部分;重名即视为破坏性变更。
- **AI 感知的默认设置。** 内置策略涵盖了 AI 编码代理在 macOS 和 Windows 上实际触及的路径。
### 它能捕获什么
具体的 AI 时代示例 —— 将这些放入您的策略中,代理将在每次发生更改时发出一行 JSONL:
- AI 编码代理静默地向 `~/.cursor/mcp.json` 或 `~/.config/claude/mcp.json` 添加条目。
- 一个新的 `.plist` 出现在 `~/Library/LaunchAgents/` 中(由工具安装的后台守护程序)。
- 对 `~/.aws/credentials`、`~/.ssh/` 或您的 shell 启动文件(`.zshrc`、`.bashrc`、`.profile`)的修改。
- 您在策略 YAML 中的 `targets:` 下列出的任何路径发生的偏移。
## 架构
Sigil 是一个包含五个 crate 的 Rust 工作区,组织为两个长期运行的进程以及三个共享库。
**进程**
- `sigil-agent` —— 主机守护程序(`sigil` 二进制文件)。拥有 `tokio` 运行时、基于 `notify` 的文件系统监视器、事件管道、CLI 命令以及平台粘合代码。将 JSONL 状态事件写入本地缓冲池。
- `sigil-sender` —— 上传器(`sigil-sender` 二进制文件)。从缓冲池读取 JSONL 批次,通过 HTTPS(rustls)将其传送到 SIEM 端点,然后通过 IPC 将已签名的策略响应交回给代理。
**库**
- `sigil-core` —— 纯领域库(事件、策略、状态、哈希等)。不依赖 OS、`tokio` 或文件系统监视器。供两个进程共同使用。
- `sigil-spool` —— JSONL=IPC 原语(`Producer` / `Consumer` / `Checkpoint` / `Retention`),用于代理 → 发送器的跃点。持久、可崩溃恢复、领域无关。
- `sigil-rules-basic` —— 编译时嵌入的基线规则集(macOS 和 Windows 默认值)。在没有提供操作员策略时的 OSS 后备方案;扩展规则包单独发布。
```
flowchart LR
FS[("Filesystem
policy targets")] SIEM[("Your SIEM
endpoint")] subgraph agent["sigil-agent (bin: sigil)"] direction TB a_pipe["watcher · debouncer
normalizer · hasher
sink_task · state_task"] a_ctrl["supervisor · policy_apply
cli · doctor · show"] end subgraph sender["sigil-sender (bin: sigil-sender)"] direction TB s_pipe["batch_reader · manifest
transport (HTTPS + rustls)"] s_ctrl["control_task · agent_ipc
dead_letter · heartbeat"] end subgraph spool["sigil-spool (JSONL=IPC)"] spoolmods["Producer · Consumer
Checkpoint · Retention"] end subgraph core["sigil-core (pure domain)"] coremods["event · policy · state
host_id · host_meta · hashing
debounce · ratelimit · sink · stats"] end subgraph rules["sigil-rules-basic"] rulesmods["compile-time YAML
(macOS / Windows defaults)"] end FS --> a_pipe a_pipe -- "writes JSONL" --> spool spool -- "reads JSONL" --> s_pipe s_pipe -- "HTTPS" --> SIEM s_ctrl -. "apply_policy IPC" .-> a_ctrl agent -. uses .-> core sender -. uses .-> core agent -. embeds .-> rules ``` ## 状态 - **0.1.x — alpha。** 在 0.2 版本之前,次要版本之间的事件 schema 和 CLI 接口可能会发生破坏性变更。每个事件中的 `schema_version` 可让下游消费者检测到这一点。 - **平台。** 运行时支持 macOS、Windows 和 Linux。Linux 运行时已作为最小基础(阶段 3a)登陆并在 CI 中进行测试;部分改进在 `platform/linux.rs` 中被标记为 `TODO(community)` —— 参见 [CONTRIBUTING.md](CONTRIBUTING.md)。 - **Schema。** 版本 `1`。 ## 路线图 - **阶段 1 — 已发布。** 文件系统监视器、JSONL 接收器、主机元数据、状态数据库、防抖/速率限制、JSONL 保留 GC。 - **阶段 2 — 已发布。** 通过持久缓冲池进行的分进程 IPC、签名策略信封、通过 mTLS 传输 JSONL 的发送器、操作员签名 CLI 以及 OSS 参考服务器。传输规范已于 2026-05-10 锁定。 - **阶段 3a — 已发布。** Linux 运行时(inotify 监视器、通过 `/etc/passwd` 进行的用户枚举、硬件指纹)。最小基础;改进工作开放给社区贡献。 - **阶段 3b/c — 计划中。** 额外的状态信号、可复现构建证明。 ## 设计原则 - **无内核模块,无 eBPF。** 仅使用操作系统提供的文件事件 API。 - **在核心领域 crate 中使用 `forbid(unsafe_code)`。** - **可复现的发布构建。** `lto = "thin"`、`codegen-units = 1`、`strip = "symbols"`、`panic = "unwind"`。 - **仅限主机遥测。** 代理从不自行打开出站连接。将事件发送到任何地方都是一个独立的、显式的组件。 - **事件 schema 是公共契约。** 线路字符串的重命名和字段删除是破坏性变更,并会增加主版本号。 ## 安装 安装 `rust-toolchain.toml` 中列出的 Rust 工具链,然后构建工作区: ``` cargo build --release ``` 代理二进制文件将生成在: ``` target/release/sigil ``` 对于开发构建,请运行: ``` cargo build ``` ## 用法 运行代理: ``` cargo run -p sigil-agent -- run ``` 检查有效配置: ``` cargo run -p sigil-agent -- show config ``` 检查展开的监视路径: ``` cargo run -p sigil-agent -- show paths ``` 在不启动守护程序的情况下运行诊断: ``` cargo run -p sigil-agent -- doctor ``` 打印版本信息: ``` cargo run -p sigil-agent -- version ``` ## 配置 Sigil 使用内置默认值以及可选的 YAML 策略文件。 示例策略: ``` version: 1 host_id_strategy: machine_id overrides: - id: shadow-ai-binaries-macos tier: standard targets: - id: team-mcp-allowlist description: Example MCP allowlist file tier: critical platform: any paths: - "~/.config/example/mcp-allowlist.json" recursive: false follow_symlinks: false ``` 示例策略文件位于 `config/policy.example.yaml`。 您可以从命令行覆盖运行时路径: ``` cargo run -p sigil-agent -- \ --policy config/policy.example.yaml \ --state-db ./state.db \ --events-dir ./events \ run ``` 默认的生产策略位置因平台而异。示例策略可以适配于 Unix 系统上的 `/etc/sigil/policy.yaml` 或 Windows 上的 `%ProgramData%\Sigil\policy.yaml`。 ## 安全 有关漏洞的负责任披露,请参见 [SECURITY.md](SECURITY.md)。 ## 许可证 本项目基于 Apache License 2.0 许可。 在遵守 Apache License 2.0 条款的前提下,您可以将本软件用于个人、内部和商业目的。 有关详细信息,请参见 [LICENSE](LICENSE) 和 [NOTICE](NOTICE)。 ## 免责声明 本软件按“原样”提供,不附带任何形式的保证或担保。 作者不保证其正确性、可用性、可靠性、安全性、兼容性或对任何特定用途的适用性。 作者不对任何直接、间接、偶然、特殊、惩罚性或其他损害负责,包括但不限于因使用本软件而导致的服务中断、数据丢失、安全事件、业务中断、错误结果、兼容性问题或其他问题。 使用本软件的风险由您自行承担。 ## 商业支持与未来产品 商业支持、托管服务、企业功能、付费附加组件、咨询或专业服务可能会在未来单独提供。 一些未来的商业功能、托管组件、企业模块或纯二进制附加组件可能会在单独的商业条款下分发。 开源版本继续在 Apache License 2.0 下提供。
policy targets")] SIEM[("Your SIEM
endpoint")] subgraph agent["sigil-agent (bin: sigil)"] direction TB a_pipe["watcher · debouncer
normalizer · hasher
sink_task · state_task"] a_ctrl["supervisor · policy_apply
cli · doctor · show"] end subgraph sender["sigil-sender (bin: sigil-sender)"] direction TB s_pipe["batch_reader · manifest
transport (HTTPS + rustls)"] s_ctrl["control_task · agent_ipc
dead_letter · heartbeat"] end subgraph spool["sigil-spool (JSONL=IPC)"] spoolmods["Producer · Consumer
Checkpoint · Retention"] end subgraph core["sigil-core (pure domain)"] coremods["event · policy · state
host_id · host_meta · hashing
debounce · ratelimit · sink · stats"] end subgraph rules["sigil-rules-basic"] rulesmods["compile-time YAML
(macOS / Windows defaults)"] end FS --> a_pipe a_pipe -- "writes JSONL" --> spool spool -- "reads JSONL" --> s_pipe s_pipe -- "HTTPS" --> SIEM s_ctrl -. "apply_policy IPC" .-> a_ctrl agent -. uses .-> core sender -. uses .-> core agent -. embeds .-> rules ``` ## 状态 - **0.1.x — alpha。** 在 0.2 版本之前,次要版本之间的事件 schema 和 CLI 接口可能会发生破坏性变更。每个事件中的 `schema_version` 可让下游消费者检测到这一点。 - **平台。** 运行时支持 macOS、Windows 和 Linux。Linux 运行时已作为最小基础(阶段 3a)登陆并在 CI 中进行测试;部分改进在 `platform/linux.rs` 中被标记为 `TODO(community)` —— 参见 [CONTRIBUTING.md](CONTRIBUTING.md)。 - **Schema。** 版本 `1`。 ## 路线图 - **阶段 1 — 已发布。** 文件系统监视器、JSONL 接收器、主机元数据、状态数据库、防抖/速率限制、JSONL 保留 GC。 - **阶段 2 — 已发布。** 通过持久缓冲池进行的分进程 IPC、签名策略信封、通过 mTLS 传输 JSONL 的发送器、操作员签名 CLI 以及 OSS 参考服务器。传输规范已于 2026-05-10 锁定。 - **阶段 3a — 已发布。** Linux 运行时(inotify 监视器、通过 `/etc/passwd` 进行的用户枚举、硬件指纹)。最小基础;改进工作开放给社区贡献。 - **阶段 3b/c — 计划中。** 额外的状态信号、可复现构建证明。 ## 设计原则 - **无内核模块,无 eBPF。** 仅使用操作系统提供的文件事件 API。 - **在核心领域 crate 中使用 `forbid(unsafe_code)`。** - **可复现的发布构建。** `lto = "thin"`、`codegen-units = 1`、`strip = "symbols"`、`panic = "unwind"`。 - **仅限主机遥测。** 代理从不自行打开出站连接。将事件发送到任何地方都是一个独立的、显式的组件。 - **事件 schema 是公共契约。** 线路字符串的重命名和字段删除是破坏性变更,并会增加主版本号。 ## 安装 安装 `rust-toolchain.toml` 中列出的 Rust 工具链,然后构建工作区: ``` cargo build --release ``` 代理二进制文件将生成在: ``` target/release/sigil ``` 对于开发构建,请运行: ``` cargo build ``` ## 用法 运行代理: ``` cargo run -p sigil-agent -- run ``` 检查有效配置: ``` cargo run -p sigil-agent -- show config ``` 检查展开的监视路径: ``` cargo run -p sigil-agent -- show paths ``` 在不启动守护程序的情况下运行诊断: ``` cargo run -p sigil-agent -- doctor ``` 打印版本信息: ``` cargo run -p sigil-agent -- version ``` ## 配置 Sigil 使用内置默认值以及可选的 YAML 策略文件。 示例策略: ``` version: 1 host_id_strategy: machine_id overrides: - id: shadow-ai-binaries-macos tier: standard targets: - id: team-mcp-allowlist description: Example MCP allowlist file tier: critical platform: any paths: - "~/.config/example/mcp-allowlist.json" recursive: false follow_symlinks: false ``` 示例策略文件位于 `config/policy.example.yaml`。 您可以从命令行覆盖运行时路径: ``` cargo run -p sigil-agent -- \ --policy config/policy.example.yaml \ --state-db ./state.db \ --events-dir ./events \ run ``` 默认的生产策略位置因平台而异。示例策略可以适配于 Unix 系统上的 `/etc/sigil/policy.yaml` 或 Windows 上的 `%ProgramData%\Sigil\policy.yaml`。 ## 安全 有关漏洞的负责任披露,请参见 [SECURITY.md](SECURITY.md)。 ## 许可证 本项目基于 Apache License 2.0 许可。 在遵守 Apache License 2.0 条款的前提下,您可以将本软件用于个人、内部和商业目的。 有关详细信息,请参见 [LICENSE](LICENSE) 和 [NOTICE](NOTICE)。 ## 免责声明 本软件按“原样”提供,不附带任何形式的保证或担保。 作者不保证其正确性、可用性、可靠性、安全性、兼容性或对任何特定用途的适用性。 作者不对任何直接、间接、偶然、特殊、惩罚性或其他损害负责,包括但不限于因使用本软件而导致的服务中断、数据丢失、安全事件、业务中断、错误结果、兼容性问题或其他问题。 使用本软件的风险由您自行承担。 ## 商业支持与未来产品 商业支持、托管服务、企业功能、付费附加组件、咨询或专业服务可能会在未来单独提供。 一些未来的商业功能、托管组件、企业模块或纯二进制附加组件可能会在单独的商业条款下分发。 开源版本继续在 Apache License 2.0 下提供。
标签:AI安全, Blake3, Chat Copilot, DNS 解析, EPP, HTTP/HTTPS抓包, JSONL, MCP, meg, Rust, x64dbg, 事件日志, 信息安全, 凭证保护, 可视化界面, 哈希校验, 子域名变形, 安全代理, 安全防护, 态势感知, 敏感文件监控, 数据防篡改, 时序数据库, 构建工具, 端点安全, 编码助手监控, 网络安全, 网络流量审计, 补丁管理, 请求响应过滤, 轻量级代理, 通知系统, 配置监控, 隐私保护