iflow-mcp_zacarx-javasinktracer_mcp 0.1.6
Java源代码漏洞审计工具 - 基于函数级污点分析
Requires Python: >=3.8

# JavaSinkTracer_MCP

基于函数级污点分析的 Java 源代码漏洞审计工具JavaSinkTracer，通过 Model Context Protocol (MCP) 为 AI 助手提供安全分析能力。

## 快速开始

### 1. 安装依赖

```bash
pip install -r requirements.txt
```

### 2. 配置 Claude Desktop

编辑配置文件并添加 MCP 服务器配置：

**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%/Claude/claude_desktop_config.json`

```json
{
  "mcpServers": {
    "javasinktracer": {
      "command": "python",
      "args": [
        "/path/to/JavaSinkTracer/mcp_server.py"
      ],
      "description": "Java源代码漏洞审计工具 - 基于函数级污点分析"
    }
  }
}
```

**注意**：将 `/path/to/JavaSinkTracer` 替换为实际的项目路径。

### 3. 重启 Claude Desktop

配置完成后重启 Claude Desktop，MCP 工具将自动加载。

## 视频演示
https://www.bilibili.com/video/BV1XrxDz1EvF

## 核心功能

### 漏洞扫描
从危险函数（Sink）反向追踪到外部入口（Source），自动发现潜在的安全漏洞链路。

### 调用图分析
构建完整的 Java 项目函数调用关系图，支持跨文件、跨类的调用追踪。

### 智能分析
基于函数级污点分析，有效规避变量级追踪在复杂场景（线程、反射、回调）下的断链问题。

### 代码提取
自动提取漏洞链路上每个函数的完整源代码，便于人工或 AI 深入分析。

## 可用工具

| 工具名称 | 功能说明 |
|---------|---------|
| `build_callgraph` | 构建项目调用关系图 |
| `find_vulnerabilities` | 扫描安全漏洞 |
| `analyze_vulnerability_chain` | 分析漏洞调用链源代码 |
| `extract_method_code` | 提取指定方法源代码 |
| `list_sink_rules` | 查看漏洞规则配置 |
| `get_project_statistics` | 获取项目统计信息 |

## 使用示例

### 示例 1：全面漏洞扫描

```
请帮我扫描 /path/to/java-project 项目的安全漏洞
```

AI 会自动：
1. 构建调用关系图
2. 扫描所有类型的漏洞
3. 分析并报告发现的问题

### 示例 2：针对性检测

```
检查项目中是否存在 SQL 注入和命令执行漏洞
```

AI 会扫描特定类型的漏洞（SQLI、RCE）。

### 示例 3：深入分析

```
这个漏洞链路是真实漏洞吗？请分析调用链的源代码
```

AI 会提取完整的调用链代码并进行分析。

## 支持的漏洞类型

- **RCE** - 远程代码执行 (CWE-78)
- **SQLI** - SQL 注入 (CWE-89)
- **XXE** - XML 外部实体注入 (CWE-611)
- **SSRF** - 服务端请求伪造 (CWE-918)
- **PATH_TRAVERSAL** - 路径穿越 (CWE-22)
- **DESERIALIZE** - 反序列化漏洞 (CWE-502)
- **XPATH_INJECTION** - XPath 注入 (CWE-643)
- **TEMPLATE_INJECTION** - 模板注入 (CWE-94)
- **JNDI_INJECTION** - JNDI 注入 (CWE-74)
- **REFLECTION_INJECTION** - 反射注入 (CWE-470)
- **LOG_INJECTION** - 日志注入 (CWE-117)
- **CRYPTO_WEAKNESS** - 加密算法弱点 (CWE-327)

## 支持的框架

- Spring Boot / Spring MVC
- MyBatis / Hibernate / JPA
- Fastjson / Jackson / Gson
- OkHttp / Apache HttpClient
- Freemarker / Velocity / Thymeleaf
- Log4j / SLF4J

## 工作原理

### 函数级污点分析

不同于传统 SAST 工具的"变量级"污点分析，本工具采用"函数级"污点分析：

- **优势**：有效规避线程调用、监听回调、反射调用等场景的断链问题
- **权衡**：可能产生误报，需要结合 AI 或人工进一步分析确认

### 分析流程

1. 解析 Java 源代码，构建 AST
2. 提取所有类和方法信息
3. 构建函数调用关系图
4. 从 Sink 点（危险函数）反向追踪
5. 识别到达 Source 点（外部入口）的调用链
6. 过滤无参数的函数（排除不可控变量）
7. 提取调用链上所有函数的源代码

## 配置说明

### 规则文件

规则配置文件位于 `Rules/rules.json`，包含：

- **sink_rules**: 危险函数规则（如 `Runtime.exec`）
- **source_rules**: 外部输入源（如 `HttpServletRequest.getParameter`）
- **sanitizer_rules**: 净化函数（如 `StringEscapeUtils.escapeHtml`）

### 自定义规则

可以根据实际需求编辑 `rules.json` 添加新的 Sink、Source 或 Sanitizer 规则：

```json
{
  "sink_rules": [
    {
      "sink_name": "CUSTOM_VULN",
      "sink_desc": "自定义漏洞类型",
      "severity_level": "High",
      "cwe": "CWE-XXX",
      "sinks": [
        "com.example.DangerousClass:dangerousMethod"
      ]
    }
  ]
}
```

## 性能优化

### 缓存机制

- 首次分析项目时构建 AST 和调用图
- 后续调用自动复用缓存，大幅提升速度
- 缓存 key：`project_path:rules_path`

### 轻量级模式

`find_vulnerabilities` 工具默认使用轻量级模式：
- 仅返回漏洞链路信息
- 不立即提取源代码
- 需要时使用 `analyze_vulnerability_chain` 获取详细代码

## 常见问题

### 工具未加载？

1. 检查配置文件中的路径是否正确
2. 确认已安装所有 Python 依赖
3. 查看 Claude Desktop 的开发者工具日志

### 分析速度慢？

- 大型项目首次分析需要时间构建 AST
- 使用缓存后速度会显著提升
- 可先调用 `build_callgraph` 预热缓存

### 结果有误报？

- 函数级污点分析会产生一定误报
- 使用 `analyze_vulnerability_chain` 查看源代码
- 结合 AI 分析或人工确认漏洞真实性

## 扩展开发

### 添加新的 MCP 工具

编辑 `mcp_server.py`：

```python
@app.list_tools()
async def list_tools() -> list[Tool]:
    return [
        Tool(
            name="your_tool",
            description="工具描述",
            inputSchema={...}
        )
    ]

@app.call_tool()
async def call_tool(name: str, arguments: Any):
    if name == "your_tool":
        # 实现你的工具逻辑
        pass
```

## 相关资源

- **详细使用指南**: 查看 `MCP_GUIDE.md`
- **原理说明**: 查看 `README.md`
- **优化日志**: 查看 `UPGRADE_SUMMARY.md`

## 致谢

JavaSinkTracer开发者 [Tr0e](https://github.com/Tr0e) 

## 声明
本项目仅供学习与研究使用，请勿用于商业或非法用途。因使用本项目产生的任何后果由使用者自行承担。