
BlockGuard는 프로세스 수준에서 파일 액세스를 가로채고 제어하는 Windows 데이터 손실 방지(DLP) 에이전트입니다. 실행 파일 경로, 암호화 해시, Authenticode 서명 및 무결성 수준으로 식별된 승인된 프로세스만 보호된 파일을 읽을 수 있도록 보장합니다.
BlockGuard는 Windows 데이터 손실 방지(DLP) 에이전트로, 프로세스 수준에서 파일 접근을 가로채고 제어합니다. 실행 파일 경로, 암호화 해시, Authenticode 서명, 무결성 수준(integrity level) 으로 식별되는 인가된 프로세스만이 보호된 파일을 읽을 수 있도록 보장합니다. 다른 모든 프로세스는 NTFS ACL을 통해 OS 커널 수준에서 기본적으로 거부됩니다.
| 기능 | 설명 |
|---|---|
| 기본 거부 ACL | 보호된 파일은 에이전트 시작 시 잠깁니다 — SYSTEM 및 관리자만 접근 권한을 유지합니다 |
| 실시간 ETW 모니터링 | Windows용 이벤트 추적(ETW)을 통해 커널 수준 파일 I/O 이벤트 캡처 |
| 6계층 프로세스 검증 | 실행 파일 경로, SHA-256 해시, Authenticode 서명, 소유자 SID, 무결성 수준, 부모 프로세스 체인 |
| DPAPI 파일 암호화 | Windows 데이터 보호 API(DPAPI)를 사용하여 저장 시 보호된 파일 암호화 |
| 임시 접근 자동 해지 | 인가된 프로세스는 자동 만료되는 시간 제한 ACL 권한을 받습니다 |
| 변조 탐지 | 주기적인 무결성 검사로 ACL 변경을 감지하고 자동 복구 |
| 구조화된 감사 로깅 | 모든 접근 시도의 JSON 감사 기록 (SIEM 준비 완료) |
| Windows 서비스 | NT AUTHORITY\SYSTEM 계정으로 백그라운드 Windows 서비스로 실행 |
┌─────────────────────────────────────────────────────────────────┐ │ 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 논리):
| Field | Type | Description |
|---|---|---|
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 }
### 기타 옵션
| Option | Default | Description |
|---|---|---|
| `IdentityCacheTtlSeconds` | `30` | 검증된 프로세스 ID가 캐시에 유지되는 시간(초) |
| `HandleTimeoutSeconds` | `60` | 임시 ACL 허용의 최대 지속 시간(초) |
| `AuditLogPath` | `C:\ProgramData\BlockGuard\Logs\audit.json` | JSON 감사 로그 파일의 경로 |
| `EnableDpapiEncryption` | `true` | DPAPI를 사용하여 저장된 보호 파일 암호화 |
| `DpapiScope` | `LocalMachine` | DPAPI 범위: `LocalMachine` 또는 `CurrentUser` |
---
## 🏃 에이전트 실행
### 옵션 A: 개발 모드 (콘솔)