AI 安全测试:腾讯开源 A.I.G 平台拆解——2000+ CVE 规则与 LLM 审计的双引擎协作

给 AI 系统做安全测试和传统安全测试不是一回事:除了"这个服务有没有 CVE",还得回答"Agent 会不会被提示词注入劫持、MCP Server 会不会偷凭证、Skill 里有没有藏恶意代码"。这类问题纯规则扫不出来,纯靠 LLM 又贵又不稳定。腾讯朱雀实验室开源的 AI-Infra-Guard(A.I.G,Apache-2.0,5487 stars,今天还在 GitHub Trending 上)给的方案是双引擎架构:Go 写的规则引擎做确定性的指纹识别 + CVE 匹配,Python 写的 LLM agent 做需要推理的代码审计和越狱评估,两条腿走路。上周刚发 v4.5.2(2026-08-17)。本文拆它的架构演进、规则格式、三段式审计流水线,以及接入 CI 时实际会踩的坑。

架构演进:单二进制扫描器 → 多模块红队平台

版本 能力 技术栈 架构形态
v0.1 AI 基础设施漏洞扫描 + WebUI Go 单二进制 单体扫描器,规则驱动
v2.6 基础设施扫描 + MCP 代码分析 Go 单二进制 双引擎,统一 WebUI
v3.6+ Infra + MCP + Agent + 越狱评估 Go + Python,Docker 平台化,多模块可插拔

v3.6+ 的运行拓扑:

复制代码
WebUI / CLI / REST API / WebSocket
        └─▶ 任务调度器
              ├─▶ AI Infra 扫描(Go 规则引擎:指纹识别 → CVE 匹配)
              ├─▶ MCP/Skill 扫描(Python agent:静态规则 + LLM 验证)
              ├─▶ Agent 扫描(多 agent 流水线:注入/SSRF/泄露测试)
              └─▶ 越狱评估(Python:攻击生成 → 目标 LLM → 判定器 → 安全分)

四个关键设计决策值得抄:

  1. Rule-first, LLM-augmented:核心检测保持确定性(YAML 指纹 + 漏洞规则),快且结果可复现;LLM 只叠加在需要推理的场景(MCP 代码审计、Agent 行为模拟)。扫描器最怕"这次报、下次不报",规则引擎兜底保证了基线稳定。
  2. 按关注点拆语言:Go 处理高并发网络探测和 Web 平台,Python 处理 LLM agent 循环和评估框架。不用一个语言硬扛所有场景。
  3. Data 即真相 :所有检测规则放 data/ 目录做版本管理,不编译进二进制------目前 143 个指纹文件、116 个组件级漏洞规则、覆盖 2000+ CVE 条目,规则库可以脱离主程序单独更新。贡献新指纹 = 往 data/fingerprints/ 加个 YAML 提 PR,不碰主程序。
  4. 引擎可插拔:每个扫描模块独立部署、独立版本,通过任务 API 连接。

规则引擎:指纹识别 + CVE 匹配

AI 基础设施扫描的输入是"运行中的服务地址",不是 GitHub URL。vLLM 填 http://127.0.0.1:8000,Ollama 填 http://192.168.1.100:11434,ComfyUI 填 http://10.0.0.5:8188,支持 CIDR 和 IP 区间批量扫。流程:HTTP 探测 → 指纹匹配 → 版本提取 → 漏洞库匹配。

指纹规则是 nuclei 风格的 YAML,这是 data/fingerprints/ollama.yaml 原文:

复制代码
info:
  name: ollama
  author: 腾讯朱雀实验室
  severity: info
  metadata:
    product: ollama
    vendor: ollama
http:
  - method: GET
    path: '/'
    matchers:
      - body="Ollama is running"
version:
  - method: GET
    path: '/api/version'
    extractor:
      part: body
      group: 1
      regex: '{"version":"(\d+\.\d+\.?\d+?)"}'

两个设计点:http.matchers 只负责确认"是这个组件",版本提取单独走 version.extractor 的正则------指纹和版本解耦,CVE 匹配依赖精确版本号而不是 banner 关键词,减少误报。识别出组件版本后,漏洞匹配在 data/vuln/ 的规则里做,支持 Ollama、ComfyUI、vLLM、n8n、Triton 这些 AI 组件,不是通用 Web 漏洞库。

LLM 审计引擎:MCP/Skill 扫描的三段式流水线

MCP Server 和 Agent Skill 的扫描走另一条路:把源码(本地目录或 GitHub URL)交给 LLM agent,跑 Info Collection → Code Audit → Vulnerability Review 三段流水线。agent 通过 XML schema 注册工具(file/ls/grep/dir/base64_decode/thinking/finish)自主浏览代码、定位漏洞、输出结构化结果。CLI 用法:

复制代码
# Skill 扫描(PyPI 安装,可直接进 CI)
pip install aig-skill-scan
export LLM_API_KEY="your-api-key"
aig-skill-scan --repo /path/to/skill -m deepseek-v4-flash --language en -o result.sarif.json

# MCP 扫描:静态源码 + 动态打运行中的服务
python main.py --repo ./mcp-server -m "anthropic/claude-sonnet-4.5" -o report.sarif.json
python main.py --server_url "http://localhost:8000/sse" --prompt "Test tool poisoning"

CLI 默认单阶段模式(只跑 Code Audit),比三段快约 3 倍;输出 SARIF 2.1.0------GitHub Code Scanning、GitLab Security Dashboard、VS Code Problems 面板原生可消费,这是它进 CI 的关键设计。

MCP 风险分类是 MCP01--MCP10 + 3 个补充规则(Name Confusion 仿冒、Rug Pull 先信任后变脸、Tool Shadowing 同名工具覆盖),Skill 风险分类按 SkillTrustBench 的 T01--T09 五层:

风险
A · 指令与记忆 T01 Skill 指令劫持、T02 记忆投毒
B · 代码执行 T03 远程 payload 下载执行、T04 内嵌恶意代码
C · 系统权限 T05 提权与未授权访问、T06 系统持久化
D · 工具链与依赖 T07 工具劫持与仿冒、T08 不安全依赖
E · Skill 代码质量 T09 不安全编码实践

SkillTrustBench 基准上不同 LLM 做审计的 F1------审计质量是模型选型的函数,不是工具的:

模型 F1 Precision Recall FPR
Claude Opus 4.6 0.9848 0.9725 0.9974 0.0663
GLM 5.1 0.9836 0.9701 0.9974 0.0723
Gemini 3.5 Flash 0.9792 0.9947 0.9641 0.0120
Kimi 2.6 0.9780 0.9895 0.9667 0.0241
DeepSeek v4 Flash 0.9740 0.9868 0.9615 0.0301

Gemini 3.5 Flash 的 FPR 只有 0.012,适合当"先过滤再人工复核"的第一道闸;要低漏报(Recall 0.9974)就上 Opus 4.6。产出分三档判定:malicious(有明确攻击意图)/ suspicious(有漏洞但无攻击意图)/ normal

Agent 动态黑盒扫描

Agent Scan 不打源码,打运行中的 Agent 平台(Dify、Coze、OpenAI 兼容接口、WebSocket 等),通过 provider YAML 描述被测目标:

复制代码
targets:
  - id: "http"
    config:
      url: "http://127.0.0.1:18081"
      endpoint: "/chat"
      method: "POST"
      headers:
        Content-Type: "application/json"
      body:
        message: "{{prompt}}"
      transform_response: "reply"   # 从响应里取 Agent 回复的 JSON key

内置 10 个检测技能(默认跑 5 个核心:数据泄露、工具滥用、间接提示词注入、授权绕过、Web 外传),结果映射 OWASP ASI 分类。最大的坑是 transform_response:自定义 HTTP provider 不填它,所有响应被解析成 None,扫描结果为零------这是文档明确标注的必填项,Web UI 里对应"响应解析器"输入框。

实践记录与踩坑

  • 无鉴权,别暴露公网。README 原话:平台定位企业/个人内网自检,当前没有认证机制。Docker compose 部署要求 4GB+ 内存、10GB+ 磁盘,Web 端口 8088。
  • 恶意代码会藏。v4.5.2 新增 .pyc bytecode 绕过检测和 charset smuggling 防御------攻击者把恶意代码编译进 .pyc 躲过文本审计,或用编码混淆绕过规则匹配(pre_scan 阶段做编码异常检测)。扫第三方 Skill 时这两类要重点看。
  • 扫描器自己也会被反打。v4.5.2 在 MCP 动态模式加了工具白名单防 RCE------LLM 驱动的扫描器去连恶意 MCP server 时,对方可能反过来诱导审计 agent 执行命令。给审计 agent 的执行能力设边界,这个设计值得抄进自己的 Agent 测试基建。
  • 成本控制 :三段式(含 Review 阶段)比单阶段贵且慢。CI 里用单阶段 + SARIF 输出卡门禁,平台交互式排查再跑三段。LLM 配置走环境变量(LLM_API_KEY / LLM_MODEL / LLM_BASE_URL),配置优先级 CLI > 环境变量 > 默认值。
  • 模型分工 :mcp-scan 支持给不同任务配不同模型(THINKING_MODEL=gemini-2.5-proCODING_MODEL=claude-sonnet-4.5),推理用强模型、生成用快模型,能压不少成本。
  • 评分口径 :安全分 = max(0, 100 - Σ扣分),Critical -100 / High -40 / Medium -25 / Low-Info -10。接门禁建议按"存在 Critical 即 fail"卡,别用总分------总分会被一堆 Low 刷低,失去拦截意义。

定位与进阶方向

平台化体检和动态红队框架不冲突,可以组合:CI 里 aig-skill-scan 出 SARIF 进 Code Scanning 卡合并,夜间任务跑 Agent Scan 全量,发布前用 RAMPART 这类 pytest 插件做 Agent 行为回归(断言"特定攻击下 Agent 是否表现出预期行为")。A.I.G 的 API 也支持完整自动化(上传源码 → 创建任务 → 轮询状态 → 拉结果),适合接到自己的测试平台上。

进阶方向:SkillTrustBench 基准对齐(自建 Skill 审计器可以拿它当评测集);指纹/CVE 规则库的自动化更新(项目已按 CVE/GHSA 源做半自动对齐);越狱评估的多轮攻击方法(v4.5.1 已支持 Many-Shot、PAIR、GOAT、ActorAttack 四种)。AI 安全测试现在还是"规则 + LLM"双引擎的形态,等 Agent 工具调用边界标准化之后,大概率会往"行为契约测试"收敛------提前把资产体检和运行时断言两条链路都搭好,不亏。

相关推荐
知识分享小能手6 小时前
深度学习学习教程,从入门到精通,自编码器 — 完整知识点与代码案例(14)
人工智能·深度学习·学习
来让爷抱一个6 小时前
2026 纹理一致性实战:贴图不许花脸,百智云精灵图把材质契约写进素材包
人工智能·机器学习·材质·贴图
零依赖极客6 小时前
Day 8·1 自注意力机制:Q·K^T/softmax/V的在线计算
c语言·arm开发·人工智能·llama
幻影123!7 小时前
AlphaZero 五子棋实战(五):评估工具 —— 学会在错误的地方掉头
人工智能·机器学习·强化学习·alpha zero
jbk33117 小时前
PixiuCut「视频批量分割」支持智能镜头分割、按时长、按数量分割,可定义最小时长避免无效片段等多可选参数可设置
人工智能·音视频·剪辑软件·剪映自动化软件
诺伦7 小时前
RiseClaw玄策:GEO优化工程实战,从零搭建生成式引擎优化体系
人工智能·chatgpt
星禾元亨7 小时前
企业 AI 落地 5 步路线图:诊断、企业知识库与 GEO 获客的工程化实施步骤
大数据·人工智能·自动化·创业创新
苏打水com7 小时前
内容合规红线:大模型生成内容,哪些能做哪些会犯法?
人工智能·安全·大模型
南京兴帝文化传媒有限公司7 小时前
本地生活服务商户GEO优化技术实践:AI大模型收录机制与地图POI权重算法拆解
大数据·人工智能·算法·生活·geo优化实操·csdn运营技巧·ai内容收录