安全软件开发框架SSDF是由美国国家标准与技术研究院发布的关于安全软件开发的一组实践,帮助开发组织减少发布的软件中的漏洞数量,减少利用未检测到或未解决的漏洞的潜在影响,从根本上解决漏洞防止再次发生。本文根据《Secure Software Development Framework (SSDF) Version 1.1:Recommendations for Mitigating the Risk of Software Vulnerabilities》文档翻译整理,本文是第一部分。
软件开发生命周期(SDLC)指的是是用于设计、创建和维护软件(包括嵌入式软件)的正式或非正式方法。SDLC有许多模型,像瀑布模型、螺旋模型、敏捷模型等,最典型的是结合了软件开发和运营实践的敏捷模型(DevOps)。很少有SDLC模型能够明确详细地解决软件安全性问题,通常需要在每个SDLC模型中去添加安全软件开发的实践。无论使用哪种SDLC模型,都应该将安全软件开发实践集成到整个过程中,原因有三:减少发布的软件中的漏洞数量,减少利用未检测到或未解决的漏洞的潜在影响,以及解决漏洞的根本原因以防止再次发生。漏洞不仅包括编码缺陷导致的bug,还包括安全配置的设置、不正确的信任假设(trust assumptions)和过时的风险分析导致的脆弱点。
在SDLC中,大部分安全问题可以被多次解决,但是越早解决,所需的工作的成本会越少。左移非常重要,可以最大限度地减少在开发后期或软件投入生产补救早期安全缺陷的技术债务。左移也可以使软件具有更强的安全性和弹性。
许多关于安全软件开发实践的现有文档,包括参考资料一节中列出的那些。本文档并不是介绍新的实践或定义新的术语,介绍的是基于已建立的标准、指南和安全软件开发实践文档基础上的的高级实践。这些实践统称为安全软件开发框架(SSDF),旨在帮助目标受众实现安全软件开发目标。这其中一些实践直接涉及软件本身,而其他的则间接涉及软件(例如,保护开发环境)。
未来可能还会做进一步的拓展,如SSDF如何适用于特定的软件开发方法和相关实践(如DevOps ),一个组织如何从其当前的软件开发实践过渡到合并SSDF实践,以及SSDF如何应用于开源软件环境中。未来的很可能会采取用例的形式,这样会更容易适用于特定类型的开发环境,也很可能会增强与开源社区和其他团体和组织的协作。
本文档确定了安全软件开发实践,并没有对如何实现做相关规定。重点是要实现的结果,而不是用来实现的工具、技术和机制。这有以下几点优点:
1、任何行业或团体的组织都可以使用,无论其规模或网络安全复杂程度如何;
2、可应用于信息技术(IT)、工业控制系统(ICS)、信息物理系统(CPS)或物联网(IoT)等领域的软件;
3、可以集成到任何现有的软件开发工作流程和自动化工具链中;不会对已经有了可靠的安全软件开发实践的组织产生负面影响;
4、使实践广泛适用,而不是特定于特定的技术、平台、编程语言、SDLC模型、开发环境、操作环境、工具等;
5、可以帮助组织记录其当前的安全软件开发实践,将未来的目标实践定义为持续改进过程的一部分;
6、可以帮助当前使用经典软件开发模型的组织将其安全软件开发实践转变为使用现代软件开发模型(例如,敏捷、开发运维);
7、可以帮助采购和使用软件的组织了解其供应商所采用的安全软件开发实践。
本文档提供了描述基本安全软件的通用语言。这与《改善关键基础设施网络安全框架》(也称为NISTCybersecurity Framework[NISTCSF])所采取的方法类似,不需要安全软件开发方面的专业知识来理解这些做法。通用语言有助于促进内部和外部组织相关角色之间关于软件安全实践的沟通,例如:
1、老板、软件开发人员、项目经理和领导、网络安全专业人员以及组织内的运营和平台工程师,他们需要针对安全软件开发进行明确的沟通;
2、软件购买者,包括政府或其他组织,希望在其采购过程中能够明确他们需要的软件的特征以及他们对软件的期望,以获得更高质量的软件(尤其是具有较少严重安全漏洞的软件);
3、软件生产商(例如,商业现货产品供应商、政府现货软件开发商、外包软件开发商),希望将安全软件开发实践集成到他们的SDLC中,向客户表达他们的安全软件实践,或明确供应商的要求。
本文件的实践不是以所有组织都有相同的安全目标和优先级为前提。相反,这些建议反映了每个软件生产商可能有独特的安全要求,每个软件收购商可能有不同的安全需求和要求。虽然目标是让每个软件生产商遵循所有适用的实践,但实施程度和实施的形式根据生产商安全要求的差异而有所不同。这些实践虽然很灵活,但是它们也是清晰的,以避免留下太多的解释空间。
这些实践中的大多数与所有软件开发工作都相关,但并不是所有。例如,如果开发一个特定的软件不涉及使用编译器,那么就不需要遵循配置编译器提高安全性的实践。一些实践是基础性的,而另一些则更先进,依赖于已经存在的某些基础实践。此外,实践并非对所有情况都同等重要。
在决定使用哪些实践以及为每个实践投入多少时间和资源时,应考虑风险、成本、可行性和适用性等因素。自动化也是一个需要重点考虑的因素,尤其是在大规模实施实践时。实践、任务和实现示例都是在一开始需要优先考虑的。实践规定的频率都是概念性的,SSDF的目的不是创建一个检查表,而是为规划和实施基于风险的方法和采用安全软件开发实践提供基础。
安全实践的实施可以基于软件和服务(例如,基础设施即服务、软件即服务、平台即服务、容器即服务、无服务器)的交付,在不同组织之间合理分配。在这些情况下,它可能遵循涉及平台/服务提供商和使用这些平台/服务的租户组织的共享责任模型。租户组织应与供应商签订协议,规定每一方负责的实践和任务,以及每个供应商如何证明其遵守协议。