软体组成分析

软体组成分析(英语:Software composition analysis;简称SCA)是针对软体的分析,侦测是否有使用开放原始码(open source)组件,软体组件是否是最新版本,是否有会影响安全的缺陷,或是其中有需要授权(licensing)才能合法使用的组件[1]

SCA产品的运作方式如下[2]

  • 应用程式会扫描程式码,及编译软体会用到的相关档案。
  • 应用程式会识别开源组件以及其版本,会在扫描的应用程式目录中建立资料库,其中有开源软体的列表。
  • 接下来会将列表和另一个储存组件已知安全漏洞、授权需求以及组件历史版本的资料库比对[3],在侦测安全漏洞时,会和公共漏洞和暴露(CVE)比对,此资料库也是美国国家漏洞资料库英语National Vulnerability Database(NVD)追踪的资料。有些软体有额外的专属漏洞资料库。在确认智慧财产权(IP)或是法规合规( Legal Compliance)议题时,SCA产品会搜寻开源组件的授权资讯,并且加以评估[4]。有些组件是源自常用的开源存储库(像是GitHubMavenPyPINuGet等),会用开源存储库识别出这些组件以及其版本。
  • 会用上述分析结果,转换为不同的数位格式让终端使用者使用。其内容和格式依SCA产品而定,可能会包括评估及处理风险的指南,若是有正常版或是较宽松版Copyleft授权的需求,也会有建议作法。输出也会包括软体材料表(SBOM),其中会列出应用程式中的所有组件、版本及相关资讯,其中也会包括开源组件[5]

开放原始码模组以及其风险 编辑

在软体开发过程中,常会使用不同的组件来进行开发[6]。使用软件组件可以将复杂的较大组件分割成较小的程式码,增加灵活性,以后也可以配合新的需求而复用(reuse)这些组件[7]。在1990年代末,开放原始码软体(OSS)开始流行,此作法应用得更广,也可以加速软体开发时程,缩短产品上市时间[8]

不过,使用开源软体也为应用程式引入了风险,风险可以分为以下五类[9]

  • 开源软体版本控制:导入新版本时,可能会有软体变更造成的风险。
  • 安全性:组件漏洞的风险(CVE)。
  • 授权:智慧财产(IP)法律要求的风险。
  • 开发:已有代码以及开源软体之间的相容性风险。
  • 支持:文件化(documentation)不足或是软体组件过期英语Obsolescence的风险。

开放源代码促进会在1998年2月建立之后不久[10],也有人注意到开源软体相关的风险[11],各组织就试著用试算表以及文件来追踪开发者所使用的开源组件,设法进行管理[12]

对于密集使用开源组件的组织,需要自动化开源风险的分析及管理。因此产生了帮助组织管理开源风险的软体,称为软体组成分析(Software Composition Analysis, SCA)。SCA设法侦测软体应用程式中有的所有第三方组件,减少相关安全漏洞、IP授权需求、及软体过期的相关风险。

用法 编辑

组织中的不同部门里,SCA会有不同的用途。依组织的大小以及结构不同,会使用SCA的部门也会不同。IT部门会用SCA,和共同利害相关者(包括资讯长CIO、技术长CTO以及主企业架构师 Chief Enterprise Architects)来实现及运作相关技术。安全和授权的资料会让资安长(Chief Information Security Officers, CISO)确定安全风险,由Chief IP officer或首席合规官(Chief Compliance officer)处理智慧财产权的风险[13]

有些SCA产品可以和开发产品时会使用的整合开发环境(IDE)整合,也有些SCA产品会是软体品质控制英语software quality contro流程中的一个步骤[14][15]

SCA产品(特别是其产生软体材料表的能力)在一些国家(例如美国)是必要的,若要贩售软体给美国政府,软体供应商,需要提供软体材料表[16]

另一个使用SCA的情境是在技术的尽责查证。在开始并购(M&A)流程前,需由独立谘询公司英语Independent advisory firm审核目标团队软体相关的风险[17]

SCA的优点 编辑

SCA产品自动化的特点是其主要优点。开发者使用及整理开源组件时,不需另外花费心力整理资料[18]

SCA的缺点 编辑

目前SCA的产品有以下的缺点:

  • 复杂及费心力的配置,可能需要花几个月才能完全正常运作[19]
  • 每一个SCA产品都有其专属的开源组件资料库,在大小以及覆盖率上有很大的差异[20]
  • 会把漏洞资料限制在只在NVD上公开报告的资料(可能是在发现漏洞后数个月才会公开报告)[21]
  • 在依照SCA报告所采取的行动上,没有自动化的指南[22]
  • 在开源软体授权的法律要求上,没有对应的指引[23]

相关条目 编辑

参考资料 编辑

  1. ^ Prana, Gede Artha Azriadi; Sharma, Abhishek; Shar, Lwin Khin; Foo, Darius; Santosa, Andrew E; Sharma, Asankhaya; Lo, David. Out of sight, out of mind? How vulnerable dependencies affect open-source projects. Empirical Software Engineering (Springer). July 2021, 26 (4): 1–34 [2023-11-11]. S2CID 197679660. doi:10.1007/s10664-021-09959-3. (原始内容存档于2023-12-25). 
  2. ^ Ombredanne, Philippe. Free and Open Source Software License Compliance: Tools for Software Composition Analysis. Computer (IEEE). October 2020, 53 (10): 262–264 [2023-11-11]. S2CID 222232127. doi:10.1109/MC.2020.3011082 . (原始内容存档于2024-04-12). 
  3. ^ 10 Types of Application Security Testing Tools: When and How to Use Them. 2018-07-08 [2023-11-11]. (原始内容存档于2023-09-25). 
  4. ^ Duan, Ruian; Bijlani, Ashish; Xu, Meng; Kim, Taesoo; Lee, Wenke. Identifying Open-Source License Violation and 1-day Security Risk at Large Scale. Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security. ACM. 2017: 2169–2185 [2023-11-11]. ISBN 9781450349468. S2CID 7402387. doi:10.1145/3133956.3134048. (原始内容存档于2022-09-02). 
  5. ^ Arora, Arushi; Wright, Virginia; Garman, Christina. Strengthening the Security of Operational Technology: Understanding Contemporary Bill of Materials (PDF). JCIP the Journal of Critical Infrastructure Policy. 2022: 111 [2023-11-11]. (原始内容存档 (PDF)于2024-01-07). 
  6. ^ Nierstrasz, Oscar; Meijler, Theo Dirk. Research directions in software composition. ACM Computing Surveys (ACM). 1995, 27 (2): 262–264. S2CID 17612128. doi:10.1145/210376.210389 . 
  7. ^ Nierstrasz, Oscar; Dami, Laurent. Object-oriented software composition. Prentice Hall International (UK) Ltd. January 1995: 3–28. CiteSeerX 10.1.1.90.8174 . 
  8. ^ De Hoon, Michiel JL; Imoto, Seiya; Nolan, John; Miyano, Satoru. Open source clustering software. Bioinformatics (Oxford University Press). February 2004: 1453–1454. CiteSeerX 10.1.1.114.3335 . 
  9. ^ Duc Linh, Nguyen; Duy Hung, Phan; Dipe, Vu Thu. Risk Management in Projects Based on Open-Source Software. Proceedings of the 2019 8th International Conference on Software and Computer Applications. 2019: 178–183 [2023-11-11]. ISBN 9781450365734. S2CID 153314145. doi:10.1145/3316615.3316648. (原始内容存档于2022-11-07). 
  10. ^ History of the OSI. Opensource.org. 2006-09-19 [2023-11-11]. (原始内容存档于2012-07-26). 
  11. ^ Payne, Christian. On the security of open source software (PDF). Information Systems Journal. 2002, 12: 61–78 [2023-11-11]. S2CID 8123076. doi:10.1046/j.1365-2575.2002.00118.x. (原始内容存档 (PDF)于2023-05-31). 
  12. ^ Kaur, Sumandeep. Security Issues in Open-Source Software (PDF). International Journal of Computer Science & Communication. April 2020: 47–51 [2023-11-11]. (原始内容存档 (PDF)于2023-05-31). 
  13. ^ Popp, Karl Michael. Best Practices for commercial use of open source software. BoD – Books on Demand, 2019. 2019-10-30: 10 [2023-11-11]. ISBN 9783750403093. (原始内容存档于2023-11-11). 
  14. ^ Imtiaz, Nasif; Thorn, Seaver; Williams, Laurie. A comparative study of vulnerability reporting by software composition analysis tools. Proceedings of the 15th ACM / IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM). ACM. 2021-10: 1–11 [2023-11-11]. ISBN 9781450386654. S2CID 237346987. arXiv:2108.12078 . doi:10.1145/3475716.3475769. (原始内容存档于2023-01-19). 
  15. ^ Sun, Xiaohan; Cheng, Yunchang; Qu, Xiaojie; Li, Hang. Design and Implementation of Security Test Pipeline based on DevSecOps. 2021 IEEE 4th Advanced Information Management, Communicates, Electronic and Automation Control Conference (IMCEC) 4. IEEE. 2021-06: 532–535 [2023-11-11]. ISBN 978-1-7281-8535-4. S2CID 236193144. doi:10.1109/IMCEC51613.2021.9482270. (原始内容存档于2021-08-12). 
  16. ^ Software Bill of Materials Elements and Considerations. [2023-11-11]. (原始内容存档于2022-12-08). 
  17. ^ Serafini, Daniele; Zacchiroli, Stefano. Efficient Prior Publication Identification for Open Source Code. The 18th International Symposium on Open Collaboration 4. ACM. September 2022-08: 1–8 [2023-11-11]. ISBN 9781450398459. S2CID 251018650. arXiv:2207.11057 . doi:10.1145/3555051.3555068. (原始内容存档于2023-01-19). 
  18. ^ Chen, Yang; Santosa, Andrew E; Sharma, Asankhaya; Lo, David. Automated identification of libraries from vulnerability data. Proceedings of the ACM/IEEE 42nd International Conference on Software Engineering: Software Engineering in Practice. 2020-09: 90–99 [2023-11-11]. ISBN 9781450371230. S2CID 211167417. doi:10.1145/3377813.3381360. (原始内容存档于2023-11-14). 
  19. ^ Rajapakse, Roshan Namal; Zahedi, Mansooreh; Babar, Muhammad Ali. An Empirical Analysis of Practitioners' Perspectives on Security Tool Integration into DevOps. Proceedings of the 15th ACM / IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM). 2021: 1–12 [2023-11-11]. ISBN 9781450386654. S2CID 235731939. arXiv:2107.02096 . doi:10.1145/3475716.3475776. (原始内容存档于2023-05-31). 
  20. ^ Imtiaz, Nasif; Thorn, Seaver; Williams, Laurie. A comparative study of vulnerability reporting by software composition analysis tools. Proceedings of the 15th ACM / IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM). 2021: 1–11 [2023-11-11]. ISBN 9781450386654. S2CID 237346987. arXiv:2108.12078 . doi:10.1145/3475716.3475769. (原始内容存档于2022-11-09). 
  21. ^ Component Analysis. owasp.org. [2023-11-11]. (原始内容存档于2023-12-20). 
  22. ^ Foo, Darius; Chua, Hendy; Yeo, Jason; Ang, Ming Yi; Sharma, Asankhaya. Efficient static checking of library updates. Proceedings of the 2018 26th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering. 2018: 791–796 [2023-11-11]. ISBN 9781450355735. S2CID 53079466. doi:10.1145/3236024.3275535. (原始内容存档于2022-11-11). 
  23. ^ Millar, Stuart. Vulnerability Detection in Open Source Software: The Cure and the Cause (PDF). Queen's University Belfast. 2017-11 [2023-11-11]. (原始内容存档 (PDF)于2024-02-06). 

外部链接 编辑