软件成分分析(SCA)是一种用来识别分析某一个软件中所使用的组件与第三方库的来源、版本、许可证信息的技术。这些组件和库可能来源于开源社区、商业供应商或是企业自行开发,其存在很多潜在的安全合规问题。
软件成分分析工具(SCA工具)通常对软件中使用的各种组件和第三方库进行分析评估,以确定软件的安全性、可靠性和可维护性。SCA工具在原理上首先分析软件的代码和依赖关系,来确定其中包含的组件和第三方库信息。然后,将这些组件和库的信息与已知的漏洞、安全威胁和许可证条款进行比较,识别任何潜在的安全或合规问题,使企业可以更好地了解他们使用的软件中存在的潜在漏洞和法律风险,从而采取相应的措施来保护数据安全和合规性。
一、SCA技术场景
1. 漏洞扫描:通过扫描软件的源代码、二进制文件和第三方组件,检测其中存在的已知漏洞,并给出修复建议。
2.第三方组件分析:对软件中使用的第三方组件进行分析,检测其是否包含漏洞或安全问题,并评估其许可证合规性。
3. 源码分析:对软件的源代码进行同源分析,检测其中的漏洞、安全问题等。
4. 知识产权分析:对软件中使用的第三方组件及其相关许可证进行分析,检测其中是否存在知识产权问题。
5. 软件合规性分析:对软件的源代码及其相关许可证进行分析,检测其是否符合相关法规和标准的要求。
二、SCA技术实现
SCA技术对软件代码进行静态分析或动态分析,通常包括以下步骤:
1. 收集软件依赖项信息。
2. 比较依赖项与公开已知漏洞数据库。
3. 分析代码中的许可证。
4. 评估组件的漏洞和安全风险。
5. 提供关于代码中使用的组件的完整性和质量的建议。
而根据SCA产品技术原理来看,其又分为检测技术与数据技术。
三、SCA检测技术
1. 静态分析:通过检查源代码或二进制文件,静态分析可以识别软件中使用的各种组件和库以及其版本信息。大概可包括以下两种:
包管理器技术:通过包管理器技术快速实现依赖分析。常见的包管理器如Maven、NPM、NuGet等等,该技术有自动化、准确性、可扩展性和实时性等优势。
指纹识别技术:针对无包管理器的软件,可以通过提取源代码或者二进制文件中的指纹特征信息,特征的信息可以包括基于文本的特征、属性度量的特征或者程序逻辑特征等等。该方法对指纹的识别要求比较高,可能会出现误报或者漏洞的情况。
2. 动态分析:动态分析技术使用运行时数据来确定软件中使用的组件和库。这种方法比静态分析更快,但可能会错过一些不常用的代码路径和组件。
3. 组合分析:组合分析技术结合了静态和动态分析的优点,可以更全面地识别软件中的组件和库。这种方法可能需要更多的计算资源,但通常可以提供更准确的结果。
4. 基于机器学习的分析:这种方法使用机器学习算法来识别软件中使用的组件和库。它可以自适应地识别新的组件和库,但需要训练数据来建立模型。
5. 基于深度学习的分析:这种方法相较于机器学习需要更强的计算能力和更大的数据集来训练模型,基于神经网络算法来实现组件的识别及安全风险的预测。
四、SCA数据技术
1. 采集技术:数据采集是一种自动化技术,用于从互联网收集、抓取和提取数据,如URL爬取,API调用,基于正则表达式的文本解析等等。在数据采集时,要遵守相关的法律法规和道德规范,避免对被采集网站造成不必要的影响和损害。
2. 指纹提取技术:软件指纹是一种用于唯一标识软件组件的技术,它可以通过计算组件的哈希值来创建一个唯一的标识符,难点在于对不同语言不同格式不同指纹的提取规则。
3. 大数据技术:SCA数据能力要求强大的知识库,不仅数据体量大,数据格式种类多,还对数据的存储、处理、查询性能都有很高的要求。需要结合大数据存储技术,如关系型数据库和分布式文件存储系统等。同时需要用到批处理和流处理的技术提升数据处理效率和准确性。最后还需要对数据进行分析与挖掘工作,从大量的数据中发现有用的模式和信息,从数据角度给开源组件的使用提供建议,预测安全风险发生的概率,提炼数据价值,用到的大数据技术如数据可视化、数据挖掘等。
4. 数据安全技术:保护大规模数据系统安全,包括数据加密、访问控制、审计和风险评估等。
开源组件安全及合规管理平台
开源组件安全及合规管理平台(SourceCheck)是开源网安自主研发的软件成分分析(SCA)产品,用于第三方组件的安全分析与管控,包括企业组件使用管理、组件使用合规审计、新漏洞感知预警、开源代码知识产权审计等,可实现对源码与制品的精准分析,是帮助企业实现开源风险治理的优选工具。