开源软件在软件开发中的应用越来越广泛,但开源软件的使用也带来了不容忽视的安全威胁,开源软件中的漏洞容易直接被引入,企业安全合规面临的新挑战也在逐渐增加。
为了对开源软件进行管理,软件成分分析(SoftwareComponentAnalysis,SCA)工具被用来分析易受攻击的组件。然而对于SCA扫描的结果,业界还没有一个公认的标准和基本规范。
为此,Scantist特别推出「SCA工具对比分析和应用解读」系列,提供系统性评估SCA工具的指南,旨在为大家带来基本知识框架和优化实践的紧密关联,为行业提供有价值的参考信息和解决方案。
如何满足企业的需求变化又要考虑解决方案的适配性?
基于企业的安全视角,专业化的开源组件管理工具在安全治理工作中可以发挥很大作用。Scantist科研团队经过探索与验证,总结了SCA工具应该解决的问题和挑战,以提供更加标准和精确的组件检测服务。在此基础上,我们提出了SCA范围指南(以下简称SSG),该指南适用于对所有语言平台的扫描,例如Java、C/C++、Golang、Python、JavaScript等组件语言类型。
Maven是最著名的Java包管理器,它由一组插件组成,用来管理项目中的组件。现有的SCA工具依赖于Maven依赖插件来分析POM文件以检测Java项目中的组件。为了更详细地研究对Maven项目的扫描,我们对Maven中的各种设置展开研究并设计出完整的模型来进行指导。我们对7个开源和商业SCA工具进行了实证研究,以揭示它们对指南和基准的支持。
我们进一步对比并研究了每个工具的漏洞发现能力、可达性分析能力、提供补救能力和检测许可能力。此外,我们还对SCA的其他方面的工具进行了评估,包括效率、CVE检测、CVE可达能力分析、补救建议和许可证冲突解决。
SCA工具面临的挑战
1.SCA扫描算法
开源软件组件可以通过不同的方式被导入项目中。单独的组件检测算法无法检测到所有的通过不同的方法导入的组件。
首先,最常见的导入组件的方式是使用软件包管理器,例如Java项目的Maven。包管理器的作用是维护依赖关系信息并将这些明确地存储在清单文件中。SCA工具应当借助包管理器的功能或者元文件(例如pom.xml)所提供的信息来查找所有与项目相关的组件。
其次,有的项目是通过导入二进制文件的方式引入依赖。SCA工具应当能够对二进制文件进行扫描并收集其依赖信息。通常会有程序员选择直接手动从其他软件库复制粘贴源代码到自己的项目中。SCA工具也应该能够对这种舶来的关键函数进行识别。
而根据我们的观察,SCA工具支持所有导入方法是一个很大的挑战,目前还没有工具能够完全做到这点。
2、SCA扫描模式
图1:采用扫描模式的DevSecOps
在软件开发的不同阶段采用适当的扫描方式可以提高安全性。图1显示了具有适当SCA扫描模式的标准DevSecOp生命周期。为了在整个生命周期中保护项目,SCA工具可能需要支持所有类型的扫描。但是,这对所有工具来说都是一个巨大的挑战。大多数工具只