DanLevy.net

宣布推出 ExploitHunter.app

一个开源安全工作台,将范围、审批、工具和证据统一归档到一个项目中。

目录

安全工具有个文书问题。

它们找出一行可疑代码,给你贴上严重性标签,然后悄悄把证明它是否重要的工作丢回来。这个发现是“高危”。证据则是披着风衣的三个 grep

AI agent 可以缩短这条流程。它们也能把一句含糊的指令、一个浏览器和一个 shell,变成一大堆更快生成、却未经验证的操作记录。

ExploitHunter.app 从扫描器停下的地方开始。给它一个经过授权的目标和一个目标。agent 会梳理可达路由、驱动浏览器、运行终端和安全工具、验证一个假设,并保存支撑该发现的响应、截图和命令记录。然后,它会把这些证据整理成带引用的报告。

它是开源的,而且优先支持本地运行。你可以在托管模型和本地模型之间切换,而不必把目标、审批、历史和证据拆散到不同项目里。

它不是在聊天机器人外面粘了个扫描器。它是一个工作台,记得 agent 尝试过什么,也记得返回了什么。

谈论安全很便宜。真正有用的是运行经过授权的检查、保留证据,然后把下一步交给你。

这个循环刻意做得很无聊

ExploitHunter 项目每次都遵循同一套顺序:

authorize target → plan → request approval → probe → save evidence → prioritize → report

顺序很重要,因为 agent 确实拥有实际操作范围。

目标授权是项目状态,不是对话上下文。它不会藏在一条聊天消息里,不会让“好的,继续吧”在三轮之后产生新的含义。主动扫描、凭据测试、shell 命令和文件写入,全部位于审批闸门之后。高影响命令的审批会绑定到意图、项目和目标上。默认情况下,每次审批只能使用一次。

这些审批闸门不是产品宣传下面的细则。正是它们让把 agent 接入真实工具变得合理。它们限制范围漂移,让审查不再那么依赖记忆,也给团队提供了比“AI 是这么说的”更可靠的东西。

证据才是产品

agent 的最终回答不是安全工作的持久化单位。证据才是。

关闭应用。更换模型。明天再回来。调查仍然记得发生过什么。

ExploitHunter 会保留项目和线程历史,但真正持久化的记录是证据流水线:尝试了什么、依据哪项审批、针对哪个已授权目标,以及返回了什么。探测结果、响应、命令转录、截图和支持性工件都会与发现一并存储。报告引用这些工作,而不是改写模型收尾时的那段话。

随后,这些发现可以流入修复跟踪、变体分析、攻击路径分析,以及审查者能够逐行核对的报告。

还有一个更自私的好处:调试不再像玄学。agent 漏掉某些东西、过度使用工具、凭空捏造结论,或者没能保存工件时,失败会清楚地留在记录里。我们修产品,而不是对着聊天气泡的截图争论。

八个模型,一个目标

因为每次运行都会留下记录,比较模型不再是凭感觉投票。

我让八条模型路由处理同一个高难度 Juice Shop 任务,并让它们走过 ExploitHunter 的真实应用路径。同一个目标。同一组工具。同一份证据契约。如果一次运行无法证明实际运行的是哪个模型,或无法保留其输出,就不会进入表格。基准测试可以享受歧义,发票通常不行。

矩阵比较 Kimi K3、Claude Opus 4.8、DeepSeek V4 Flash、GPT-5.6 Luna、GPT-5.6 Terra、GPT-5.6 Sol、Qwen 3.6 Flash 和 GPT OSS 120B 在同一个高难度 Juice Shop 任务上的评审得分、模型成本、运行时间和工具调用次数。
同一个任务会产生多个不同的赢家:Kimi 的最高分性价比最好,Opus 的最高分速度最快,Luna 的效率最高,而 DeepSeek 在未达到满分的路由中得分最强。

| 模型路由 | 评审得分 | 成本 | 运行时间 | 工具调用 | 解读 | |---|---:|---:|---:|---:|---| | Kimi K3 | 10.0/10 | $0.220184 | 223.4s | 8.0 | 在两名满分模型中,以更低价格提供最高质量 | | Claude Opus 4.8 | 10.0/10 | $1.633301 | 115.9s | 8.0 | 与 Kimi 质量相同,速度接近其两倍,但成本是 7.4 倍 | | DeepSeek V4 Flash | 9.33/10 | $0.058695 | 395.5s | 32.0 | 两条满分路由之外的最高得分 | | GPT-5.6 Luna | 8.67/10 | $0.016304 | 52.2s | 3.3 | 成本与速度表现最佳 | | GPT-5.6 Terra | 8.0/10 | $0.124046 | 107.5s | 6.0 | 得分相同,但在价格和速度上胜过 Sol | | GPT-5.6 Sol | 8.0/10 | $0.368514 | 229.6s | 10.0 | 能力不错,但在这组测试中被 Terra 全面压过 | | Qwen 3.6 Flash | 5.5/10 | $0.085678 | 96.9s | 16.5 | 更便宜的配置提升了效率,但质量仍然落后 | | GPT OSS 120B | 5.0/10 | $0.062529 | 36.6s | 4.3 | 又快又便宜,但波动太大,不适合作为默认路由 |

把它看成路由策略,而不是领奖台。

Luna 是高效的起点。 DeepSeek 多拿约三分之二个评审分,但成本约为 3.6 倍、运行时间为 7.6 倍、工具调用次数为 9.6 倍。Kimi 以不接近 Opus 的账单拿到了 10/10。Opus 得分相同,快约 108 秒,但要多付 $1.41。GPT OSS 仍应作为受监督实验,而在这个任务上,Terra 比 Sol 更有说服力。

散点图展示 ExploitHunter 八条路由的评审得分与模型成本,直接标出每个得分、成本和运行时间,并突出显示 Luna、DeepSeek 和 Kimi 构成的成本—质量前沿。
Luna、DeepSeek 和 Kimi 构成严格的成本—质量前沿。向右移动应该换来质量提升;这次比较中的大多数路由只是换来更大的账单。

只有 Luna、DeepSeek 和 Kimi 位于这条前沿上。其他路由并非毫无用处,只是需要原始得分和成本之外的理由:Opus 买到的是速度,Terra 在不承担 Sol 账单的情况下满足了模型家族约束,而 GPT OSS 足够便宜,可以在监督下进行探索。

按排名排列的水平条形图比较 ExploitHunter 八条模型路由的评审得分,每个得分旁边都显示模型成本和运行时间。
便宜又快救不了一次薄弱的调查。GPT OSS 在这里运行时间最短,但 DeepSeek、Luna、Terra 以及两名满分模型产出的工作明显更好。
直接比较 Kimi K3 和 Claude Opus 4.8:两者均为十分、均调用工具八次;Kimi 成本为 0.220184 美元、耗时 223.4 秒,Opus 成本为 1.633301 美元、耗时 115.9 秒。
最高分的选择异常清楚:Kimi 便宜 7.4 倍,Opus 快 1.9 倍。选择你实际受限的那个条件。

包含方法、工具预算、负向对照,以及当命令转录里已经有答案时模型如何让自己难堪的完整版本,见安全 agent 需要模型路由,而不是模型排名

基准测试抓到了基准测试本身的问题

最重要的结果不是某个模型获胜,而是评分器失败了。

第一份归档恢复报告给了 Kimi 5/10,给了 GLM 9/10。任务本身是成功的。两个 agent 都恢复出了 harbor-lantern-47,而独立的主机侧 unzip -t -P 检查证明该密码有效,其他候选密码则无效。

评测器对一个原生 ExploitHunter 任务执行了原始 Cybench 禁用工具审计,而该任务明确要求写入证据。它惩罚的正是测试框架要求的行为。同样的模型输出。同样的存储轨迹。错误的评分标准。

移除无关的审计后,Kimi 从 5/10 提升到 10/10。GLM 仍为 9/10。修正后的分数以 browser-e2e-llm-judge-corrected 写回原始 Langfuse 轨迹;7 月 17 日的一次只读 API 检查确认,持久化的轨迹 ID 上保留了这两个值。

这五分的波动,正是 ExploitHunter 保存轨迹、证据、评分器版本、成本、token、工具预算和测试框架失败信息,而不是把一次评测压扁成一个英雄数字的原因。如果基准测试无法展示自己的工作过程,那它不过是另一个自信满满地发表断言的模型。

按任务路由模型

ExploitHunter 不只是支持一长串模型供应商。它把这些模型当作一个替补席。

侦察、漏洞利用检查、浏览器流程、证据综合和修复建议,都是安全工作。但它们不是同一种模型任务。

Capital One 的 VulnHunter 对 Claude/Claude Code 优化的源码分析工作流下了一个自洽的判断。ExploitHunter 则押注于另一件事:保持项目范围、审批、工具和证据稳定,只根据任务切换模型路由。

广泛的 Web 侦察可能更适合一个便宜、快速且工具预算紧凑的模型。受限的本地实验室可能更看重隐私和离线推理。困难的验证工作或最终报告,则可能值得使用更慢的前沿模型路由。ExploitHunter 在这些车道之间转移工作,而目标、历史、审批、工具和产物都留在原位。

正确的模型是路由决策,不是设置界面上的一个 logo。

ExploitHunter 同时支持托管供应商、Ollama 和 LM Studio。你可以把它作为本地 Node 服务运行,也可以作为 Electron 桌面应用运行。留空托管 API 密钥后,兼容的本地模型就能让候选任务留在付费供应商之外。需要速度,或者问题足够棘手时,使用托管路由。敏感工作则留在本地——如果边界比从一次运行中省下几秒更重要。

把每个安全任务都交给最昂贵的可用模型,并不存在什么道德胜利。只有一张账单。

它与 deepsec、VulnHunter 及其他工具的关系

ExploitHunter 的范围有意宽于代码扫描器测试框架。它把候选问题带进一个正在运行的目标,用浏览器和终端工具调查,保存证据,然后把经过验证的发现交给应该修复它的系统。

现在已经有多个项目覆盖这条工作流的不同部分。很好。安全团队需要的是能彼此交接工作的工具,而不是又一个赢家通吃的类别。

| 工具 | 擅长之处 | ExploitHunter 的不同之处 | |---|---|---| | Vercel deepsec | 以代码库为先的测试框架:静态候选发现、编码 agent 调查、重新验证、信息丰富化,以及可选的大规模沙箱扇出。 | Deepsec 适合代码仓库分析和面向 PR 的后续处理。ExploitHunter 围绕一个经过授权的研究项目展开;这个项目可能包含运行中的应用、浏览器、网络实验室、终端、持久化证据以及明确的操作员审批。 | | Capital One VulnHunter | 以攻击者为先的源码分析、对发现结果进行结构化证伪,以及聚焦于代码修复的建议。 | 重叠确实存在:证据和降低误报本来就应该是入场标准。ExploitHunter 较少绑定于某个编码测试框架或单一路径的模型,更关注在提出代码变更之前协调调查过程。 | | GitHub Security Lab Taskflow Agent | 声明式、支持 MCP 的任务流,尤其适合 CodeQL 告警分流和变体分析。GitHub 称它已经帮助发现了大约 30 个真实世界漏洞。 | 当输入是可重复的代码扫描工作流时,这是合适的基础设施。ExploitHunter 则是探索性、工具驱动研究的工作台,适用于范围、审批和证据需要在更长调查过程中持续存在的场景。 | | OpenHands Vulnerability Fixer | 将 Trivy 或其他工具的扫描输出转化为有优先级的修复、测试和拉取请求。 | 一个修复工厂。ExploitHunter 位于流程更前端:确认发现确实存在,记录原因,然后把有充分依据的问题交给修复系统。 | | Assay | 离线策略执行、确定性重放,以及针对 agent 工具调用的加密证据包。 | 这是互补关系,不是竞争关系。它代表了一类默认拒绝的运行时控制,agent 研究工作区应该能够在自己的审批层之下使用这种控制。 |

一个实用的技术栈可能会包含其中不止一个工具:源代码扫描器提出候选问题,任务流分流重复模式,研究工作区验证危险案例,修复 agent 将已验证的工作转化为可审查的补丁。交接比评出一个安全吉祥物更重要。

在本地运行。负责任地使用。

ExploitHunter 采用 MIT 许可证,开源,专为你获授权执行的工作而构建。代码仓库自带本地加固的 Juice Shop 目标和多服务网络实验室,因此你可以演练完整工作流,而不必把 agent 指向任何不属于你的目标。

git clone https://github.com/justsml/ExploitHunter.app.git
cd ExploitHunter.app
pnpm install
cp .env.example .env
pnpm dev

然后打开 http://localhost:3210

选择一条模型路由,授权一个你拥有或明确获准测试的目标,再给 agent 一个目标。让它规划工作,批准你确实打算执行的操作,并看着证据逐步累积,而不是消失在聊天记录里。

这就是 agent 化安全工作的无聊版本。

但当真正有意思的部分开始时,我希望自己身边有的正是这个版本。

接下来是什么

下一步不是对自主黑客提出更宏大的宣言,而是让研究闭环更值得信赖:更好的重复运行报告、更严格的证据验证、更广泛的本地模型覆盖、更清晰的审批可见性,以及一条更快的路径,把已验证的发现变成有人愿意合并的补丁。

安全 agent 不需要无限的即兴发挥空间。它们需要足够的触达能力来给我们制造惊喜,需要围绕这种触达能力设置硬边界,还需要在声称成功时拿出证据。

这就是 ExploitHunter:把模型、工具、实验室、审批、证据和后续工作集中到同一个问题上。

现在,把它指向某个你获准攻破的目标。