afiqandico13/secradar

GitHub: afiqandico13/secradar

一款用 Rust 编写的极速本地密钥扫描器,通过规则匹配和熵检测在源码及 Git 历史中查找泄露的 API 密钥、token 和密码。

Stars: 0 | Forks: 0

# 🔒 secradar — 快速密钥扫描器 **在源代码中查找 API 密钥、token、密码和高熵密钥。** 100% 本地运行,零网络调用,使用 Rust 编写以追求极致速度。 [![Rust](https://img.shields.io/badge/rust-1.96%2B-orange)]() [![License](https://img.shields.io/badge/license-MIT-blue)]() [![Tests](https://img.shields.io/badge/tests-10%20passed-success)]() [![Performance](https://img.shields.io/badge/build-LTO%20optimized-success)]() ## ✨ 功能特性 - 🚀 **极速** — 采用 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, 云安全监控, 代码安全审计, 前端框架, 可视化界面, 对抗攻击, 开发安全, 敏感信息检测, 机密扫描, 网络流量审计, 通知系统, 静态分析