← 最新论文
💻 computer science

Vulnerability Abundance: A formal proof of infinite vulnerabilities in code

该论文通过构造性证明展示了单个 C 程序可包含无限多个可分配 CVE 的独立漏洞,进而提出了“漏洞丰度”这一量化概念,以区分无限漏洞集合与有限利用实例,并强调其在漏洞预防与网络风险分析中的理论及实践价值。

原作者: Eireann Leverett, Jeroen van der Ham-de Vos

发布于 2026-04-10
📖 1 分钟阅读☕ 轻松阅读

原作者: Eireann Leverett, Jeroen van der Ham-de Vos

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

这篇论文提出了一個非常有趣且令人震惊的观点:软件漏洞的数量在理论上是无限的

为了让你轻松理解,我们可以把这篇论文想象成一位科学家造了一台“漏洞制造机”,并证明了这台机器可以永远不停地生产出新的、独一无二的漏洞。

以下是用通俗语言和生动比喻对这篇论文核心内容的解读:

1. 核心实验:漏洞工厂 (The Vulnerability Factory)

想象一下,你有一台神奇的机器(论文里叫“漏洞工厂”),它是一小段 C 语言代码。

  • 它是怎么工作的? 这台机器有一个计数器(比如 1, 2, 3...)。每当你按一次启动键,它就会根据当前的数字,生成一个新的、微小的软件模块。
  • 它生成了什么? 每个模块里都藏着几个经典的“安全漏洞”(比如缓冲区溢出、格式字符串错误等)。
  • 关键点: 虽然漏洞的类型是一样的(比如都是“缓冲区溢出”),但因为计数器在变,每个模块里的漏洞具体参数都不同。
    • 比喻: 就像你有一台 3D 打印机,它永远在打印“有瑕疵的杯子”。第 1 个杯子的瑕疵在杯底,第 2 个在杯壁,第 3 个在杯口。虽然它们都是“有瑕疵的杯子”,但每一个瑕疵的位置和大小都不同,所以每一个都是独一无二的。

2. 数学证明:为什么是无限的?

论文用数学集合论证明了:

  • 因为计数器可以一直加下去(1, 2, 3... 直到无穷大),所以这台机器可以生成无穷多个不同的软件模块。
  • 因为每个模块里的漏洞参数都不同,根据国际通用的漏洞编号规则(CVE),每一个都需要一个独立的身份证(CVE 编号)。
  • 结论: 只要机器不停,漏洞的数量就是可数无穷大(Countably Infinite)。就像自然数(1, 2, 3...)是无穷的一样,漏洞也是无穷多的。

3. 一个重要的区分:漏洞 vs. 利用 (Exploits)

这是论文最精彩的部分之一。作者打了一个非常棒的比方:

  • 漏洞 (Vulnerabilities) 就像化学元素。宇宙中有无数种可能的元素组合,或者像化学元素周期表,虽然元素种类有限,但组合方式无穷无尽。
  • 利用 (Exploits) 就像工业产品。虽然元素无穷多,但真正被大规模制造、用来赚钱或打仗的产品(比如手机、汽车)只有那么几种。

现实情况是

  • 虽然漏洞有无穷多,但黑客真正去开发“利用代码”(Exploit)去攻击的,可能不到 6%
  • 比喻: 就像大海里有无穷无尽的水滴(漏洞),但只有少数几条河流(利用代码)在流动。黑客不会去攻击每一滴水,他们只攻击那些流量最大、最容易到达的河流。

4. 新概念:漏洞丰度 (Vulnerability Abundance)

作者提出了一个新概念,叫“漏洞丰度”,这就像天文学家研究“元素丰度”(比如宇宙中氢最多,氧其次)。

  • 语言决定命运: 不同的编程语言就像不同的“恒星核聚变”过程,会产生不同种类的“元素”(漏洞)。
    • C/C++(像氢炉) 容易产生内存破坏类漏洞(如缓冲区溢出),就像宇宙中氢最多一样,这类漏洞在 C 语言里也最多。
    • Rust/Java(像重元素炉) 虽然消除了内存漏洞,但会产生逻辑错误或注入攻击,就像宇宙中重元素虽然少但依然存在。
  • 动态变化: 随着大家从 C 语言转向 Rust 或 Python,整个软件世界的“漏洞元素分布”也会发生变化。

5. 这对我们意味着什么?

  • 不要试图“修完”所有漏洞: 既然漏洞是无穷多的,试图找到并修补每一个漏洞就像试图把大海里的水舀干一样,是徒劳的(西西弗斯式的劳动)。
  • 关注“市场占比”: 真正的风险不在于漏洞有多少,而在于有多少人在用这个软件
    • 比喻: 如果一个漏洞只存在于一个只有 10 个人用的冷门软件里,它几乎没威胁。但如果一个漏洞存在于 Windows 或 Android 这种几十亿人用的系统里,哪怕只有一个漏洞,也是巨大的灾难。
  • 未来的方向: 我们不应该只盯着“发现了多少个漏洞”,而应该研究“漏洞的分布规律”。通过改变编程语言的选择、优化软件架构,我们可以改变“漏洞元素”的丰度,让危险的漏洞变少,让安全的漏洞变多。

总结

这篇论文告诉我们:

  1. 漏洞是无穷无尽的,就像自然数一样,你数不完。
  2. 但这不可怕,因为黑客只会攻击那些最流行、最容易下手的目标。
  3. 我们的策略应该是:不要试图消灭所有漏洞(因为不可能),而是要改变土壤(编程语言和架构),让危险的“漏洞元素”变得稀少,同时警惕那些占据巨大市场份额的“超级软件”。

这就好比我们无法消灭宇宙中所有的尘埃,但我们可以选择住在没有沙尘暴的地方,或者穿上更坚固的防护服。

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

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

试用 Digest →