← 最新论文
💻 computer science

Prevalence of Cross-File Dependencies in Terraform and Their Resolution by Security Scanners

本文通过分析大规模 Terraform 数据集,揭示了跨文件依赖现象十分普遍且往往涉及安全敏感型资源,同时通过受控实验证明,现代安全扫描器在解析这些复杂的跨文件关系方面具有不同程度但显著的能力,从而挑战了它们无法处理多文件推理能力的假设。

原作者: Moatasem M. Draz

发布于 2026-09-21
📖 1 分钟阅读☕ 轻松阅读

原作者: Moatasem M. Draz

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

在现代数字世界中,支撑我们的应用程序、银行和流媒体服务的庞大服务器与网络不再是手工构建的。相反,工程师们通过编写计算机语言中的指令,来告诉云端应该构建什么。这种实践被称为“基础设施即代码”(Infrastructure as Code)。它允许团队通过文本文件来定义复杂的系统,从而确保每一个服务器、防火墙和存储桶都能以同样的精确度被创建出来。执行这项工作的最流行工具之一叫做 Terraform。它的工作原理就像是一个蓝图阅读器,将这些文本指令转化为真实、功能完备的技术。然而,正如一份房屋计划书可能会跨越数十页并包含对其他页面的引用一样,这些代码文件很少是孤立存在的。它们交织在一起,一个文件调用另一个文件,传递数值,并构建出一个只有在所有碎片组装完成后才存在的系统。

这些系统的安全性取决于这些指令的准确性。代码中的一个微小错误,例如不小心留下一扇数字之门未锁,都可能将敏感数据暴露给整个互联网。多年来,研究人员和安全专家一直担心,那些旨在扫描这些蓝图以查找错误的工具,可能会对文件之间的连接视而不见。普遍的观点认为,这些扫描器一次只能读取一个文件,从而会错过隐藏在文件缝隙中的危险秘密。如果一个文件说“使用默认设置”,而另一个文件将该默认设置定义为“对所有人开放”,那么扫描器可能会认为第一个文件是安全的,且第二个文件在孤立状态下也是安全的,从而无法发现这种危险的组合。本论文旨在针对大规模的真实世界代码对这一假设进行测试,并观察这些工具是否真的如人们所认为的那样存在局限性。

研究人员首先收集了一个由超过 62,000 个使用 Terraform 的公开项目组成的庞大库。他们想要了解这些项目在多大程度上依赖于不同文件之间的连接。通过绘制这些项目中的关系图,他们发现跨文件连接并非罕见的例外,而是构建这些系统的标准方式。事实上,在他们研究的所有项目中,超过三分之一的项目包含至少一个一个文件依赖于另一个文件的连接。这些连接并非均匀分布;它们高度集中在少数复杂的项目中,而许多简单的项目则几乎没有或极少有此类连接。文件之间最常见的链接方式是指向共享文件夹,即项目会向上或横向穿过其目录结构,去寻找它所需的某个公共代码片段。这种模式表明,工程师组织工作的方式自然地创造了一个跨越多个文件的依赖网络。

随后,研究人员提出了一个关键问题:这些连接是否经常指向系统的最敏感部分?研究人员寻找了这样的情况:一个文件依赖于另一个控制安全设置的文件,例如控制谁可以访问数据库,或者哪些计算机被允许进行通信。他们发现,在超过 9,000 个项目中,这些跨文件连接确实指向了这些关键的安全控制点。这意味着,这些系统的安全性往往依赖于能够追踪一个数值如何从一个文件出发,通过一个连接,最终到达另一个文件中的安全规则。如果一个工具无法追踪这条路径,它所看到的图像就是错误的,可能会漏掉一个仅因文件缝合方式而存在的漏洞。

在确立了问题的规模之后,研究人员转向工具本身,以观察它们是否真的能够追踪这些路径。他们设计了一个受控实验,使用了四种最流行的安全扫描器。他们创建了一系列模拟他们在现实世界中所发现的连接的测试用例,范围从同一文件夹内文件之间的简单链接,到数值经过多个模块传递后才到达最终目的地的复杂链条。他们测试了当危险设置隐藏在另一个文件中时,扫描器是否能发现安全缺陷,或者扫描器是否只有在危险直接写在同一个文件中时才能察觉。

结果挑战了长期以来认为这些工具在根本上无法处理跨文件连接的观点。研究发现,这些工具的能力并非简单的“是”或“否”,而是一个光谱。测试的每一种工具都能追踪最简单的连接,例如在一个文件中定义变量并在另一个文件中使用的场景。它们在这些基础场景中都成功识别了危险。然而,随着连接变得更加复杂,工具的表现开始出现分歧。在测试的四个扫描器中,只有 Checkov 能够追踪最复杂的路径,包括那些数值通过多个模块层级传递,或者设置被特殊配置文件覆盖的情况。其他工具虽然可以处理直接链接,但在连接涉及中间步骤或特定文件类型(如变量覆盖文件)时,往往会丢失追踪。

这一发现表明,关于扫描器无法追踪跨文件引用的普遍假设过于宽泛,并不准确。并不是说这些工具无法完成这项任务,而是它们处理任务的能力因具体工具以及连接的复杂度而异。对于依赖那些只能处理最简单情况的工具的团队来说,他们面临着由于代码中更复杂的布线而遗漏安全问题的真实风险。研究人员总结道,虽然这些工具已经取得了进步,但业界需要更精确地界定每个工具能看到什么以及不能看到什么。与其假设一个工具能捕捉到所有错误,不如理解所选扫描器的具体限制,尤其是在代码依赖于深层连接时。这项研究提供了一张清晰的限制地图,表明虽然最简单的跨文件危险会被捕捉到,但更深层、更复杂的危险则需要更强大的工具或不同的方法来确保安全。

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

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

试用 Digest →