
研究:AI agent 能找漏洞写利用代码,却仍拿不下 CTF 题目
来源标题:Why Your AI Agent Can't Solve CTF Challenges
Pwnagent 研究团队分析 pwn 类 CTF 挑战发现,AI agent 常能定位漏洞并写出利用代码,却在信息收集、利用设计、执行与验证环节出错,例如覆盖函数指针却未取得目标地址。研究指出仅凭模型能力无法判断 agent 解题水平,同等模型下结果取决于 harness 能否调用所需工具并用执行结果指导下一步尝试。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
一个 AI agent 能找到漏洞、写出利用代码,却仍然拿不到 flag。它可能覆盖了某个函数指针,却没有取得要写入的地址;或者误判了崩溃原因,反复提交同一个输入。生成代码之后还有更多工作:检查利用所需的条件是否满足,并修正失败之处。
也有一些成功拿到 flag 的案例,但必须把“更换模型带来的提升”与“更换工具和执行流程带来的提升”区分开来。继逆向工程和 Web 攻防两篇之后,本文考察在 pwn 类挑战中,信息收集、利用设计、执行和验证这几个环节分别在哪里断裂。
仅凭模型能力不足以判断一个 agent 解决 pwn 挑战的能力。即便使用同一个模型,结果也取决于 agent 能否调用所需的工具,并利用执行结果指导下一次尝试。harness 就是这样一套执行装置:它管理这些工具调用、回传结果、维护工作记录并处理重试。它还可以把任务分派给专门负责分析或调试的 agent,并收集它们的结果。
Pwnagent 是一个自动利用生成系统,其背后的研究者固定模型不变,对比了启用与不启用动态测量和诊断引导迭代修复两种配置。Pwnagent 将分析、动态测量和代码生成分配给专门的 agent,并把 GDB 测量结果传给代码生成阶段。执行失败时,诊断会引导对测量、实现或策略的复查。作为对照的配置保留了静态分析和 agent 角色分工,但去掉了动态测量和诊断引导的迭代修复,只做一次生成 [1]。
Pwnagent 的整体架构(原论文图 2,第 7 页)。第 3 阶段在运行时测量数值;第 5 阶段诊断失败并返回前面的阶段进行修复。这里讨论的成功率,是将同时使用这两项能力的配置,与一次生成且不具备这两项能力的配置进行对比 [1]。
在 66 个本地 CTF 挑战上,两种配置均使用 Kimi-K2.6,完整配置获得 shell 或读取 flag 的比例为 62.12%(41 个挑战),而去掉这两项能力后为 42.42%(28 个挑战)。这一差异反映了提供动态测量与迭代修复的共同效果 [1]。
Pwnagent 将分析结果、策略和测量数据记录在中心状态中,并传递给后续 agent。其评测样本集中在面向栈的挑战和 x86 架构上 [1]。
CTF agent EnIGMA 背后的研究者也固定模型不变,对比了不同的工具接口。在使用 Claude 3.5 Sonnet 的 44 个 pwn 挑战上,完整配置在 20.45% 的挑战中拿到了 flag,而去掉 GDB 和远程连接两个接口后为 11.36%。评测为单次运行,每个挑战预算 3 美元,允许在该次运行内多次提交 flag [4]。
EnIGMA 是一个用于研究 CTF 求解工具接口的 agent。它提供启动和停止交互式工具、向其发送命令的接口 [4]。
ExploitGym 提供了模型变化的对比。它评估 agent 能否把漏洞验证(PoV)输入转化为能拿到 flag 的利用,在相同的 code CLI 0.120.0 和 xhigh 推理强度下比较了 GPT-5.4 与 GPT-5.5。在覆盖用户态程序、V8 和 Linux 内核的 898 个任务中,使用指定漏洞成功拿到 flag 的数量从 54 增加到 120。每个任务在可信访问条件下允许 1 次尝试、最长 2 小时,安全缓解措施和部署时的安全过滤器均被禁用 [2]。
ExploitGym 是一个在容器化环境中评估真实软件漏洞的基准。除了复现漏洞,它还会检查 agent 是否在目标环境中拿到了 flag,以及是否使用了指定的漏洞 [2]。
这些对比表明:固定模型时,求解表现会随 harness 变化;固定 harness 时,求解表现会随模型变化。agent 的表现是特定“模型 + harness”组合的结果。因此,阅读成功率时不能只看模型名称,还要看工具、任务分配、重试流程和评测条件。
如果输入中缺少关键信息,agent 可能不断修改代码却毫无进展。二进制分析可能漏掉某个库,或者 agent 无法查询只在运行时才可得的值。问题在于:分析结果和工具输出是否真正提供了 agent 所需的信息。
PwnGPT 将二进制分析结果传给利用生成,在其评测中,qwen-plus、qwen-max 和 GPT-4o 都在三个挑战上未能收集到必要信息。其中一个是 rop-10,这个挑战涉及 64 位 ELF 二进制中的栈溢出,预期用 ret2libc 解决,即把执行流重定向到 libc 函数。分析模块没有处理动态链接库,因此遗漏了 libc gadget(可在利用中组合使用的短指令序列),也无法组装出利用生成所需的输入 [3]。
PwnGPT 是一个包含分析、生成和验证模块的自动利用生成框架。其分析模块从反编译输出中选取关键函数和信息,用于构造生成阶段的输入 [3]。
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。