什么是软件构成分析 (SCA)?
使用开源组件有哪些风险?
在使用这些组件构建 容器映像 之前,开发人员需要了解先前发现的包中漏洞所引发的安全问题。他们还需要确保符合软件使用许可证的合规性要求。
社区成员经常发现并修补漏洞,但开发人员有责任更新他们的代码。一旦发现漏洞,公开漏洞利用方法的出现只是时间问题,这甚至为低级攻击者利用该问题打开了方便之门。
软件中的大多数漏洞都不在直接包或根包中,而是在依赖包的依赖包中,深达多层,这使得问题更加严重。只修复正在使用的根软件包并不总能确保正在使用的库的安全。
此外,还有几十种规则各异的开源许可证。例如,有的要求注明出处,有的则要求同时公布使用该组件的应用程序的源代码。跟踪所有许可证及其规则可能很困难。
软件构成分析识别开源包中的风险
SCA 工具可识别应用程序中的所有开放源代码包,以及这些包的所有已知漏洞。这些知识可用于通知开发人员代码中存在的问题,以便在这些问题被利用之前进行修复。一个好的软件组成分析流程会将目光从包管理器转向 基础设施即代码(IaC) 和 Kubernetes 清单,拉取映像 以 识别这些映像中的漏洞。
与 IaC 模板连接的 SCA 工具和无限的依赖性扫描可确保漏洞不被发现或解决。
软件构成分析工具还可用于生成软件物料清单(SBOM 或 software BOM),其中包括应用程序使用的所有开源组件。SBOM 列出了有关包版本的详细信息,以及每个使用中组件的已知漏洞和许可证。例如,对于 Python,BOM 将包括导入语句中的所有包,如 httplib2,以及每个包的版本号、发现的漏洞和许可证。
SCA 计划应促成工程、DevOps、安全和合规性小组等利益相关者之间的 协作 。如果代码中包含的开源组件违反了组织控制风险的合规性规定,许多组织会使用这些程序来创建警报和/或阻止代码合并到代码存储库中。确定漏洞和许可证类型的可接受严重性级别时,应让相关利益攸关方参与进来。
如何在开发过程中使用 SCA
良好的 SCA 流程贯穿整个开发过程。从本地环境开始,开发人员需要能够在编写代码时检查代码是否存在漏洞以及是否合规性。
利用集成开发环境(IDE)插件,SCA 工具可以在开发人员添加包时通知他们有关漏洞的信息。在代码提交到存储库之前,检查和自动拉取请求注释应告知开发人员引入的任何问题,并阻止不符合要求的代码。
这应延续到部署中,在部署中可以阻止部署具有预定漏洞级别或许可证类型的软件。安全小组还应对其环境中各组件的态势具有广泛的可见性。
软件构成分析将覆盖范围从 Code 扩展到 Cloud,从基础架构扩展到应用层,从而在整个开发生命周期内跟踪漏洞。
在所有领域,都应让开发人员了解包可能面临的风险。需要根据关键性和对基础设施的影响(例如,如果易受攻击的包位于私有 VPC 中)对漏洞进行排序和优先级排定(例如,使用 CVE 分数和漏洞报告后的时间)。许可证应按允许但要求额外细节(如署名)的许可证和组织政策不允许的许可证(如 "copyleft"许可证)分组。
软件构成分析的优势
团队必须了解其应用环境的态势。通过尽早和经常提供许可证合规性和漏洞反馈,软件构成分析有助于减轻在应用程序中使用开源组件的一些风险。虽然 100% 的修补率不太可能实现,但了解风险并权衡修复漏洞的成本是改善安全态势的一部分。
要了解有关现代开发流程安全的更多信息,请查看《 什么是 DevSecOps?