vulnhuntr: LLM与SAST结合的AI产品漏洞自动化挖掘
字数 1790 2025-08-29 22:41:44

VulnHuntr: LLM与SAST结合的AI产品漏洞自动化挖掘技术详解

1. 项目概述

VulnHuntr是一个结合静态应用程序安全测试(SAST)和大语言模型(LLM)的自动化漏洞挖掘工具,专门用于检测AI产品中的安全漏洞。该项目由Protect AI开发,已在多个AI bug bounty平台成功发现多个0day漏洞。

核心特点

  • 双重分析机制:结合静态代码分析和LLM智能分析
  • 多漏洞检测:支持LFI、RCE、SSRF、AFO、SQLI、XSS、IDOR等漏洞类型
  • 上下文感知:通过静态分析获取精确的上下文代码信息
  • 渐进式分析:采用多层次分析策略提高准确性

2. 技术架构

2.1 整体工作流程

  1. 项目获取:从GitHub仓库下载待分析项目
  2. 预处理阶段
    • 过滤无关文件
    • 识别网络相关代码文件
    • 提取项目README信息
  3. 初始分析:进行初步漏洞筛查
  4. 二次分析
    • LLM请求更多相关代码上下文
    • 静态分析精确获取上下文信息
    • 结合上下文进行深入漏洞分析
  5. 结果生成:输出可攻击的POC和置信度评分

2.2 项目结构

vulnhuntr/
├── .devcontainer/        # 开发容器配置
├── vulnhuntr/           # 主要源代码目录
│   ├── __init__.py
│   ├── __main__.py      # 主入口文件
│   ├── LLMs.py          # LLM模型相关实现
│   ├── prompts.py       # 提示词模板
│   └── symbol_finder.py # 代码符号提取器
├── .env.example         # 环境变量示例文件
├── Dockerfile           # Docker构建文件
├── pyproject.toml       # 项目配置文件
└── requirements.txt     # 依赖包列表

3. 核心实现细节

3.1 预处理阶段

RepoOps类

负责项目预处理操作,关键方法:

  • get_readme_content():提取项目描述信息
  • get_relevant_py_files():过滤无关文件
  • get_network_related_files():识别网络相关代码

网络相关代码识别规则

# 识别各种Web框架的路由标识
ROUTE_PATTERNS = [
    r'@app\.route$.*$',        # Flask
    r'@router\.',               # FastAPI
    r'@.+\.route$.*$',        # 通用装饰器
    r'urlpatterns\s*=\s*
$$
.*
$$
'  # Django
]

SymbolExtractor类

使用Jedi静态分析框架提取代码符号,实现三层搜索策略:

  1. 文件级搜索:在当前文件中查找符号定义
  2. 项目级搜索:在整个项目中查找符号定义
  3. 全局名称搜索:使用全局名称进行上下文检索

3.2 分析阶段

初始分析(Initial Analysis)

目标:初步筛查可能的漏洞点

提示词结构

<file_code>
{待分析的完整代码}
</file_code>

<instructions>
{检查的sinks列表}
{强调需要从API endpoints开始分析}
{允许请求更多上下文代码}
</instructions>

<analysis_approach>
1. 全面审计指导
2. 漏洞扫描规则
3. 代码调用路径分析
4. 安全限制绕过思路
5. 上下文敏感分析
</analysis_approach>

<guidelines>
{输出格式要求}
</guidelines>

<response_format>
{预期的响应格式}
</response_format>

二次分析(Secondary Analysis)

采用多轮次渐进式分析策略(最多7轮):

第一轮特点

  • 不引入初始分析结果
  • 不请求上下文代码
  • 专注于特定漏洞类型分析

后续轮次特点

  • 引入前一轮分析结果
  • 根据需求获取上下文代码
  • 结合上下文进行更精确分析

分析终止条件

  1. 没有新的上下文代码请求
  2. 重复请求相同上下文代码
  3. 达到最大迭代次数(7次)

3.3 提示词工程

README摘要提示词

README_SUMMARY_PROMPT_TEMPLATE = """
请分析以下项目的README文件内容,提取关键信息:
1. 项目的主要功能
2. 使用的关键技术
3. 安全相关配置
4. 其他重要信息

README内容:
{readme_content}
"""

系统提示词

SYS_PROMPT_TEMPLATE = """
你是一个专业的安全分析工具,任务是检测Python项目中的安全漏洞。
需要分析的漏洞类型包括:
- LFI (本地文件包含)
- RCE (远程代码执行)
- SSRF (服务器端请求伪造)
- AFO (任意文件操作)
- SQLI (SQL注入)
- XSS (跨站脚本)
- IDOR (不安全的直接对象引用)

分析时请特别注意:
1. 关注可远程利用的漏洞
2. 检查数据流从source到sink的完整路径
3. 考虑各种可能的绕过方式
"""

漏洞特定提示词(以RCE为例)

RCE_PROMPT = """
请检查以下代码中的远程代码执行漏洞:
1. 查找危险函数调用(如os.system, subprocess.Popen等)
2. 分析用户输入是否未经充分过滤就传递给这些函数
3. 检查是否存在命令拼接情况
4. 评估现有的安全防护措施是否可绕过

重点关注以下代码片段:
{code_snippet}

{context_code_section}
"""

4. 技术亮点

4.1 LLM与SAST的协同机制

  1. LLM的优势利用

    • 理解复杂代码逻辑
    • 识别非常规漏洞模式
    • 生成潜在攻击路径
  2. SAST的优势利用

    • 精确获取代码上下文
    • 提供准确的数据流分析
    • 减少LLM的幻觉问题

4.2 渐进式分析策略

  1. 广度优先:初始分析快速筛查潜在问题点
  2. 深度优先:二次分析针对特定漏洞深入检查
  3. 动态上下文:按需获取相关代码上下文

4.3 多模型支持

支持多种LLM模型:

  • Claude
  • ChatGPT
  • Ollama

5. 局限性及改进方向

5.1 当前局限性

  1. 上下文获取不全:Jedi静态分析有时无法获取完整上下文
  2. 结果不稳定:LLM分析存在一定随机性
  3. 数据流分析不足:依赖LLM进行数据流分析可能不准确
  4. Python类型系统:动态类型导致分析困难

5.2 改进建议

  1. 增强静态分析

    • 结合多种静态分析工具(如Semgrep, CodeQL)
    • 实现更精确的数据流分析
  2. 优化LLM交互

    • 引入确定性更高的分析模式
    • 增加人工审核接口
    • 实现结果验证机制
  3. 扩展语言支持

    • 增加对JavaScript/TypeScript的支持
    • 支持Java等静态类型语言
  4. 性能优化

    • 实现增量分析
    • 优化上下文缓存机制

6. 实践案例

6.1 使用示例

# 基本用法
python -m vulnhuntr -r /path/to/project

# 指定分析特定文件
python -m vulnhuntr -r /path/to/project -a src/api.py

# 使用不同LLM模型
python -m vulnhuntr -r /path/to/project --llm chatgpt

6.2 典型输出结构

{
  "file_path": "src/api.py",
  "vulnerabilities": [
    {
      "type": "RCE",
      "location": "line 42",
      "confidence": 0.85,
      "description": "Potential command injection via user-controlled input",
      "poc": "curl -X POST http://target.com/api -d 'input=;id'",
      "context_codes": [
        {
          "file": "src/utils.py",
          "symbol": "sanitize_input",
          "code": "def sanitize_input(input): ..."
        }
      ]
    }
  ]
}

7. 总结与展望

VulnHuntr代表了AI辅助安全分析的前沿方向,通过巧妙结合传统静态分析与现代LLM技术,实现了更智能的漏洞挖掘能力。其核心价值在于:

  1. 自动化程度高:减少人工审计工作量
  2. 覆盖面广:能发现传统工具遗漏的漏洞
  3. 可解释性强:提供详细的漏洞分析过程

未来发展方向可能包括:

  • 结合动态分析技术
  • 支持更多编程语言
  • 集成到CI/CD流程
  • 开发IDE插件形式

8. 参考资料

  1. Protect AI官方介绍
  2. GitHub项目仓库
  3. Jedi静态分析框架
  4. Jedi文档
VulnHuntr: LLM与SAST结合的AI产品漏洞自动化挖掘技术详解 1. 项目概述 VulnHuntr是一个结合静态应用程序安全测试(SAST)和大语言模型(LLM)的自动化漏洞挖掘工具,专门用于检测AI产品中的安全漏洞。该项目由Protect AI开发,已在多个AI bug bounty平台成功发现多个0day漏洞。 核心特点 双重分析机制 :结合静态代码分析和LLM智能分析 多漏洞检测 :支持LFI、RCE、SSRF、AFO、SQLI、XSS、IDOR等漏洞类型 上下文感知 :通过静态分析获取精确的上下文代码信息 渐进式分析 :采用多层次分析策略提高准确性 2. 技术架构 2.1 整体工作流程 项目获取 :从GitHub仓库下载待分析项目 预处理阶段 : 过滤无关文件 识别网络相关代码文件 提取项目README信息 初始分析 :进行初步漏洞筛查 二次分析 : LLM请求更多相关代码上下文 静态分析精确获取上下文信息 结合上下文进行深入漏洞分析 结果生成 :输出可攻击的POC和置信度评分 2.2 项目结构 3. 核心实现细节 3.1 预处理阶段 RepoOps类 负责项目预处理操作,关键方法: get_readme_content() :提取项目描述信息 get_relevant_py_files() :过滤无关文件 get_network_related_files() :识别网络相关代码 网络相关代码识别规则 : SymbolExtractor类 使用Jedi静态分析框架提取代码符号,实现三层搜索策略: 文件级搜索 :在当前文件中查找符号定义 项目级搜索 :在整个项目中查找符号定义 全局名称搜索 :使用全局名称进行上下文检索 3.2 分析阶段 初始分析(Initial Analysis) 目标:初步筛查可能的漏洞点 提示词结构 : 二次分析(Secondary Analysis) 采用多轮次渐进式分析策略(最多7轮): 第一轮特点 : 不引入初始分析结果 不请求上下文代码 专注于特定漏洞类型分析 后续轮次特点 : 引入前一轮分析结果 根据需求获取上下文代码 结合上下文进行更精确分析 分析终止条件 : 没有新的上下文代码请求 重复请求相同上下文代码 达到最大迭代次数(7次) 3.3 提示词工程 README摘要提示词 系统提示词 漏洞特定提示词(以RCE为例) 4. 技术亮点 4.1 LLM与SAST的协同机制 LLM的优势利用 : 理解复杂代码逻辑 识别非常规漏洞模式 生成潜在攻击路径 SAST的优势利用 : 精确获取代码上下文 提供准确的数据流分析 减少LLM的幻觉问题 4.2 渐进式分析策略 广度优先 :初始分析快速筛查潜在问题点 深度优先 :二次分析针对特定漏洞深入检查 动态上下文 :按需获取相关代码上下文 4.3 多模型支持 支持多种LLM模型: Claude ChatGPT Ollama 5. 局限性及改进方向 5.1 当前局限性 上下文获取不全 :Jedi静态分析有时无法获取完整上下文 结果不稳定 :LLM分析存在一定随机性 数据流分析不足 :依赖LLM进行数据流分析可能不准确 Python类型系统 :动态类型导致分析困难 5.2 改进建议 增强静态分析 : 结合多种静态分析工具(如Semgrep, CodeQL) 实现更精确的数据流分析 优化LLM交互 : 引入确定性更高的分析模式 增加人工审核接口 实现结果验证机制 扩展语言支持 : 增加对JavaScript/TypeScript的支持 支持Java等静态类型语言 性能优化 : 实现增量分析 优化上下文缓存机制 6. 实践案例 6.1 使用示例 6.2 典型输出结构 7. 总结与展望 VulnHuntr代表了AI辅助安全分析的前沿方向,通过巧妙结合传统静态分析与现代LLM技术,实现了更智能的漏洞挖掘能力。其核心价值在于: 自动化程度高 :减少人工审计工作量 覆盖面广 :能发现传统工具遗漏的漏洞 可解释性强 :提供详细的漏洞分析过程 未来发展方向可能包括: 结合动态分析技术 支持更多编程语言 集成到CI/CD流程 开发IDE插件形式 8. 参考资料 Protect AI官方介绍 GitHub项目仓库 Jedi静态分析框架 Jedi文档