开源组成分析工具发展现状及建议

  • A+
所属分类:安全闲碎

作者简介


开源组成分析工具发展现状及建议



 李晓明


中国信息通信研究院云计算与大数据研究所云计算部工程师,主要从事开源方面的研究工作。


开源组成分析工具发展现状及建议


 卫 斌


中国信息通信研究院云计算与大数据研究所云计算部工程师,主要从事云保险方面的研究工作。




论文引用格式:

李晓明,卫斌. 开源组成分析工具发展现状及建议[J]. 信息通信技术与政策, 2020(5):57-60.




开源组成分析工具发展现状及建议


李晓明 卫斌


(中国信息通信研究院云计算与大数据研究所,北京 100191)


摘要:开源组成分析工具通过对开源项目进行检测来分析开源组成,可以有效提高开源项目的透明度,降低开源风险。对开源组成分析工具发展现状、检测原理和部署方式进行了分析,从分析开源组成、分析开源安全性、展示扫描结果、提供扫描报告等方面提出了开源组成分析工具的发展建议。

关键词:开源组成分析;开源风险;开源许可证


1 引言


近些年开源热度持续增长,开源在为企业和个人赢得商业价值的同时也面临一系列的风险,开源许可证的兼容性问题、开源项目的合规问题、开源安全漏洞问题和开源知识产权的侵权等问题日趋凸显。2019年11月18日,美国专利组织Unified Patents公布的一项研究结果显示,在对2012年以来已经出现的约260个开源项目/平台的美国地区法院专利诉讼案件进行分析后,发现开源项目相关产品的专利诉讼有逐年增长的趋势[1]。企业需要对开源项目中存在的风险进行识别和盘点,开源组成分析工具应运而生。


2 国外开源组成分析工具的发展现状


国外的开源组成分析工具起步较早,技术较成熟,用户遍布全球并且占据国内大部分市场份额。国外的开源组成分析工具按照对识别对象的颗粒度不同大致分为开源组件级别和开源文件及代码片段级别。


2.1 开源组件级别开源组成分析工具

这类开源组成分析工具主要是对开源组件进行检测, 代表工具有Black Duck、CAST Highlight和Sonatype Nexus。Black Duck是一家美国公司推出的同名软件产品,于2002年上市,主要提供全面的软件组件分析(SCA)解决方案,用于管理在应用程序和容器中使用开源和第三方代码所带来的安全、质量和许可证合规性风险[2]。Black Duck可以集成到整个应用程序生命周期,也可以作为单独一款开源软件组成分析工具来使用;CAST Highlight是一家法国公司于2017年推出的开源软件组成分析工具,提供软件组件分析解决方案,其在分析开源软件的安全、许可证的风险之外还有单独一项功能是用于分析代码质量的,专注于分析编写代码的规范、语句等质量问题;SonatypeNexus是2008年由以色列开发的一款开源组成分析工具,该工具帮助软件开发团队安全使用开源,分析开源项目中的成分,可以使开发团队更快地发现并自动控制风险,该工具做到了自动化检测,不需要人工干预,并且关注整个开发运维流程。


2.2 开源文件及代码片段级别开源组成分析工具

这类开源组成分析工具主要是对开源文件或代码片段进行检测,代表工具有Fossid、Fossology。Fossid于2016年在瑞典诞生,区别于前三款工具,Fossid对开源代码片段进行比对和识别,可以帮助展示开源软件中的开源许可证以及相关的合规性,也能够发现并展示出开源软件存在的安全漏洞。Fossid拥有一个知识库,包含了超过3700 万的开源项目、超过70 亿的代码文件,设计安全漏洞的开源项目超过8000个;Fossology是2017年托管在Linux基金会安全与合规9个项目下的一个子项目,是一个开源的许可证扫描工具。用户可上传单个文件或者整个软件包作为一个工具包,通过自定义规则进行软件扫描,进行开源许可证识别,可用在对软件的开源许可证清点上。


3 国内开源组成分析工具的发展现状


国内开源组成分析工具基本是从2019年开始出现,一些传统的安全企业开始开拓开源组成分析业务,如奇安信的开源卫士;一些企业专注研发开源组成分析工具,如棱镜七彩的Fosseye、北大软件中心的Hobot等。奇安信开源卫士于2019年由奇安信推出,该产品是一款集开源软件识别和安全管控于一体的软件成分分析系统,通过云端分析中心在全球范围内获取开源软件信息和漏洞情报,利用自主研发的开源软件分析引擎为用户提供开源软件识别、开源软件漏洞分析及开源软件漏洞情报获取等功能,帮助行业用户掌握信息系统中的开源组件资产和漏洞情报,降低由开源软件带来的安全风险,保障交付更安全的软件;Fosseye在2019年上市,专注于识别开源组件级别的检测,只需要一个GitHub或码云托管平台的账号,就可以检测用户托管库中的开源项目,对开源项目进行盘点,检测开源组件、开源许可证和开源漏洞等信息;2019年,北京大学软件工程中心研发的一款指纹匹配的开源组成分析工具Hobot,可以从开源项目到开源组件再到开源文件最后到开源代码片段进行层层递进的指纹匹配,得到具体的开源组件信息,继而匹配到安全漏洞等信息。


4 开源组成分析工具检测原理


目前,市场上已经存在一些用于对开源代码组成及安全性进行分析的开源治理工具,总体来说可以分为以下5种类型。


(1)工具扫描开源软件源代码,通过进行源代码片段式比对来识别组件并识别许可证类型。此类工具扫描后得出的组件信息需要人工确认。


(2)工具不扫描开源软件源代码,对文件级别提取哈希值,进行文件级哈希值比对,若全部文件哈希值全部匹配成功则开源组件被识别出来。此类工具扫描后得出的组件信息是自动确认的。


(3)工具不扫描开源软件源代码,通过扫描包配置文件读取信息,进行组件识别从而识别组件并识别许可证类型。此类工具扫描后得出的组件信息是自动确认的。


(4)工具不扫描开源软件源代码,对开源项目的文件目录和结构进行解析,分析开源组件路径和开源组件依赖。此类工具扫描后得出的组件信息是自动确认的。


(5)工具不扫描开源软件源代码,通过编译开源项目并对编译后的开源项目进行依赖分析,这种方式可以识别用在开源项目中的开源组件信息。此类工具扫描后得出的组件信息是自动确认的。


上述5种识别技术的识别速度是依次增快的,并且组件物料清单的完整性也是依次增高的。源代码片段识别出的开源组件的数量较多,但因为源代码片段比对受行数和关键词位置影响,识别出的开源组件的误报率通常较高,且识别出的开源组件需要手动确认,对操作人员的技术能力要求较高;其他3类识别出的开源组件数量通常少于源代码片段识别,但因为哈希值的不变性,其识别出的开源组件的误报率较低,同时相比于开源代码片段识别,由于源代码被改写生成哈希值也会随之改变,因此漏报率通常比源代码片段识别高。


由于检测原理不同,导致不同的开源组成分析工具对同一个开源项目的扫描结果也各不相同。本文主要选取8款常用开源组成分析工具对开源项目Kubernetes 1.16.2版本[3]进行开源组成分析工具扫描对比,详情见表1。

表1  8个开源组成分析工具对Kubernetes 1.16.2版本的扫描结果

开源组成分析工具发展现状及建议


5 开源组成分析工具部署方式


开源组成分析工具一般分为SaaS版和本地部署版,两者在部署形式、更新频率和安全防护侧重点上都有所区别。

SaaS版开源组成分析工具指的是工具服务器部署在云服务器上,通过连接网络向用户提供技术支持,该类工具一般比较轻量,不需要部署工具知识库,并且工具知识库的更新频率比较高,比较及时,对工具安全性防护侧重于网络传输安全和云服务器安全方面。


本地部署版开源组成分析工具指的是工具进行企业内部断网离线部署,该类工具一般需要同时部署开源知识库,占用空间较多,并且由于是离线部署因此知识库更新一般为定期更新,对此类工具的安全性关注更多的是工具本身。


6 开源组成分析工具发展建议


开源组成分析工具应具备开源组成及安全性分析的基本功能,包括分析开源组成、分析开源安全性、展示扫描结果、提供扫描报告、提供二次开发接口、提供更新预警能力和持续集成能力,另外工具还应该具备技术支持能力、部署能力、安全保障能力和兼容能力。下面从不同的能力需求提出相应的发展建议。


6.1 分析能力发展建议

(1)开源组成分析工具对开源项目进行检测应具备分析开源组成的能力,建议工具具备对常用编程语言的支持能力,对各语言开源项目可以进行相应的检测;建议工具具备一定容量的开源知识库,收录GitHub、GitLab等常用的开源代码托管平台上全部开源项目的全部版本。


(2)建议开源组成分析工具应该储备一定量的漏洞库,收录NVD、CNVD和CNNVD等官方漏洞库公布的全部漏洞;另外,还应该采取一系列的措施来扩充漏洞库(如购买商业漏洞库),对接第三方漏洞库并收集和整理开源项目维护的缺陷。


6.2 结果展示能力发展建议

(1)建议开源组成分析工具详细展示对开源项目扫描得到的信息和结果,包括开源组件信息、开源许可证信息、开源漏洞信息、开源漏洞修复建议、开源项目社区信息、开源组件社区动态、开源代码和自研代码比例展示。


(2)建议开源组成分析工具提供扫描报告给用户,用于数据整理和收集,扫描报告尽可能使用可编辑格式,报告内容尽量配合图表以提高可读性。


6.3 多场景覆盖和更新预警能力发展建议

(1)由于许多用户不单独使用开源组成分析工具,而是提取部分或全部工具功能进行二次开发并集成到用户其他平台和流程中,因此建议此类工具提供二次开发接口以方便用户进行二次开发,二次开发接口做到尽可能详细,原则上应包括全部开源组成分析工具功能。


(2)建议开源组成分析工具具备对开源组件变更作出预警信息通知的能力,由于SaaS版和本地部署版开源知识库更新频率不同,因此对SaaS版工具建议24h内提供变更信息给用户,而对本地部署版工具则建议下一次更新时提供变更信息给用户。


(3)建议开源组成分析工具尽量集成到开发、测试、上线前和运维环境上,以提高此类工具多环节的适配能力,做到一个工具多环节使用。


6.4 技术支持、部署、安全保障和兼容能力发展建议

(1)由于开源组成分析工具扫描原理、部署方式以及使用方法差别较大,因此建议工具服务商配备相应的技术支持能力以帮助用户更快、更全面地使用工具。


(2)为适应用户不同的需求,建议开源组成分析工具服务商至少具备SaaS版本和本地部署版本,且这两个版本符合各自部署所需要的基本要求。


(3)由于开源组成分析工具为用户提供开源组成检测的前提是保障工具和用户信息的安全性,因此建议SaaS版重视应对网络传输所带来的一些安全方面的隐患,而本地部署版工具则关注工具本身,保障工具本身软硬件安全。


(4)为了使开源组成分析工具能够尽可能地覆盖多场景,建议工具具备兼容能力,包括与常用操作系统兼容、提供接口级兼容和与常用的浏览器兼容。


7 结束语


同商业软件相比,开源软件同样存在风险,用户使用开源组成分析工具可以梳理开源软件成分,找出开源组件对应的许可证合规情况和漏洞情况,从而降低因开源许可证使用不当所带来的违规行为,也可以降低因开源漏洞未发现和修复所带来的安全问题。


参考文献


[1] 中国科学院知识产权网. 美国发布开源相关专利诉讼报告[R/OL]. (2019-11-20) [2020-04-13]. http://www.casip.ac. cn/website/ipr/iprnewsview/2226.

[2] 萧萧. 微软开源CodePlex项目加入黑鸭子知识库[EB /OL].(2009-05-25)[2020-04-13].http://news. mydrivers.com/1/135/135520.htm.

[3] Kubernetes中文社区. Kubernetes v1.16重磅发布[R /OL].(2019-09-19)[2020-04-13].https:// www.kubernetes.org.cn/5838.html.


Research on development status and detection principle of open source component analysis tools


LI Xiaoming, WEI Bin


(Cloud Computing and Big Data Research Institute, China Academy of Information and Communications Technology, Beijing 100191, China)


Abstract: The open source composition analysis tool analyzes the open source composition by testing the open source project, which can effectively improve the transparency of the open source project and reduce the risk of open source. This paper analyzes the development status, detection principles and deployment methods of open source composition analysis tools, and puts forward suggestions for the development of open source composition analysis tools in terms of analyzing open source composition, analyzing open source security, displaying scan results, and providing scan reports.

Key words: open source component analysis; open source risk; open source license


本文刊于《信息通信技术与政策》2020年第5期


文章来源:信息通信技术与政策

开源组成分析工具发展现状及建议


发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: