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, 上游代理, 代码安全, 敏感信息扫描, 漏洞枚举