afiqandico13/secradar
GitHub: afiqandico13/secradar
一款用 Rust 编写的极速本地密钥扫描器,通过规则匹配和熵检测在源码及 Git 历史中查找泄露的 API 密钥、token 和密码。
Stars: 0 | Forks: 0
# 🔒 secradar — 快速密钥扫描器
**在源代码中查找 API 密钥、token、密码和高熵密钥。**
100% 本地运行,零网络调用,使用 Rust 编写以追求极致速度。
[]()
[]()
[]()
[]()
## ✨ 功能特性
- 🚀 **极速** — 采用 LTO 的 Rust release 构建,通过 rayon 进行并行扫描
- 🎯 **30+ 规则** — AWS, GitHub, Slack, Stripe, JWT, RSA 密钥,以及通用模式
- 📊 **基于熵的检测** — 通过 Shannon 熵发现未知密钥
- 🔍 **Git 历史扫描** — 在过去的提交中查找密钥 (`--git-history`)
- 🎨 **4 种输出格式** — 美化的终端、JSON、SARIF (GitHub 代码扫描) 和紧凑格式
- ⚙️ **可配置** — 通过 `.secradar.toml` 配置自定义规则/允许列表
- 🪶 **对你的代码零依赖** — 纯二进制程序,无需运行脚本
- 🔒 **隐私优先** — 所有处理均在本地进行,不向外界发送任何数据
## 🚀 快速开始
### 安装
```
git clone https://github.com/afiqandico13/secradar.git
cd secradar
cargo build --release
./target/release/secradar --help
```
### 用法
```
# 扫描当前目录
./target/release/secradar
# 扫描特定路径
./target/release/secradar /path/to/project
# JSON 输出
./target/release/secradar --format json > report.json
# 用于 GitHub Code Scanning 的 SARIF
./target/release/secradar --format sarif > secradar.sarif
# 扫描 git 历史(最近 100 次提交)
./target/release/secradar --git-history --max-commits 100
# 跳过 noisy rules
./target/release/secradar --skip-rule SR031,SR062
# 仅显示 high/critical severity
./target/release/secradar --min-severity high
# CI mode:仅 exit code
./target/release/secradar --quiet --no-fail
```
### 退出代码
| 代码 | 含义 |
|:---:|---|
| `0` | 未发现密钥 |
| `1` | 发现密钥 (CI 应当失败) |
| `2` | 解析错误或文件未找到 |
## 📋 规则
### 云服务提供商
| ID | 严重程度 | 检测目标 |
|:---|:---:|:---|
| SR001 | 🔴 严重 | AWS Access Key ID |
| SR002 | 🔴 严重 | AWS Secret Access Key |
| SR003 | 🔴 严重 | Google API Key |
| SR004 | 🟠 高危 | Azure Subscription Key |
| SR005 | 🟠 高危 | DigitalOcean PAT |
### 源代码管理
| ID | 严重程度 | 检测目标 |
|:---|:---:|:---|
| SR010 | 🔴 严重 | GitHub Personal Access Token |
| SR011 | 🔴 严重 | GitHub Fine-grained PAT |
| SR012 | 🔴 严重 | GitHub OAuth Token |
| SR013 | 🔴 严重 | GitLab PAT |
### 通讯平台
| ID | 严重程度 | 检测目标 |
|:---|:---:|:---|
| SR020 | 🟠 高危 | Slack Bot Token |
| SR021 | 🟡 中危 | Slack Webhook URL |
| SR022 | 🟡 中危 | Discord Webhook URL |
| SR023 | 🟠 高危 | Telegram Bot Token |
### 支付
| ID | 严重程度 | 检测目标 |
|:---|:---:|:---|
| SR030 | 🔴 严重 | Stripe Live Key |
| SR031 | 🔵 低危 | Stripe Test Key |
### 认证 token
| ID | 严重程度 | 检测目标 |
|:---|:---:|:---|
| SR040 | 🟡 中危 | JWT Token |
| SR041 | 🟠 高危 | Heroku API Key |
| SR042 | 🟠 高危 | npm Auth Token |
| SR043 | 🟠 高危 | PyPI Token |
### 私钥
| ID | 严重程度 | 检测目标 |
|:---|:---:|:---|
| SR050 | 🔴 严重 | RSA Private Key |
| SR051 | 🔴 严重 | OpenSSH Private Key |
| SR052 | 🔴 严重 | PGP Private Key |
| SR053 | 🔴 严重 | EC Private Key |
### 通用 / 上下文相关
| ID | 严重程度 | 检测目标 |
|:---|:---:|:---|
| SR060 | 🟡 中危 | 通用 `api_key=...` 赋值 (已进行熵检查) |
| SR061 | 🟠 高危 | 通用 `password=...` 赋值 |
| SR062 | 🟠 高危 | 通用 `secret=...` 赋值 |
| SR063 | 🔴 严重 | 带凭据的 DB 连接字符串 |
| SR064 | 🟠 高危 | 嵌入凭据的 HTTP URL |
## ⚙️ 配置
在你的仓库根目录下创建 `.secradar.toml`:
```
# 跳过特定 rules(逗号分隔)
skip-rules = ["SR031", "SR062"]
# 仅运行特定 rules
# only-rules = ["SR001", "SR002", "SR010"]
# 要报告的最低 severity (info | low | medium | high | critical)
# min-severity = "medium"
# 自定义 entropy threshold(越低越敏感)
# min-entropy = 4.0
# 以字节为单位的文件大小限制
max-file-size = 1048576
# threads(默认:所有核心)
# threads = 4
# 排除 patterns (glob)
exclude = ["**/test/**", "**/tests/**", "**/*.example"]
```
CLI 命令行参数会覆盖配置文件中的设置。
## 📊 输出格式
### Pretty (默认)
```
▸ .env.production
CRITICAL [SR001] AWS Access Key ID
3:15
match: AKIA****MPLE
──────────────────────────────────────────────────────────
Total: 1 critical, 2 high, 1 medium
```
### JSON
```
{
"tool": "secradar",
"version": "1.0.0",
"count": 4,
"findings": [...],
"summary": {"CRITICAL": 1, "HIGH": 2, "MEDIUM": 1}
}
```
### SARIF
在 PR 中以 GitHub 代码扫描批注的形式呈现。
## 🛠️ 开发
```
cargo build # debug
cargo build --release # optimized
cargo test # 10 unit tests
cargo run -- . # scan current dir
```
### 添加新规则
编辑 `src/rules.rs`:
```
Rule {
id: "SR999",
name: "My Custom Token",
description: "Detects MyCustom tokens",
severity: Severity::High,
regex: MY_CUSTOM_REGEX.as_ref(),
min_entropy: 3.5,
},
```
在文件底部添加正则表达式,然后在 `#[cfg(test)] mod tests` 中添加测试。
## 🔧 工具对比
| 工具 | 语言 | 速度 | 规则数 | 本地运行 |
|---|---|---|---|---|
| **secradar** | Rust | ⭐⭐⭐⭐⭐ | 30 | ✅ |
| [gitleaks](https://github.com/gitleaks/gitleaks) | Go | ⭐⭐⭐⭐ | 100+ | ✅ |
| [trufflehog](https://github.com/trufflesecurity/trufflehog) | Python | ⭐⭐⭐ | 700+ | ✅ |
| [detect-secrets](https://github.com/Yelp/detect-secrets) | Python | ⭐⭐ | 25 | ✅ |
## 📜 许可证
MIT © 2026 Afiq Andico Pangimpian
标签:Git历史扫描, Linux安全, Python安全, Rust, StruQ, 云安全监控, 代码安全审计, 前端框架, 可视化界面, 对抗攻击, 开发安全, 敏感信息检测, 机密扫描, 网络流量审计, 通知系统, 静态分析