共计 5148 个字符,预计需要花费 13 分钟才能阅读完成。
上一篇文章中,咱们探讨了 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 工具有助于跟踪应用程序应用的开源组件,这从生产和平安角度来看都至关重要。
安全漏洞带来的惨痛代价
Gartner 预计超过 70% 的应用程序因应用开源组件而产生缺点和破绽。 正如美国征信巨头 Equifax 的案例所表明,这些破绽可能会给企业和组织带来灾难性结果。
在此事件中,Equifax 最后示意,网络犯罪分子利用 Apache Struts 的破绽获取文件。随即,Equifax 在布告中确认,先前披露和修复的破绽是就是在这次数据泄露事件中歹意攻击者所利用的破绽,过后这个破绽的评分有 10 分之高。而 Equifax 在破绽呈现后没有及时修复,黑客利用其零碎中未修复的 Apache Struts 破绽发动攻打,导致 1.43 亿用户的信用记录被泄露,其中包含姓名、出生日期、地址,以及驾驶证号码等,这是有史以来规模最大的数据泄露案。最终,此案以 Equifax 领取 7 亿美元的赔偿金和罚款,索赔期限缩短四年闭幕。
Equifax 破绽事件成为平安行业,尤其是应用程序平安的重要标记,因为它强调了控制措施的重要性,开源组件引入的危险该当失去治理。该破绽也揭示了对速度的要求,企业须要可能疾速,反复地查找和修复他们正在应用的开源软件包中的破绽。而在 Tidelift 2022 年开源供应链报告中显示,有 57% 的企业认为,即便有古代平安工具的助力,在应用开源进行开发时辨认和解决安全漏洞依然是一项微小的挑战。
为什么 SCA 这么重要?
越来越多的应用程序由开源代码组成。据估计,开源代码占到了利用程序代码的 90%。实际上应用程序是由不同的组件组成,企业须要保障所有的组件成分都是平安的,这样才可能无效地治理和升高危险。这也正是企业在确保代码库平安时所面临的挑战。
开源已成为软件畛域的中流砥柱
软件正在吞噬世界,而开源在吞噬软件。在当今竞争强烈的市场中,开源可能帮忙公司将服务数字化,让企业在市场中取得肯定的竞争劣势。
开源是怎么帮忙企业实现服务数字化的呢?当企业在进行软件开发时,从零开始构建耗费大量的工夫和资源。而应用提供完全相同性能的开源软件包可能无效升高这些老本。
开源实质上是高度灵便的。在社区的反对和严格审查下,开源通常很平安。同时,收费的开源软件和组件可能帮忙企业和组织防止软件厂商的解放。
在 Tidelift 最近的一项钻研中,68% 的受访者指出,节俭资金和开发工夫是企业激励应用开源组件进行利用程序开发的首要起因。而 48% 的受访者则示意,应用开源是为了进步利用程序开发和保护效率。开源的应用在新冠疫情之前就达到了高峰,而疫情的呈现减速了采用率。Gartner 预计,90% 的企业应用程序将依赖于开源的应用。
当今的软件供应链
开源是形成古代云原生应用程序的一部分。现在,应用程序更多是组装而非从零构建。除了开源软件包之外,应用程序还由专有代码、容器和基础设施组装而成,成为软件供应链的组成部分。而软件供应链中的这些组件和模块也是歹意攻打的潜在指标。利用软件供应链中的破绽能对整个应用程序,进而扩充攻击面。
以 Octopus Scanner 恶意软件为例,它通过滥用构建过程影响整个供应链,通过该供应链产生的工件影响其余我的项目。受影响的我的项目可能会被许多不同的零碎克隆、Fork 和应用,也就是所说的“套娃”攻打。而最近的 SolarWinds 攻打次要针对特定软件,这也进一步证实了古代软件供应链给企业和组织带来的危险越来越大。
开源 ≠ 平安
开源我的项目被认为应用起来更平安。毕竟当整个社区参加保护和开发我的项目时,问题经常被更快地辨认和修复。这当然包含安全漏洞在内的各种 bug。话虽如此,这并不代表开源是没有危险的。
开源我的项目是公开的,且对所有人都是可见。当然也包含歹意攻击者。在其中发现并修复的任何破绽都会裸露给潜在的攻击者。开源我的项目越受欢迎,该软件包的吸引力就越大,而对应事件的攻打影响也就越大。
当然企业应用开源组件须要自担风险,因为没有供应商告诉他们缺点,或者签订的合同让他们解脱责任。
SCA 五大挑战
如前文所述,SCA 是应用程序平安办法和工具的总称,这些办法和工具通常在开发期间扫描应用程序(如 SAST),来定位应用程序中应用的开源组件,并随后辨认安全漏洞和软件许可证问题。为了无效治理和升高这些开源组件带来的危险,企业将面临一系列与利用开源构建古代应用程序的形式相干的危险与挑战。
1. 代码的低可见性
将开源代码嵌入到利用程序代码库中的形式带来了微小的可见性挑战。开发人员可能会间接在代码中应用许多开源包,而这些包又蕴含一些开发人员不理解的其余开源包。这些间接或可传递的依赖关系简单多层,因而很难对应用程序理论应用的开源进行端到端的可见性。
而绝大多数安全漏洞都存在于简单多层的关系中。Snyk State of Open Source Security 报告发现,超过 86% 的 .js 节点破绽是在可传递依赖项中发现的。在 Java 和 Ruby 上也发现了相似的数字。这意味着应用程序中的绝大多数安全漏洞通常都能在开源代码中找到,开发人员甚至不晓得他们应用了这些代码。
云原生应用程序以另一种形式利用开源,这同样可能会给企业带来代码可见性的难题。容器镜像能够由各种开源组件组成,这些组件还须要辨认和测试破绽。容器为开发人员提供的形象层,从开发的角度来看是一个劣势,从平安角度来看也是一个弱点。
2. 依赖关系盘根错节
为了精确辨认应用程序正在应用的依赖关系以及它们引入的破绽,须要深刻理解每个生态系统如何解决依赖关系。开源包在装置时的解析、锁定文件、开发依赖关系 – 所有这些都是影响如何辨认开源包中的破绽并将决定后续修复步骤的因素。SCA 解决方案须要了解这些细微差别,以防止产生过多误报。
3. 破绽数量继续减少
因为已辨认的破绽数量宏大,因而覆盖了破绽的可见性及其对企业形成的危险。Snyk Intel 破绽数据库减少了 10000 多个破绽,也反映了破绽数量的持续增长。
这些回升趋势会体现在已辨认且须要留神的破绽列表中,其中通常由数千个问题组成。鉴于开发和平安团队可摆布的资源无限,如果没有肯定的平安技能或嵌入高级平安专业知识的工具,就很难确定工作的优先级。基于通用破绽评分零碎 CVSS(Common Vulnerability Scoring System)是评估危险和确定工作优先级的罕用办法,但这个形式存在一些固有的弱点须要在应用时特地留神。
4. 不易找到欠缺的破绽数据库
无关已知破绽的信息较为扩散。国家破绽数据库(NVD)通常用于接管无关破绽的更新,但其余起源(如问题跟踪器、在线论坛、平安新闻通讯等)也能提供大量无关破绽的平安情报。NVD 也可能无奈及时增加破绽。例如,NVD 中 92% 的 JavaScript 破绽都是当时增加到 Snyk 中的。及时理解破绽很重要。
5. 安全检查升高开发速度
开发人员的开发节奏很快,而平安团队却很难赶上。因为须要更快、更频繁地交付代码,开发人员越来越多地应用到开源。不足人力和资源的平安团队试图在软件开发生命周期的各个不同阶段进行安全检查,但这实际上导致开发速度减慢。然而减慢的开发节奏可能对整体应用程序平安更不利,因而这些查看最终会被绕过或疏忽。
因而,在平安模型中呈现了 DevSecOps 和平安防护左移(Shift Left)的概念,行将平安责任转移到开发团队中,以确保对开发工作流的烦扰最小,同时确保安全性。
SCA 的 6 个最佳实际
软件组合分析(SCA)工具是查找开源包中的破绽并学习如何修复它们的最佳抉择,爱护代码和应用程序的运行状况。在应用 SCA 工具时,请参考以下六个最佳实际。
1. 应用开发者敌对的 SCA 工具
开发人员忙于写代码。他们须要全面思考,高效设计,并疾速迭代。因而对开发人员不敌对的 SCA 工具会减慢开发节奏。而便于开发人员应用的 SCA 工具可能轻松设置和应用。它应该简略地与现有的开发工作流和工具集成,并尽早在软件开发生命周期(SDLC)中集成。
在确定工具后,也须要给开发人员遍及 SCA 的重要性以及用途。让开发人员明确从开发初期就思考平安问题,并将安全检查欠缺到他们的工作流程中。这将无效防止开发人员因为修复平安问题而重写代码所破费的工夫。
2. 理解依赖关系
开源包有两种依赖关系:间接依赖和传递依赖。间接依赖项,就是你间接应用在我的项目里的开源包。而间接依赖项之一应用的开源包,便是传递(间接)依赖项了。
分析表明,开源软件包中 80% 的破绽存在于传递依赖关系中。这意味着代码中的大多数破绽都蕴含在未知且正在应用的(嵌套)依赖项中。而一个优良的 SCA 工具,应该精确地查看代码中的所有依赖项,并且应该可能辨认和查看传递依赖项。理解代码中应用的开源包的深度和复杂性,可能确保在各个级别都进行适合无效的破绽检测。
3. 主动扫描与可操作修复
一个好的 SCA 工具能够为企业提供定期运行主动扫描的选项。利用这一点,企业能够来设置对代码的被动和继续监控。主动扫描可能提供无关破绽所在位置以及如何修复破绽的可操作警报。请认真对待 SCA 工具提供的修复破绽的方向,采纳该方向来利用修复程序。
4. 将 SCA 集成到 CI/CD 流水线中
应用 SCA 工具并不意味着须要在开发—测试—生产过程中停滞下来。相同,企业应该将 SCA 扫描集成到 CI/CD 流水线中,以便辨认和修复破绽,并成为软件开发和构建过程中的一个性能局部。同时,这也能够帮忙开发人员更轻松地适应代码平安作为其日常工作流程一部分。
5. 利用报告及物料清单
包含美国联邦政府在内的许多组织,在购买软件时都要求蕴含软件物料清单(SBOM)报告。在产品中提供具体的物料清单表明企业理解跟踪应用程序内每个组件的价值。无关平安扫描和修复的清晰报告也十分弱小。提供无关企业的平安实际和修复的破绽数量的具体报告,表明对软件平安的承诺和践行。
6. 增强安全策略,进步许可证合规性
分明地理解开发人员应用的开源包,将有助于企业创立定义和施行平安准则的策略。企业能够应用通过破绽扫描取得的常识,领导开发人员在应用开源软件包时思考安全性。
跟踪开源代码自身对于应用程序平安很重要,同时跟踪开源许可证对于合规性也至关重要。开源许可证明确了开源软件包的法律应用条款,应用 SCA 工具可能帮忙企业深刻理解开源组件的许可条款和条件。在制订安全策略时,企业也须要激励开发人员在软件开发生命周期初期采纳许可证合规性的标准。
SCA 的将来
鉴于开源的日益遍及,以及最近违规和网络攻击的宣传,公众对 SCA 的关注热度逐渐回升。开源在推动数字化转型中所扮演着不可漠视的角色,而这个趋势在近期简直不会产生扭转。
企业应用开源来帮忙他们在各自的市场中领有竞争劣势。同时,人们逐步意识到,他们必须管制开源的应用来治理和缩小其随同的危险。当 SCA 工具可能满足咱们所提到的这些要害需要,将能胜利帮忙企业在市场中更好地竞争。
参考链接:
Equifax 信息泄露案闭幕
https://www.secrss.com/articl…TideLift: 2020 managed opensource survey
https://tidelift.com/subscrip…