Skip to content

Repository files navigation

dsh-java-secret · Secret Sweeper(密钥泄漏扫描器)

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 的角色是"熟练的安全审计员":一句话扫目录、分诊误报、评估暴露面、给轮换顺序。

AI 工具(插件 dsh-java-secret-plugin,前缀 plugin__dsh-java-secret-plugin__ss_*)

工具 作用
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:8110

E2E

secret_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,不执行)

About

DSH Secret Sweeper: AK/SK/token/私钥泄漏扫描/熵检查/轮换清单 - Java Native Plugin 独立 AI 产品,密钥明文脱敏

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages