从软件安全开发生命周期实践的角度保障软件供应链安全

2019-01-17 02:15王颉万振华王厚奎
网络空间安全 2019年6期

王颉 万振华 王厚奎

摘   要:软件供应链安全覆盖软件的开发生命周期和生存周期,且与软件开发过程中的人员、工具、环境等因素密切相关,因而通过不同途径和不同方式能使得软件系统自带安全缺陷,并最终被恶意人员利用形成网络安全事件。文章基于行业主流的软件安全开发生命周期(S-SDLC)流程方法,从软件开发单位自身的安全开发管理、安全开发技术、供应商管理等方面,提出了软件开发过程中保障软件供应链安全的体系化方法,为软件开发过程中尽可能地避免和消除软件安全缺陷、保障软件供应链安全奠定重要基础。

关键词:软件供应链安全;软件安全开发生命周期;软件安全开发

中图分类号:TP311.5          文献标识码:A

Abstract: Software supply chain security covers the development life cycle and life cycle of software, and it is closely related to the personnel, tools, environment and other factors in the software development process. Thus, the software system brings its own security flaws through different ways, and these flaws eventually causes network security incidents by malicious user. According to the industry-leading Secure Software Development Life Cycle (S-SDLC) method, this paper proposes a set of systematic countermeasures and assurance method, which includes the practices of security development management, security development techniques, supplier management and others. The proposed method provides the foundation of software development process for avoiding and eliminating software security flaws, and assuring the security of software supply chain.

Key words: software supply chain security; secure software development lifecycle; software secure development

1 引言

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

随着国家网信工作的不断推进,各行业已认识到软件系统的安全缺陷主要是由开发过程中的设计或编码错误而形成,这也是造成网络安全事件的本质原因。落地实践“软件安全开发生命周期”,有助于从软件诞生的源头保障软件安全和网络安全。当前,软件供应链安全领域缺乏体系化的保障方法和政策指导,通过在软件开发过程中落地软件安全开发生命周期实践,对保障软件供应链安全而言是一个不错的方式。

本文从软件安全开发生命周期角度分析了软件供应链安全的保障方法。在本文中,首先介绍了有关软件供应链安全的主要特征和典型问题,同时还介绍了软件安全开发生命周期,最后,从安全开发技术、安全开发管理、供应商管理等方面,探讨了如何在软件开发过程中体系化保障软件供应链安全。

2 对软件供应链安全的认识

2.1 软件供应鏈安全的主要特征

对于软件供应链上的每一个软件,在其软件全生命周期和软件开发体系中都有可能面临安全威胁,对软件供应链安全保障造成影响。因此,软件供应链安全具有覆盖软件全生命周期和软件开发体系的特征[4]。

(1)覆盖软件的全生命周期。在软件的全生命周期各阶段都可对软件执行恶意行为或植入恶意代码,致使软件存在安全缺陷,破坏或影响最终用户的信息安全,如图1所示。

(2)覆盖软件开发体系。对软件开发体系中开发工具、开发团队、开发生命周期和软件产品、补丁执行恶意行为,致使软件存在着安全缺陷,破坏或影响最终用户的信息安全,如图2所示。可见,在软件的开发过程中和发布获取过程中都存在影响软件供应链安全的威胁。而与软件发布获取过程中的安全防护相比,若能在软件开发过程中解决相关问题,则能确保软件本身的安全质量,对做好软件供应链的安全保障更具有重要意义。

2.2 软件开发过程中的典型问题

(1)软件开发单位缺乏对软件安全质量的重视。软件开发单位通常以实现软件功能为优先级,虽然软件实现了与安全相关的功能(如授权、身份验证、加解密、日志记录等),但软件本身是否脆弱或自带安全缺陷往往被忽视。安全是质量的一种属性。软件开发单位通常缺乏提高软件产品安全质量的有效措施和保障条件。

(2)使用自带安全缺陷的第三方组件或开源组件。在软件开发过程中使用和集成第三方组件和开源组件是现代软件开发的典型方式。该方式虽有助于提高软件开发效率,但可能将第三方组件和开源组件的安全缺陷引入软件产品,并随着软件的使用而扩散[5]。根据Sonatype发布的2018年软件供应链报告[6]显示,Java、Java Script和Python的开源组件数量已分别达到350万个、550万个和140万个。对Java组件的分析结果显示,超过10%的开源组件至少包含一个已知漏洞,而任何一个漏洞都可能成为攻击者的攻击目标[7]。

(3)软件发布前安全测试不足。现代软件开发以DevOps方式为主,具有“版本迭代快、开发时间短”的现象。开发团队在版本迭代过程中占用大部分时間执行编码工作,而测试团队则往往没有充足的时间开展测试工作,更无法做到每个版本都执行安全测试。因此,错误的架构设计或程序编码因安全检测不足而未被识别,致使软件自带安全缺陷上线部署,并不断迭代集成,最终形成软件供应链安全的隐患。

3 软件安全开发生命周期

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

S-SDLC完整覆盖了软件开发生命周期,其典型实践主要包括安全培训、威胁建模、代码审计、安全测试等。而一个软件开发单位要完整落地S-SDLC,除了要在每个软件开发流程中执行相应的安全实践外,还需要在人员、工具和规范方面予以相应的配置。典型的落地实践过程全景图,如图3所示[11]。

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

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

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

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

4 体系化保障方法

根据国内软件开发单位的现状,软件开发单位要在软件开发过程中做好软件供应链安全保障,通常需要从管理层面和技术层面开展体系化的工作。

4.1 安全开发技术方面

4.1.1 执行软件安全开发生命周期实践

需在软件的需求分析、架构设计、程序编码和测试过程中执行S-SDLC实践(主要包括代码审计、安全测试、安全加固、安全培训),在软件开发过程中形成内建安全。华为公司已经提出了“全面提升软件工程能力和实践”的企业内部要求,从“编码质量”“架构核心要素”“历史代码”等方面确保产品开发到交付过程的高质量[12]。而从成本投入的角度而言,在开发过程中越早执行安全开发实践,安全缺陷的修复成本投入越小,且可能成数百上千倍的减少。

4.1.2 使用自动化安全开发检测工具

自动化工具的使用可有效降低人工检测的时间消耗和成本投入,提高检测效率。软件安全开发领域常见安全开发工具基于的技术包括SAST技术、DAST技术、IAST技术、FUZZ技术和SCA技术。其中,IAST技术融合了SAST技术和DAST技术的特征,具有检测效率快、准确性高的优势,并能够在执行工程测试的时候自动化同步开展安全测试。

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

4.1.3 重视第三方组件与开源组件安全

需谨慎、合理地选择、获取和使用第三方组件和开源组件。软件安全团队或研发团队通过必要的技术手段确保所使用第三方组件和开源组件的安全性,及时获取所使用第三方组件和开源组件的漏洞情报,并适时做出响应。

(1)设置白名单,枚举可使用且已使用的第三方组件和开源组件。

(2)设置黑名单,枚举应禁止使用的第三方组件和开源组件,如安全问题多、风险大的开源组件。

(3)设置灰名单,枚举应谨慎使用的第三方组件和开源组件,如由消极对待或处理安全问题厂商所开发的第三方组件。

(4)使用基于SCA技术的工具对第三方组件和开源组件进行自动化检测。

4.2 安全开发管理方面

4.2.1 强调安全开发文化建设

普及有关软件供应链安全和软件安全的威胁和知识,帮助软件开发人员掌握软件安全开发的技能,建立软件安全开发过程相关的考核机制,形成企业的安全开发文化。

4.2.2 注重质量管理体系融合

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

4.2.3 设置产品安全团队

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

4.3 供应商管理方面

4.3.1 要求企业级安全开发资质

对软件供应链上的供应商提出能够证明其软件安全开发能力的企业级资质要求。企业具备国际、国家或行業的安全开发资质,意味着其在软件安全开发的过程管理、质量管理、配置管理、人员能力等方面具备一定实力,具有把安全融入软件开发过程的能力。

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

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

4.4 其他安全管理方面

4.4.1 重视安全开发环境管理

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

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

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

4.4.3 具备安全应急响应能力

能在软件发布后对发生在软件和补丁获取渠道的供应链安全事件、软件安全漏洞披露事件进行快速响应,控制和消除安全事件的影响,追溯和解决安全事件的根源。

5 结束语

软件供应链安全是软件工程与网络安全两个专业相互交融、相互影响的交叉领域,在软件供应链中的每个环节都可能被恶意人员利用,造成网络安全事件。软件运维端的安全防护、被动式的安全响应已不能满足软件供应链安全的保障需要。从软件开发过程和软件安全开发生命周期出发,才能在软件诞生的过程中做好软件安全质量、保障软件供应链安全。未来,政府部门、软件厂商、软件开发者、企业用户、个人用户、安全厂商、高等院校等主体的共同参与,将为软件供应链安全的持续发展和深入研究形成良好的生态圈。

参考文献

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

[2] Christopher Alberts, Audrey Dorofee, Rita Creel, Robert J. Ellison, Carol Woody, A Systemic Approach for Assessing Software Supply-Chain Risk[C]. 2011 44th Hawaii International Conference on System Sciences (HICSS), 2011.

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

[4] NCSC.Software Supply Chain Attacks[EB/OL].

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

[6] Sonatype.2018 State of the Software Supply Chain Report [R].

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

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

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

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

[11] 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/.

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

[13] 李震宁,刘莉,孟杰. 开源软件商业化中面临的知识产权风险[J]. 网络空间安全,2018(8):42-44.