一、SCA是什么?
今天的软件开发普遍遵循敏捷实践,发布和部署周期都很短这导致开发团队非常依赖开源来加速创新迭代速度。因此,对团队项目中包含的每个开源组件进行跟踪非常重要,这样可以避免法律不合规的风险,并保持强大的安全态势。在DevSecOps环境中,这种跟踪必须集成到SDLC中的每个阶段。
SCA(software composition analysis)保障了开源组件和库的可见性,它可以帮助企业管理组件安全性与许可证相关的风险。以确保软件中嵌入的任何开源组件都符合某种标准,以避免引入可能导致数据泄露、知识产权受损或法律纠纷的风险。
为了实现这一点,SCA工具可以识别特定的开源版本,并关联相关的安全漏洞和许可证信息。高级的SCA工具可以自动化整个过程,从检测和识别组件到漏洞或许可证关联和潜在风险的修补。
二、SCA用例
SCA主要有三种用例:开源漏洞管理、开源许可证管理以及SBOM清单。
1.开源漏洞管理
SCA工具将检测到的组件版本与已知的开源漏洞数据库(如NVD)进行撞库比对,这可以在专门的软件安全性测试期间完成,但是最好在开发过程中尽早完成,以避免将易受攻击的组件引入到开发管道中。
因此,数据库对SCA的支持至关重要。依赖分析可以知道哪些项目或应用程序受到了漏洞的影响,这是SCA的一个强大优势。
2.开源许可证管理
虽然开源软件的本质是“free”,但并不是所有开源组件都可以不受限制的拿来修改使用。对于那些利用开源来进行个人或商业商业的开发者来说,有数以千计的具有独特规定的开源许可证需要留意。SCA可以检测与开发人员创建的软件中的开源组件相关联的许可证,并帮助规避其中潜在的开源风险。
3.SBOM清单
企业越来越依赖开源项目来加速开发与创新,然而开发者可能很快就会忘记自己使用过哪些开源组件,并且可能对与他们带入项目的组件相关的依赖项缺乏可见性。
SCA扫描可以生成与软件和容器一起出现的开源组件的全面列表,包括在应用程序构建阶段解析到项目中的任何依赖项。其输出结果就是SBOM清单,其中包括关于检测到的开源组件的基本信息,通常包括:
- 组件或库名称
- 版本
- 来源或分布
- 扫描项目中的文件路径等等
三、SCA实践层级
从难度上说,SCA工具可以划分为4个等级。
1.成熟的包管理器
我们使用的许多语言都会有比较成熟的包管理器,我们可以基于它的依赖配置文件去识别组件。比如说Java我们最常用的maven,它的依赖管理文件一般都是pom.xml,go一般则是go.mod。
2.没有包管理器
但像C/C++这样的语言,它没有像maven这样统一的包管理器,SCA识别起来就会有些困难。目前业界一般的做法是进行哈希指纹匹配,但这就需要提供SCA的公司必须有一个庞大的组件库以及版本的特征库,这样才能实现软件成分分析。
3.开源代码片段
前两种情况都是建立在开发者比较懒的前提下的,也就是说他们直接、完整的引入了一个开源组件。但在很多时候,开发者可能看到某一个代码片段写的不错,就copy过来。这个代码片段可能来自github甚至CSDN,行数不等,变量定义不明。这个时候传统SCA的依赖分析(dependency check)就无法完成对这些代码片段的识别了,需要更进一步的源代码同源或二进制同源分析才行。目前一般的SCA工具只做到了依赖分析,但泛联新安的CodeAnt已经支持精准的源代码同源和二进制同源分析。
4.SBOM清单
相比于之前的白盒测试,我们在实际应用中还有很多黑盒的场景,比如说一些可执行文件以及安装包这些怎么去识别。这就是SBOM清单要做到的事情了。
四、SCA工作流程
以下是SCA的通用工作流程:
1.SCA工具扫描指定的代码库并创建SBOM清单,包括在构建过程中解决的依赖项。
2.SCA记录被检测组件的特性信息,通常包括许可证信息、组件版本和检测位置。这里生成的信息的范围和准确性取决于开源信息库的完整性,扫描结果与该数据库进行比较以进行识别。
3.SCA识别所有相关的开源安全漏洞,例如CVEs。
4.SCA可以提醒使用者任何检测到的漏洞或潜在的许可证冲突。
5.高级的SCA工具可以将检测到的每个开源组件与定义好的策略进行比较,并自动阻止项目投入开发,或通知涉及成员以加快修补过程。
6.大部分SCA工具都能集成到CI/CD管道中,以便在每次提交时自动扫描项目或新的项目版本。
五、如何选择SCA工具
以下是SCA工具中需要明确的几个重要特性:
1.一个全面的开源数据库:虽然有许多来源对公开披露的漏洞或来自特定供应商或发行版的开源组件进行了编目,但目前还没有关于所有开源组件、许可证或漏洞的集中信息来源。SCA工具应该支持各种信息源。
2.广泛的语言支持:SCA工具必须能够扫描各种语言编写的应用程序。语言支持必须与开源数据库想匹配,已提供关于相关风险的准确信息。
3.创建全面的检测报告:SCA工具旨在识别潜在的许可证和安全风险。然而,这些信息只有在以报告形式提交给相关专业人士才有用。在理想情况下,SCA工具应该提供各种报告样式并集成广泛的API,这可以使安全、工程、DevSecOps团队甚至法律和管理人员都能够看懂。
4.优先级排序和修复:由于当前的快速部署周期,SCA工具应该有助于优先处理最严重的问题,并提供修复建议。对真是风险进行适当的优先排序和验证可以节省大量的时间和精力。
泛联新安的CodeAnt开发安全平台的漏洞安全库支持10万条漏洞能力,涵盖CVE、NVD、CNNVD等漏洞信息。支持主流软硬件环境与主流编程语言,一键生成doc、pdf、xml等报告模式,能实现多维度中文版结果展示,为您的开源安全保驾护航。