
BlockGuardは、プロセスレベルでファイルアクセスをインターセプトし制御するWindows Data Loss Prevention (DLP) エージェントです。実行可能ファイルのパス、暗号学的ハッシュ、Authenticode署名、整合性レベルによって識別される許可されたプロセスのみが保護されたファイルを読み取れるようにします。
BlockGuard は、Windows のデータ損失防止(DLP)エージェントであり、プロセスレベルでファイルアクセスを傍受・制御します。実行可能ファイルパス、暗号ハッシュ、Authenticode 署名、整合性レベルによって識別される承認済みプロセスのみが保護されたファイルを読み取れるようにし、それ以外のすべてのプロセスは NTFS ACL を介して OS カーネルレベルでデフォルト拒否されます。
| 特徴 | 説明 |
|---|---|
| デフォルト拒否 ACL | エージェント起動時に保護ファイルをロックダウン — SYSTEM と Administrators のみアクセス可能 |
| リアルタイム ETW 監視 | Windows イベントトレーシングによるカーネルレベルのファイル I/O イベント取得 |
| 6層のプロセス検証 | 実行可能ファイルパス、SHA-256 ハッシュ、Authenticode 署名、所有者 SID、整合性レベル、親プロセスチェーン |
| DPAPI ファイル暗号化 | 保護ファイルは Windows Data Protection API で保存時に暗号化 |
| 自動期限付き一時アクセス | 承認済みプロセスには時間制限付きの ACL 付与が行われ、自動的に期限切れ |
| 改ざん検出 | 定期的な整合性チェックにより ACL 変更を検出し自動修復 |
| 構造化監査ログ | すべてのアクセス試行の JSON 監査証跡(SIEM 対応) |
| Windows サービス | NT AUTHORITY\SYSTEM で動作するバックグラウンド Windows サービス |
BlockGuard は3層モジュラーアーキテクチャを採用しています。``` ┌─────────────────────────────────────────────────────────────────┐ │ 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 OS | 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"
]
各ルールは、プロセスがアクセスを許可されるために一致する必要がある条件を定義します。null以外のすべてのフィールドが一致する必要があります(AND論理)。
| フィールド | 型 | 説明 |
|---|---|---|
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` | 検証済みプロセスIDがキャッシュされる時間(秒) |
| `HandleTimeoutSeconds` | `60` | 一時的なACL許可の最大期間(秒) |
| `AuditLogPath` | `C:\ProgramData\BlockGuard\Logs\audit.json` | JSON監査ログファイルのパス |
| `EnableDpapiEncryption` | `true` | 保護されたファイルを保存時にDPAPIで暗号化 |
| `DpapiScope` | `LocalMachine` | DPAPIスコープ: `LocalMachine` または `CurrentUser` |
---
## 🏃 エージェントの実行
### オプション A: 開発モード(コンソール)