← 最新论文
💻 computer science

Peeling Off the Cocoon: Unveiling Suppressed Golden Seeds for Mutational Greybox Fuzzing

本文提出了名为 PoCo 的模糊测试技术,旨在通过逐步移除阻碍性的条件语句并执行更深层次的种子筛选,来增强现代基于覆盖率的种子选择方法(如 afl-cmin)的效果。

原作者: Ruixiang Qian, Chunrong Fang, Zengxu Chen, Youxin Fu, Zhenyu Chen

发布于 2026-03-02
📖 1 分钟阅读☕ 轻松阅读

原作者: Ruixiang Qian, Chunrong Fang, Zengxu Chen, Youxin Fu, Zhenyu Chen

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

这篇论文讲述了一个关于如何更聪明地寻找软件漏洞的故事。为了让你轻松理解,我们可以把“软件测试”想象成在一个巨大的迷宫里寻找隐藏的宝藏(漏洞)

🕵️‍♂️ 背景:传统的“寻宝”方式

想象你是一名寻宝猎人(这就是模糊测试工具 Fuzzer),你的任务是进入一个复杂的迷宫(软件程序),找到里面的陷阱或宝藏(Bug/漏洞)。

  1. 种子(Seeds): 你手里有一堆地图碎片(初始种子)。这些碎片告诉你迷宫的某些入口和路径。
  2. 变异(Mutation): 你拿着这些地图碎片,通过涂改、拼接、复制(变异),尝试拼凑出能带你走到迷宫深处的新地图。
  3. 覆盖率(Coverage): 你每走一步,都会点亮脚下的路。如果你能点亮更多以前没走过的路,说明你走得更深了。

传统做法(CSS):
以前的寻宝专家(传统的种子选择工具,如 afl-cmin)有一个铁律:“只保留那些能点亮新路的地图碎片,扔掉那些重复的。”
这听起来很合理,对吧?如果两张地图碎片带你走的路线完全一样,那就只留一张小的,扔掉大的,这样你的背包(内存)更轻,跑得更快。

🐛 问题:被“茧”困住的黄金种子

但是,作者发现这种传统方法有一个巨大的盲点

想象一下,迷宫里有一扇紧锁的门条件守卫/Conditional Guard)。

  • 种子 A 是一张普通的白纸。
  • 种子 B 是一张画着"Hello"字样的纸条,但这扇门需要"Hello"才能打开。
  • 种子 C 是一张画着"abcde"的纸条。

在传统的寻宝者眼里:

  • 如果你拿着 A、B、C 去试那扇锁着的门,大家都打不开
  • 结果就是,大家都被挡在门外,只能走同一条“门外”的普通小路。
  • 传统工具会想:“看,A、B、C 走的路线一模一样(都在门外),而且 C 最小,那就只留 C 吧,把 A 和 B 扔掉。”

悲剧发生了:
种子 B 其实是一张黄金种子(Golden Seed)!它上面写着"Hello",只要门能打开,它就能带你直达宝藏。但因为那扇门太紧(被“守卫”挡住了),它的价值被**掩盖(Suppressed)**了。传统工具因为只看重“走了多远”,而没看到“手里握着什么钥匙”,所以把这张黄金种子当垃圾扔掉了。

这就是论文标题 "Peeling Off the Cocoon"(剥开茧) 的由来:那些被锁住的黄金种子,就像被茧包裹的蝴蝶,虽然里面有翅膀(价值),但如果不把茧(锁住的门)剥开,它们就飞不起来。

💡 解决方案:PoCo(剥茧计划)

作者提出了一种叫 PoCo 的新方法,专门用来解决这个盲点。它的核心思想是:“既然门打不开,那我们就暂时把门拆掉(或者假装门不存在),看看种子 B 到底能走多远。”

PoCo 的工作流程就像是一个聪明的剥茧工

  1. 插入开关(Toggle Insertion):
    作者给迷宫里的每一扇锁着的门都装了一个遥控开关。默认情况下,开关是关着的,门还是锁着的,程序运行正常。

  2. 层层剥茧(Iterative Seed Selection):
    PoCo 开始工作:

    • 第一轮: 它先试着把第一道锁(比如检查"Hello"的门)的开关打开(禁用守卫)。
    • 观察: 现在,种子 B("Hello")不再被挡在门外了!它顺利通过了第一道门,走到了更深的地方。
    • 发现: 此时,PoCo 发现种子 B 和种子 A、C 走的路线不一样了!原来种子 B 是独特的!
    • 保留: 于是,PoCo 把种子 B 标记为“黄金种子”,保留下来。
    • 继续: 接着,它再打开第二道锁,看看有没有新的种子被释放出来……
  3. 小心陷阱(Reckless Guards):
    当然,不能把所有门都拆了,否则迷宫会塌(程序会崩溃)。PoCo 很聪明,它会识别哪些门是“承重墙”(比如防止程序崩溃的安全检查),如果拆了会导致程序直接死机,它就小心翼翼地保留这些门,只拆那些阻碍探索的“茧”。

🏆 实验结果:真的有用吗?

作者用了很多真实的软件(如 LibXML2, SQLite 等)做了测试,就像让寻宝团队在真实的迷宫里比赛:

  • 找到的宝藏更多: 使用 PoCo 挑选出的种子,比传统方法多发现了一些独特的漏洞(有些漏洞是传统方法完全没看到的)。
  • 走得更深: 虽然覆盖率的提升不是惊天动地(大概多了 0.2% 到 50% 的路径),但在某些关键路径上,PoCo 的种子能带着测试工具走到以前去不了的地方。
  • 时间成本: PoCo 需要花一点额外的时间(比如 2 小时)来“剥茧”和挑选种子。但作者发现,花这 2 小时挑选种子,比让传统工具多跑 2 小时还要划算,因为它能发现更多独特的 Bug。

🌟 总结与启示

一句话总结:
传统的软件测试工具太“势利眼”,只看重种子走了多远,而忽略了种子手里是否握着能打开新世界的钥匙。PoCo 通过暂时“无视”那些锁住的门,把那些被埋没的黄金种子挖掘出来,让测试工具能发现更多隐藏的漏洞。

给普通人的启示:
有时候,我们觉得某些东西(比如一个看似没用的想法、一个不起眼的员工、一个被搁置的项目)是“冗余”的,因为它们在当前环境下没有产出。但如果我们换个角度,移除那些限制它们发挥的“障碍”,可能会发现它们其实是巨大的宝藏。不要只看表面,要试着“剥开茧”,看看里面藏着什么。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →