clearseclabs/system-over-model-gemma
GitHub: clearseclabs/system-over-model-gemma
该项目通过在真实CVE上测试开源模型验证「系统优于模型」理念,并提供了一个基于可达性分析的脚手架脚本来大幅减少AI漏洞扫描的误报。
Stars: 17 | Forks: 1
# system-over-model-gemma
这篇文章 **[System Over Model, Tested](https://clearbluejar.github.io/posts/system-over-model-tested-mythos-freebsd-local-openweight/)** 的配套仓库 —— 运行
AISLE 的漏洞扫描 pipeline,针对一个*你*可以运行的模型,在一个真实的 FreeBSD bug
(CVE-2026-4747,`svc_rpc_gss_validate` 中的栈溢出)上进行测试,看看实际的工作量到底在哪里。
AISLE 的核心论点是,脚手架起的作用比模型更大。在本地开源权重
模型(`gemma-4-31b-it`、`gpt-oss-20b`)上测试这一点时,有两点得到了印证:
- **模型不是瓶颈。** 一次“错过”该 bug 的扫描通常会在下一次运行中找到它 ——
失败的原因是方差,而不是能力不足(`run1-/run2-reproducibility/`)。
- **系统才是。** 在这些模型上,该 pipeline 会放行一大堆*误报* —— 在一次运行中有 30 个“VALID”
发现,其中只有一个是真实的(但无关的)缺陷,而该 CVE 并不在其中
(扫描错过了它)。
因此,这里的杠杆是系统,而不是模型。只需增加一个阶段 —— 即可达性检查,在**相同权重**下 ——
噪声就会降低:**30 个误报 → 5 个,并且真实的 CVE 依然能通过。** 这就是
[`scaffolding/reachability_filter.py`](scaffolding/reachability_filter.py),你可以将它指向
你自己的模型和发现。(30→5 是收益;5 不是 0 —— 你仍然需要验证这 5 个结果。)
完整的数字和原封不动的模型输出:[`reachability-tweak/`](reachability-tweak/)、
[`run1-reproducibility/`](run1-reproducibility/)、[`RESULTS.md`](RESULTS.md)。AISLE 上游项目;Apache-2.0。
## 环境要求
- 一个用于你的模型的 **OpenAI 兼容 endpoint**(LM Studio、Ollama、vLLM、OpenWebUI、OpenRouter)。
- **Python 3.9+**,**`rg`**(ripgrep —— 过滤器使用它来查找调用者),**git ≥ 2.27**(用于 fetch)。
- AISLE 的 `scan.py` 位于上游仓库([`weareaisle/nano-analyzer`](https://github.com/weareaisle/nano-analyzer)),
此处未进行本地内嵌(vendored)。
## 后端配置
```
cp .env.example .env # LM_BASE_URL + LM_API_KEY (OpenWebUI: OPENWEBUI_URL + OPENWEBUI_API_KEY)
export MODEL=google/gemma-4-31b-it # or any model your endpoint serves
```
## 查看系统微调如何恢复信号(约 5 分钟)
最快的路径是使用此处已经捕获的运行结果 —— 无需重新扫描:
```
scaffolding/fetch_freebsd.sh # pre-patch sys/rpc (vulnerable), ~19 MB
python3 scaffolding/reachability_filter.py \
results-aisle-gemma-sysrpc/findings freebsd-prepatch/sys/rpc
# -> 30 个 "VALID" 发现中约有 5 个仍然成立;其余的从未处于 attacker-reachable 状态。
```
为了确认它保留了真实的 bug,也可以在 CVE 发现结果上运行它(`reachability-tweak/result-cve.md`
显示保留了 5/5)。
要**使用你自己的模型从头开始**,[`scan-demo/bin/scan-and-filter.sh`](scan-demo/bin/scan-and-filter.sh)
可以一步完成 AISLE 的 `scan.py` *和*可达性阶段,使用你的 `.env` 后端(它会为你
推导出 AISLE 的 `CUSTOM_BASE_URL`/`CUSTOM_API_KEY`;请先克隆 `scan.py`,参见环境要求)。目标可以
是单个文件 **或** 整个目录:
```
scan-demo/bin/scan-and-filter.sh scan-demo/targets/vulnerable.c # one file: scan + reachability
scan-demo/bin/scan-and-filter.sh freebsd-prepatch/sys/rpc # the whole tree: the full sub-system run
scan-demo/bin/scan-and-filter.sh --filter-only results-aisle-gemma-sysrpc/findings # re-filter a run you already have
```
留存的结果会存放在 `findings-reachable/` 中。如果只进行扫描(不含可达性阶段),请使用
[`scan-demo/bin/run-aisle.sh`](scan-demo/bin/run-aisle.sh) —— 目标同样支持文件或目录。
## 你将看到的内容
| 阶段 | 在本地模型上的表现 |
|---|---|
| **AISLE 扫描 + 分诊** | 在*大多数*运行中都能找到 bug(“错过”的情况在重新运行后会恢复);但会放行约 30 个“VALID”发现,其中几乎全是误报 |
| **+ 可达性过滤器** | 30 个“VALID” → 约 5 个(减少约 83% 的误报),并且真实的 CVE 得以保留 —— 仅增加了一个额外阶段,使用相同的模型 |
这是一个精确度过滤器,而不是神谕:留存的结果仍然需要人工查看(它们是“可达但
*有界限*”的情况)。重点不在于这个特定的过滤器 —— 而在于**系统才是你能掌控的杠杆,
并且你可以针对你的模型对其进行调整。** 细节和诚实的局限性说明:`reachability-tweak/SUMMARY.md`。
## 关于运行这些模型的几点说明
- **`max_tokens` 是上限,而不是目标** —— 这些模型会在远低于该值时自行停止;在拥有
~256k 上下文窗口的情况下,无论是输入还是预算都不会构成限制。(如果为*推理*模型设置的容量上限太小,它可能会
返回空内容 —— 这是唯一需要调高上限的情况。)
- **代理服务器背后的托管 endpoint 可能会返回 HTTP 524**(源站超时)—— 这是间歇性的,
可以重试;重新运行即可清除该错误。
- **使用已知的真阳性来对“极好”的结果进行完整性检查。** 早期版本的过滤器看起来
*更好*(30→2)—— 那是一个掩盖了目标函数的截断 bug。CVE 保留测试捕捉到了这个问题。
## 仓库布局
```
.
├── README.md
├── RESULTS.md ← run-by-run writeup + verbatim model output
├── .env.example ← backend config template
├── scaffolding/
│ ├── fetch_freebsd.sh ← fetch the pre-patch (vulnerable) FreeBSD sys/rpc tree
│ └── reachability_filter.py ← the system tweak: a reachability stage that prunes false positives
├── results-aisle-gemma-sysrpc/ ← Run 1: AISLE scan.py + gemma @ sys/rpc (30 "VALID" findings)
├── results-aisle-gpt-oss-sysrpc/ ← Run 2: AISLE scan.py + gpt-oss @ sys/rpc (21 "VALID")
├── run1-reproducibility/ ← Gemma: the "miss" recovers on re-run (17/17 scan, 5/5 triage)
├── run2-reproducibility/ ← gpt-oss: works but less reliable (format, not reasoning)
├── reachability-tweak/ ← the filter: 30→5, CVE kept 5/5, + honest limits
├── 5-model-matrix/ ← 5 local models, vuln-vs-patched discrimination (4/5)
├── clnt_nl-double-lock.md ← the one real defect the funnel surfaced (unrelated FreeBSD bug)
├── scan-demo/ ← run-aisle.sh (scan) + scan-and-filter.sh (scan + reachability); file or whole dir
└── freebsd-prepatch/ ← created by fetch_freebsd.sh (not committed)
```
## 鸣谢
该 pipeline、三阶段方案以及 `scan.py` 均出自 Stanislav Fort / AISLE 之手:
[*System Over Model*](https://aisle.com/blog/system-over-model-zero-day-discovery-at-the-jagged-frontier)
以及 [`weareaisle/nano-analyzer`](https://github.com/weareaisle/nano-analyzer)。本仓库在开源权重
模型上对它们进行了测试,并增加了一个阶段。采用 Apache-2.0 协议,与上游保持一致。
标签:AI智能体, AI风险缓解, DLL 劫持, FreeBSD, Python, 人工智能, 代码安全审计, 大语言模型, 无后门, 用户模式Hook绕过, 逆向工具