用途
security-secrets 是一个面向代码库的密钥检测参考技能,用于审查密钥检测模式与扫描工作流。其目标是识别高信号密钥,例如 AWS 密钥、GitHub 令牌和数据库密码。
主要能力
该技能提供一组高信号正则表达式模式,覆盖多种常见密钥类型,包括:
- AWS Access Key:
AKIA[0-9A-Z]{16},固定 20 字符,以 AKIA 开头 - AWS Secret:
(?i)aws(.{0,20})?['"][0-9a-zA-Z/+]{40}['"],40 字符 base64 风格 - Google API Key:
AIza[0-9A-Za-z\-_]{35},共 39 字符 - Google OAuth:
[0-9]+-[0-9A-Za-z_]{32}\.apps\.googleusercontent\.com,客户端 ID - Google Service Account:
"type":\s*"service_account",出现在 JSON 文件中 - GitHub Token:
gh[pousr]_[A-Za-z0-9_]{36,},涵盖 ghp_/gho_/ghu_/ghs_/ghr_ - GitHub PAT(细粒度):
github_pat_[A-Za-z0-9_]{22,},较新格式 - GitLab Token:
glpat-[A-Za-z0-9\-]{20,},个人访问令牌 - Stripe Secret:
sk_(live|test)_[0-9a-zA-Z]{24,} - Stripe Restricted:
rk_(live|test)_[0-9a-zA-Z]{24,} - Stripe Publishable:
pk_(live|test)_[0-9a-zA-Z]{24,} - Slack Bot Token:
xoxb-[A-Za-z0-9-]+ - Slack User Token:
xoxp-[A-Za-z0-9-]+ - Slack Workflow Token:
xwfp-[A-Za-z0-9-]+ - Slack App Token:
xapp-[A-Za-z0-9-]+ - Slack Webhook:
https://hooks\.slack\.com/services/T[A-Z0-9]+/B[A-Z0-9]+/[a-zA-Z0-9]+ - Discord Token:
[MN][A-Za-z\d]{23,}\.[\w-]{6}\.[\w-]{27},机器人令牌 - Discord Webhook:
https://discord\.com/api/webhooks/[0-9]+/[A-Za-z0-9_-]+ - OpenAI Key:
sk-[A-Za-z0-9]{48} - Anthropic Key:
sk-ant-[A-Za-z0-9\-]{32,} - Twilio:
SK[a-z0-9]{32},API key SID - SendGrid:
SG\.[a-zA-Z0-9]{22}\.[a-zA-Z0-9]{43} - Mailgun:
key-[0-9a-zA-Z]{32} - Mailchimp:
[a-f0-9]{32}-us[0-9]{1,2} - Firebase:
(?i)firebase[a-z0-9\-]+\.firebaseio\.com,数据库 URL - Supabase:
eyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]*\.[A-Za-z0-9_-]*,JWT(需检查上下文) - Heroku:
[hH]eroku.*[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12} - NPM Token:
npm_[A-Za-z0-9]{36},发布令牌 - PyPI Token:
pypi-[A-Za-z0-9_-]{50,},上传令牌 - Private Key:
-----BEGIN (RSA|EC|OPENSSH|DSA|PGP) PRIVATE KEY - Database URL:
(?i)(postgres|mysql|mongodb|redis)://[^\s]+ - Password in URL:
[a-zA-Z]{3,15}://[^/\\:@]+:[^/\\:@]+@.{1,100},基本认证 - JWT Secret:
(?i)(jwt[_-]?secret|token[_-]?secret)['"]?\s*[:=]\s*['"][^'"]+['"] - Generic Secret:
(?i)(password|passwd|secret|token|api[_-]?key)['"]?\s*[:=]\s*['"][^'"]{8,}['"]
使用方式
CLI 扫描命令
快速 grep 扫描(快速、高信号):
rg -n "(AKIA[0-9A-Z]{16}|sk_(live|test)_|rk_(live|test)_|pk_(live|test)_|xox[baprs]-|xapp-|xwfp-|gh[pousr]_|github_pat_)" .
rg -n "BEGIN (RSA|EC|OPENSSH|DSA|PGP) PRIVATE KEY" .
rg -n "(?i)(api[_-]?key|secret|token|password)\s*[:=]\s*['\"][^'\"]{8,}" .
专用扫描器(更彻底):
gitleaks detect --source . --redact --no-git
semgrep scan --config p/secrets --error
trufflehog filesystem . --only-verified
优先检查文件
| 文件模式 | 风险等级 | 原因 |
|---|---|---|
| .env* | CRITICAL | 通常包含所有密钥 |
| config.js/ts/json | HIGH | 应用配置 |
| secret, credential | HIGH | 命名可疑 |
| docker-compose*.yml | HIGH | 数据库密码、服务凭据 |
| .github/workflows/*.yml | HIGH | CI/CD 密钥 |
| test, spec, fixture | MEDIUM | 含真实凭据的测试数据 |
| *.pem, *.key, *.p12 | CRITICAL | 私钥 |
脱敏格式
报告密钥时必须始终脱敏,仅显示前 4 位和后 4 位字符:
- 原始:
AKIAIOSFODNN7EXAMPLE→ 脱敏:AKIA****...****MPLE - 原始:
sk_test_XXXXYYYYZZZZ11112222→ 脱敏:sk_****...****2222
并且必须指示立即轮换密钥。
适用场景
- 代码审查中检查是否意外提交了密钥
- 安全审计与合规检查
- CI/CD 流程中集成密钥扫描
- 排查配置文件、环境文件、测试数据中的敏感信息
限制
- 正则表达式可能产生误报,尤其是通用密钥模式,需结合上下文判断
- Supabase 的 JWT 模式需要检查上下文
- 该技能为参考性模式与工作流,具体扫描效果取决于所用工具与配置
- 关于该技能的收费、价格、平台支持等具体信息暂未提供