Makeph/leakhound

GitHub: Makeph/leakhound

一个零依赖的 C++17 本地密钥扫描器,通过正则规则和熵启发式检测凭据泄露,适合集成到 CI 流水线。

Stars: 1 | Forks: 0

# leakhound `leakhound` 是一个快速的本地凭据和密钥扫描器。它是一个单一的 C++17 二进制文件,没有外部依赖。 ## 构建 使用 CMake: ``` cmake -S . -B build cmake --build build --config Release ``` 在 Windows 上使用 MSVC 命令提示符: ``` build.bat ``` 批处理文件会运行: ``` cl /std:c++17 /O2 /W4 /EHsc src\leakhound.cpp /Fe:leakhound.exe ``` ## 使用方法 ``` leakhound [options] ... --json machine-readable output (one JSON object, findings array) --no-entropy disable entropy heuristics (pattern rules only) --max-size N skip files larger than N bytes (default 2 MiB) --quiet suppress per-finding lines, print summary only -h, --help usage ``` 路径可以是文件或目录。目录将被递归扫描,同时 常见的生成文件或依赖目录(如 `.git`、`node_modules`、 `vendor`、`dist`、`build`、`target`、`__pycache__`、`.venv` 和 `venv`)将被 跳过。 默认输出: ``` HIGH aws-access-key path/to/file.txt:12 AKIA12...CDEF Summary: files scanned=4, files skipped=1, HIGH=1, MEDIUM=0, LOW=0, wall time=3ms ``` JSON 输出: ``` leakhound --json . ``` ## 规则 | 规则 ID | 严重程度 | 模式 | | --- | --- | --- | | `aws-access-key` | HIGH | `AKIA[0-9A-Z]{16}` | | `github-token` | HIGH | `gh[pousr]_[A-Za-z0-9]{36,}` | | `slack-token` | HIGH | `xox[baprs]-[A-Za-z0-9-]{10,}` | | `stripe-live-key` | HIGH | `sk_live_[A-Za-z0-9]{16,}` | | `private-key-pem` | HIGH | PEM 私钥头行 | | `google-api-key` | HIGH | `AIza[0-9A-Za-z_-]{35}` | | `npm-token` | HIGH | `npm_[A-Za-z0-9]{36}` | | `jwt` | MEDIUM | JWT 形式的三段式 token | | `generic-assignment` | MEDIUM | 分配给带引号的非占位符值的类密钥键 | | `high-entropy-token` | LOW | 高熵混合大小写 token 启发式检测 | 熵启发式检测将每一行标记化为由 24 到 128 个字符组成的 `[A-Za-z0-9+/=_-]` 序列,然后标记出每字符 Shannon 熵大于 4.5 比特,且至少包含一个数字和 大小写混合的 token。使用 `--no-entropy` 可禁用此层级。 ## 退出代码 | 代码 | 含义 | | --- | --- | | 0 | 扫描完成,未发现任何结果 | | 1 | 扫描完成,发现结果 | | 2 | 用法或 IO 错误 | ## 测试 ``` python tests/run_tests.py ``` 测试运行器会构建临时 fixture,运行扫描器,检查退出代码, 验证 JSON 输出,验证脱敏和占位符拒绝,并检查 对二进制文件、目录和最大大小的跳过。如果没有可用的编译器,请将 `LEAKHOUND_BIN` 设置为现有的扫描器二进制文件。
标签:Bash脚本, C++17, CMake, DevSecOps, HTTP头分析, StruQ, 上游代理, 代码安全, 敏感信息扫描, 漏洞枚举