使用说明
基于LLM的动态秘密检测与验证引擎
架构图(文本)
+---------------------------+ +---------------------------+ +------------------------------+
| Client / CI / SCM Hook | -----> | FastAPI API Layer | -----> | Audit + Structured Logging |
+---------------------------+ +---------------------------+ +------------------------------+
| | \
| | \
v v v
+-----------------+ +----------------------+ +----------------------+
| Module 1 | | Module 2 | | Module 3 |
| Secret Detector | | LLM Plan Generator | | Validation Executor |
+-----------------+ +----------------------+ +----------------------+
\\ / |
\\ / |
v v v
+---------------------------------------+
| Repo Scanner (sync + async) |
| Recursive walk + filtering + caching |
+---------------------------------------+
|
v
+---------------------------------------+
| Parallel Validation Queue |
+---------------------------------------+
如何跑步
python3.11 -m venv .venv
source .venv/bin/activate
python -m pip install -r mcp_server/requirements.txt
export GROQ_API_KEY="<your-key>" # optional; inference falls back to unknown
uvicorn mcp_server.main:app --host 0.0.0.0 --port 8000
新存储库扫描API
POST /scan-repo
{
"path": "/workspace/mcp-secret-validator",
"min_detection_confidence": 0.55,
"min_validation_confidence": 0.6,
"max_workers": 4,
"validation_timeout_seconds": 8,
"report_output_path": "./reports/repo_scan.json",
"config_path": "mcp_server/repo_scanner_config.json"
}
可选GitHub扫描:
{
"github_url": "https://github.com/org/repo.git"
}
响应形状:
{
"total_files_scanned": 152,
"total_secrets_detected": 3,
"total_valid_secrets": 1,
"results": [
{
"file": "/workspace/mcp-secret-validator/example.py",
"secret": "sk_...xyz",
"service": "stripe",
"confidence": 0.81,
"validation_result": {
"status": "INVALID",
"risk": "LOW",
"reason": "Rejected by endpoint (401)"
}
}
]
}
安全控制
- 路径安全:本地仓库路径必须保留在配置的工作区根目录内。
- 不执行:扫描仪仅读取文本文件;从不执行代码。
- 过滤:跳过
.git,node_modules,__pycache__、二进制文件和超过2MB的文件。 - SSRF缓解:DNS/IP策略阻止本地主机/私有/内部目标。
- 方法硬化:验证计划只允许
GET;POST/PUT被拒绝。 - 运输硬化:仅HTTPS端点。
- 超时控制:每个请求超时和线程池超时边界。
- 减少秘密曝光:输出和日志使用掩码机密(
abc...xyz)和哈希。
业绩说明
- 用途
ThreadPoolExecutor用于并行验证。 - 最大工作人员在服务器端受限,以减少API滥用。
- 结果由秘密哈希缓存,以避免重复的推理/验证调用。
- 异步API终结点(
/scan-repo-async)将扫描仪包裹起来asyncio.to_thread.
示例测试用例
- 使用以下命令创建repo文件夹:
app.py包含api_key = "sk_live_ABCDEF1234567890xyz"fixtures.py包含token = "test_token_123"
- 呼叫
/scan-repo路径指向该文件夹。 - 预期成果:
- 一个高度自信的秘密
app.py. - 占位符令牌被抑制。
- 报告中掩盖了秘密。
- 一个高度自信的秘密
局限性
- LLM推理质量取决于Gemini的可用性和快速行为。
- 公共端点检查可能会对受限/非典型API产生假阴性结果。
- 插件注册表在内存中。
未来的改进
- 添加持久缓存后端(Redis)和分布式队列。
- 添加基于AST的语言分析器和污染感知上下文提取。
- 添加签名审计日志接收器和SIEM本机导出。
CLI使用情况(mcp-scan)
在没有API服务器的情况下直接运行:
python cli.py scan ./repo
python cli.py scan https://github.com/user/repository
可安装命令:
python -m pip install .
mcpsentinal scan ./repo
可选标志:
mcpsentinal scan ./repo --json
mcpsentinal scan ./repo --output report.json
mcpsentinal scan ./repo --max-workers 10
终端输出示例:
Scanning repository...
[HIGH RISK]
File: config.js
Secret: sk_...xyz
Service: stripe
Status: VALID
Scan Complete
Files scanned: 127
Secrets detected: 5
Valid secrets: 2
Invalid secrets: 3
Unknown secrets: 0
