SCA软件组成成分分析,是用于分析开发人员使用的源码、模块、框架和库,以识别和清点开源软件的组件构成及依赖关系,并识别已知的安全漏洞或者潜在的许可证授权问题,将风险排查在应用系统投产前,同时也适用于应用系统运行中的诊断分析。
开源安全研究院参与信通院的行业标准《网络安全产品成熟度评价体系 应用软件成分安全检测分析系统评价方法》的起草和研讨,该标准拟提出应用软件成分安全检测分析系统或具有应用软件成分安全检测分析功能的产品技术框架、测试检验和评价方法。基于我们对标准的理解以及对SCA工具的理解,对以下7个可获得的知名免费SCA工具进行调研:
开源网安SourceCheck(SaaS版) 访问地址:
|
https://app.snyk.io/login?cta=sign-up&loc=body&page=open-source-security
|
https://github.com/snyk/cli
|
OWASP DependencyCheck 访问地址:
https://owasp.org/www-project-dependency-check/
|
https://github.com/XmirrorSecurity/OpenSCA-cli/releases
|
https://s.murphysec.com/install.sh
|
https://raw.githubusercontent.com/fossas/fossa-cli/master/install-latest.sh
|
以JEESNS1.4.2作为项目进行扫描,详情如下:
JEESNS是一款基于JAVA企业级平台研发的社交管理系统,依托企业级JAVA的高效、安全、稳定等优势,开创国内JAVA版开源SNS先河。数据库使用MYSQL,全部源代码开放。
下载地址:https://github.com/zchuanzhao/jeesns
通过对JEESNS1.4.2项目的扫描检测,人工统计核对出该项目的组件数量,漏洞数量及许可数量。
根据SCA工具可以解决的问题,可以知道SCA工具的核心功能是能扫描检测出组件相关信息(名称,版本号,组件路径),提供漏洞清单,漏洞清单具备的基础上或许还能检测并提供许可证授权的报告。7个免费SCA工具的导出报告中可提供信息如下图显示:
SourceCheck(SaaS)=Snyk(SaaS)>Snyk(开源版)=Dependency Check>墨菲安全>OpenSCA>FOSSA
对于java项目的第三方组件检出率来说,Pom文件和项目运行时lib目录中的jar包是可以通过人工分析得出的,因此我们认为这是sca工具最起码要达到的标准。
在jar包里面的内容由于分析层次及数据库能力的关系,无法确定数量,但扫描的第一层级应当完全识别出来。标杆数据为人工统计的组件数目,以此作为标准,对调研的免费SCA工具进行计算检出率(具体数据详情如下)
SourceCheck(SaaS版本)>Snyk(SaaS版)>Snyk(开源版)>OpenSCA>DependencyCheck>墨菲安全
每年有数以百万计的新的安全漏洞被发现,好的SCA 工具需要保持最新的漏洞检测库,漏洞库的更新不能在一个重大漏洞发现一个月后才进行。这样每次运行扫描程序时才能得到最新的结果,软件上线后,也依然可以依据经常更新其已知漏洞列表去发现软件中的缺陷,便利了研发人员对已发布软件的维护。
我们以国家信息安全漏洞库2022年4月份更新的2个漏洞来对各个工具进行测试验证
Apache Struts2是一个用于开发Java EE网络应用程序的Web框架。在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
本次漏洞是对CVE-2020-17530修复之后的绕过,当使用语法%{…}应用强制OGNL解析,某些tag标签的属性仍然可以被二次解析。
PyPDF2是一个开源python PDF库,能够拆分,合并,裁剪和转换PDF文件的页面。在 1.27.5 之前的版本中,使用此漏洞的攻击者可以制作 PDF,如果代码尝试获取内容流,则会导致 PyPDF2 无限循环。原因是“ContentStream._readInlineImage”中的最后一个 while 循环仅在找到“EI”令牌时终止,但从未实际检查流是否已经结束。此问题已在版本“1.27.5”中解决。无法升级的用户应在循环访问其内容流之前验证 PDF 和 PDF。
SourceCheck(SaaS版)>Snyk(SaaS版)=Snyk(开源版)=墨菲安全=FOSSA=墨菲安全>DependencyCheck=OpenSCA
SCA工具含有WEB界面,命令行两种使用方式,但不同的免费的SCA工具可提供到的使用方式不同,下表为本次调研的7个免费SCA工具的WEB界面命令行数据对比图:
提供命令行的是Synk(开源版),墨菲安全,Dependency Check,FOSSA和OpenSCA
提供Web界面的是OpenSCA,Snyk(SaaS版)和SoureCheck (SaaS版)
OpenSCA、墨菲安全、FOSSA、Snyk(开源版)、Snyk(SaaS版)、SourceCheck(SaaS版)数据均需要依赖工具厂商。仅有Dependency Check用户可在本地保存数据。
申请Gitee账号,登录到SourceCheck平台,用Gitee账户登录即可
如何通过Gitee账号使用SourceCheck详情如下图
https://app.snyk.io/login?cta=sign-up&loc=body&page=open-source-security
申请Github账号,登录到Synk平台,用Github账户登录即可。(详情如下图)
根据组件检出率分析,组件漏洞知识库更新频率分析以及SCA工具的使用方式分析及漏洞数据库分析,开源安全研究院对本次调研的7个免费SCA工具的建议如下:
1.仅需使用sca功能的推荐使用SourceCheck
2.希望二次开发使用,带WEB界面,推荐使用Open SCA
3.注重独立性不依托厂商,希望二次开发使用,推荐使用Dependency Check
各个用户可以根据各自所需选择使用自己偏好的SCA免费工具
开源安全研究院是依托开源网安公司的产品和丰富的案例,专注于软件安全相关技术及政策的研究,围绕行业发展的焦点问题以及前沿性的研究课题,结合国家及社会的实际需求以开放、合作共享的方式开展创新型和实践性的技术研究及分享。团队自2021年成立以来现已发现了10多个CVE漏洞,参编了中国联通研究院《CU-DevSecOps实践白皮书》,国资委《中央企业网络安全发展研究报告》,国家标准《政府门户网站系统安全技术指南》、《软件供应链安全要求》、《网络安全从业人员能力基本要求》,国家标准研究《互联网恶意软件治理规范》、《安全开发能力评估准则》,工信安全团标《软件安全开发基本要求》、《软件安全开发能力评估》,等级保护团标《网络安全等级保护应用软件安全开发管理评估指南》,通信行业标准《面向云计算的研发运营安全工具能力要求》、《开源软件治理能力评估方法》、《网络安全产品成熟度系列标准》。并于2021年底在OWASP中国的技术支撑下成功地举办了2021首届WAF攻防大赛。
开源安全研究院不定期发布对各类安全工具进行的测评报告及安全知识科普文,方便大家筛选适合自己的安全工具,并且开源安全研究院搭建有免费的DevSecOps平台git.gitsec.cn,来为软件安全爱好者提供一个完整的DevSecOps实验环境,与此同时我们也欢迎开源软件的作者、开源项目厂商进行战略合作对开源项目存在的安全问题进行深入交流。希望能共同维护开源生态平衡,并对开源出一份力。
原文始发于微信公众号(开源安全研究院):免费SCA工具横向测评