DSH 独立 AI 产品矩阵 #19 · 端口 8110 · 形态参照
dsh-java-mysql:独立工具型产品, 本身是完整可用的密钥扫描后台 + DSH Java Native 插件(AI 安全审计员),而非"业务系统 + 右侧 AI 助手"。
扫本地目录里疑似泄漏的密钥(AK/SK/token/私钥/带凭证的连接串),输出文件+行号+类型+脱敏预览,并给出处置建议:
- 规则扫描:11 类规则(AWS / GitHub / Slack / 私钥块 / Google / 微信 AppSecret / 阿里云 / 腾讯云 / 通用赋值 / JWT / 数据库 URL);
- 误报识别:命中
example/placeholder/your-key等模式自动标likely-false-positive,避免盲目轮换; - 熵分析:香农熵 + 字符集判断「像不像随机密钥」;
- 暴露面评估:git 仓库检测 + 磁盘上仍存在的敏感文件清单(.env/.pem/id_rsa);
- 轮换清单:按类型生成撤销→新凭证→更新配置→审计日志 checklist。
AI 的角色是"熟练的安全审计员":一句话扫目录、分诊误报、评估暴露面、给轮换顺序。
| 工具 | 作用 |
|---|---|
ss_scan_dir |
只读扫目录,11 类规则找疑似密钥(输出脱敏) |
ss_classify_finding |
单条发现分类定级 + 误报可能性 |
ss_entropy_check |
香农熵 + 字符集分析 |
ss_history_blast_radius |
git 暴露面 + 敏感文件清单 |
ss_rotate_checklist |
按类型生成轮换 checklist(不执行) |
- 不外传任何密钥明文——扫描/classify/entropy 输出一律脱敏(前 4 后 2 + 掩码,
masked与preview双重脱敏); - 不修改任何文件——纯只读扫描,无删除/改写通道;
- 不代替执行轮换——只输出 checklist,撤销/重置由用户在对应平台操作;
- systemPrompt + PRE_TOOL_USE hook 双重约束:AI 回复禁止复述明文密钥。
secret-app (Spring Boot :8110) secret-plugin (DSH Java Native Plugin)
├─ POST /api/secrets/scan ─┐ ├─ DshSecretPlugin extends AbstractHarnessPlugin
├─ POST /api/secrets/classify │ 同一 │ ├─ 5 × AbstractTool (ss_*)
├─ POST /api/secrets/entropy │ Secret│ ├─ systemPrompt(安全审计员人设 + 脱敏红线)
├─ POST /api/secrets/blast-radius │ Service ├─ PRE_TOOL_USE hook(审计上下文注入)
├─ POST /api/secrets/rotate-checklist ┘ └─ SPI: META-INF/services/...JavaHarnessPlugin
└─ POST /api/assistant/stream ──→ harness :8090 /api/agent/stream(SSE 转发)
UI:static/index.html + app.js(会话管理、SSE 流式渲染、扫描/分类/熵/暴露面工作台、轮换清单弹窗)。
# 1. 启动 app(harness 8090 需已在运行)
SERVER__PORT= java -jar dsh-java-secret-app/target/*.jar --server.port=8110
# 2. 安装并激活插件
curl --noproxy '*' -X POST http://127.0.0.1:8090/api/harness/plugins/install -H 'Content-Type: application/json' -d '{
"pluginId":"dsh-java-secret-plugin","jarName":"dsh-java-secret-plugin-0.1.0.jar",
"displayName":"Secret Sweeper","pluginVersion":"0.1.0","runtimeType":"JAVA_NATIVE",
"sourcePath":"<abs-path>/dsh-java-secret-plugin-0.1.0.jar",
"entrypoint":"cn.xiaofuge.dsh.ss.plugin.DshSecretPlugin","installMode":"COPY"}'
curl --noproxy '*' -X POST http://127.0.0.1:8090/api/harness/plugins/activate -H 'Content-Type: application/json' \
-d '{"pluginId":"dsh-java-secret-plugin"}'
# 3. 打开 http://127.0.0.1:8110secret_sweeper_e2e.py — 8 用例 / 22 断言,全部通过(临时目录造真实样本:GitHub Token / 微信 AppSecret / RSA 私钥 / 示例 AK 误报):
| 用例 | 验证点 |
|---|---|
| T0 | 扫描 4 文件命中 6 条,GitHub/私钥类型命中,全部脱敏 |
| T1 | classify 识别 GitHub Token;示例 AK 标误报 |
| T2 | 熵分析高熵判定,不回显明文 |
| T3 | 暴露面:非 git 仓库判定 + 敏感文件清单(id_rsa/.env) |
| T4 | AWS 轮换 checklist |
| T5 | 空输入 → 400 |
| T6 | AI 调用 ss_scan_dir(SSE step_break 断言) |
| T7 | AI 回复无任何明文密钥(红线断言)+ 给出轮换/处置建议 |
screenshots/01-home.png— 密钥扫描台首页screenshots/02-ai-drawer.png— AI 对话扫描(调用 ss_* 工具)screenshots/03-safety.png— 轮换清单(只输出 checklist,不执行)