开源代码中的隐藏风险
开源软件无处不在。它运行着我们使用的浏览器、依赖的应用程序以及保持企业连接的基础设施。对许多安全负责人而言,这仅仅是环境的一部分,并非日常关注的重点——而这正是风险开始的地方。
立命馆大学研究员James Cusick最近着手解答了一个问题:我们依赖的代码到底有多安全?他的研究同时考察了开源和专有软件,扫描了数百万行代码以发现漏洞藏身之处及其严重程度。他的发现揭示了为何静态代码扫描应成为每个安全策略的关键组成部分。
开源与专有代码对比
研究分析了两个开源项目:作为Chrome、Edge和Opera等浏览器基础的Chromium代表大型知名项目;而小得多的神经网络库Genann则提供了鲜明对比。该研究还审查了在同一公司内部构建和维护的若干专有SaaS应用,与开源代码形成直接对比。
结果显示出明显差异。在Chromium扫描中,近600万行代码中发现1460个潜在问题,其中仅少数被评定为严重或高危。Genann的情况则截然不同:仅682行代码中就存在6个潜在问题,约每27行代码就有一个问题。
专有软件处于中间水平。在近300万行代码中发现了约5000个问题,其中大部分为中等或低严重程度。即使在这一组别中,不同应用程序的风险水平也存在很大差异。
供应链影响
对CISO(首席信息安全官)而言,这些发现强调了一个日益严峻的供应链挑战。开源组件常常在未经仔细审查的情况下就被集成到系统中。即使是像Chromium这样拥有庞大活跃贡献者基础的高可见度项目,也可能包含隐藏漏洞。
Cusick表示,对安全负责人的启示很简单:切勿在未自行检查的情况下假定开源软件是安全的。“我不会信任任何未经我个人审查或扫描的开源代码或产品,”他说,“在不了解其质量状态或漏洞暴露情况的情况下将代码集成到产品中,至少可以说是危险的。这就像跳进一辆汽车却不知道刹车是否有效。最后,使用我在论文中描述的方法,可以在几分钟内扫描百万行代码。为什么不愿意花时间评估风险暴露?您可能决定接受某些漏洞,但正如他们所说,‘预知即预护’。”
当组织在未扫描的情况下添加开源库时,他们就将未知的弱点带入了自己的环境。一旦部署,这些组件将变得更难跟踪和更新。随着团队更加依赖大量使用开源代码的微服务和云原生架构,风险也会增加。
CISO应确保每个开源组件在部署前都经过扫描,并在新版本发布时定期重新扫描。同样重要的是,团队需要建立优先处理和修复发现的流程,以便快速解决最严重的问题。
构建安全开发流程
该研究提供了将静态扫描纳入安全开发生命周期的分步指南,这一指南源自十多年的行业实践。它涵盖了工具选择、从代码库获取代码、运行扫描以及与开发人员合作审查和修复发现。
一个关键教训是扫描应该是持续性的。每次更新、新功能或代码更改都有可能引入漏洞。扫描工具可以直接连接到开发流水线,帮助团队更早、更大规模地发现问题。
Cusick相信AI将在漏洞检测中发挥更大作用,但他警告不要将其视为万能解决方案。“关于用于扫描的AI工具,它们现在确实已经成熟,”他说,“然而,它们无法提供100%的检测(大多数其他工具也不能)。也不存在自动扫描和修复工具链。这仍然是一个迭代过程,需要判断调用、代码创建或生成、重新测试和优先级排序,因为如果资源有限且需要满足发布计划(这几乎总是如此),并非每个漏洞都能得到解决。”
他补充说,虽然AI工具有前景,但在取代人类专业知识之前还需要发展。“我认为在可预见的未来,竞争因素的完形对大多数AI工具来说都将是一个挑战。然而,通过组合使用,它们可能能够优化部分难题,比如先进行漏洞扫描,然后分别进行代码修复等,与手工处理相比提供净收益。”
开源软件对企业始终至关重要。这项工作表明,它绝不应被视为无风险的。通过将扫描构建到开发和采购中,CISO可以了解其软件供应链的情况,并降低隐藏漏洞造成严重损害的可能性。