代码提交换个写法,前沿智能体就找不到漏洞:从真实开发历史挖出的变换把成功率从63.3%压到36.8%
核心概要
从真实代码提交中挖出的、保持功能不变的代码变换,能让前沿漏洞分析智能体在CyberGym任务上的平均成功率从63.3%降到36.8%,而同类合成混淆只降到49.7%。
深度剖析
同一份代码只要换一种写法,前沿智能体就可能找不到原本能找出的漏洞。 此前漏洞分析评测通常只针对软件的某一个版本,把性能差异归因于漏洞特征和智能体能力。 在CyberGym中,对同一仓库里功能相同、漏洞相同的相邻提交,智能体的成功率明显波动,有时耗尽预算仍找不到,有时给出无法触发漏洞的PoC。
做法是把真实开发中反复出现的改动提炼成可复用的变换技能,再按目标代码的上下文实例化。 此前的鲁棒性评测使用固定的局部混淆,例如变量改名、while改for、插入不可达代码。 从CommitPackFT的C和C++提交中挖出48类变换,评测选用其中出现最频繁的21类,覆盖数据集中84%的提交。
变换可以叠加,叠加后对智能体的压制更强。 单一变换已经能降低成功率,但不同家族的变换此前没有被组合起来测试。 对GPT-5.6 Sol配Codex,把S2、R3、P1组合成两两组合和三重组合后,成功率从三个单独变换的均值34.4%降到两两组合的26.7%、三重组合的20.0%。
让智能体先改写代码再分析,也基本补不回差距。 合成混淆在智能体知道被施加了哪种变换时容易被反向消除。 在被告知所用变换的条件下,GPT-5.6 Sol配Codex在合成混淆上平均恢复25.9个百分点,在自然变换上只恢复3.5个百分点,成功率仍比原始代码低30.1个百分点。
启示与展望
这项工作面向需要抵御自动化漏洞扫描的软件维护者,展示的是在CyberGym第0级设置下、对C和C++代码库施加自然变换后的效果。评测覆盖六种模型与三种智能体框架的组合,变换在施加后经过重新编译、运行原有测试套件并重放真实PoC,确认功能与漏洞都保留。
变换由代码智能体提取和应用,可解释性有限;挖掘只用了约70万条提交的单一数据集,作者预期更大的C和C++代码库还能挖出更多变换。评测集中在CyberGym最难的第0级设置,作者提出未来应扩展到更广的设置,并指出保持语义的更强保证有助于这类变换在实际开发中落地。
