Skip to content

GeorgeGao128/kpatch-mas

Repository files navigation

内核 CVE 热补丁自动生成智能体 (AutoResearch)

基于大模型 (Qwen) + kpatch 工具链的 Linux 内核热补丁自动生成系统, 支持内环自动修复外环参数寻优双环迭代。

系统架构

┌─────────────────────────────────────────────────────┐
│                   外环(寻优环)                       │
│  auto_optimizer.py                                   │
│  遍历 3×3=9 种 (Prompt, Temperature) 参数组合         │
│  在 5 个 CVE 上测试,选出最优配方                       │
│                                                       │
│  ┌───────────────────────────────────────────────┐   │
│  │              内环(修复环)                      │   │
│  │  benchmark.py / process_cve()                  │   │
│  │                                                │   │
│  │  LLM 生成补丁 → kpatch-build 编译               │   │
│  │     ↓ 失败                                     │   │
│  │  提取精炼报错 → 喂回 LLM → 重试(≤5 次)        │   │
│  └───────────────────────────────────────────────┘   │
│                          ↕ HTTP                       │
│  ┌───────────────────────────────────────────────┐   │
│  │  MCP 服务端  mcp_server.py                     │   │
│  │  POST /tools/fetch_cve                         │   │
│  │  POST /tools/run_kpatch_build  (含日志精炼)     │   │
│  │  POST /tools/verify_patch                      │   │
│  └───────────────────────────────────────────────┘   │
│                          ↕                            │
│  ┌───────────────────────────────────────────────┐   │
│  │  Docker 沙箱  (openanolis/anolisos:23.4)       │   │
│  │  ANCK 6.6 内核源码 + kpatch-build              │   │
│  └───────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────┘

文件说明

文件 用途
Dockerfile Docker 编译沙箱镜像定义
setup.sh 沙箱环境初始化脚本(安装内核、kpatch、Python 依赖)
mcp_server.py MCP 服务端(补丁获取、kpatch-build 编译、模块加载)
benchmark.py 自动化打榜引擎(内环:LLM 生成补丁 → 编译 → 重试)
auto_optimizer.py 自动寻优器(外环:网格搜索最优 Prompt + Temperature)
cve_list.txt 完整打榜 CVE 列表
sample_cves.txt 寻优用小样本 CVE 列表(5 个)

快速开始

前置条件

  • Linux x86_64 服务器
  • Docker 已安装并运行
  • 阿里云百炼 API Key(获取地址

第 1 步:构建 Docker 沙箱镜像

# 在项目目录下执行
docker build -t kpatch-sandbox .

第 2 步:启动容器并启动 MCP 服务端

# 启动容器(挂载项目目录,暴露 8000 端口)
docker run -itd --name kpatch-sandbox \
    -v $(pwd):/workspace \
    -p 8000:8000 \
    kpatch-sandbox /bin/bash

# 进入容器,启动 MCP 服务端
docker exec -it kpatch-sandbox bash
cd /workspace
python3 mcp_server.py --host 0.0.0.0 --port 8000 &

验证服务端启动:

curl http://localhost:8000/health
# 期望输出: {"status":"ok","kpatch_build_available":true,...}

第 3 步:运行单轮打榜(内环)

在另一个终端窗口:

docker exec -it kpatch-sandbox bash
cd /workspace

# 设置百炼 API Key
export DASHSCOPE_API_KEY="sk-xxxxxxxx"

# 运行打榜(使用 cve_list.txt 中的 CVE)
python3 benchmark.py

# 自定义参数运行
python3 benchmark.py --cves my_cves.txt --model qwen-plus --temperature 0.3

结果实时写入 result.jsonl(每行一个 JSON 对象),格式:

{"_type":"meta", "model":"qwen-max", ...}
{"cve_id":"CVE-2024-1086", "success":true, "retries":2, "elapsed_seconds":45.3, ...}
{"cve_id":"CVE-2023-32233", "success":false, "retries":5, "elapsed_seconds":120.1, ...}
{"_type":"summary", "success_rate":"1/2 (50.0%)", ...}

第 4 步:运行参数寻优(外环)

docker exec -it kpatch-sandbox bash
cd /workspace
export DASHSCOPE_API_KEY="sk-xxxxxxxx"

# 运行自动寻优(3 Prompt × 3 Temperature = 9 种组合,5 CVE × 9 = 45 次测试)
python3 auto_optimizer.py

# 自定义参数
python3 auto_optimizer.py --cves my_sample.txt --output my_report.json

寻优完成后输出 optimization_report.json,包含:

  • 每种组合的成功率和平均重试次数
  • 自动标注的最优配置
  • 逐 CVE 的详细结果

参数调优指南

调整系统提示词

编辑 benchmark.py 顶部的 SYSTEM_PROMPT,或在运行时通过 --prompt 参数传入。

auto_optimizer.py 中预定义了 3 种 Prompt 变体:

  • concise: 简洁指令型
  • few_shot: 附带 kpatch 常见错误案例
  • cot: 要求逐步推理(Chain of Thought)

调整温度

  • 0.1 - 高确定性,适合稳定复现
  • 0.3 - 平衡点(默认)
  • 0.5 - 更高创造性,适合探索修复方案

调整重试次数

修改 benchmark.py 中的 MAX_RETRIES = 5

常见问题

kpatch-build 找不到内核源码

确保 setup.sh 中符号链接已正确建立:

ls -la /usr/src/kernels/6.6.102-5.2.an23.x86_64
ls -la /lib/modules/6.6.102-5.2.an23.x86_64/build

MCP 服务端连接失败

# 检查服务端是否运行
curl http://localhost:8000/health

# 查看服务端日志
docker exec kpatch-sandbox cat /tmp/mcp_server.log

百炼 API 限流

脚本内置了指数退避重试(3 次),如果持续限流:

  • 降低并发(一次只跑一个 CVE)
  • 联系阿里云提升 API 配额

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors