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 整体工作流程
- 项目获取:从GitHub仓库下载待分析项目
- 预处理阶段:
- 过滤无关文件
- 识别网络相关代码文件
- 提取项目README信息
- 初始分析:进行初步漏洞筛查
- 二次分析:
- LLM请求更多相关代码上下文
- 静态分析精确获取上下文信息
- 结合上下文进行深入漏洞分析
- 结果生成:输出可攻击的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静态分析框架提取代码符号,实现三层搜索策略:
- 文件级搜索:在当前文件中查找符号定义
- 项目级搜索:在整个项目中查找符号定义
- 全局名称搜索:使用全局名称进行上下文检索
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轮):
第一轮特点:
- 不引入初始分析结果
- 不请求上下文代码
- 专注于特定漏洞类型分析
后续轮次特点:
- 引入前一轮分析结果
- 根据需求获取上下文代码
- 结合上下文进行更精确分析
分析终止条件:
- 没有新的上下文代码请求
- 重复请求相同上下文代码
- 达到最大迭代次数(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的协同机制
-
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 使用示例
# 基本用法
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技术,实现了更智能的漏洞挖掘能力。其核心价值在于:
- 自动化程度高:减少人工审计工作量
- 覆盖面广:能发现传统工具遗漏的漏洞
- 可解释性强:提供详细的漏洞分析过程
未来发展方向可能包括:
- 结合动态分析技术
- 支持更多编程语言
- 集成到CI/CD流程
- 开发IDE插件形式