UPGRADE_SUMMARY.md•10.4 kB
# JavaSinkTracer 升级总结
## 完成的改进
### 1. 污点规则库优化 (Rules/rules.json)
#### 新增漏洞类型 (6种)
- **XPATH_INJECTION** (CWE-643) - XPath注入
- **CRYPTO_WEAKNESS** (CWE-327) - 加密算法弱点
- **TEMPLATE_INJECTION** (CWE-94) - 模板注入
- **LOG_INJECTION** (CWE-117) - 日志注入
- **JNDI_INJECTION** (CWE-74) - JNDI注入 (Critical级别)
- **REFLECTION_INJECTION** (CWE-470) - 反射注入
#### 增强现有规则
每个规则都添加了:
- **CWE编号映射** - 便于与安全标准对接
- **更多Sink点** - 覆盖更多框架和库
- RCE: 从8个扩展到21个
- 反序列化: 从9个扩展到20个
- SSRF: 从12个扩展到26个
- SQL注入: 从13个扩展到30个
- XSS: 从8个扩展到16个
- 路径遍历: 从8个扩展到29个
- 其他类型也有显著增强
#### 新增规则类型
- **Source规则** - 定义外部输入源
- HTTP参数、请求头、Cookie
- Spring注解参数
- **Sanitizer规则** - 定义净化函数
- 编码转义函数
- 验证函数
#### 支持的框架和库
- Spring Boot / Spring MVC / Spring WebFlux
- MyBatis / Hibernate / JPA / jOOQ
- Fastjson / Fastjson2 / Jackson / Gson
- OkHttp / Apache HttpClient / Retrofit
- Freemarker / Velocity / Thymeleaf
- Log4j / SLF4J
- SnakeYAML / XStream
- JEXL / OGNL / Groovy / BeanShell
- 更多...
---
### 2. MCP服务器开发
#### 创建的文件
1. **mcp_server.py** - MCP服务器主程序
2. **mcp_config.json** - Claude Desktop配置示例
3. **MCP_GUIDE.md** - 完整使用指南
#### 提供的6个MCP工具
| 工具名称 | 功能描述 | 主要用途 |
|---------|---------|---------|
| `build_callgraph` | 构建函数调用关系图 | 预分析、了解项目结构 |
| `find_vulnerabilities` | 扫描安全漏洞 | 发现潜在漏洞链路 |
| `analyze_vulnerability_chain` | 分析漏洞链源代码 | 深入分析特定漏洞 |
| `extract_method_code` | 提取方法源代码 | 获取单个函数代码 |
| `list_sink_rules` | 列出Sink规则 | 了解支持的漏洞类型 |
| `get_project_statistics` | 获取项目统计 | 了解项目规模 |
#### MCP架构优势
**模块化设计**
- 每个工具职责单一清晰
- 易于维护和扩展
**AI可组合调用**
```
AI可以智能地:
1. 先调用 build_callgraph 构建基础
2. 再调用 find_vulnerabilities 扫描
3. 针对发现的漏洞调用 analyze_vulnerability_chain
4. 最后生成综合分析报告
```
**增量分析**
- 缓存机制避免重复构建AST
- 可以只扫描特定漏洞类型
- 灵活控制分析深度
**交互式审计**
- AI根据结果动态决策
- 可以针对性深入分析
- 支持多轮对话式审计
---
## 使用方式
### 方式1: 传统命令行 (不变)
```bash
python JavaSinkTracer.py -p /path/to/java-project -o Result
```
### 方式2: MCP服务器 (新增)
#### 安装
```bash
pip install -r requirements.txt
```
#### 配置Claude Desktop
编辑配置文件添加:
```json
{
"mcpServers": {
"javasinktracer": {
"command": "python",
"args": ["/path/to/JavaSinkTracer/mcp_server.py"]
}
}
}
```
#### 使用示例
**场景1: 全面扫描**
```
请帮我全面审计 /path/to/java-project 项目的安全漏洞
```
AI会自动调用多个工具完成分析。
**场景2: 针对性扫描**
```
检查项目中是否存在SQL注入和RCE漏洞
```
AI会调用 `find_vulnerabilities(sink_types=["SQLI", "RCE"])`
**场景3: 深入分析**
```
这个RCE漏洞链看起来可疑,帮我分析源代码判断是否为误报
```
AI会提取源代码并分析。
---
## 技术实现细节
### 1. 规则扩展原理
原有规则:
```json
{
"sink_name": "RCE",
"sinks": ["Runtime:exec", ...]
}
```
优化后:
```json
{
"sink_name": "RCE",
"cwe": "CWE-78", // 新增:CWE映射
"sinks": [ // 扩展:更多sink点
"Runtime:exec",
"ProcessBuilder:start",
"ScriptEngine:eval",
"GroovyShell:evaluate",
"OGNL:getValue",
// ... 更多
]
}
```
### 2. MCP工具链设计
```
┌─────────────────┐
│ AI (Claude) │
└────────┬────────┘
│
┌────────▼────────┐
│ MCP Protocol │
└────────┬────────┘
│
┌───────────────────┼───────────────────┐
│ │ │
┌────▼─────┐ ┌─────▼──────┐ ┌─────▼──────┐
│ build │ │ find │ │ analyze │
│callgraph │ │vulnerabili-│ │ chain │
│ │ │ ties │ │ │
└────┬─────┘ └─────┬──────┘ └─────┬──────┘
│ │ │
└──────────────────┼───────────────────┘
│
┌────────▼─────────┐
│ JavaSinkTracer │
│ Core Engine │
└──────────────────┘
```
### 3. 缓存机制
```python
# 首次调用 build_callgraph
analyzer = JavaSinkTracer(project_path, rules_path)
analyzer.build_ast() # 耗时操作
cache[key] = analyzer
# 后续调用复用缓存
analyzer = cache[key] # 快速获取
vulnerabilities = analyzer.find_taint_paths()
```
---
## 对比分析
### 传统方式 vs MCP方式
| 特性 | 传统命令行 | MCP工具 |
|-----|----------|---------|
| 运行方式 | 一次性全量扫描 | 可增量、可针对性扫描 |
| 结果分析 | 人工阅读报告 | AI辅助分析 |
| 误报处理 | 需要逐个检查代码 | AI自动提取代码分析 |
| 交互性 | 无 | 支持多轮对话 |
| 灵活性 | 固定流程 | 灵活组合工具 |
| 学习曲线 | 需要理解工具和规则 | 自然语言交互 |
### 示例对比
**传统方式:**
```bash
$ python JavaSinkTracer.py -p /path/to/project
# 等待扫描完成
# 打开HTML报告
# 人工分析100个疑似漏洞
# 逐个查看源代码
# 判断真伪
```
**MCP方式:**
```
用户: 帮我审计这个项目,重点关注高危漏洞
AI自动:
1. 构建调用图
2. 扫描漏洞(只关注High/Critical)
3. 对每个漏洞提取源代码
4. 分析污点传播是否真实
5. 生成分析报告:
- 10个真实漏洞(附源代码和修复建议)
- 15个疑似漏洞(需人工确认)
- 75个误报(已自动过滤)
```
---
## 规则库统计
### 漏洞类型覆盖
| 类别 | 原版 | 优化后 | 增长 |
|-----|------|--------|------|
| RCE | 8 | 21 | +162% |
| 反序列化 | 9 | 20 | +122% |
| SSRF | 12 | 26 | +117% |
| SQL注入 | 13 | 30 | +131% |
| XSS | 8 | 16 | +100% |
| 路径遍历 | 8 | 29 | +263% |
| LDAP注入 | 4 | 7 | +75% |
| XXE | 5 | 12 | +140% |
| URL重定向 | 3 | 5 | +67% |
| **新增类型** | 0 | 6 | - |
| **总计** | 70 | 172 | +146% |
### 新增规则详情
**Source规则 (新增)**
- 9个HTTP请求相关源
- 5个Spring注解相关源
**Sanitizer规则 (新增)**
- 6个编码转义函数
- 3个验证函数
---
## 使用建议
### 何时使用传统方式
- CI/CD自动化扫描
- 定期安全审计
- 生成正式报告
### 何时使用MCP方式
- 日常开发中快速检查
- 深入分析特定漏洞
- 学习和研究漏洞模式
- 需要AI辅助分析误报
### 最佳实践
1. **初次扫描**: 使用传统方式全量扫描
2. **结果分析**: 使用MCP让AI帮助过滤误报
3. **深入研究**: 使用MCP工具提取和分析代码
4. **持续监控**: CI/CD集成传统方式
---
## 扩展方向
### 短期可扩展
1. **添加新Sink规则** - 编辑rules.json
2. **自定义MCP工具** - 扩展mcp_server.py
3. **集成到IDE** - 作为插件使用
### 长期可扩展
1. **变量级污点分析** - 结合AI分析变量流
2. **自动修复建议** - 生成patch
3. **漏洞优先级评分** - CVSS评分
4. **多语言支持** - Python、PHP等
---
## 文件清单
### 新增文件
```
JavaSinkTracer/
├── mcp_server.py # MCP服务器主程序 (新)
├── mcp_config.json # Claude Desktop配置示例 (新)
├── MCP_GUIDE.md # MCP使用指南 (新)
└── UPGRADE_SUMMARY.md # 升级总结 (本文件)
```
### 修改文件
```
JavaSinkTracer/
├── Rules/rules.json # 优化后的规则库 (改)
└── requirements.txt # 添加mcp依赖 (改)
```
### 原有文件 (不变)
```
JavaSinkTracer/
├── JavaSinkTracer.py # 主程序
├── JavaCodeExtract.py # 代码提取
├── AutoVulReport.py # 报告生成
└── README.md # 原说明文档
```
---
## 快速开始
### 1分钟快速体验MCP
```bash
# 1. 安装依赖
cd /Users/mac/Desktop/JavaSinkTracer
pip install -r requirements.txt
# 2. 配置Claude Desktop
# 编辑 ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"javasinktracer": {
"command": "python",
"args": ["/Users/mac/Desktop/JavaSinkTracer/mcp_server.py"]
}
}
}
# 3. 重启Claude Desktop
# 4. 在Claude中测试
# 输入: "列出所有支持的漏洞检测类型"
# Claude会自动调用 list_sink_rules 工具
```
---
## 总结
✅ **任务1完成**: 污点规则库从70个规则扩展到172个,新增6种漏洞类型,添加CWE映射、Source和Sanitizer规则
✅ **任务2完成**: 成功将功能拆分为6个MCP工具,支持AI调用,实现模块化、交互式、智能化的代码审计
🎯 **核心价值**:
- **更全面**: 规则覆盖更多框架和漏洞类型
- **更智能**: AI辅助分析,减少人工工作量
- **更灵活**: 模块化工具可灵活组合使用
- **更高效**: 缓存机制+增量分析提升性能
🚀 **下一步**:
- 在实际项目中测试新规则的效果
- 根据反馈持续优化规则和工具
- 探索AI辅助自动修复漏洞