AI 赋能代码审计:静态扫描与AI Skill的协同实践

在传统代码审计流程中,依赖于静态扫描工具辅助审计漏洞,例如使用 Semgrep、CodeQL 等工具可以快速发现潜在漏洞模式,但这类工具仍然存在一个普遍问题:检测结果往往停留在规则匹配层面,缺乏上下文充分的分析能力,这导致安全人员仍然需要投入大量时间去追踪调用链、验证漏洞的真实性、以及判断漏洞可利用的价值。

当前AI Agent 技术的发展,在代码理解、跨函数分析以及复杂逻辑推理方面的能力越来越强,将 静态扫描工具 与 当前火热的 AI Skill技术结合,可以有效弥补传统代码审计带来的问题,通过让 AI 对扫描结果进行二次审计,并自动分析整个调用链,可以显著提升漏洞验证效率。

本文介绍一种 静态扫描工具 + AI Skill 实践方案用于演示验证:使用 Semgrep 进行初步漏洞扫描,再通过 AI Skill 对结果进行深入自主审计,并生成漏洞审计报告。

一、传统静态扫描的局限性

静态扫描工具通常通过规则匹配或数据流分析识别潜在漏洞,例如:

  • SQL 注入
  • 命令执行
  • 文件包含
  • 任意文件上传
  • XSS 等

但在实际使用过程中,经常会遇到以下的问题:

1. 误报率较高

例如检测如下代码

复制代码
$query = "SELECT * FROM users WHERE id=" . $_GET['id'];

工具会直接标记为 SQL 注入,但实际上可能存在

复制代码
$id = intval($_GET['id']);
$query = "SELECT * FROM users WHERE id=" . $id;

这种情况下漏洞已经被修复,但扫描工具无法理解逻辑语义。

2. 无法完整理解调用链

很多漏洞并不在当前函数内,而是通过多层调用传递

Controller

Service

DAO

数据库执行

传统扫描工具可能只定位到某个 sink,但无法完整展示:

  • 参数来源
  • 数据传播路径
  • 是否经过安全处理

审计人员需要手动追踪代码。

3. 无法判断漏洞是否真实可利用

静态规则可能只看到 source 和 sink,从而产生误报

source → sanitize → sink

二、静态扫描 + AI Skill

静态扫描 + AI Skill 思路

这种方式核心为让静态工具负责"发现线索",让 AI 负责"理解代码"

Semgrep 扫描 (漏洞规则匹配)

扫描结果解析提取 (JSON/SARIF)

AI Skill 审计

├─ 解析漏洞代码位置

├─ 提取相关函数代码

├─ 追踪完整调用链

├─ 判断是否存在安全过滤

└─ 生成漏洞分析报告

静态扫描 + AI Skill 审计流程

1. 解析扫描结果

Semgrep 可以输出 JSON 或 SARIF 格式,例如

复制代码
{ 
  "rule": "sql-injection", 
  "path": "login.php", 
  "start": { 
      "line": 82, 
      "col": 4, 
      "offset": 2459 
  }, 
  "end": { 
      "line": 82, 
      "col": 53, 
      "offset": 2508 
  }, 
  "extra": { 
 ... 
  } 
}

AI Skill 首先提取:

  • 文件路径
  • 代码位置
  • 漏洞信息

2. 提取漏洞相关代码

根据扫描结果定位到具体代码,例如

复制代码
function login() { 
    $user = $_POST['user']; 
    $pass = $_POST['pass']; 
 
    $sql = "SELECT * FROM users WHERE username='$user' AND password='$pass'"; 
    mysqli_query($conn, $sql); 
}

AI Skill 会自动获取当前函数代码、上下文代码

3. 自动追踪调用链

如果漏洞发生在某个函数内部,例如

login(user, pass);

AI Skill 会继续查找:

  • login() 的调用位置
  • 参数来源
  • 是否来自用户输入

最终构建类似如下调用链:

HTTP Request

controller.php

login()

build_sql()

mysqli_query()

4. 判断漏洞真实性

AI 根据整个调用链判断是否存在过滤或安全函数等其他数据处理,确保输入参数可被利用,例如:

  • intval
  • htmlspecialchars
  • prepare
  • escape
  • 自定义过滤函数

5. 输出报告

最终 AI 会给出报告,示例如:

漏洞类型:SQL Injection

漏洞文件:login.php

漏洞函数:login()

调用链:

HTTP Request

→ controller.php

→ login()

→ mysqli_query()

参数来源:

$_POST['user']

$_POST['pass']

过滤情况:

未发现有效的参数过滤

漏洞结论:

该漏洞真实存在,可被利用

三、静态扫描 + AI Skill 实践

0. 实践预热

编写一个semgrep规则用于测试验证,该规则匹配 php fputs函数的使用

使用semgrep指定该规则扫描某款CMS源码,发现多个结果,可以看到有一处 admin\ebak\class\functions.php 中存在 fputs写入行为

该functions.php 下的 WriteFiletext_n就是使用fputs写入文件,该函数被多处引用

人工审计的情况下,这时候就需要人工定位所有的调用链,并逐步分析代码是否存在漏洞,比较费时,当前的 AI Agent都非常强大,可以自主的理解并审查相关代码,借助AI Agent进行进一步的审计工作。

1. 编写 SKILL

编写一个简单的SKILL demo,完成以下事项

  1. 运行Semgrep扫描
  2. 解析Semgrep结果
  3. 进行深入代码审计
  4. 构造漏洞验证请求
  5. 输出漏洞报告

主要要求就是根据Semgrep的扫描结果,自主寻找出所有的调用链,并进行审计验证,确保漏洞真实有效可复测,最终给出审计报告,skill demo 如下


name: code_security_audit
description: 使用 semgrep 进行代码安全审计


技能名称

代码安全审计(Semgrep + AI 深度分析)

技能目标

对目标代码仓库进行自动化安全审计。

审计流程分为两个阶段:

  1. 使用 Semgrep 进行静态扫描,发现潜在漏洞位置

  2. 基于 Semgrep 的扫描结果进行进一步代码审计,你需要寻找所有的调用链代码,并找出可能存在漏洞的调用链,并验证

最终输出漏洞分析报告,并提供分析、调用链、漏洞验证http数据包


第一阶段:运行 Semgrep 扫描

在代码仓库根目录执行 Semgrep 扫描:

semgrep scan --config p/security-audit path --json --output semgrep_result.json

--config 参数为指定规则目录或是指定具体规则

--json 输出json格式的文件

--output 输出的文件

path 为扫描目录,未填写则检测当前所在目录

获取所有扫描结果。


第二阶段:解析 Semgrep 结果

读取 semgrep_result.json。

对于每一条发现的问题,需要提取以下信息:

  • 漏洞规则 ID

  • 文件路径

  • 代码行号

  • 触发漏洞的代码片段

  • Semgrep 提供的漏洞说明

定位漏洞代码所在的函数或方法。


第三阶段:进行二次代码审计

基于 Semgrep 发现的位置,继续分析相关代码。

重点检查:

  1. 漏洞代码所在函数

  2. 参数来源

  3. 上层调用函数

  4. Web 路由入口

尽可能还原完整调用链,例如:

HTTP请求

路由函数

控制器函数

业务函数

数据库操作或危险函数

需要判断:

  • 用户输入是否可控

  • 是否存在过滤或安全处理

  • 是否使用安全 API(例如参数化 SQL)

如果确认漏洞可被利用,则标记为真实漏洞。

如果发现存在有效防护,则是忽略该结果。


第四阶段:构造漏洞验证请求

如果漏洞真实存在,需要构造一个用于验证漏洞的 HTTP 请求示例。

例如:

SQL 注入示例:

GET /user?id=1' OR '1'='1 HTTP/1.1

Host: http://target.com

命令注入示例:

POST /ping HTTP/1.1

Host: http://target.com

Content-Type: application/x-www-form-urlencoded

host=8.8.8.8;id

根据代码中的路由路径和参数名称生成验证请求。


第五阶段:输出漏洞报告

对于每一个确认存在的漏洞,输出以下信息:

漏洞类型

漏洞位置

文件路径 + 行号

漏洞代码

完整调用链

漏洞分析

说明用户输入如何到达危险函数,并解释漏洞产生原因

漏洞验证请求

提供完整 HTTP 请求示例

最终结果需要保存为markdown文件,文件格式为 代码审计报告_xxxxx(日期时间).md


审计原则

  • 仅报告具有真实利用可能性的漏洞

  • 避免仅基于规则匹配的误报

  • 优先分析用户输入到危险函数的完整数据流

  • 重点关注 Web 输入、数据库操作、命令执行、文件操作等安全敏感点

2. Claude审计

将skill存储在项目目录 .claude\skills\code_security_audit\SKILL.md

运行claude,并下发命令,等待claude进行审计

最终审计完成,输出 3 个漏洞,并输出了漏洞报告

3. 漏洞报告

输出报告如下:

每个漏洞都有输出详细的调用链及漏洞分析

并根据审计结果提供了漏洞验证HTTP数据包:

4. 漏洞验证

漏洞审计的效果很好,以下例举漏洞1。

审计报告提供的漏洞验证如下:

漏洞1报告结果中的数据包,mypath为上传路径,tablenamep[]为代码注入参数,使用管理员cookie,发送该数据包

使用蚁剑直接连接,成功连接该webshell

可以看看该请求写入的config.php内容,tablename[] 参数会同时在两处写入内容,完全由AI自主分析并提供了一个合理的注入方式,确保两处注入代码的情况下能够正常运行的情况下,提供了一个可直接用于验证的HTTP数据包。

四、与AI SKILL自主审计的区别

静态扫描工具+AI SKILL 和 AI SKILL自主审计 效果上存在一定区别,静态扫描+AI Skill能确保结果的稳定性,AI Skill 自主审计能覆盖静态扫描规则无法覆盖到的漏洞范围

维度 静态扫描 + AI Skill AI Skill 自主审计
漏洞发现方式 规则驱动 AI 自主分析
是否依赖规则
扫描速度 较慢
误报率 中等 不稳定
逻辑漏洞检测 较弱 较强
覆盖率 不确定
成本

在实际AI安全审计中,两种方式并不是互斥关系,而是可以结合使用,这种方式可以实现 效率 + 深度 兼顾审计。

静态扫描 + AI Skill
静态扫描使用 Semgrep / CodeQL 等工具扫描代码快速发现大量潜在漏洞
AI 调用链分析AI 根据扫描结果定位代码自动追踪完整调用链
漏洞验证AI 分析参数来源判断是否存在过滤或安全处理过滤误报
最终结果高效验证规则扫描结果降低误报率

五、总结

从当前实践效果来看,"静态扫描工具 + AI Skill 审计" 是一种非常高效且稳定的方案。静态扫描工具可以快速扫描整个代码仓库,通过规则匹配发现大量潜在漏洞线索,而 AI 则可以在此基础上进行深入分析,例如自动提取相关函数、追踪完整调用链、判断是否存在安全过滤,从而有效降低误报率,提高漏洞验证效率。

完全 AI Skill 自主审计 可通过直接分析代码结构和业务逻辑,会发现一些规则难以覆盖的漏洞类型,例如权限绕过、业务逻辑缺陷以及复杂的数据流问题,这种方式更接近人工代码审计的思路。

综合来看,当前这两种方式并不是相互替代的关系,而是可以形成互补。静态扫描工具在覆盖率和效率方面具有明显优势,而 AI 在代码理解和逻辑分析方面更具潜力,将两者结合,可以在保证扫描效率的同时提升漏洞分析深度,从而获得更好的审计效果。

相关推荐
hh.h.9 小时前
PyTorch模型适配昇腾NPU:从零开始的端到端流程
人工智能·pytorch·python·cann
老詹图解IT9 小时前
AI时代的个人隐私与网络安全自保——从账号密码到设备行为的完整体系
人工智能·安全·web安全
MediaTea10 小时前
DL:循环神经网络的基本原理与 PyTorch 实现
人工智能·pytorch·rnn·深度学习·神经网络
幸运的大号暖贴10 小时前
AI LED Light — 给你的 AI 编程助手做一个实体指示灯
人工智能
2601_9571909010 小时前
迷拟极速飞车:多人同台竞速,轻量化高效落地
人工智能
徐安安ye10 小时前
FlashAttention的OOM排查:为什么显存够了还是报内存不足?
人工智能·算法·机器学习
灰灰勇闯IT10 小时前
AI Agent 推理:从单次对话到多轮工具调用
人工智能·microsoft
L、21810 小时前
CANN异构计算实践:CPU+NPU协同工作的最佳模式
网络·人工智能·pytorch·python·安全
nix.gnehc10 小时前
agentic 源码深度拆解:启动流程与会话调用流程全解
人工智能·agent