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 劫持, 云安全监控, 大语言模型, 实时告警, 逆向工具, 静态分析