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绕过, 逆向工具