一 前言

“软件供应链安全”,是近年各国政府和业界开始关注的安全领域。在SAFECode的报告中,“软件供应链”被描述为“软件以‘阶梯状’方式被不断集成进入下一个软件产品中”[1];而软件供应链安全的问题,则主要表现为在软件代码中插入恶意代码和植入安全缺陷[2]。目前,我国在软件供应链安全领域的研究正处于起步阶段。但相关专家学者已清晰指出我国软件供应链安全的薄弱环节,包括:关键软件和设计工具难以从源头掌握软件供应链、开源代码潜藏安全缺陷、管控体系尚不完善等问题[3]。

随着我国网信工作的不断推进,各行业已认识到:软件系统开发过程中的逻辑缺陷和代码漏洞,是造成网络安全事件的重要原因;“软件安全开发生命周期”的落地实践,能够从软件诞生的源头提升软件安全质量,助力网络安全保障。而当前软件供应链安全领域缺乏体系化的保障方法和国家层面的政策指导,从不同层面落地软件安全开发生命周期实践,可对软件供应链安全保障提供一定支撑。

本文从软件安全开发生命周期角度分析了软件供应链安全的保障方法。在下文中,首先介绍了有关软件供应链安全的特征和难点;并介绍了软件安全开发生命周期;最后,本文从安全开发管理、安全开发技术、供应商和其他方面探讨了软件供应链安全保障。

对软件供应链安全的认识

1、软件供应链安全的特征

软件供应链安全具有覆盖软件全生命周期和软件开发体系的特征[4]。

(1)覆盖软件的全生命周期

在软件的全生命周期各阶段,对于软件的恶意行为或植入恶意代码,都可能破坏或影响最终用户的信息安全。

图1、软件供应链安全覆盖软件全生命周期

(2)覆盖软件开发体系

对于软件开发体系中开发工具、开发团队、开发生命周期及软件产品和补丁的任何恶意行为,都可能破坏或影响最终用户的信息安全。

图2、软件供应链安全覆盖软件开发体系

2、 软件供应链安全的难点

(1)国家政策导向空缺[5]。国家在重点项目引导中暂无以软件供应链安全为主题的专题,在产品审查测评过程中,也鲜有供应链安全相关的流程要求及检测手段。同时,法律法规、行业标准都未相关涉及的内容。

(2)自动化检测难度大[5]。相对于网络安全漏洞和软件代码漏洞,软件供应链安全问题尚未形成具有供应链特征的、业界统一的、标准的问题定义与分类,及对应的测试集支撑。

(3)质量保障能力不足[6]。安全是质量的一种属性。软件研发单位通常缺乏提高软件产品安全性的有效措施和保障条件。

(4)开发过程大量使用第三方组件和开源软件。使用第三方组件和开源组件有助于提高软件开发的效率,但可能有意或无意将第三方组件和开源软件安全缺陷引入软件,并将随着软件的使用而扩散[7]。根据Sonatype发布的2018年软件供应链报告[8]显示,Java、JavaScript和Python的开源组件数量已分别达到了350万个、550万个和到140万个。对中央仓库(Central Repository)中350万个Java组件的分析结果显示,超过10%(351000个)的组件至少包含一个已知漏洞;事实上,研究人员发现,这些组件中有共计300多万个漏洞,任何一个漏洞都可能成为攻击者的攻击目标[9]。

应对措施

1、应对措施的目标

软件供应链安全的目标是确保软件开发过程和使用过程的安全与可信。

(1)软件安全:是关于构建安全软件的:将软件设计成安全的;确保软件是安全的;培训软件开发人员、架构师和用户如何构建安全到软件中[10]。

(2)软件可信:是指软件系统的行为总是与预期相一致。软件可信属性包括:可用性、可靠性、安全性、实时性、可维护性和可生存性[11]。

2、软件安全开发生命周期

为实现软件和软件研发过程的安全与可信,软件安全开发生命周期S-SDLC(Secure Software Development Life Cycle),是当前行业广泛关注和呼吁的方法。当前主流的S-SDLC方法流程包括:微软SDL[12]、OWASP S-SDLC[13]。核心理念是将安全与软件开发全过程融合,通过软件开发生命周期中每个阶段执行必要的安全实践,使安全风险最小化、安全威胁最少化。和传统的网络安全运维管理相比,S-SDLC更加强调在各类信息技术产品研发的过程中做好安全,即,全球安全行业提出的“把安全左移”理念。使安全真正成为开发过程中每个活动不同缺少的重要组成部分,完整地融入到软件工程中,降低安全风险[14]。

S-SDLC完整覆盖了软件开发生命周期。而一个团队要完整落地S-SDLC,除了要在每个软件开发流程中执行相应的安全实践外,还需要在人员、工具和规范方面予以相应的配置。典型的落地实践过程全景图见图3[15]。

图3、S-SDLC落地实践典型全景图

(1) 规范层面。结合实际情况需要制定满足业务所需、技术所需和团队所需的规范,从顶层指导安全开发的落地与规范,并为人员层面和工具层面的落地提供依据。

(2) 工具层面。配置每个阶段所需的必要安全工具,支持以自动化的方式落地相关实践和规范,并为各实践间相互流转安全开发的数据奠定平台基础。

(3) 培训层面。对S-SDLC中所有相关人员提供对应岗位的安全培训,并在整个S-SDLC过程中,强调有关软件安全开发意识和有关软件安全威胁的持续性培训,帮助相关人员持续加深对软件安全威胁的认知与理解,形成团队与企业的安全文化,促使各岗位的人员用安全的思想开展相关工作。

(4) 流程层面。基于业务需求和S-SDLC落地的需要,在全流程中执行安全开发能力成熟度评估,识别和判断团队当前的能力成熟度;并在全生命周期中持续跟踪和管理第三方组件、开源软件、程序代码、应用环境等方面的漏洞。

3、软件安全开发成熟度模型

软件安全开发成熟度模型,为软件开发单位或团队设置了定义、实施、度量、控制和改善软件安全开发各实践的标准。该模型适用于对研发单位的软件安全开发能力进行评估,为软件开发单位或团队识别能力现状、设定能力目标提供了参考标准和理论依据。而中国信息安全测评中心(以下简称“测评中心”)推出的《国家信息安全服务资质(安全开发类)》认证工作,正是根据测评中心理论研究和行业认知总结形成的软件安全开发成熟度模型推导而成。

体系化保障方法

根据我国信息技术产品研发单位的典型实践,相关单位要做好信息技术产品的安全开发往往需要从管理层面和技术层面出发,开展体系化的建设工作。

(一) 安全开发管理方面

1、重视安全开发环境管理

需设置有安全可控的工作场所,并针对开发过程搭建专用的开发环境和测试环境,配备安全、可信、可靠的安全开发工具,设置按角色分配的合理权限,确保开发过程和测试过程可控,保障软件研发资产安全。

2、注重质量管理体系融合

需建立覆盖S-SDLC的质量管理体系,并融合软件供应链安全的特征与要素。将安全作为质量的一种属性,并建立合理的组织架构和管理架构来满足产品安全开发的实施和管理。

3、重视安全开发意识普及

需通过短而精的培训方式向软件开发相关人员普及有关软件供应链安全和软件安全的威胁和知识(如:注册软件安全开发人员(CWASP CSSD)培训认证),帮助软件开发人员了解软件安全威胁和软件供应链安全,理解软件安全开发的重要性及对网络安全保障的意义,形成企业的安全开发文化。

4、加强安全开发技术培训

需向软件开发相关人员体系化培训S-SDLC及企业落地的典型实践(如:注册软件安全专业人员(CWASP CSSP)培训认证),帮助软件开发人员理解和掌握软件安全开发过程中的典型技能,助力研发团队能以一致的技术思维模式执行安全开发,并结合研发团队的实际情况探索和执行安全开发实践。

5、设置产品安全团队

需设立独立于网络安全运营管理团队的产品安全团队。产品安全团队需以研发安全的软件产品为目标,在产品研发过程中支持研发团队研发安全的软件。

(二) 安全开发技术方面

1、在软件开发全生命周期执行安全开发实践

当前,行业有关网络安全保障的根本目的是确保产品在运行环境中的运行安全和数据安全。典型实践为在产品的测试阶段和部署阶段执行渗透测试、环境加固和安全应急响应,为产品提供了一定的安全保障。但由于在产品研发前期阶段对安全认知和安全属性的缺失与忽略,往往导致产品在功能需求、架构设计和程序代码中存在天然的安全缺陷,而这些是无法通过环境加固和安全应急响应从根本上彻底解决的。

因此,需要在产品的需求分析、架构设计、程序编码和测试过程中为产品内建安全。华为甚至提出了“全面提升软件工程能力和实践”的企业内部要求,并从“编码质量”、“架构核心要素”、“历史代码”等方面确保产品开发到交付过程的高质量[16]。而从成本投入的角度而言,在研发过程中越早执行安全实践,安全缺陷的修复成本投入越小,且可能成数百上千倍的减少。

2、重视第三方组件与开源软件安全

需谨慎、合理地选择、获取和使用第三方组件和开源软件。研发团队通过必要的技术手段(如:设置黑白名单、使用SCA技术的自动化工具)全面掌握所使用第三方组件和开源软件的安全性;并及时跟踪所使用第三方组件和开源软件的漏洞情报,并适时做出响应。

3、 合理使用好安全开发工具

自动化工具的使用,可有效减少人工检测的时间消耗和成本投入,提高检测效率。软件安全开发领域常见的安全开发工具,使用的技术包括:SAST技术、DAST技术、IAST技术和FUZZ技术。其中,IAST技术融合了SAST技术和DAST技术的特征,并具有检测效率快、准确性高的优势。

在软件安全开发过程中,基于SAST、IAST技术、SCA技术和FUZZ技术的安全开发工具是为了软件安全开发过程中消除软件的安全缺陷。在软件供应链的软件使用过程中,基于DAST技术和SCA技术的安全工具,可辅助安全开发降低软件面临的安全威胁。因此,保障软件供应链安全,需在S-SDLC的不同阶段应用不同的自动化安全技术。

(三) 供应商管理

1、要求企业级安全开发资质

对软件供应链上的供应商提出有关安全开发方面的企业级资质要求,如测评中心颁布的《国家信息安全服务资质(安全开发类)》。供应商具备国家或行业的安全开发资质,意味着其在安全开发的过程管理、质量管理、配置管理、人员能力等方面具备一定实力,并能把安全融入软件开发过程中。

2、审查内部安全开发标准与规范

对软件供应链上的供应商提出安全开发标准与规范的内部要求,能够对拟开发软件的不同应用场景、不同架构设计、不同开发语言进行约束和参考。

(四) 其他安全管理

1、具备安全应急响应能力

能在软件供应链安全事件发生时进行快速响应,控制和消除安全事件的影响、追溯和解决安全事件的根源。

2、把控软件产品和补丁的发布渠道

全面掌握软件产品和补丁的发布途径和发布环境,确保途径和环境的安全,保障软件产品和补丁在发布过程中的安全。

未来

软件供应链安全是软件工程与网络安全两个典型专业相互交融、相互影响的交叉领域,在软件供应链中的每个环节都可能被攻击者利用,造成网络安全事件。软件运维端的安全防护、被动式的安全响应已不能满足软件供应链安全的保障需要。从软件安全开发生命周期、从软件研发过程出发,才能在软件诞生的过程中做好软件安全质量保障,为软件供应链安全奠定重要基础。而未来政府部门、应用市场、软件厂商、软件开发者、安全厂商、普通用户、高等院校等主体的共同参与,才能真正形成软件供应链安全良好的、可持续发展的生态圈。 (作者:王颉,万振华 深圳开源互联网安全技术有限公司;王厚奎 南宁职业技术学院)

参考文献

[1] SAFECode,The Software SupplyChain Integrity Framework[R],2009.

[2] ChristopherAlberts, Audrey Dorofee, Rita Creel, Robert J. Ellison, Carol Woody,A SystemicApproach for Assessing Software Supply-Chain Risk[C]. 2011 44th HawaiiInternational Conference on System Sciences (HICSS),2011.

[3]刘权,王超.加强软件供应链安全保障的对策建议[J]. 中国信息安全,2018(11):64-66

[4] NCSC,Software SupplyChain Attacks[OL].

[5]杭特.软件供应链安全风险管控,任重而道远[J].中国信息安全,2018(11):61-63

[6]邹维,霍玮,刘奇旭.确保软件供应链安全是一项系统工程[J]. 中国信息安全,2018(11):58-60

[7]崔宝江.软件供应链安全面临软件开源化的挑战[J].中国信息安全,2018(11):71-72

[8]Sonatype, 2018 State of theSoftware Supply Chain Report [R]

[9]张世琨,马森,高庆,孙永杰.软件供应链安全的风险和成因分析[J].中国信息安全,2018(11):48-50

[10](美)James Ransome著.软件安全:从源头开始[M].丁丽萍等译.北京:机械工业出版社,2016

[11](英)HarlambosMouratidis著.软件安全性理论与实践[M].米磊等译.北京:电子工业出版社,2015

[12]微软SDL[OL],https://www.microsoft.com/en-us/securityengineering/sdl/

[13] OWASP S-SDLC Project[OL],https://www.owasp.org/index.php/OWASP_Secure_Software_Development_Lifecycle_Project

[14]陆向阳,蒋树立,孙亮. 中小银行信息系统开发生命周期安全保障框架[J]. 计算机应用与软件,2013(11):142-144.

[15] S-SDLC解决方案全景图V2.0 [OL],http://www.seczone.cn/2018/08/01/s-sdlc%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88v2-0/

[16]任正非签发2019年001号文件:把网络安全和隐私保护作为公司的最高纲领[OL],http://www.sohu.com/a/286205015_114877

声明:本文来自国家信息安全服务资质,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。