上一篇文章中,我们讨论了 DAST 的概念、重要性及其工作原理。那在开发过程中如何查找开源软件包中的漏洞并学习如何修复?本指南带你一起了解 SCA 工具及其最佳实践。
如今,绝大多数代码驱动的应用程序都包括开源组件。但是,开源代码可能包含一些致命的漏洞,比如 Log4Shell 漏洞。
软件成分分析(SCA)是查找开源软件包中的漏洞并学习如何修复它们的最佳选择,确保代码和应用程序处于安全状态。本指南将带你一起了解使用 SCA 工具时的最佳实践。
什么是软件成分分析 SCA?
软件成分分析 Software Compostition Analysis(SCA) 是一种用于管理开源组件应用安全的方法。通过 SCA,开发团队可以快速跟踪和分析引入项目的开源组件。同时,SCA 工具可以发现所有相关组件、支持库以及它们之间直接和间接依赖关系。SCA 工具还可以检测软件许可证、已弃用的依赖项以及漏洞和潜在威胁。扫描过程会生成物料清单 Bill of Materials(BOM),从而提供项目软件资产的完整清单。
SCA 本身并不新奇,但随着开源组件的普及和广泛应用,SCA 逐渐成为应用程序安全项目的关键部分,而 SCA 工具数量也随之激增。包括 DevSecOps 在内的现代软件开发实践中,SCA 需要便于开发人员使用,同时也能让安全团队能够有能力在软件开发生命周期 Software Development Life Cycle (SDLC)内引导和指导开发人员安全地进行开发。
为什么要使用 SCA?
开源组件俨然成为每个垂直领域软件的主要部分。而 SCA 工具有助于跟踪应用程序使用的开源组件,这从生产和安全角度来看都至关重要。
安全漏洞带来的惨痛代价
在此事件中,Equifax 最初表示,网络犯罪分子利用 Apache Struts 的漏洞获取文件。随即,Equifax 在公告中确认,先前披露和修复的漏洞是就是在这次数据泄露事件中恶意攻击者所利用的漏洞,当时这个漏洞的评分有10 分之高。而 Equifax 在漏洞出现后没有及时修复,黑客利用其系统中未修复的 Apache Struts 漏洞发起攻击,导致1.43亿用户的信用记录被泄露,其中包括姓名、出生日期、地址,以及驾驶证号码等,这是有史以来规模最大的数据泄露案。最终,此案以 Equifax 支付7亿美元的赔偿金和罚款,索赔期限延长四年落幕。
Equifax 漏洞事件成为安全行业,尤其是应用程序安全的重要标志,因为它强调了控制措施的重要性,开源组件引入的风险应当得到管理。该漏洞也揭示了对速度的要求,企业需要能够快速,重复地查找和修复他们正在使用的开源软件包中的漏洞。而在 Tidelift 2022年开源供应链报告中显示,有57%的企业认为,即使有现代安全工具的助力,在使用开源进行开发时识别和解决安全漏洞仍然是一项巨大的挑战。
为什么 SCA 这么重要?
开源已成为软件领域的中流砥柱
软件正在吞噬世界,而开源在吞噬软件。在当今竞争激烈的市场中,开源能够帮助公司将服务数字化,让企业在市场中获得一定的竞争优势。
开源是怎样帮助企业实现服务数字化的呢?当企业在进行软件开发时,从零开始构建消耗大量的时间和资源。而使用提供完全相同功能的开源软件包能够有效降低这些成本。
开源本质上是高度灵活的。在社区的支持和严格审查下,开源通常很安全。同时,免费的开源软件和组件能够帮助企业和组织避免软件厂商的束缚。
在 Tidelift 最近的一项研究中,68%的受访者指出,节省资金和开发时间是企业鼓励使用开源组件进行应用程序开发的首要原因。而48%的受访者则表示,使用开源是为了提高应用程序开发和维护效率。开源的使用在新冠疫情之前就达到了顶峰,而疫情的出现加速了采用率。Gartner 预计,90% 的企业应用程序将依赖于开源的使用。
以 Octopus Scanner 恶意软件为例,它通过滥用构建过程影响整个供应链,经过该供应链产生的工件影响其他项目。受影响的项目可能会被许多不同的系统克隆、Fork 和使用,也就是所说的“套娃”攻击。而最近的 SolarWinds 攻击主要针对特定软件,这也进一步证明了现代软件供应链给企业和组织带来的风险越来越大。
开源项目是公开的,且对所有人都是可见。当然也包括恶意攻击者。在其中发现并修复的任何漏洞都会暴露给潜在的攻击者。开源项目越受欢迎,该软件包的吸引力就越大,而对应事件的攻击影响也就越大。
当然企业使用开源组件需要自担风险,因为没有供应商通知他们缺陷,或者签署的合同让他们摆脱责任。
SCA 五大挑战
如前文所述,SCA 是应用程序安全方法和工具的总称,这些方法和工具通常在开发期间扫描应用程序(如 SAST),来定位应用程序中使用的开源组件,并随后识别安全漏洞和软件许可证问题。为了有效管理和降低这些开源组件带来的风险,企业将面临一系列与利用开源构建现代应用程序的方式相关的风险与挑战。
而绝大多数安全漏洞都存在于复杂多层的关系中。Snyk State of Open Source Security 报告发现,超过86%的 .js 节点漏洞是在可传递依赖项中发现的。在 Java 和 Ruby 上也发现了类似的数字。这意味着应用程序中的绝大多数安全漏洞通常都能在开源代码中找到,开发人员甚至不知道他们使用了这些代码。
云原生应用程序以另一种方式利用开源,这同样可能会给企业带来代码可见性的难题。容器镜像可以由各种开源组件组成,这些组件还需要识别和测试漏洞。容器为开发人员提供的抽象层,从开发的角度来看是一个优势,从安全角度来看也是一个弱点。
这些上升趋势会体现在已识别且需要注意的漏洞列表中,其中通常由数千个问题组成。鉴于开发和安全团队可支配的资源有限,如果没有一定的安全技能或嵌入高级安全专业知识的工具,就很难确定工作的优先级。基于通用漏洞评分系统 CVSS (Common Vulnerability Scoring System)是评估风险和确定工作优先级的常用方法,但这个方式存在一些固有的弱点需要在使用时特别注意。
因此,在安全模型中出现了 DevSecOps 和安全防护左移(Shift Left)的概念,即将安全责任转移到开发团队中,以确保对开发工作流的干扰最小,同时确保安全性。
SCA 的6个最佳实践
在确定工具后,也需要给开发人员普及 SCA 的重要性以及用处。让开发人员明确从开发初期就考虑安全问题,并将安全检查完善到他们的工作流程中。这将有效避免开发人员因为修复安全问题而重写代码所花费的时间。
分析表明,开源软件包中80%的漏洞存在于传递依赖关系中。这意味着代码中的大多数漏洞都包含在未知且正在使用的(嵌套)依赖项中。而一个优秀的 SCA 工具,应该准确地检查代码中的所有依赖项,并且应该能够识别和检查传递依赖项。了解代码中使用的开源包的深度和复杂性,能够确保在各个级别都进行合适有效的漏洞检测。
跟踪开源代码本身对于应用程序安全很重要,同时跟踪开源许可证对于合规性也至关重要。开源许可证明确了开源软件包的法律使用条款,使用 SCA 工具能够帮助企业深入了解开源组件的许可条款和条件。在制定安全策略时,企业也需要鼓励开发人员在软件开发生命周期初期采用许可证合规性的规范。
SCA 的未来
企业使用开源来帮助他们在各自的市场中拥有竞争优势。同时,人们逐渐意识到,他们必须控制开源的使用来管理和减少其伴随的风险。当 SCA 工具能够满足我们所提到的这些关键需求,将能成功帮助企业在市场中更好地竞争。
参考链接:
Equifax 信息泄露案落幕
https://www.secrss.com/articles/39075TideLift: 2020 managed opensource survey
https://tidelift.com/subscription/2020-managed-open-source-survey