Skip to content

Repository files navigation

终端敏感文件识别 Agent(模块一)

1. 项目定位

本项目实现 dlpagent.html 中的模块一:敏感文件识别 Agent

核心流水线:文件抽取 → 固定格式检测(18 种正则)→ 业务语义检测(16+10 组关键词)→ 规则生成(regex/keyword/compound)→ 指纹计算(SHA256 + SimHash)→ 向量化(可选)→ Agent 解释(可选)。


2. 快速开始

环境准备

# 1. 确保 Go 1.21+ 已安装
go version

# 2. 下载 Go 模块依赖
cd d:\0-实训项目
go mod download

# 3. 安装可选工具(按需)
winget install UB-Mannheim.TesseractOCR   # 图片 OCR 文本提取
winget install 7zip.7zip                  # rar/7z 解压 + Outlook .msg 解析

Tesseract 中文 OCR 需额外安装中文语言包,安装后运行 tesseract --list-langs 确认包含 chi_sim

启动服务

# 设置环境变量(LLM 和 Embedding 均为可选)
$env:ARK_CHAT_MODEL="<chat endpoint id>"
$env:ARK_EMBEDDING_MODEL="<embedding endpoint id>"
$env:ARK_API_KEY="<api key>"
$env:ARK_BASE_URL="https://ark.cn-beijing.volces.com/api/v3"
$env:ARK_REGION="cn-beijing"

# 启动
go run ./cmd/dlpagent server --addr :8080

浏览器访问 http://127.0.0.1:8080

服务端工作流(4 步)

步骤 操作 说明
① 生成样本 点击"生成样本" 已提供 data/sample_library/,可直接跳过
② 上传入库 选择样本文件 → 上传入库 自动分析风险等级并写入敏感文件库
③ 查看样本库 点击"查看样本库" 确认入库文件的敏感类型和风险等级
④ 生成规则 点击"生成规则" 输出 data/rules.json,供客户端拉取

客户端工作流(3 步)

步骤 操作 说明
① 同步规则 点击"同步规则" 从服务端拉取最新 rules.json
② 识别/扫描 单文件识别 或 批量扫描目录 对文件提取文本并匹配规则
③ 查看标签 点击"刷新标签" 查看 SQLite 中的敏感文件标记

3. 数据集

样本库 data/sample_library/

等级 文件数 格式 识别通过率
critical 16 txt/csv/json/xml/md/docx/xlsx/pptx/pdf/go/py/java/sql/ini/cfg/conf 100%
high 16 同上 100%
medium 16 同上 100%
low 16 同上 100%

测试集 data/test_set/

目录 文件数 格式 识别通过率
sensitive_critical 25 25 种格式 23/25
sensitive_high 25 25 种格式 24/25
sensitive_medium 25 25 种格式 23/25
sensitive_low 25 25 种格式 24/25
nonsensitive 25 25 种格式 25/25

未通过项:.dat × 5(二进制仅指纹,设计如此)、.png × 2(依赖 Tesseract OCR 精度)。

重新生成数据集

go run ./cmd/dlpagent gen-samples --out data/sample_library   # 样本库
go run ./cmd/dlpagent gen-testset --out data/test_set         # 测试集

⚠️ 重新生成后,PPTX、PDF 需按 data/sample_library/PPTX_PDF内容.md 手动替换;PPT、PPTX、PDF、PNG、7z、RAR、ZIP 需按 data/test_set/手动替换指南.md 手动替换,才能通过全部验证。


4. risk_level 五级判定

等级 触发条件
critical 私钥存在 或 同时命中 ≥3 个数据库连接串 + ≥2 个密码
high 包含凭证(密码/API Key/数据库连接串)
medium 业务关键词 + PII 同时出现,或加权分 ≥ 7
low 有命中但低于 medium 门槛
info 无任何匹配

critical 也可由 LLM 输出,但规则引擎独立产出。上传入库时 LLM 仅填充 explanation,不覆盖 risk_level


5. CLI 命令

# 单文件识别
go run ./cmd/dlpagent identify --file data/sample_library/critical_纯文本文件_01.txt

# 生成规则集
go run ./cmd/dlpagent gen-rules --input data/sample_library/critical_纯文本文件_01.txt,data/sample_library/medium_Excel表格_07.xlsx --out data/rules.json

# 目录扫描
go run ./cmd/dlpagent scan --root data/test_set --rules data/rules.json --db data/labels.db

# 生成样本库
go run ./cmd/dlpagent gen-samples --out data/sample_library

# 生成测试集
go run ./cmd/dlpagent gen-testset --out data/test_set

# 启动 HTTP 服务
go run ./cmd/dlpagent server --addr :8080

6. HTTP API

接口 方法 说明
/health GET 健康检查
/api/synth POST 生成合成样本
/api/samples/upload POST 上传样本入库
/api/identify POST 单文件识别
/api/rules/generate POST 生成规则集
/api/scan POST 目录扫描
/api/labels GET 查看标签库
/api/client/rules GET 客户端拉取规则
/api/library/samples GET 查看样本库记录

7. 支持的文件格式(53 种扩展名)

类别 扩展名
文本/代码/配置 .txt .md .csv .json .xml .yaml .yml .ini .cfg .conf .log .sql .go .py .java .js .ts .tsx .jsx .sh .ps1 .rb .php .rs .c .cc .cpp .h .hpp .cs .kt .swift
Office/PDF .pdf .doc .docx .xls .xlsx .ppt .pptx
图片 OCR .png .jpg .jpeg .webp .gif .bmp .tiff
压缩包 .zip .rar .7z .tar .gz
邮件 .eml .msg

8. 敏感内容覆盖(43 类)

固定格式(18 类): 身份证号、手机号、银行卡号、邮箱、地址、车牌号、护照号、社保号、税号、统一社会信用代码、API Key、Access Token、私钥、密码、数据库连接串、内网 IP、域名、账号凭证。

企业业务(15 类): 合同编号、客户名称、客户联系方式、项目名称、报价信息、财务数据、薪酬数据、组织架构、商业计划、招投标文件、源代码、内部接口文档、系统架构图、安全漏洞信息、运维账号信息。

文档语义(10 类): 保密协议、客户名单、财务预算、报价单、薪资明细、研发设计文档、源代码说明、内部培训资料、未公开财报、战略规划。


9. 代码结构

.
├─ cmd/dlpagent/main.go              CLI 入口
├─ internal/
│  ├─ agent/agent.go                 Eino ADK ChatModelAgent(LLM 可选)
│  ├─ analysis/analysis.go           分析流水线(抽取 → 检测 → 规则 → 指纹 → 向量 → 解释)
│  ├─ api/
│  │  ├─ server.go                   HTTP API
│  │  └─ web/index.html              内置前端(服务端 + 客户端工作台)
│  ├─ config/config.go               环境变量配置
│  ├─ detect/detect.go               敏感信息检测 + risk_level 分级
│  ├─ embed/embed.go                 Ark Embedding 封装(可选)
│  ├─ extract/                       多格式文本抽取(PDF/OOXML/图片/压缩包/邮件)
│  ├─ fingerprint/fingerprint.go     SHA256 + SimHash
│  ├─ rules/rules.go                 规则生成、保存、加载、匹配(regex/keyword/compound/AND/OR)
│  ├─ scan/scan.go                   目录扫描与标签生成
│  ├─ store/
│  │  ├─ sqlite.go                   SQLite 标签存储
│  │  └─ library.go                  敏感文件库与规则集存储
│  ├─ synth/
│  │  ├─ generator.go                原始合成样本生成器
│  │  └─ datasets.go                 样本库 + 测试集生成器
│  ├─ types/types.go                 数据结构
│  └─ util/                          文件类型检测、文本工具
└─ data/
   ├─ sample_library/                样本库(64 文件)
   ├─ test_set/                      测试集(125 文件)
   ├─ library.db                     敏感文件库 + 规则集
   └─ labels.db                      客户端标签库

10. 模块一需求覆盖

需求 状态 位置
正则规则 detect.go 18 种正则
关键词规则 detect.go 16 组业务 + 10 组语义
组合规则(AND/OR) rules.go
文件指纹(SHA256 + SimHash) fingerprint.go
语义向量(可选) embed.go
文本文件抽取 txt/csv/json/xml/md/代码/配置
办公文档抽取 docx/xlsx/pptx + 旧版 .doc/.xls/.ppt
PDF 抽取 extract/pdf.go
图片 OCR 需 Tesseract
压缩包抽取 zip/tar/gz(rar/7z 需 7-Zip)
邮件解析 eml/msg
样本上传入库 API + 前端
规则集生成 rules.go + API
客户端规则拉取 GET /api/client/rules
目录扫描 scan.go + API
敏感文件标记(SQLite) store/sqlite.go
前端操作台 服务端 + 客户端双页面

11. 环境依赖

内容 必须 用途
Go 工具链 编译运行
Tesseract OCR 图片文本识别
7-Zip rar/7z 解压、Outlook .msg 解析
火山方舟 API LLM 解释 + Embedding 向量化

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages