目录

安全漏洞扫描修复系统

自动化安全漏洞扫描与修复系统,利用多智能体协作实现代码安全漏洞的自动检测、验证和修复。

功能特性

  • 多工具扫描:集成 Bandit、Semgrep、CodeQL 三大安全扫描工具
  • 智能体协作:三个专业安全智能体协同工作(侦察兵、裁决官、修复架构师)
  • 自动修复:自动生成并应用安全补丁
  • 批量处理:支持大批量文件的分批扫描与修复
  • 迭代修复:修复后自动重新扫描,确保漏洞彻底清除
  • Web界面:提供友好的 Web 操作界面
  • Git集成:支持远程仓库克隆和修复提交

系统架构

┌─────────────────────────────────────────────────────────────┐
│                      用户界面层                              │
│  ┌─────────────────┐    ┌─────────────────────────────┐    │
│  │   Web 界面      │    │      命令行接口             │    │
│  │  (launcher.py)  │    │     (vul_fix.py)           │    │
│  └─────────────────┘    └─────────────────────────────┘    │
└─────────────────────────────────────────────────────────────┘
                              │
┌─────────────────────────────────────────────────────────────┐
│                    智能体协作层 (crewAI)                     │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐     │
│  │ 安全侦察兵  │───▶│ 安全裁决官  │───▶│ 修复架构师  │     │
│  │   (Scout)   │    │(Adjudicator)│    │(Remediation)│     │
│  └─────────────┘    └─────────────┘    └─────────────┘     │
└─────────────────────────────────────────────────────────────┘
                              │
┌─────────────────────────────────────────────────────────────┐
│                      工具层                                  │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────────┐    │
│  │ Bandit  │  │ Semgrep │  │ CodeQL  │  │ 补丁工具    │    │
│  └─────────┘  └─────────┘  └─────────┘  └─────────────┘    │
└─────────────────────────────────────────────────────────────┘

智能体说明

智能体 角色 职责
安全侦察兵 SAST & SCA 专家 执行全面安全扫描,输出原始漏洞数据
安全裁决官 漏洞验证专家 分析漏洞真实性,判定严重等级,过滤误报
修复架构师 安全修复专家 生成修复补丁,应用安全代码

环境要求

  • Python: 3.12
  • CodeQL: 2.x(可选,用于深度扫描)
  • Git: 用于远程仓库操作

安装步骤

1. 创建虚拟环境

python -m venv venv
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate

2. 安装依赖

pip install -r requirements.txt

3. 安装 CodeQL(可选)

如需使用 CodeQL 深度扫描功能:

  1. 下载 CodeQL CLI: https://github.com/github/codeql-cli-binaries/releases
  2. 解压并添加到系统 PATH
  3. 确保项目中的 Queries/py/ 目录存在

配置说明

编辑 config.yaml 文件:

# LLM 配置
llm:
  api_key: "your-api-key"           # API 密钥
  api_base: "https://api.xxx.com/v1" # API 地址
  default:
    model: "gpt-4.1"                 # 默认模型
    temperature: 0.5                 # 温度系数
  analysis:
    model: "gpt-4.1"                 # 分析模型
    temperature: 0.2
  remediation:
    model: "gpt-4.1"                 # 修复模型
    temperature: 0.2

# 修复流程配置
fix_process:
  batch_size: 5                      # 每批处理文件数
  max_iterations: 1                  # 最大迭代次数

# 扫描工具配置
scan_tools:
  bandit:
    enabled: true
    config_file: bandit.yaml
  semgrep:
    enabled: true
    config: p/security-audit
  codeql:
    enabled: true
    query_set: top25

# 智能体配置
agents:
  scout:
    verbose: true
    max_iter: 15
  adjudicator:
    verbose: true
    max_iter: 20
  remediation:
    verbose: true
    max_iter: 25

启动方式

方式一:Web 界面启动(推荐)

python launcher.py

启动后访问 http://localhost:5000

Web 界面功能

  • 配置 API 密钥和模型参数
  • 选择本地目录或输入远程仓库 URL
  • 实时查看扫描进度
  • 查看修复后的代码差异
  • 手动保存修改

方式二:命令行启动

python vul_fix.py <目标路径> [参数]

参数说明

参数 说明 默认值
目标路径 要扫描的文件或目录路径 必填
--batch-size 每批处理的文件数量 10
--max-iterations 最大迭代修复次数 3

示例

# 扫描单个文件
python vul_fix.py ./src/main.py

# 扫描整个目录
python vul_fix.py ./src --batch-size 20 --max-iterations 5

工作流程

1. 复制目标文件到 fixed 目录
         ↓
2. 安全侦察兵执行扫描(Bandit + Semgrep + CodeQL)
         ↓
3. 安全裁决官验证漏洞、判定严重等级
         ↓
4. 修复架构师生成补丁并应用
         ↓
5. 重新扫描验证
         ↓
6. 重复步骤 2-5 直到无漏洞或达到最大迭代次数
         ↓
7. 输出修复报告

目录结构

AntPather/
├── Agent/                    # 智能体定义
│   ├── __init__.py
│   └── security_agents.py    # 三个安全智能体配置
├── SecTool/                  # 安全扫描工具
│   ├── bandit_tool.py        # Bandit 扫描工具
│   ├── semgrep_tool.py       # Semgrep 扫描工具
│   ├── codeql_tool.py        # CodeQL 扫描工具
│   └── secure_code_search_tool.py  # 安全代码知识库
├── SecurityTools/            # 协作工具
│   ├── file_reader.py        # 文件读取工具
│   ├── patch_tool.py         # 补丁生成与应用
│   ├── scan_result_reporter.py     # 扫描结果报告
│   └── validated_vulnerability_reporter.py  # 漏洞验证报告
├── launcher/                 # Web 界面模块
│   ├── config_manager.py     # 配置管理
│   ├── git_integration.py    # Git 集成
│   └── ...
├── Queries/                  # CodeQL 查询规则
│   └── py/
├── templates/                # Web 模板
│   └── index.html
├── fixed/                    # 修复后的文件(自动生成)
├── fix_log/                  # 扫描和修复日志(自动生成)
├── config.yaml               # 配置文件
├── requirements.txt          # 依赖列表
├── launcher.py               # Web 界面入口
├── vul_fix.py                # 命令行入口
└── README.md                 # 本文档

输出说明

输出目录

目录 说明
fixed/ 修复后的文件,按时间戳命名
fix_log/ 扫描结果、验证结果、修复报告

日志文件

文件 说明
iter*_scan_*.json 扫描结果
iter*_validated_*.json 验证结果
iter*_remediation_*.json 修复报告
iter*_patch_apply_*.json 补丁应用结果
summary_*.json 总体摘要

补丁文件

补丁保存在 fixed/patch_{timestamp}/ 目录:

文件 说明
*.patch 补丁差异文件
*.json 补丁详细信息(原始代码、修复代码)

支持的漏洞类型示例

漏洞类型 CWE 编号 检测工具
硬编码密码/凭证 CWE-522 Bandit, Semgrep
命令注入 CWE-78 Bandit, CodeQL
SQL 注入 CWE-89 Semgrep, CodeQL
路径遍历 CWE-22 Bandit, CodeQL
XSS 跨站脚本 CWE-79 Semgrep
不安全反序列化 CWE-502 Bandit
弱加密算法 CWE-327 Bandit
不安全随机数 CWE-338 Bandit

注意事项

  1. API 密钥安全:请勿将包含 API 密钥的 config.yaml 提交到版本控制
  2. Python 路径配置:如需修改 Python 解释器路径,请更新以下文件:
    • SecTool/bandit_tool.py 第 13 行
    • SecTool/semgrep_tool.py 第 12 行
    • vul_fix.py 第 631 行
  3. CodeQL 扫描:首次使用 CodeQL 需要下载查询包,可能需要较长时间
  4. 大文件处理:建议使用 --batch-size 参数分批处理大量文件
  5. 修复验证:修复后请务必人工审核代码变更,确保逻辑正确

常见问题

Q: 扫描时提示找不到 Python 解释器?

A: 检查 SecTool/bandit_tool.pySecTool/semgrep_tool.py 中的 venv_python 变量是否正确。

Q: CodeQL 扫描失败?

A: 确保 CodeQL CLI 已正确安装并添加到 PATH,同时检查 Queries/py/ 目录是否存在。

Q: Web 界面无法访问?

A: 检查 5000 端口是否被占用,或修改 launcher.py 中的端口号。

许可证

MIT License

邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号