【AiCodeAudit 2.0 发布:基于调用图与局部子图的 AI 代码安全审计平台】

本文是 AiCodeAudit 的2.0 大版本更新介绍 。如果你之前了解过 1.0 版本,本文将重点介绍静态解析引擎、Web 可视化界面及结构化报告等新特性;如果你是新用户,本文将作为完整的使用指南。

一、 工具简介




AiCodeAudit 是一个基于大语言模型(LLM)的自动化代码安全审计工具。与传统的正则匹配或纯 RAG(检索增强生成)方案不同,它通过构建项目的函数级调用图 ,结合局部子图上下文进行 AI 推理,显著提升了漏洞链路的识别准确率。

核心升级点(2.0 vs 1.0):

  • 多语言静态解析 :引入 Tree-sitter 引擎,支持 Python、Java、Go 等 8+ 语言的 AST 依赖提取,大幅降低对 LLM 的依赖。
  • Streamlit Web 服务:提供图形化界面,支持 ZIP 项目包上传、交互式依赖图谱可视化。
  • 结构化审计报告:采用 XML-like 标签格式输出,便于自动化解析与集成。

项目地址https://github.com/xy200303/AiCodeAudit


二、 核心架构与技术原理

2.1 为什么是"调用图"而非"全文检索"?

传统的 AI 代码审计多将代码切片后存入向量库进行相似度检索。这种方式容易丢失调用链路信息。AiCodeAudit 的核心思路是:

  1. 构建知识图谱:将代码库解析为基本单元(函数、方法、类),并建立它们之间的调用关系(Call Graph)。
  2. 局部子图审计 :针对每个疑似风险点(如 SQL 执行函数),提取其上游调用路径 (数据来源)和下游调用路径(数据处理),形成一个局部的上下文子图。
  3. AI 上下文推理 :将子图代码块送入 LLM,让模型基于"数据流"而非"片段"判断是否存在"外部输入 → 危险操作 → 缺少校验"的完整漏洞链。

2.2 双引擎依赖解析(Tree-sitter + LLM)

2.0 版本最大的改进在于引入了静态分析,解决了 1.0 版本完全依赖 LLM 提取依赖导致的速度慢、成本高问题。

引擎 模式 说明
Tree-sitter (默认) auto / ast 对 Python、Java、Go、JS 等主流语言,优先使用 AST 解析器提取函数定义与调用关系,速度快、精度高。
LLM (Agent_1) llm / 回退 当静态解析失败或遇到冷门语言时,回退至大模型进行代码理解,保证兼容性。

三、 2.0 版本新特性详解

3.1 多语言 Tree-sitter 静态解析

config.yaml 中,你可以配置依赖解析引擎:

yaml 复制代码
# config.yaml 示例
dependency_parse_engine: "auto"  # 可选: auto, ast, llm
  • auto :对已接入的语言(如 .py, .java)使用 Tree-sitter,未接入的使用 LLM。
  • ast:强制使用静态解析,失败则跳过(适合纯主流语言项目)。
  • llm:强制使用 LLM(兼容 1.0 行为)。

3.2 Streamlit Web 可视化界面

无需命令行操作,一键启动 Web 服务进行审计。

启动方式:

bash 复制代码
streamlit run app.py

Web 功能亮点:

  • 项目上传:直接上传项目 ZIP 压缩包,自动解压分析。
  • 三栏式布局
    • 分析:配置并启动审计任务。
    • 结果可视化:以表格形式查看"确认风险"、"可疑风险"及"审计通过"的漏洞详情。
    • 依赖可视化:查看交互式调用图谱(基于 GraphML),支持节点搜索与关系查看。
  • 中文优化:修复了图谱中文乱码问题,完美支持中文项目。

3.3 结构化审计报告

2.0 版本将原本的自然语言报告升级为稳定的标签化结构,便于 CI/CD 流水线解析。

报告示例:

xml 复制代码
<审计报告>
<文件>
路径: /src/user/login.py
结论: 存在风险
<漏洞>
类型: SQL注入
等级: 高危
位置: L47-L49
<代码特征>
cursor.execute("SELECT * FROM users WHERE name = '" + username + "'")
</代码特征>
<攻击向量>
攻击者控制 username 并进入 SQL 拼接语句。
</攻击向量>
<潜在影响>
可导致任意用户数据查询和认证绕过。
</潜在影响>
<修复建议>
改为参数化查询,禁止字符串拼接 SQL。
</修复建议>
</漏洞>
</文件>
</审计报告>

四、 快速开始(安装与使用)

4.1 环境准备

bash 复制代码
git clone https://github.com/xy200303/AiCodeAudit.git
cd AiCodeAudit

# 方式一:使用 requirements.txt
pip install -r requirements.txt

# 方式二:使用 pyproject.toml (推荐)
pip install -e .

4.2 配置 API 密钥

复制 config.example.yamlconfig.yaml,并修改 OpenAI 相关配置:

yaml 复制代码
openai:
  api_key: "your-api-key"           # 必填
  base_url: "https://api.openai.com/v1"  # 或你的兼容接口
  model: "gpt-4o"                   # 推荐使用 GPT-4 系列模型
  timeout_seconds: 120
  max_retries: 3

4.3 命令行使用(CLI)

bash 复制代码
# 基本用法(使用默认演示项目)
python main.py

# 指定项目目录和输出路径
python main.py -d ./your-project -o ./audit-results -b 10

# 如果使用 pip install -e . 安装,可直接运行
aicodeaudit -d ./your-project

4.4 Web 界面使用

bash 复制代码
streamlit run app.py

访问 http://localhost:8501,在侧边栏"分析"页上传 ZIP 文件即可。


五、 实战效果演示

5.1 依赖图谱(Dependency Graph)

审计完成后,会在 output/ 目录生成 .graphml 文件,Web 界面可直接渲染。你可以清晰地看到函数之间的调用关系,这是发现"跨文件漏洞"的关键。

5.2 分层审计结果

  • 确认风险:高置信度漏洞,如明确的 SQLi、XSS。
  • 可疑风险:存在安全隐患但需人工复核的代码。
  • 审计通过:未发现明显风险的代码块(Web 界面默认折叠,避免信息过载)。

六、 总结

AiCodeAudit 2.0 解决了什么痛点?

  1. 精准性:通过调用图局部子图,避免了 RAG 检索中常见的"上下文缺失"问题,让 LLM 能看到完整的漏洞链路。
  2. 效率:Tree-sitter 静态解析将依赖提取速度提升了数个数量级,并降低了 API 调用成本。
  3. 易用性:Streamlit Web 界面让安全人员无需搭建开发环境即可进行代码审计。

适用场景

  • 开源组件安全评估
  • 企业自研代码的 CI 集成
  • 红蓝对抗中的代码审计环节

注意:AiCodeAudit 是辅助工具,其输出结果仍需专业安全人员进行最终确认。建议在测试环境中使用,避免直接用于生产环境决策。

相关链接

相关推荐
承渊政道2 小时前
Prompt工程:连接大语言模型能力与真实应用的关键桥梁
人工智能·深度学习·语言模型·自然语言处理·chatgpt·prompt·transformer
王_teacher8 小时前
RNN 循环神经网络 计算过程(通俗+公式版+运行实例)
人工智能·rnn·nlp
玩转单片机与嵌入式8 小时前
一个成熟的嵌入式AI系统,是长什么样子的?
人工智能·单片机·嵌入式硬件·嵌入式ai
KD9 小时前
OpenClaw——让龙虾像真人一样控制桌面的SKILL(macOS版)
github
TechWayfarer10 小时前
知乎/微博的IP属地显示为什么偶尔错误?用IP归属地查询平台自检工具3步验证
网络·python·网络协议·tcp/ip·网络安全
曦樂~10 小时前
【机器学习】概述
人工智能·机器学习
DeniuHe10 小时前
机器学习模型中的偏置项(bias / 截距项)到底有什么用?
人工智能·机器学习
小江的记录本11 小时前
【网络安全】《网络安全常见攻击与防御》(附:《六大攻击核心特性横向对比表》)
java·网络·人工智能·后端·python·安全·web安全
深小乐11 小时前
AI 周刊【2026.04.13-04.19】:中美差距减小、Claude Opus 4.7发布、国产算力突围
人工智能