AI代码审计框架搭建
前言
最近ai发展太快了,面试经常被问到ai相关知识,但是又苦于没有找到一套成熟的ai安全学习路线。
直到我到长亭实习之后,接触到了很多ai代码审计的案例,然后我找到了一套比较好用的AI代码审计框架。打算将学习过程做一个分享,这篇文章只是审计环境的搭建,后续会写一些案例。

AI安全中的一些基本概念
Agent
agent最早的含义是"能够自主行动的主体"。在AI时代之前,agent主要指能自动帮用户完成某一类工作的程序,但是这时候的agent并不是一个主体,也不能自由行动,只能按照设定好的代码来执行任务。
直到AI的出现,agent才真正回归了其主体性(至少表面上像一个主体),所以AI-agent简单来理解就是能够自主决策,自主使用工具的大模型。AI-agent的出现让AI不仅仅是一个只会回答问题的模型,而是一个能将用户的自然语言描述的任务落地实现的智能体。
skill
在 Claude Code 里,Skill 是一段可复用的、带触发条件的指令包。本质就是一个 Markdown文件。
skill里面需要写清楚「什么时候该用我」「用我时按什么步骤做」「不要做什么」。Claude 在跟你对话时会根据 Skill 的 description自动判断是否调用,或者你手动 /skill名 触发。
好的skill可以辅助ai决策,从而实现省token,减少幻觉的产生
文件位置
| 路径 | 作用域 |
|---|---|
| ~/.claude/skills/ |
用户级(所有项目) |
| 项目级 |
Windows 下 ~ 即 C:\Users\username\
skill目录结构
my-first-skill/
├── SKILL.md # 必需:主文件
├── scripts/ # 可选:可执行脚本
│ └── helper.py
├── references/ # 可选:参考文档
│ └── api-guide.md
└── assets/ # 可选:模板资源
└── template.docx
skill模板
---
name: skill-name
description: 第三人称描述。说明技能做什么以及何时使用。
---
# 技能标题
## 正文内容
正文标题可以是审计步骤、、输出结构、注意事项、参考内容等,正文内容分点写清楚就行
一些注意点
- 文件名必须是
SKILL.md - 文件夹命名必须用kebab-case(小写+连字符),比如
my-first-skill - 文件夹里不要放
README.md,所有说明写在SKILL.md或者references/里
mcp
mcp(Model Context Protocol)即模型上下文协议,他是AI和工具之间的一个中间协议层,AI通过mcp协议可以更加高效的访问某个软件中的数据和调用操作接口。
有的软件有专门的mcp支持,比如neo4j、idea、github等,但是本地的agent其实不用mvp接口也可以实现访问数据和操作。
环境介绍
虽然ai代码审计能力很强,还有各种agent,但是直接将源码喂给ai做审计是一个不太明智的选择,因为如果代码量比较大,烧Token不说,效率还低。所以目前的解决方案就是结合人工审计的思路,先将源码或者打包文件用工具处理,初步的寻找一些可能的漏洞链路然后再交由AI做验证,最终人工确认。
目前的一些工具组合
- SinkFinder+Claude Code
- Tabby+neo4j+Claude Code
- codeql+Claude Code
整个过程,需要人工处理的就是写skill,指导ai按步骤完成任务、按照标准的格式输出。最后就是确认漏洞利用链路和构造exp。
AI工具
- Claude Code
- OPUS4.7
ide
- Windsurf
- idea
污点分析
- Tabby
- SinkFinder
- neo4j
环境配置
参考文档
官方文档:https://www.yuque.com/wh1t3p1g/tp0c1t
https://cina666.github.io/2025/03/24/工具tabby的学习之路/
Tabby+neo4j
安装JDK21
- 首先安装JDK,最新版的neo4j数据库需要JDK21
https://www.oracle.com/java/technologies/downloads/archive/
安装neo4j
- neo4j直接去官网下载即可,这里建议不要下载desktop版本的
https://neo4j.com/product/community-edition/

下载Neo4j 5.26.25版本,下载好后解压即可
进入bin目录,执行
neo4j console

成功之后访问

默认账号密码neo4j/neo4j

安装插件
根据官方文档,适配tabby需要两个插件
apoc 插件
Neo4j v5 版本 apoc 插件改成了两个部分 apoc-core 和 apoc-extend,可自行在以下两个库下载
- apoc-core https://github.com/neo4j/apoc
- apoc-extended https://github.com/neo4j-contrib/neo4j-apoc-procedures
关于 apoc 插件的版本选择方法:Neo4j 数据库版本的前两位对应 apoc 插件的版本
比如 Neo4j 数据库版本为 v5.3.0,则选择 apoc 插件 v5.3.x 版本
tabby-path-finder 插件
该插件集成了图上的污点传递规则,可以进一步减少误报链路的产生。
项目地址 https://github.com/wh1t3p1g/tabby-path-finder ,下载打包生成对应 jar 文件
注意版本对应,下载好后放在plugins文件夹后即可
配置neo4j
conf\neo4j.conf
- 取消以下配置注释
server.directories.import=import
- 允许加载插件
将
#dbms.security.procedures.allowlist=apoc.coll.*,apoc.load.*,gds.*
改为
dbms.security.procedures.unrestricted=jwt.security.*,apoc.*
- 运行时配置
根据实际情况来,推荐如下配置

- 配置插件
在conf目录下创建一个新文件apoc.conf
apoc.import.file.enabled=true
apoc.import.file.use_neo4j_config=false
执行CALL apoc.help('all')检查插件是否配置成功

执行CALL tabby.help('tabby')检查tabby是否配置成功
建立索引
为了加快导入/删除的速度,这里提前对节点进行索引建立
CREATE CONSTRAINT c1 IF NOT EXISTS FOR (c:Class) REQUIRE c.ID IS UNIQUE;
CREATE CONSTRAINT c2 IF NOT EXISTS FOR (c:Class) REQUIRE c.NAME IS UNIQUE;
CREATE CONSTRAINT c3 IF NOT EXISTS FOR (m:Method) REQUIRE m.ID IS UNIQUE;
CREATE CONSTRAINT c4 IF NOT EXISTS FOR (m:Method) REQUIRE m.SIGNATURE IS UNIQUE;
CREATE INDEX index1 IF NOT EXISTS FOR (m:Method) ON (m.NAME);
CREATE INDEX index2 IF NOT EXISTS FOR (m:Method) ON (m.CLASSNAME);
CREATE INDEX index3 IF NOT EXISTS FOR (m:Method) ON (m.NAME, m.CLASSNAME);
CREATE INDEX index4 IF NOT EXISTS FOR (m:Method) ON (m.NAME, m.NAME0);
CREATE INDEX index5 IF NOT EXISTS FOR (m:Method) ON (m.SIGNATURE);
CREATE INDEX index6 IF NOT EXISTS FOR (m:Method) ON (m.NAME0);
CREATE INDEX index7 IF NOT EXISTS FOR (m:Method) ON (m.NAME0, m.CLASSNAME);
:schema //查看表库
:sysinfo //查看数据库信息

如果经过很多的导入/删除操作,图数据库占用了很多的硬盘存储,那么可以将原有的图数据库删除,重新按照上面的步骤新建图数据库。 删除所有约束
DROP CONSTRAINT c1;
DROP CONSTRAINT c2;
DROP CONSTRAINT c3;
DROP CONSTRAINT c4;
DROP INDEX index1;
DROP INDEX index2;
DROP INDEX index3;
DROP INDEX index4;
DROP INDEX index5;
DROP INDEX index6;
DROP INDEX index7;
安装tabby-vul-finder
这款工具是用于将tabby的扫描结果上传到neo4j的
https://github.com/tabby-sec/tabby-vul-finder
注意在release中下载
配置config/db.properties

生成jar文件
mvn clean package -DskipTests
配置tabby
config/settings.properties

具体配置详情看官方文档
测试
修改配置后执行
java -Xmx8G -jar tabby.jar
然后会在配置文件的指定路径生成几个csv文件

使用tabby-vul-finder上传到neo4j数据库
java -jar tabby-vul-finder.jar load <path>
查询反序列化入口
MATCH (source:Method)
WHERE source.NAME IN ["readObject"]
RETURN source
LIMIT 100

SinkFinder
直接github下载
https://github.com/Phelaine/SinkFinder
java -jar SinkFinder-2.0-jar-with-dependencies.jar -p <path> -d 10
直接在/logs目录下生成结果,叫claude审计分析结果然后结合源码分析即可
Windsurf
官网下载
使用方法和VS Code一样
配置Claude Code
下载插件

终端下载claude-code
npm install -g @anthropic-ai/claude-code
注意需要改下cmd的代理才能登陆
set HTTPS_PROXY=http://127.0.0.1:10808
set HTTP_PROXY=http://127.0.0.1:10808

需要去官网注册一个号然后订阅pro计划
-
注册可以使用google账号
-
国外手机号码可以使用接码平台
-
订阅pro去咸鱼买
不用订阅这个计划也可以,claude code是可以接入其他大模型的,这里推荐GLM( https://bigmodel.cn/ )
codeQL
首先下载以下两个组件
https://github.com/github/codeql-cli-binaries/
然后在windsurf中安装codeql插件

然后配置codeql路径

这里测试用https://github.com/l4yn3/micro_service_seclab/
创建数据库
codeql database create D:\web\outnet\tools\sast\codeql-win64\database\micro_service_seclab --language="java" --command="mvn clean install -DskipTests" --source-root=D:\web\outnet\tools\sast\codeql-win64\source\micro_service_seclab-main
注意一下这里用高版本的jdk编译会报错,如果你的电脑上用的高版本JDK,可以临时改一下cmd使用的JDK版本
set JAVA_HOME=C:\Java\jdk-1.8.0-401
set PATH=%JAVA_HOME%\bin;%PATH%

导入database

在windsurf中打开之前下载的ql项目文件夹,然后在ql/java/ql/src目录下新建一个查询文件demo.ql
然后写一个测试查询语句
select "Hello World"
执行的时候右键文件在codeql插件中执行



浙公网安备 33010602011771号