降低软件供应链安全风险通常涉及实施多层安全和不同的策略。但保证软件安全的最有效方法之一是在软件应用程序的开发阶段解决可能的安全漏洞。这通常是一个挑战,因为只有少数软件开发生命周期模型明确解决了软件安全问题。为了确保软件安全,您需要针对您选择使用的任何软件开发生命周期模型采用安全的软件开发实践。
安全软件开发框架 (SSDF) 概述了您应遵循的一些基本实践,以确保您正在构建的软件的安全性。 SSDF 基于美国国家标准与技术研究院 (NIST) 制定的标准软件开发安全实践,并明确解决软件开发中的安全问题。 SSDF 版本 1.1 定义于 NIST SP 800-218 出版物。 该框架最初于 2021 年 XNUMX 月作为 草案 版本。 22年2021月1.1日,NIST发布了SSDF XNUMX的最终版本。所有高级实践和任务都保持不变,但围绕提供的各种示例存在许多差异。在决定实施哪些实践时,NIST 建议平衡风险与成本、可行性和适用性。自动化尽可能多的检查和流程以促进软件安全是需要考虑的一个关键功能。
作为使用软件开发生命周期模型的组织,您应该实施 SSDF 指南,作为保护您的软件免受软件供应链漏洞影响的整体工作的一部分。遵循此框架将有助于在软件发布之前检测未解决的漏洞。这降低了由于这些未检测到的漏洞而可能被安全利用的风险和影响。本文是一份综合指南,详细介绍了 SSDF 框架是什么以及它如何为软件供应链安全做出贡献。
安全软件开发框架的4个实践
SSDF 实践分为四类。在 SSDF 框架中,每个实践都由唯一标识符和简短说明来标识,说明它是什么、为什么有益以及实施它需要执行的任务。该框架还包括参考已建立的安全开发实践文档来实施实践的工具、流程和方法的示例。以下是安全软件开发框架 (SSDF) 1.1 版的四大支柱实践:
准备组织 (PO)
安全软件开发高度依赖于人。因此,实施 SSDF 的第一步是确保组织中的每个人都为框架所需的更改做好充分准备。首先,您必须根据软件开发所使用的工具来确定您正在开发的软件的特定安全要求。通过这种方式,您可以开始在组织和个人层面准备他们使用的人员、流程和技术。
组织的准备工作通常以获得高层管理人员的支持和对员工进行必要的培训的形式进行。您的准备工作的一部分还可能包括实施有助于自动化流程并创建安全的开发环境的工具。
保护软件 (PS)
安全软件开发框架概述了保护软件所有组件免遭未经授权的访问和篡改的实践。这是重要的一步,有助于防止对代码进行未经授权的更改(无论是无意的还是有意的),并保护您的软件源代码和软件配置。根据具体情况,保护您的软件可能涉及不同的方法。当代码不打算公开访问时,这可以防止软件被盗,并使攻击者更难或更耗时地发现漏洞。
通过遵循 SSDF 本节中概述的做法,软件消费者可以确保他们获取的软件是合法的且未被篡改。此外,它还可以通过保留软件版本来帮助识别、分析和消除软件发布后的漏洞。
制作安全良好的软件 (PW)
为了生产安全性良好且安全漏洞最少的软件,在整个软件开发生命周期中需要遵循一些基本步骤。这些包括:
- 选择安全的软件配置
- 评估软件的任何第三方组件以确保其完整性
- 确保您的软件源代码符合安全编码实践
- 检查、分析和测试您的代码是否存在漏洞,并解决在代码发布之前发现的任何问题
- 使用编译器和解释器等构建工具功能防止漏洞
漏洞响应 (RV)
即使您的软件发布后,您仍然有可能发现其中的漏洞。您组织内的测试人员、外部安全研究人员甚至客户都可能会发现这些漏洞。保护软件安全的一个重要部分是在发现这些漏洞后立即对其做出快速响应。隐藏安全漏洞的时间越长,造成的损害就越大。每个组织都需要漏洞披露计划以及其他策略来分析新漏洞并决定如何解决它们。
需要考虑的要点是什么?
SSDF 的主要目的是帮助组织在其软件开发活动中调整安全性并确定其优先级。 SSDF 在软件开发生命周期中实施安全性时会考虑业务需求、风险承受能力和资源。该框架的一些关键考虑因素包括:
-
将安全性集成到 SDLC 中
构建安全软件的第一步是将安全性集成到软件开发生命周期的不同步骤和阶段中。从本质上讲,您的开发团队必须拥有以安全为中心的文化,并且即使在开发过程的最早阶段也必须开始这种文化。
在大多数情况下,许多标准编码实践都会引入许多漏洞,这些漏洞可能会在软件发布后被恶意方利用。这就是为什么开发人员必须从一开始就考虑安全性,并且必须接受有关有助于减少这些潜在攻击途径的策略的良好教育。
除了考虑保护软件的人为方面之外,您还应该考虑从一开始就自动执行测试和监控软件潜在漏洞的过程。
-
安全软件开发政策
安全软件开发策略是一套正式的指南,详细说明了您的组织在安全软件开发方面遵循的实践和程序。本政策文档包含针对您在开发生命周期的每个阶段所遵循的人员、技术和流程的详细说明。
安全的软件开发策略不仅仅是提高软件完整性的建议。在某些情况下甚至是强制性的。例如,如果您的软件必须满足 ISO 27001 或 SOC Type 2 标准等安全标准,那么您将需要安全开发策略文档。幸运的是,您可以采用一些模板指南来实现此目的。您的软件安全团队还可以从头开始构建策略文档并根据您的特定需求进行调整。
-
第三方厂商
仅仅编写安全代码并在内部遵循安全要求是不够的。大多数软件仍然采用来自第三方供应商的组件,这些供应商可能不遵循与您相同的安全标准。这些第三方代码组件是常见的途径 软件供应链攻击 进行。
作为确保整个软件开发生命周期安全合规性的努力的一部分,您应该监控您使用的所有第三方组件,并确保供应商充分了解您的安全要求并完全符合与您相同的安全标准。
-
代码完整性保护
您的软件代码及其所有组件都是潜在的攻击点,恶意行为者可以利用它们将漏洞注入您的软件中。为了防止这种情况,所有代码都应保存在安全的存储库中,以免受到任何形式的篡改。
维护代码完整性的部分工作包括确保只有授权的开发人员才能访问源代码。您选择的代码存储库应该具有确保这一点的功能,以及确保登录过程安全并监视可能对代码进行的任何更改的附加功能。您可以通过采用自动化来监控访问数据并执行定期代码分析来进一步提高代码完整性。
-
预装恶意软件
软件供应链攻击的一种常见途径是隐藏预装恶意软件中的安全漏洞。这可能是病毒、勒索软件、特洛伊木马或间谍软件,可能会对您的软件造成严重破坏。该恶意软件可能预装在您在软件构建过程中使用的设备或受信任的软件上,甚至预装在第三方供应商的系统上。这种恶意软件可能会隐藏很长一段时间,直到合法的数字签名进程允许它在您的系统中传播。确保软件开发的安全需要留意这种预装的恶意软件,并采取措施来识别和删除它们。
-
代码测试、审查和清单
传统的软件开发方法通常将代码测试留到软件开发生命周期的末尾。然而,这种捕捉软件漏洞的被动方法并不是很有效。更有效的方法是设置自动化测试,以便在构建时不断发现代码中的缺陷。开发人员还应该手动审查和检查他们的代码,以防止以后发现缺陷时感到沮丧。
由于需要跟踪许多零件和组件,因此在构建时制定清单是有意义的。这有助于您的软件开发和监控团队确保 SSDF 策略中规定的所有操作都得到适当遵守。
-
漏洞缓解
尽管符合 SSDF 和其他安全标准,但软件开发中的漏洞实际上是不可避免的。最重要的是准备好在这些漏洞发生时缓解它们。这意味着要有一个团队,制定明确的计划和策略,以便在安全事件发生时立即解决。
您的组织对安全漏洞的响应速度将在减少此类攻击的不利影响方面产生重大影响。当软件缺陷被快速发现并修复时,恶意行为者利用它们的时间就会更短。因此,漏洞缓解是每个组织都必须关注的安全软件开发的一个重要方面。
-
安全默认设置
您的新软件应该具有默认的安全设置,即使用户没有高级知识,也可以帮助保护用户免受软件漏洞的影响。您还可以采取措施,让用户了解这些默认设置,以便即使在采用软件的早期阶段也能保护他们。
结语
安全软件开发框架 (SSDF) 是一组先进实践,应集成到每个组织的软件开发生命周期中。通过在开发过程的早期遵循此框架中规定的实践,您可以减少最终发布的软件版本中的安全缺陷。 SSDF 还可以帮助您检测安全风险,并减少最终版本中未检测到的漏洞的潜在影响。该框架是防止未来再次出现此类安全问题的关键。