theteatoast/local-vuln-research-pipeline
GitHub: theteatoast/local-vuln-research-pipeline
基于本地 MoE 大模型的多阶段漏洞研究流水线,通过 N 次干净上下文模糊审计与 LLM 驱动的深度追踪,在零云端成本的条件下发现真实可利用的代码漏洞。
Stars: 151 | Forks: 20
# 本地漏洞研究系统
基于 LLM 驱动的漏洞研究流水线,使用本地无审查 MoE 模型。它不是 SAST 工具 —— LLM 是主要分析师,在 CVE 漏洞利用模式目录的指导下,通过对代码库进行递归的干净上下文扫描来搜寻漏洞。N 次通过模糊测试架构改编自 Hacker House 的推理模糊测试方法论。
## 架构
```
[Target Repo]
|
Step 0 ─ Fingerprint + SBOM (deterministic, 100% of files)
Step 1 ─ Classify target (15+ target types)
Step 2 ─ Dependency vuln scan (NVD + EPSS/KEV ranked)
Step 2b ─ Secrets scan (gitleaks rules, all text files)
Step 3 ─ Static analysis (signal boost) (Semgrep + sink finder + taint flow, 11 languages)
Step 4 ─ Threat model + CVE catalog (1 LLM pass: entry points, trust boundaries, sinks, coverage plan)
Step 5 ─ N-pass clean-context fuzz (20+ independent passes, 4 files each, fresh context per pass)
Step 5b ─ Triage (LLM verifies all candidates against source, discards noise)
Step 6 ─ Iterative deep trace (per-finding, LLM requests files mid-trace, per-hyp checkpoint)
Step 7 ─ Validation + chain synthesis (12 filters + LLM chains medium into critical)
Step 8 ─ Anomaly check (prompt injection detection)
Step 9 ─ Report + runnable PoC (root cause, exploit path, steps, impact, remediation)
|
Output: 0-2 HIGH/CRITICAL findings, or "SECURE"
```
**与 SAST 的关键区别**:步骤 5-9 由 LLM 驱动。步骤 5 执行 N 次独立的干净上下文扫描 —— 每次扫描都重新开始,锚定不同的文件,并遍历不同的攻击面。所有扫描的并集能够覆盖任何单次扫描都无法覆盖的范围。步骤 5b 随后扮演怀疑论者的角色,根据实际源码验证每个候选漏洞。
## 语言和目标覆盖率
| 语言 | Sinks | Entry Points |
|----------|-------|-------------|
| Python | 20 种模式 | 14 种 source 类型 |
| JavaScript/TS | 11 | 6 种 source 类型 |
| Java | 12 | 9 种 source 类型 |
| C# | 21 | 13 种 source 类型 |
| C/C++ | 12 | 17 种 source 类型(syscall、ioctl、exported API、kernel) |
| Go | 9 | 10 种 source 类型 |
| Rust | 9 | 12 种 source 类型(unsafe、FFI) |
| PHP | 19 | 14 种 source 类型 |
| Ruby | 7 | 10 种 source 类型 |
| PowerShell | 17 | 16 种 source 类型(param、args、cmdlet、COM) |
**目标分类**:kernel、browser/sandbox、PowerShell、AI/ML framework、compiler、embedded/IoT、原生 C/C++ 库、分布式系统、container runtime、CLI 工具、Java、.NET、web app、IDE/editor、database、protocol handler、通用应用程序。
## 硬件
**测试配置:**
- GPU:RTX 4070 Ti SUPER(16GB VRAM)
- CPU:Ryzen 7 7700(8C/16T)
- RAM:32GB DDR5 6000MHz
- 模型:Qwen3.6-35B-A3B IQ3_M(15GB,完全适配 VRAM)
- 性能:39 tok/s,100% JSON 合规性,可用 131K 上下文
- Server:使用 `--jinja`(Qwen chat 模板)、flash attention 和 Q4 KV cache 的 llama.cpp
## 快速开始
### 1. 前置条件
```
winget install llama.cpp # Windows
brew install llama.cpp # macOS / Linux
pip install huggingface_hub
```
### 2. 下载模型
```
huggingface-cli download HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive \
Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-IQ3_M.gguf \
--local-dir models/
```
| 量化版本 | 大小 | VRAM |
|-------|------|------|
| `IQ3_M` | 15 GB | 16GB — 完全适配 GPU |
| `IQ4_XS` | 19 GB | 24GB |
| `Q4_K_M` | 21 GB | 32GB |
### 3. 安装依赖
```
pip install -r requirements.txt
```
### 4. 启动模型 Server
```
python start_server.py
```
### 5. 获取免费的 NVD API 密钥
https://nvd.nist.gov/developers/request-an-api-key(需 30 秒)
### 6. 下载 CVE 数据库
```
$env:NVD_API_KEY="your-key-here"
python -m src.main update-cve
```
使用 API 密钥约需 45 分钟。包含 25 万+ 带有 EPSS + KEV 的 CVE。
### 7. 基准测试(可选)
```
python run_benchmark.py
```
### 8. 审计
```
python run_audit.py /path/to/target-repo
```
## 流水线深度解析
### 步骤 3 — 静态分析(信号增强,非门控)
并行运行所有确定性分析器。零污点流不会阻断流水线 —— LLM 会获取完整的代码库概览并独立进行搜寻。
### 步骤 4 — 威胁建模 + CVE 目录(单次扫描)
一次仔细的 LLM 扫描会构建攻击面映射,供每次模糊测试扫描查阅:
- Entry point 清单(每个可从外部访问的 route、CLI 参数、文件解析、IPC handler)
- 信任边界(数据跨越特权级别的地方)
- Sink 清单(映射到 文件:行号 的危险操作)
- 覆盖计划(所有文件按风险排序,典型 repo 约包含 200 个文件)
### 步骤 5 — N 次通过干净上下文模糊审计
**架构改编自 Hacker House 的推理模糊测试方法论** —— 分离召回率与精确率。
对于每次扫描(20+ 次扫描):
1. 干净上下文 —— 不保留之前扫描的记忆
2. 从未覆盖区域选择 4 个文件(覆盖追踪器确保无重复)
3. 提供威胁模型 + CVE 目录作为参考
4. LLM 遍历 entry → trace → sink,报告所有候选漏洞
5. 将候选结果保存到磁盘。丢弃上下文。下次扫描重新开始。
为什么要使用干净上下文:拥有较长历史的模型会锚定于已经看过的内容,并在相同的发现上打转。在扫描之间清除上下文才能产生变异 —— 就像模糊测试工具随机化其种子一样。20+ 次独立遍历的并集能够覆盖任何单次扫描都无法覆盖的范围。
预期会出现噪声。模型被指示:“报告任何看似合理的内容,不要自我审查,误报是可以接受的。” 这是召回,而不是精确。
### 步骤 5b — 分诊
LLM 充当怀疑论审查者。对于每个候选漏洞:
- 重新打开引用的文件,确认代码确实如发现所述
- 独立追踪每一跳
- 检查:现有的 sanitizer、参数化查询、身份验证检查、边界防护
- 丢弃幻觉、无法到达的路径、已缓解的问题
- 仅保留带有调整后置信度的已验证结果
### 步骤 6 — 迭代深度追踪
针对每个假设的检查点机制。LLM 在追踪过程中请求所需的文件 —— 最多进行 5 次迭代。针对不同方法论的具体追踪:kernel 的追踪方式与 web app 不同,也与 PowerShell 不同。
### 步骤 7 — 验证 + 利用链合成
12 项过滤器:前提条件强度测试、可达性门控、循环威胁、受信任输入重分类、DoS 排除、AI 垃圾检查等 6 项以上。LLM 驱动的利用链合成:中等风险发现能否链接成严重风险?
## 时间预算
| 阶段 | 时间(2400 个文件) |
|-------|-------------------|
| 步骤 0-3(确定性) | 约 30 秒 |
| 步骤 4(威胁建模) | 约 3 分钟 |
| 步骤 5(20 次模糊测试扫描) | 约 25 分钟 |
| 步骤 5b(分诊) | 约 5 分钟 |
| 步骤 6-9(追踪 + 验证 + 报告) | 约 5-10 分钟 |
| **总计** | **约 40-45 分钟** |
较大的代码库呈线性扩展:kernel(2800 万行)约需 4-6 小时。扫描次数会随 repo 大小自动缩放。
## 检查点机制
模糊测试中途断电?从上次保存的扫描处恢复即可。每次扫描都是独立的 —— 扫描之间零上下文依赖。
```
data/checkpoints//
├── progress.md Human-readable: pass 12/20, 8 candidates, 2 verified
├── fuzz_progress.json Coverage tracker + accumulated candidates
├── fuzz_progress.md
├── triage_verified.json Post-triage findings
├── trace_hyp_0.json Per-hypothesis deep trace checkpoints
├── validated_findings.json
└── report.md
```
## 命令
| 命令 | 描述 |
|---------|-------------|
| `python start_server.py` | 启动 llama-server |
| `python run_benchmark.py` | 运行模型基准测试 |
| `python run_audit.py ` | 完整审计流水线 |
| `python run_audit.py --resume` | 从检查点恢复 |
| `python -m src.main setup` | 打印设置说明 |
| `python -m src.main update-cve` | 下载/构建 CVE 数据库 |
| `python -m src.main eval` | 运行评估工具 |
## CVE 数据库
NVD(25 万+)+ EPSS(漏洞利用概率)+ CISA KEV(1,635 个正被积极利用的漏洞)。使用 SQLite 结合 FTS5 + 384 维 embeddings。混合排名权重:KEV > EPSS > CVSS。
## 配置
```
model:
quant: "IQ3_M"
file: "models/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-IQ3_M.gguf"
server:
context_length: AUTO # Benchmark: 131K
flash_attn: true
pipeline:
max_hypotheses: AUTO
self_consistency_runs: 3
thresholds:
hypothesis_confidence_cutoff: AUTO
epss_min_score: 0.01
knowledge:
sources: [nvd, epss, kev]
```
## 文件结构
```
models/ GGUF model files
src/
orchestrator.py Master pipeline + checkpointing
pipeline/
step0_fingerprint.py Fingerprinting + SBOM
step1_classify.py 15+ target types
step2_deps.py Dependency vuln scan
step2_secrets.py Secrets scanner
step3_static.py Static analysis (signal boost)
step4_threat_model.py Threat model + CVE catalog (foundation)
step5_fuzz.py N-pass clean-context fuzz audit
step5b_triage.py Candidate verification + dedup
step6_deep_trace.py Iterative deep trace + checkpointing
step7_validate.py Filters + LLM chain synthesis
step8_anomaly.py Injection detection
step9_report.py Report + PoC
analysis/
sink_finder.py 200+ patterns, 11 languages
data_flow.py 50+ source patterns, all languages
semgrep_runner.py, secrets_scanner.py, ast_parser.py, call_graph.py
knowledge/
downloader.py, importer.py, cve_db.py, embeddings.py, epss.py, kev.py, sbom.py
llm/
client.py, prompts.py, context.py, guard.py
eval/
harness.py, datasets.py, metrics.py, calibration.py
benchmark/
runner.py, report.py
data/
cve/nvd.sqlite Unified CVE database
checkpoints/ Per-repo audit state + per-hyp trace state
config.yaml, requirements.txt
start_server.py, run_benchmark.py, run_audit.py
```
## 注意事项
- 仅用于授权的安全研究。每次审计前都需要确认。
- 模型质量上限:具有 3B 活跃参数的 IQ3_M 可能会遗漏复杂的多跳逻辑。量化程度越高 = 推理能力越好。
- 模糊测试阶段出现误报是设计使然。分诊阶段会将其剔除。
- 纯本地模型 —— 不会有任何数据离开您的机器。无 API 成本。
## 许可声明
仅用于授权的安全研究。未经授权的使用可能违反计算机欺诈相关法律。
标签:AI安全, Chat Copilot, DLL 劫持, 云安全监控, 大语言模型, 实时告警, 逆向工具, 静态分析