使用llm来辅助静态扫描的人工审计
字数 1297 2025-08-23 18:31:34

使用LLM辅助静态扫描的人工审计系统构建指南

1. 系统概述

本系统结合静态代码扫描工具(SAST)与大型语言模型(LLM),构建一个自动化的代码审计系统。核心思想是:

  • 先用静态扫描工具进行初步代码审计
  • 再利用LLM辅助确认审计结果
  • 通过两者的结合提高审计效率和准确性

2. 技术选型

2.1 静态扫描工具

推荐工具

  • Semgrep:规则编写简单易学,适合快速扫描
  • CodeQL:强大的污点追踪能力,适合深入分析

选择理由

  • 两者都支持SARIF格式输出
  • 互补性强:Semgrep快速扫描,CodeQL深入分析

2.2 输出格式

SARIF格式

  • 静态分析结果交换标准(OASIS标准)
  • JSON格式,兼容性强
  • 目前版本2.1.0
  • 主流静态扫描工具都支持

3. LLM选择与配置

3.1 模型选择

推荐选项

  • GPT-3.5 32k API
  • 考虑因素:价格、token限制(100k+)、性能

替代方案

  • 微调专用代码审计模型(需高质量数据集)

3.2 系统架构

参考项目

  • 基于Choccy项目(CodeQL前端)进行改造
  • 添加Semgrep扫描和LLM分析功能

实现效果

  • 统一界面展示Semgrep/CodeQL扫描结果
  • LLM分析结果与扫描结果并列展示

4. Prompt工程

4.1 基本Prompt构建

Semgrep场景

  • 包含sink点周围代码
  • Token允许时包含整个文件
  • 添加规则描述作为上下文

CodeQL场景

  • 包含sink点附近代码
  • 包含相关source代码(利用污点分析)
  • 添加规则描述

4.2 Prompt优化策略

SAST规则描述优化

  • 添加漏洞修复方法说明
  • 包含企业特有修复方案
  • 示例:XXE防护的各种配置方法

输入代码优化

  • 包含相关包引入信息
  • 包含配置检查(如fastjson的autotype配置)
  • 包含框架特定信息

4.3 规则设计策略

负优化策略

  • 放宽sink判断规则
  • 保留source污点分析
  • 依赖LLM降低误报率
  • 提高漏洞发现覆盖率

5. 扩展应用场景

5.1 非传统SAST应用

增量API提取

  • 识别不规范编写的API
  • 替代复杂的手工规则

5.2 其他安全领域应用

适用场景

  • 任何需要理解能力的任务
  • 流程化工作的自动化(通过agent实现)

6. 实现示例

6.1 系统界面

展示两种扫描结果与LLM分析的并列视图:

  1. Semgrep扫描+LLM分析页面
  2. CodeQL扫描+LLM分析页面

6.2 代码示例

XXE防护代码示例

xmlReader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
xmlReader.setFeature("http://xml.org/sax/features/external-general-entities", false);
xmlReader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
factory.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, "");
factory.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");
factory.setProperty(XMLInputFactory.SUPPORT_DTD, false);
factory.setProperty("javax.xml.stream.isSupportingExternalEntities", false);

7. 最佳实践

  1. 分层审计:先用Semgrep快速扫描,再用CodeQL深入分析
  2. 上下文丰富:为LLM提供尽可能多的相关代码和规则描述
  3. 规则平衡:在规则精确性和覆盖率之间找到平衡
  4. 持续优化:根据LLM反馈调整SAST规则和prompt
  5. 领域适配:针对企业特定框架和习惯定制prompt

8. 未来方向

  1. 自动化agent:实现全流程自动化审计
  2. 专用模型:微调领域专用代码审计模型
  3. 多工具集成:整合更多SAST工具的输出
  4. 智能交互:实现审计过程中的智能问答功能
使用LLM辅助静态扫描的人工审计系统构建指南 1. 系统概述 本系统结合静态代码扫描工具(SAST)与大型语言模型(LLM),构建一个自动化的代码审计系统。核心思想是: 先用静态扫描工具进行初步代码审计 再利用LLM辅助确认审计结果 通过两者的结合提高审计效率和准确性 2. 技术选型 2.1 静态扫描工具 推荐工具 : Semgrep :规则编写简单易学,适合快速扫描 CodeQL :强大的污点追踪能力,适合深入分析 选择理由 : 两者都支持SARIF格式输出 互补性强:Semgrep快速扫描,CodeQL深入分析 2.2 输出格式 SARIF格式 : 静态分析结果交换标准(OASIS标准) JSON格式,兼容性强 目前版本2.1.0 主流静态扫描工具都支持 3. LLM选择与配置 3.1 模型选择 推荐选项 : GPT-3.5 32k API 考虑因素:价格、token限制(100k+)、性能 替代方案 : 微调专用代码审计模型(需高质量数据集) 3.2 系统架构 参考项目 : 基于Choccy项目(CodeQL前端)进行改造 添加Semgrep扫描和LLM分析功能 实现效果 : 统一界面展示Semgrep/CodeQL扫描结果 LLM分析结果与扫描结果并列展示 4. Prompt工程 4.1 基本Prompt构建 Semgrep场景 : 包含sink点周围代码 Token允许时包含整个文件 添加规则描述作为上下文 CodeQL场景 : 包含sink点附近代码 包含相关source代码(利用污点分析) 添加规则描述 4.2 Prompt优化策略 SAST规则描述优化 : 添加漏洞修复方法说明 包含企业特有修复方案 示例:XXE防护的各种配置方法 输入代码优化 : 包含相关包引入信息 包含配置检查(如fastjson的autotype配置) 包含框架特定信息 4.3 规则设计策略 负优化策略 : 放宽sink判断规则 保留source污点分析 依赖LLM降低误报率 提高漏洞发现覆盖率 5. 扩展应用场景 5.1 非传统SAST应用 增量API提取 : 识别不规范编写的API 替代复杂的手工规则 5.2 其他安全领域应用 适用场景 : 任何需要理解能力的任务 流程化工作的自动化(通过agent实现) 6. 实现示例 6.1 系统界面 展示两种扫描结果与LLM分析的并列视图: Semgrep扫描+LLM分析页面 CodeQL扫描+LLM分析页面 6.2 代码示例 XXE防护代码示例 : 7. 最佳实践 分层审计 :先用Semgrep快速扫描,再用CodeQL深入分析 上下文丰富 :为LLM提供尽可能多的相关代码和规则描述 规则平衡 :在规则精确性和覆盖率之间找到平衡 持续优化 :根据LLM反馈调整SAST规则和prompt 领域适配 :针对企业特定框架和习惯定制prompt 8. 未来方向 自动化agent :实现全流程自动化审计 专用模型 :微调领域专用代码审计模型 多工具集成 :整合更多SAST工具的输出 智能交互 :实现审计过程中的智能问答功能