2022年8月
目录
没有说明的特性或有风险的功能, 评估和部署之间,对合同、功能或安全假设的未知和/或修订, 供应商所有权和/或地理位置的变更,以及 较差的供应商企业或开发工作安全措施不足。
附录A:NIST SP800-218【采用安全软件开发框架(SSDF)降低软件漏洞的风险】和本文内容之间的对应。
附录B:依赖关系
附录C:软件制品供应链水平(SLSA)
附录D:推荐制品和检查表
附录E:参考资料
附录F:缩略语
NIST “安全软件开发框架” 卡内基梅隆大学 “安全软件开发生命周期过程” ACM “计算机系统中的信息保护” OWASP “安全开发生命周期” “思科安全开发生命周期” 新思(Synopsys)“安全软件开发生命周期阶段 US-Cert “安全软件开发生命周期过程” OpenSSF “安全软件开发基础课程”
安全编码实践, 代码审查过程, 软件存储库过程、测试和漏洞评估 安全构建和分发产品过程。
对手故意注入恶意代码或开发人员在产品中包含有漏洞代码。 在产品中有意或无意地包含易受攻击的第三方源代码或二进制文件。 利用构建过程中的弱点,将恶意软件注入到产品的组件。 修改产品内部的交付机制,导致恶意注入客户部署的软件原始包、更新包或升级包。
生成架构和设计文档, 聚集一支训练有素、合格、值得信赖的开发团队, 创建软件产品的威胁模型, 制定并实施安全测试计划, 定义发布标准并对产品进行评估, 建立产品支持和漏洞处理政策和步骤, 评估开发人员的能力和对安全开发流程的理解并安排培训, 记录和发布每次软件发布的安全步骤和流程。
对于主要版本,随着功能的变化而更新,或最少每年更新一次, 提供给操作相关软件组件或系统的其他内部工程团队
代码覆盖,集成到每个构建中,并作为实施测试和开发计划的一部分进行跟踪, 理想情况下,代码覆盖率的基线水平应该保证,提交新代码之前,所有代码都执行签入检查, 应该定义策略,以最大化代码覆盖率,并完成SSDF在PO.2.1, PW.5.2和PW .8.2中定义的任务,参见美国国家标准与技术研究院NIST SP 800-218, 测试覆盖率应该确定测试计划覆盖的代码路径的百分比以及使用的测试工具的类型。
在代码签入之前,应该对所有应用程序执行静态和动态应用程序安全测试(SAST和DAST),每次发布都使用公司批准的标准工具集。应该记录测试结果,并且应该分析和解决所有发现的漏洞, 应对所有第三方软件进行软件成分分析,包括根据MITRE CVE和NIST软件安全漏洞公告( NIST SSDF PW.3.2) 进行审查, 在开发过程中应对所有软件组件进行模糊测试,以确保它们在不同的输入下表现出预期的行为。应该记录结果,解决任何异常或漏洞, 在可能的情况下,计划使用内存安全的编程语言来减少大量最常见的可利用漏洞, 适用于多种类型的软件产品,包括安全软件和通用软件操作系统,根据国家信息保障伙伴关系(NIAP)保护概要(NIAP CCEVS), 许多政府客户可能需要独立的实验室测试, 应进行验证,根据软件运行的平台,在开发中使用合适的防攻击功能。这些功能阻止许多种不可预见漏洞被利用。应用软件保护概要v1.4,在FPT AEX Ext1部分,包含了一些防漏洞利用功能,请访问niap-ccevs.org的“NIAP-Approved pps”, 根据潜在风险(例如,云产品应该更频繁地进行测试),渗透测试应尽可能定期进行,但不少于每年一次, 不要使用只考虑产品外部可见行为不了解代码的测试方法,也不要使用了解软件的内部工作,就确保修复的漏洞能抵御所有可能入侵的测试方法。
在执行所有所需的威胁建模时,没有发现不可接受的安全漏洞,测试用作最后兜底, 如第2节开发人员部分所述,保证开发环境的网络安全健康,收集并妥善储存相关制品,以备将来参考, 遵循安全软件开发实践和组织设置的任务来进行产品开发,收集相关制品并安全存储以备将来使用。制品的例子是设计和架构文档(例如,系统以及软件组件数据流、UML模型)、威胁模型、验证与测试结果、软件设计的修订历史、所有组件、以及开放问题和已知漏洞列表, 生成、关联和验证软件物料清单(SBOM)。SBOM的内容在2.3.5节威胁场景:软件物料清单(SBOM),及国家电信和信息管理局(NTIA)的软件物料清单(SBOM)的最小要素部分做了描述, 产品管理团队确保所有发布的二进制文件都使用来自受信任证书颁发机构的根证书相关联的密钥发出的数字签名, 所有发布的软件都符合公司范围的加密标准。这些标准应基于相关行业最佳实践或(对于联邦机构)适用政府标准,如NIST SP 800-175B;使用联邦政府加密标准指南:密码机制,并使用适当定义的负责、问责、咨询和知情(RACI)矩阵进行加强, 所有的开源软件提供都符合公司范围的标准,包括对来源的漏洞评估和这些信息将提供给开发小组。提供最新的开源稳定版本,删除已经不再开发的开源软件或提供支持计划,如果有的话,确保软件许可,完全理解并遵循开源使用策略。
使用漏洞提交系统,所有已知的安全问题和漏洞应在组织的缺陷跟踪工具中作为产品缺陷进行收集和跟踪。这包括通用弱点枚举(CWE)和CVSS评分、组件的具体影响,以及任何其他相关的支持数据。漏洞信息应只存储在缺陷跟踪系统设置访问控制的页面中,具有潜在的敏感性, 组织应该在全公司范围内设立一个集中的产品安全事件响应小组(PSIRT),支持面向公众的报告工具(例如web页面),这使得外部研究人员可以很容易地报告组织产品的漏洞。PSIRT团队应该与外部研究人员合作确认和收集任何报告的漏洞信息,并确保任何报告的漏洞已修复。组织应该对所有漏洞实行负责任的信息披露, 所有现场软件的更新,包括补丁和产品更新使用HTTPS/TLS等安全协议交付。现场软件产品应该对所有交付的文件进行完整性或签名检查,以确保文件是有效的。这适用于向本地和云端软件产品提供更新。
谁需要培训, 他们必须多久训练一次, 谁被授权进行培训, 培训主题, 如何评估学员的能力,以达到培训制定的标准。
安全软件开发和设计, 安全代码审查, 软件验证测试, 在开发过程中使用安全和漏洞评估工具。
缓解 | SSDF V.1 活动 | |
架构和设计文档 | PO.1.1,PO.4.1,PO.4.2,PW.4.3, PW.3.1 | |
开发团队培训安全开发 | PO.2.2,PW.1.1,PS.1.1,PS.3.1,PW.4.2,PW.4.3,PW.5.1,PW.5.2, PW.6.1,PW.6.2,PW.7.1, PW.7.2 | |
威胁建模 | PW.1.1 | |
安全测试计划 | PO.3.1, PO.3.2, PO.3.3, PO.4.1, PO.4.2,PW.4.3, PW.5.1,PW.5.2, PW.6.1,PW.6.2,PW.7.1, PW.7.2, PW.7.2,PW.8.1,PW.8.2, PW.9.1, PW.9.2, RV.1.1, RV.1.2, RV.3.3, RV.3.4 | |
记录CVSS打分结果,验证安全缺陷并修复 | RV.3.2, RV.3.4, PS.2.1, PS.2.2 | |
产品发布 | 交付测试和威胁建模文档,漏洞报告和SBOM | PS.2.1, PS.2.2, PW.2.1, RV.1.2 |
报告缺陷的支持渠道 | RV.1.1 | |
发布数字签名的二进制,可信根证书 | PS.2.1 | |
产品支持 | 跟踪已知问题/漏洞 | RV.1.1, RV.1.2, RV.1.3 |
事件响应的公开报告工具,修复报告问题和暴露 | RV.1.3, RV.2.1, RV.2.2, RV3.1, RV.3.3 | |
更新场内产品 | PS.3.2 | |
评估和培训开发人员 | RV.3.4 | |
每次发布的安全流程和步骤 | RV.2.2 | |
加密和第三方软件集成标准 | PW.3.2, PW.4.1 |
说明:SSDF活动代码:PO-准备组织;PW-生产安全可靠软件;PS-保护软件;RV-漏洞响应
(完)
还没有评论,来说两句吧...