下面将针对软件供应链的各个阶段,提供一套软件 供应链安全风险管理的方法和指南,以帮助组织更好地应对软件供应链的安全威胁。
1.软件供应链风险治理体系建设
要进行有效的软件供应链安全风险治理,首先需要构建一个风险治理体系,这个体系应当结合组织的特定 需求和行业的最佳实践,包含以下核心元素: · 政策:明确组织对于软件供应链安全的态度和要求,定义相关的政策和标准,并获得高层的支持和承诺。 · 过程:设计和实施一套完整的软件供应链安全风险管理过程,包括风险识别、评估、处理和监控等环节。每个 环节的主要工作如下:
风险识别:在此阶段,组织需要收集和整理有关软件供应链的信息,以便识别存在的风险。这可能包括识 别供应链中所有的组件和服务,了解它们的来源,评估它们的安全性,以及识别可能存在的威胁。 风险评估:在此阶段,组织需要对已识别的风险进行深入评估,了解风险的严重程度和可能的影响。这可 能包括评估供应链中的组件和服务的安全性,以及评估如果发生安全事件,对组织可能产生的影响。 风险处理:在此阶段,组织需要制定和实施应对策略,以减轻或消除风险。这可能包括改进开发流程,引 入安全工具和实践,对供应商进行安全审计,或者更换不安全的组件和服务。 风险监控:在此阶段,组织需要持续监控软件供应链的安全状态,以及实施的应对策略的效果。如果发现 新的风险或者已有的风险发生变化,需要回到风险识别阶段,重新进行识别、评估和处理。
人员:建立专门的软件供应链安全团队,负责软件供应链安全风险的管理和控制。提高全员的安全意识,确保 所有涉及软件供应链管理的员工都对策略、程序和工具有充分的理解,能够有效地执行他们的职责。 · 技术:选择并部署适合的技术和工具,以支持软件供应链安全风险管理的实施。这包括用于代码审查、漏洞扫 描、依赖项管理、构建自动化、持续集成 / 持续部署(CI/CD)等工具。
2.软件供应商风险管理
软件供应商风险管理是软件供应链安全风险治理的关键组成部分,应该贯穿整个软件供应链安全风险治理 过程,其主要目标是确保软件供应商提供的软件产品或服务不会对使用者的环境产生安全威胁。在实施软件供 应商风险管理时,主要包括以下步骤和阶段,每个步骤中也需要采取相应的措施和手段。

软件供应商选择阶段:在软件供应商选择阶段,首先需要对潜在的软件供应商进行评估,以确定他们的安全 能力,这一步骤的措施和手段包括:
供应商信息收集:首先需要对软件供应商的安全态势有全面的了解,主要包括收集软件供应商的信息, 例如软件供应商的安全政策、开发和维护流程、历史安全事件记录等。通过这些信息,可以初步识别与软 件供应链相关的安全风险。制定评估标准:评估标准应包含软件供应商必须满足的安全标准,例如,供应商是否拥有适当的安全认 证,他们的产品是否已经通过了安全测试等。进行供应商评估:评估软件供应商的安全能力和性能,例如,软件供应商是否有能力发现和修复安全漏 洞,软件供应商的安全响应能力如何等。此外,评估软件供应商的安全态势可能对组织的影响,例如如果 软件供应商出现安全问题,会对组织的业务连续性、数据安全等方面产生何种影响。
合同谈判:在合同谈判阶段,需要确保合同中包含足够的条款来保护使用者的安全权益,这一步骤的措施和 手段包括:
制定安全条款:在合同中加入必要的安全条款,例如,供应商必须遵守的安全标准,如何处理安全事件, 以及如何赔偿由于安全问题导致的损失等。 审查合同:由法律和安全专家对合同进行审查,以确保合同中的安全条款足够严格。
供应商管理:在供应商管理阶段,需要定期对供应商进行监控和审计,以确保他们持续满足安全要求。这一步 骤的措施和手段包括:
建立监控机制:这可以通过定期收集和分析供应商的安全数据,例如,安全事件报告,补丁和更新的发布 情况等来实现。 供应商安全审计:定期对供应商进行安全审计,审计的内容包括供应商的安全政策和程序,安全技术的 使用情况,以及安全事件的处理情况等。
供应商风险处理:当发现供应商存在安全风险时,需要及时进行风险处理,这一步骤的措施和手段包括。
制定风险处理策略:制定和实施针对软件供应商的风险处理策略,这可能包括与软件供应商协商改进其 安全能力、要求供应商定期进行安全审计、修改合同条款以及减少安全风险等。同时,也需要准备应对软 件供应商出现安全问题的应急计划。 执行风险处理:执行制定的风险处理策略,同时监控处理结果,以确保风险得到有效的控制。
软件供应商风险管理是一个持续的过程,需要在软件供应商选择、管理和风险处理等阶段采取相应的措施 和手段。通过有效的软件供应商风险管理,可以显著降低软件供应链的安全风险,保护使用者的利益。如果软件 供应商无法满足组织的安全需求,也可能需要考虑更换新的软件供应商。
3.软件开发生命周期(SDLC)风险治理指南
软件供应链安全风险治理是一项至关重要的任务,它涉及对软件开发生命周期中所有阶段的安全风险进行 管理。从 SDLC 的角度进行软件供应链安全风险治理,可以实现全面、早期、持续的安全风险管理,有利于提高软 件的安全性,降低安全风险,保护企业的利益。这不仅需要构建一个完整的治理体系,还需要在软件开发生命周 期的各个阶段引入关键技术。下面,将从 SDLC 的各个阶段介绍如何做安全风险治理。
3.1 需求分析阶段
从 SDLC 的需求分析阶段开始就对软件供应链安全风险进行治理,可以更早地识别和解决潜在的安全问 题,从而降低风险,减少后期的修复成本。以下将详细介绍在需求分析阶段如何进行软件供应链安全风险治理。 · 定义安全需求: 首先,需要明确安全需求。安全需求是系统应该满足的关于保护信息和系统的需求,包括保密性、完整性、可 用性、可追溯性、可审计性等。在需求分析阶段,需要与相关的利益相关者进行深入的沟通,以了解他们对系统安 全的期望,明确安全需求。 · 定义安全设计指南: 定义安全设计指南是指指导系统设计的一组规则,它们描述了如何在设计中实现安全需求。安全设计指南 应该涵盖各种可能的安全问题,如数据泄露、访问控制、身份验证和授权、密码管理、安全会话管理、输入验证、错 误处理和日志记录等。
实施安全风险分析: 安全风险分析包括对可能影响系统安全的各种风险进行识别、分析和评估。可以使用像是威胁建模(Threat Modeling)这样的技术来进行风险分析。比如,使用 STRIDE 模型来识别和分类威胁。威胁建模可以帮助我们识 别可能的威胁,评估威胁的严重性,以及确定应该采取的措施来缓解这些威胁。 · 开展安全审查: 安全审查是一种检查技术,用于检查需求、设计和代码是否符合安全需求和指南。在需求分析阶段,安全审 查主要针对安全需求、风险分析结果和安全设计指南进行。可以使用像是安全需求审查清单这样的工具来进行 安全审查。 · 行安全培训和教育: 为了确保软件供应链的安全,开发团队需要对安全问题有深入的理解。因此,需要在需求分析阶段就开始进行安全培训和教育。这包括安全基础知识的培训,如安全原则、常见的攻击手法、安全编程技巧等;也包括针对 特定的安全需求和风险的培训,如如何防止 SQL 注入攻击,如何处理敏感信息等。
3.2 设计分析阶段
软件供应链安全风险治理在软件开发生命周期的设计阶段是非常关键的,设计阶段主要是在需求分析的基 础上,设计出能满足需求的系统架构和模块。如果在这个阶段就考虑到安全性,就能避免很多后续可能出现的安 全问题。以下是在设计阶段如何进行软件供应链安全风险治理的一些关键步骤。 · 定义安全设计规则: 设计阶段的软件供应链安全风险治理首先要有一套设计规则,这套规则包括所有模块的安全设计原则、安 全设计模式,以及每个设计模式对应的安全要求。例如,设计规则可能包括所有处理敏感数据的模块都必须实现 强身份验证和访问控制、所有网络通信都必须加密、所有密码必须通过安全的方式存储等。这些规则为设计者提 供了一个安全设计的框架,避免他们在设计时因忽略安全性而产生风险。
进行安全设计评审: 设计完成后,需要进行安全设计评审。安全设计评审是一种专门针对设计的安全性进行的审查活动。在这个 过程中,安全专家会检查设计是否符合安全设计规则,是否存在可能的安全漏洞,是否已经考虑了所有可能的攻 击方式等。安全设计评审可以早期发现设计中的安全问题,避免这些问题在开发和部署阶段产生严重的影响。 · 实施威胁建模: 威胁建模是一种重要的风险管理方法。在设计阶段,可以通过威胁建模识别设计中可能存在的威胁。例如, 可 以 使 用 STRIDE(Spoofing, Tampering, Repudiation, Information disclosure, Denial of service, and Elevation of privilege)模型,这是微软提出的一种威胁建模方法,用于识别和分类系统中可能面临的各种威 胁。通过威胁建模,可以更全面地理解和管理设计中的安全风险。 · 进行安全原型验证 在设计阶段,还可以通过建立安全原型来验证设计的安全性。安全原型是对设计中关键安全功能的初步实 现。通过安全原型,可以实际测试设计中的安全机制是否能有效防止威胁,安全性能是否满足需求。例如,可以建 立一个原型来测试设计的身份验证机制是否能防止身份伪装攻击,或者测试加密算法是否足够强大等。
3.3 研发测试阶段
在软件开发生命周期中,研发测试阶段是对软件产品的功能和安全性进行深度验证的关键时期。该阶段的 目标是找出并解决所有的质量和安全问题,以保证软件产品在部署时能够稳定、安全地运行。为此,我们需要采用一系列的方法和工具来进行软件供应链安全风险的治理。 · 实施安全开发实践: 首先,必须在研发阶段实施安全开发实践。这包括使用安全的编程技术,避免已知的不安全编程习惯,以及 在编程中使用安全库和组件。例如,避免在代码中硬编码敏感信息,避免使用具有安全隐患的函数,正确处理用 户输入以防止注入攻击等。 · 实施有效的安全测试: 安全测试是在研发测试阶段必不可少的一步,我们需要对软件产品进行全面的安全测试,以验证所有的安 全控制措施是否有效。安全测试可以采用静态应用程序安全测试(SAST),动态应用程序安全测试(DAST),交互 式应用程序安全测试(IAST),以及模糊测试(Fuzzing)等方式。