聊聊代码审计不只靠人工逐行看:用 DeepAudit 跑一遍项目级 AI 安全检查

刷到一个挺有意思的话题,结合自己之前的经验,整理了一下核心要点。

代码审计不只靠人工逐行看:用 DeepAudit 跑一遍项目级 AI 安全检查

前言

代码审计最容易让人疲惫的地方,不是看懂某一段代码,而是项目一大以后,谁也不敢保证自己把所有调用关系、参数流向和边界条件都盯住了。SQL 注入、XSS、权限绕过这类问题有时藏在很普通的业务逻辑里,靠人工逐文件排查既慢,也很容易被重复劳动拖垮。我愿意让 AI 参与这种工作,但不会把“模型给出高危结论”直接当成漏洞已经坐实;对安全审计来说,发现线索、定位代码、验证风险和给出修复建议,本来就是不同阶段。尤其是涉及权限、数据访问或真正可利用性的判断时,我更希望看到完整证据链,而不是只看一个风险标签。

这次我在 Windows + Docker 环境里部署 DeepAudit v3.0.0,配置通义千问 qwen-max 和 Qwen 嵌入模型,再上传一个旧的 Java SpringBoot 项目跑 Agent 智能审计,实际查看索引、Multi-Agent 协作流程、审计报告、高危问题和即时分析结果。确认本地 http://localhost:3000 可以正常用以后,再安装 cpolar,把前端页面映射到公网,先测试随机地址,最后切换到固定二级子域名 deepaudit。整篇更关注的是:AI 能不能把审计线索、代码位置、验证过程和报告串起来,而不是把“几秒扫完整项目”当成结论。 对我来说,只有这些环节能互相对得上,AI 审计才真正有参考价值。

1. DeepAudit 在这套流程里负责什么?

DeepAudit 是一套面向代码安全审计的 AI 工具。当前介绍把它定义为开源代码漏洞挖掘多智能体系统,通过多个 Agent 协作做好项目识别、代码分析、风险定位、验证和报告输出。

当前架构里主要有四个角色:

  • Orchestrator:接收任务、识别项目类型并安排审计流程;
  • Recon Agent:扫描项目结构、框架、库和 API,梳理攻击面;
  • Analysis Agent:结合 RAG、AST 等信息继续分析代码;
  • Verification Agent:生成 PoC,并在 Docker 沙箱中验证发现的问题。
我更愿意把它理解成一个“自动化安全审计工作台”,而不是把它当成能够替代人工安全审查的最终裁判。

真正值得看的,是它能不能把:

项目导入 → 索引 → 分析 → 验证 → 报告

这条链真正跑起来。

2. Windows 上先把 DeepAudit 跑起来

这次直接通过 Docker Compose 部署。

在 Windows 中按 Win + R,输入 cmd,打开命令提示符,然后执行:

curl -fsSL https://raw.githubusercontent.com/lintsinghua/DeepAudit/v3.0.0/docker-compose.prod.yml | docker compose -f - up -d

命令执行做好以后,检查容器:

docker ps

当前流程里可以看到 4 个容器:

  • admin-frontend-1:前端服务,端口 3000
  • admin-backend-1:后端 API,端口 8000
  • admin-redis-1:Redis;
  • admin-db-1:PostgreSQL。
然后浏览器访问:

http://localhost:3000

DeepAudit 登录页面能正常显示以后,本地服务这一层才算跑通。

3. 先配置 LLM,再谈 AI 审计

注册账号并登录以后进入主界面。

打开【系统管理 → 系统配置】。

当前演示用通义千问。

阿里云百炼免费额度页面地址为:

https://bailian.console.aliyun.com/?tab=model#/model-usage/free-quota?modelType=Text

当前操作里,qwen-plus 的额度已经用完,因此改用:

qwen-max

接着进入密钥管理。

创建并复制 API Key。

把 API Key 填入 DeepAudit,点击测试。

出现连接成功以后,再保存所有更改。

这里有一个边界我算是在意:模型能连接成功,只代表 LLM 配置可用,不代表后面的漏洞判断一定正确。 安全审计还是要继续看代码位置、上下文和验证结果。

4. 再配置嵌入模型

切换到嵌入模型页面。

当前操作里:

  • 提供商选择 Qwen
  • 模型选择预设 v4 版本;
  • API Key 继续用前面已经创建的密钥。

测试通过以后,保存配置和所有更改。

到这里,DeepAudit 后续做项目索引和语义检索得的模型层才算准备完整。

5. 项目级审计先从“创建项目”开始

进入【项目管理】。

第一次使用时,页面提示项目尚未初始化,可以点击【新建项目】。

当前支持两种导入方式。

5.1 Git 仓库导入

可以填写:

  • GitHub、GitLab 等仓库类型;
  • Git 仓库 URL;
  • 默认分支,如 mainmaster
  • 技术栈,例如 JavaScript、TypeScript、Python、Java、Go。

5.2 上传源码

也可以直接上传 ZIP 压缩包。

这次实际使用的是一个几年前写的 Java SpringBoot 项目,通过上传源码创建。

项目创建做好以后,会出现在项目管理列表中。

6. Agent 智能审计和快速扫描不是一回事

进入项目审计页面以后,当前提供两种模式:

Agent 智能审计

  • 由 LLM 驱动;
  • 多 Agent 协同分析;
  • 支持更深的代码关系分析和验证;
  • 更适合得继续追踪上下文的场景。

快速扫描

  • 偏传统规则引擎;
  • 更适合快速批量检查;
  • 速度更快,但分析深度相对有限。
这次使用 Agent 审计模式。

选择项目后,点击启动 Agent 审计。

随后可以看到项目先做索引和嵌入,再进入编排审计流程。

这一步说明 DeepAudit 并不是简单把所有代码一次性扔给模型,而是先建立项目索引,再让多个 Agent 分工工作。

7. 看 AGENT TREE,比只看“发现几个漏洞”更重要

审计过程中,侧面的 AGENT TREE 会展示 Multi-Agent 协作过程。

当前流程包括:

1. Orchestrator 分析项目并制定策略;
2. Recon Agent 扫描项目结构和攻击面;
3. Analysis Agent 继续深度分析;
4. Verification Agent 做沙箱验证。

同时还能看到:

  • 审计进度;
  • 已分析文件数量;
  • 当前发现的问题数;
  • 不同 Agent 的任务状态。

当前示例里还展示了跨方法联合审计:注册方法中调用了相关校验方法,Agent 会继续追到校验逻辑中检查是否存在问题。

这类跨方法关系,正是 AI 审计比单纯关键词扫描更值得观察的部分。

8. 报告里真正理应看的,是证据链

审计收尾后,底部会出现成功日志。

也可以点击右上角:

EXPORT

当前支持导出:

  • Markdown;
  • JSON;
  • HTML。

HTML 报告可以直接预览。

继续看高危问题。

当前报告会给出:

  • 漏洞描述;
  • 关键代码位置;
  • 修复建议。
我不会因为报告里写了“高危”就直接认定它一定可利用。对真正影响业务的安全问题,仍然理应结合代码上下文、验证记录和实际运行环境继续确认。

DeepAudit 在这里更像是把“找线索、追代码、整理证据”这部分工作提前做掉。

9. 不想导入整个项目,也可以做即时分析

除了项目管理,DeepAudit 还提供即时分析。

进入【即时分析】以后,可以:

1. 选择编程语言;
2. 直接粘贴代码,或者上传文件;
3. 选择提示词模板;
4. 点击【开始分析】。

当前介绍里,分析结果会包括:

  • 问题列表;
  • 严重程度;
  • 修复建议;
  • 代码片段高亮。

即时分析更适合临时检查某段可疑代码、做代码 Review 前预检查,或者学习安全编码规范。

项目级 Agent 审计和即时分析解决的是不同规模的问题,不必强行只选一种。

10. 本地审计跑通以后,再考虑远程访问

前面已经能够通过:

http://localhost:3000

打开 DeepAudit。

如果只在当前电脑上使用,到这里已经够了。

但如果 DeepAudit 部署在家里的台式机,人在公司想看审计进度,或者希望从另一台设备打开管理页面,就得再补一层公网入口。

cpolar 在这里的职责很明确:

只把 DeepAudit 前端 3000 Web 页面提供到公网。

它不参与代码索引、LLM 分析、漏洞验证或报告生成。

11. Windows 安装 cpolar

打开 cpolar 下载页面,下载 64-bit 安装包。

解压并完成安装以后,在 CMD 里执行:

cpolar version

能够看到版本信息以后,继续注册账号。

进入注册页面。

注册完成后,在浏览器访问:

http://127.0.0.1:9200

登录 Web UI。

12. 把 DeepAudit 的 3000 端口映射到公网

进入【隧道管理 → 隧道列表】。

当前页面默认有:

  • remoteDesktop3389 / TCP;
  • website8080 / HTTP。

编辑 website 隧道,把它修改成 DeepAudit 需要的配置。

更新以后,在在线隧道列表中可以看到两条 deepaudit 地址:

  • HTTP;
  • HTTPS。

使用 HTTPS 做访问测试。

DeepAudit 登录页面可以正常打开。

这一层验证的是:

DeepAudit 3000 → cpolar → 公网浏览器。

13. 长期使用再配置固定二级子域名

随机公网地址适合先验证。

当前说明里记录,免费随机域名大约每 24 小时会变化一次。

如果 DeepAudit 会长期远程使用,再切换到固定二级子域名更方便。

进入预留页面:

https://dashboard.cpolar.com/reserved

在【保留二级子域名】中填写地区、名称和可选描述。

当前记录为:

  • 地区:China Top
  • 二级域名:deepaudit
不同账号以自己实际保留结果为准。

然后回到【隧道管理 → 隧道列表】,找到:

deepaudit

点击编辑,把域名类型改成:

二级子域名

再填写前面已经保留好的名称。

更新以后,在线隧道列表会显示固定二级子域名形式。

继续使用 HTTPS 访问。

页面可以正常打开。

再登录验证。

登录成功以后,远程管理入口这一层也跑通了。

总结

DeepAudit 真正让我觉得有价值的地方,不是“AI 几秒扫完项目”,而是它尝试把代码审计里最费时间的几件事串起来:

项目导入 → 索引 → Multi-Agent 分析 → 代码关系追踪 → 沙箱验证 → 报告 → 即时分析。

这次实际跑通的主线是:

Windows → Docker Compose → DeepAudit v3.0.0 → localhost:3000 → 通义千问 qwen-max → Qwen 嵌入模型 → Java SpringBoot 项目 → Agent 智能审计 → AGENT TREE → 报告导出 → 高危问题查看 → 即时分析 → cpolar → 3000 → 随机公网 → 固定二级子域名 deepaudit

我更愿意把 DeepAudit 当成“提高审计覆盖和整理效率的助手”,而不是把安全判断完全交给 AI。真正重要的漏洞,仍然理应继续做人工复核和环境验证。

cpolar 同样只负责远程 Web 入口,不改变 DeepAudit 的审计逻辑。把这两个边界分开以后,整套系统反而更容易理解:DeepAudit 负责找问题,cpolar 负责让你在别的设备上打开这个审计工作台。


暂时整理到这里。以上都是个人理解,可能有疏漏,欢迎指正。

评论 (0)

暂无评论