← 最新论文
💻 computer science

From TinyGo to gc Compiler: Extending Zorya's Concolic Framework to Real-World Go Binaries

本文提出了 Zorya 符号执行框架的扩展,以支持使用标准 gc 编译器编译的多线程 Go 二进制文件,通过恢复线程状态、消除运行时抢占以及采用覆盖路径分析,实现在 Kubernetes 和 Go-Ethereum 等生产项目中检测真实世界漏洞的能力。

原作者: Karolina Gorna, Nicolas Iooss, Yannick Seurin, Rida Khatoun, Keith Makan

发布于 2026-05-06
📖 1 分钟阅读☕ 轻松阅读

原作者: Karolina Gorna, Nicolas Iooss, Yannick Seurin, Rida Khatoun, Keith Makan

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

想象你是一名安全检查员,正试图在一座庞大而复杂的工厂中发现隐藏的陷阱。这座工厂是用Go 编程语言编写的一段软件。

长期以来,安全检查员拥有一种名为Zorya的特殊工具,它非常擅长检查小型、简单的工厂(称为"TinyGo"二进制文件)。但像 Kubernetes 和 Ethereum 这样的大公司所使用的现实世界工厂,规模巨大、混乱不堪,并且同时由许多工人(线程)运行。旧的 Zorya 工具无法应对这些大型工厂;它会被噪音和复杂性搞得晕头转向。

本文讲述的是如何升级 Zorya,使其最终能够检查这些现实世界中多工种的 Go 工厂。以下是他们如何实现这一点的简明解释:

1. 问题:“繁忙的工厂”

标准的 Go 编译器(称为gc)构建的软件会启动一整支无形的工人队伍(操作系统线程)来管理工作。它还有一个“交通指挥员”(运行时),可以在任何时候停止任何一名工人,让其他人优先通行。

  • 旧工具:Zorya 原本用于检查安静、单工人的工厂。当它试图检查繁忙的多工人工厂时,它无法弄清楚谁在做什么,或者工人们站在哪里。
  • 目标:让 Zorya 变得足够聪明,能够暂停混乱,拍摄每位工人的快照,然后仔细检查工作而不致迷失。

2. 解决方案:三种新超能力

作者赋予了 Zorya 三种新技巧来处理大型工厂:

  • “时间旅行快照”(恢复线程状态)
    想象工厂全速运转。与其试图实时观察工人的移动(这太快且令人困惑),新的 Zorya 会按下“暂停”键,拍摄每位工人的手、工具和位置的高清照片并保存。当它开始检查时,会重新加载这些照片,从而确切知道每个人在开始前的位置。这使它能够忽略“交通指挥员”带来的混乱,专注于实际代码。

  • “假设”镜像(覆盖路径分析)
    通常,当一名工人到达分岔路口时,他们会选择一条路径并沿其行走,而另一条路径则被忽略。

    • 旧方法:Zorya 只会检查工人实际走过的路径。
    • 新方法:Zorya 创建了一个工厂的“幽灵镜像”。当工人选择左路时,Zorya 会派遣一名“幽灵工人”沿右路走几步。它会检查该路径是否存在陷阱(例如地板上的洞或损坏的工具),而无需实际行走。如果幽灵发现了陷阱,Zorya 就会发出警报。这被称为写时复制(Copy-on-Write):它只复制幽灵接触到的工厂部分,从而节省大量能量。
  • “静默陷阱”检测器
    有些陷阱不会发出响亮的声音(如崩溃或恐慌)。例如,一个数字可能变得太大而“回绕”并再次变小,静默地破坏数学运算。其他工具会错过这些,因为它们只寻找响亮的崩溃。Zorya 使用一个超级聪明的数学大脑(称为SMT 求解器)在脑海中进行计算。即使程序没有崩溃,它也能说:“嘿,如果这个数字变大,它将静默地破坏数学运算。”

3. 测试:发现真实漏洞

该团队在 Kubernetes、Go-Ethereum 和 CoreDNS 等著名软件中发现的11 个真实世界安全漏洞上测试了升级后的 Zorya。他们将 Zorya 与其他工具进行了比较,包括静态检查器(像语法检查器一样读取代码)、模糊测试工具(向软件投掷随机数据)以及其他安全扫描器。

结果

  • Zorya 发现了 11 个漏洞中的 7 个。
  • “静默”胜利:Zorya 发现的一个漏洞是“静默整数溢出”。这是一个数学错误,既没有导致程序崩溃,也没有触发警报。没有其他工具发现此漏洞,除非有人手动告知它们具体要寻找什么。Zorya 自动发现了它。
  • 权衡:Zorya 比“投掷随机数据”的工具(模糊测试工具)慢。虽然模糊测试工具可能在几秒钟内发现崩溃,但 Zorya 发现一个漏洞大约需要 16 分钟。然而,Zorya 不需要人类为每个函数编写特定的测试脚本;它直接分析二进制文件。

4. 结论

本文表明,我们现在可以利用先进的“幽灵工人”检查方法,在复杂的多线程 Go 软件中发现深层、隐藏的安全漏洞。虽然它比其他方法耗时稍长,但它能够发现其他工具完全遗漏的“静默”漏洞,从而使我们的数字基础设施更安全。

简而言之:他们教会了一个安全机器人如何暂停一个混乱的工厂,拍摄工人的快照,并检查无人行走的路径,成功发现了以前不可见的隐藏陷阱。

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

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

试用 Digest →