BlockGuard 是一款 Windows 数据丢失防护 (DLP) 代理,可在进程级别拦截并控制文件访问。它确保只有授权进程(通过可执行文件路径、加密哈希、验证码签名和完整性级别识别)才能读取受保护文件。所有其他进程默认通过 NTFS ACL 在操作系统内核级别被拒绝访问。
| 功能特性 | 描述 |
|---|---|
| 默认拒绝 ACL | 代理启动时锁定受保护文件——仅保留 SYSTEM 和管理员访问权限 |
| 实时 ETW 监控 | 通过 Windows 事件跟踪捕获内核级别文件 I/O 事件 |
| 6层进程验证 | 可执行文件路径、SHA-256 哈希、验证码签名、所有者 SID、完整性级别、父进程链 |
| DPAPI 文件加密 | 受保护文件使用 Windows 数据保护 API 进行静态加密 |
| 临时访问自动撤销 | 授权进程获得有时间限制的 ACL 授权,到期自动撤销 |
| 篡改检测 | 定期完整性检查,检测并自动修复 ACL 修改 |
| 结构化审计日志 | 所有访问尝试的 JSON 审计跟踪(可对接 SIEM) |
| Windows 服务 | 以 Windows 后台服务形式运行,身份为 NT AUTHORITY\SYSTEM |
BlockGuard 采用三层模块化架构:``` ┌─────────────────────────────────────────────────────────────────┐ │ BlockGuard.Agent (Windows Service) │ │ Orchestrates all layers │ ├───────────────────┬─────────────────────┬───────────────────────┤ │ Layer 1 │ Layer 2 │ Layer 3 │ │ MONITORING │ POLICY & IDENTITY │ PROTECTION │ │ │ │ │ │ • ETW Kernel │ • Process Identity │ • DPAPI Encryption │ │ File Trace │ Validator (6 │ • Structured Audit │ │ • ACL Enforcer │ checks) │ Logger (JSON) │ │ (deny-by- │ • Policy Evaluator │ │ │ default) │ (AND-logic │ │ │ │ rules) │ │ │ │ • Identity Cache │ │ │ │ (LRU + TTL) │ │ └───────────────────┴─────────────────────┴───────────────────────┘
---
## 🖥️ UI 管理界面
BlockGuard 包含一个 **WPF 桌面应用程序**,用于通过可视界面管理受保护的文件和文件夹 — 无需手动编辑 `appsettings.json`。
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/12349/51a9b7894117382666d869cee59860a33698f666133bd23c6b6cd48b225d942c.png" alt="BlockGuard UI" width="640" />
</p>
### 功能特性
- **仪表板** — 保护状态概览(文件总数、文件夹、加密状态)
- **受保护文件** — 通过文件浏览器对话框添加/删除要保护免受 AI 访问的文件和文件夹
- **活动日志** — 所有配置更改的实时日志
- **设置** — 查看配置文件路径和代理信息
- **代理状态** — 显示 BlockGuard 代理服务是否正在运行的实时指示器
### 如何启动 UI```powershell
# From the project root
dotnet run --project src/BlockGuard.UI
注意: UI 会读取和写入 Agent 项目中的
appsettings.json。保存更改后,请重新启动 BlockGuard Agent 服务以使更改生效。
在运行 BlockGuard 之前,请确保您的 Windows 机器上已安装以下内容:
| 要求 | 最低版本 | 检查命令 |
|---|---|---|
| Windows 操作系统 | Windows 10 / Server 2019 | winver |
| .NET SDK | 9.0 | dotnet --version |
| 管理员权限 | 需要 | 以管理员身份运行终端 |
winget install Microsoft.DotNet.SDK.9
## 🚀 快速入门
### 1. 克隆仓库```powershell
git clone [email protected]:m2l33k/BlockGuard.git
cd BlockGuard
dotnet restore BlockGuard.sln
### 3. 构建解决方案```powershell
dotnet build BlockGuard.sln --configuration Release
你应该看到:``` Build succeeded. 0 Warning(s) 0 Error(s)
### 4. 配置受保护路径和规则
编辑 `src/BlockGuard.Agent/appsettings.json` 以定义 **要保护哪些文件** 以及 **哪些进程是授权的**:```json
{
"BlockGuard": {
"ProtectedPaths": [
"C:\\Secrets\\ai-model-keys",
"C:\\Secrets\\api-credentials.json"
],
"AuthorizedProcesses": [
{
"RuleName": "AI-Model-Inference-Engine",
"ExecutablePath": "C:\\Program Files\\MyAI\\inference.exe",
"MinimumIntegrityLevel": "Medium",
"RequireSignature": false
}
]
}
}
dotnet run --project src/BlockGuard.Agent
---
## ⚙️ 配置
所有配置均位于 `src/BlockGuard.Agent/appsettings.json` 的 `"BlockGuard"` 部分中。
### 受保护的路径
一个需要保护的文件或目录数组。目录会递归保护所有文件。```json
"ProtectedPaths": [
"C:\\Secrets\\ai-model-keys",
"C:\\Secrets\\api-credentials.json",
"D:\\Confidential\\reports"
]
每条规则定义了进程必须满足的条件才能获得访问权限。所有非空字段必须匹配(与逻辑):
| 字段 | 类型 | 描述 |
|---|---|---|
RuleName | string | 此规则的人类可读名称(用于审计日志) |
ExecutablePath | string? | 授权可执行文件的完整路径(不区分大小写) |
ExpectedFileHash | string? | 可执行文件的 SHA-256 哈希(防篡改检测) |
ExpectedSignerSubject | string? | Authenticode 证书主题(例如 "CN=Contoso") |
MinimumIntegrityLevel | string | 最低 Windows 完整性级别:Untrusted、Low、Medium、High、System |
RequireSignature | bool | 如果为 true,则可执行文件必须具有有效的 Authenticode 签名 |
示例:基于路径的规则(适用于 AI 模型进程)```json { "RuleName": "AI-Model-Inference-Engine", "ExecutablePath": "C:\Program Files\MyAI\inference.exe", "ExpectedFileHash": null, "ExpectedSignerSubject": null, "MinimumIntegrityLevel": "Medium", "RequireSignature": false }
**示例:基于签名的规则(适用于任何已签名管理工具)**```json
{
"RuleName": "Signed-Management-Tool",
"ExecutablePath": null,
"ExpectedFileHash": null,
"ExpectedSignerSubject": "CN=Contoso Security",
"MinimumIntegrityLevel": "High",
"RequireSignature": true
}
示例:哈希固定规则(用于最大防篡改保护)```json { "RuleName": "Pinned-Data-Processor", "ExecutablePath": "C:\Tools\processor.exe", "ExpectedFileHash": "a1b2c3d4e5f67890abcdef1234567890abcdef1234567890abcdef1234567890", "ExpectedSignerSubject": null, "MinimumIntegrityLevel": "Medium", "RequireSignature": false }
### 其他选项
| 选项 | 默认值 | 描述 |
|---|---|---|
| `IdentityCacheTtlSeconds` | `30` | 已验证进程标识的缓存持续时间(秒) |
| `HandleTimeoutSeconds` | `60` | 临时 ACL 授权的最大持续时间(秒) |
| `AuditLogPath` | `C:\ProgramData\BlockGuard\Logs\audit.json` | JSON 审计日志文件的路径 |
| `EnableDpapiEncryption` | `true` | 使用 DPAPI 对受保护文件进行静态加密 |
| `DpapiScope` | `LocalMachine` | DPAPI 范围:`LocalMachine` 或 `CurrentUser` |
---
## 🏃 运行代理
### 选项 A:开发模式(控制台)
最适合测试和调试。在 **提升的(管理员)PowerShell** 中运行:```powershell
dotnet run --project src/BlockGuard.Agent --configuration Release
[03:15:22 INF] [BlockGuard.Monitoring.AclEnforcer] Locked down file 'C:\Secrets\api-credentials.json' [03:15:22 INF] [BlockGuard.Protection.DpapiWrapper] Encrypted file 'C:\Secrets\api-credentials.json' [03:15:22 INF] [BlockGuard.Monitoring.EtwFileTraceSession] ETW file trace session started successfully. [03:15:22 INF] [BlockGuard.Agent.BlockGuardService] BlockGuard is now actively protecting 2 path(s).
按 `Ctrl+C` 停止。
### 选项 B:安装为 Windows 服务(生产环境)```powershell
# 1. Publish a self-contained build
dotnet publish src/BlockGuard.Agent -c Release -r win-x64 --self-contained -o C:\BlockGuard
# 2. Create the Windows Service
sc.exe create BlockGuard binPath= "C:\BlockGuard\BlockGuard.Agent.exe" start= auto obj= "NT AUTHORITY\SYSTEM" DisplayName= "BlockGuard Security Agent"