软件安全 从源头开始
第一章 引论
软件安全的重要性和相关性
软件在现实世界中扮演着关键的角色,几乎无所不在,尤其是在最关键的系统中。正因为如此,设计安全的软件就显得至关重要。尽管大多数信息技术领域的安全解决方案已经有效降低了不安全软件带来的风险,但我们必须认识到构建安全软件所带来的经济成本和其他风险的重要性和相关性。因此,软件安全不仅仅是技术问题,更是商业决策的一部分,因为它关乎着安全风险的最小化。
软件安全与软件开发生命周期
在软件开发过程中,我们需要区分两个重要概念:软件安全(software security)和应用程序安全(application security)。尽管这两个术语经常被互换使用,但它们在管理和实施过程中有明显的不同。软件安全指的是在软件开发生命周期(SDLC)中通过应用SDL构建安全的软件,而应用程序安全关注于发布后运行时软件和系统的保护。
高质量和安全代码
虽然安全代码未必就是高质量代码,反之亦然,但软件开发过程应当遵循高质量和安全代码的原则。没有安全的高质量代码,也没有低质量的安全代码,它们是相辅相成的。至少,质量和软件安全应该在开发过程中密切结合;最理想情况下,它们应该是同一组织的一部分,成为软件开发工程部门的一部分。这种整合将在后续章节中从组织和操作的角度进一步讨论。
三个最重要的SDL安全目标
所有软件安全分析和构建的核心是三个最重要的安全特性:保密性、完整性和可用性,也被称为C.I.A.模型。为了确保软件开发的安全性,这三个特性必须贯穿整个SDL过程的始终。
威胁建模和攻击界面验证
威胁建模和攻击界面验证被认为是SDL中最耗时和难以理解的部分。在当前敏捷软件开发的环境中,正确处理这一问题至关重要,否则无法确保软件的安全性。通过威胁建模和攻击界面验证,可以最大程度地减少软件产品发布后发现的安全漏洞。鉴于这一功能的重要性,本书将专门用一节和一章来关注这一主题。
第二章 安全开发生命周期
2.1 克服软件安全中的挑战
在软件开发生命周期(SDL)中,克服安全挑战是至关重要的。SDL涵盖了开发行业、政府标准以及最佳实践,这些都是确保软件安全所需的基本组件。为了有效地防止、识别和减轻系统中的漏洞,需要经验丰富的人员、安全软件的策略以及严格的管控要求。
不符合SDL中的最低活动要求将给内部和外部威胁提供利用系统资产的机会。安全不再仅仅是网络要求,而是信息技术(IT)的要求,涵盖了所有软件开发的意图,包括信息的分发、存储和处理。为了保护客户的隐私和重要信息,组织必须实施最高标准的开发,以确保发布最高质量的产品。
实施SDL程序可以确保企业软件在设计和开发阶段就具备了良好的安全性,而不是在产品发布后才开始考虑安全性问题。采用SDL方法可以带来实实在在的好处,比如确保所有软件版本都符合最低安全标准,以及确保所有利益相关者都支持和强制执行安全准则。在开发周期的早期发现漏洞并进行修复不仅更容易,而且成本更低,这也为信息安全团队提供了一个系统化的方法,可以在开发过程中共同消除软件风险。
2.2 软件安全成熟度模型
软件安全成熟度模型(SSMM)涵盖了一系列关键领域,包括:
- 策略和度量标准
- 符合性和政策
- 培训
- 攻击模型
- 安全特征和设计
- 标准和要求
- 架构分析
- 代码审查
- 安全测试
- 渗透测试
- 软件环境
- 配置和漏洞管理
BSSIM的第4个版本发布于2012年9月18日,新增了两个活动:模拟软件危机和自动化恶意代码检测。BSIMM4涵盖了来自12个垂直行业的51家公司,相较于BSIMM3增长了20%,是一个在软件安全领域持续成长的标志。该模型的数据集包含了95个不同的测量,表明领先的公司在每100个开发人员中平均雇佣了两名全职的软件安全专家。
OWASP的软件保证成熟度模型(SAMM)是一个灵活的框架,用于将安全性融入软件开发组织。SAMM通过覆盖更多于典型SDLC基础模型的安全性,使得组织能够自行评估其安全保障程序,并在特定风险面临挑战时进行改进。此外,SAMM还能够创建记分卡,记录组织在管理、开发和部署业务功能过程中在安全开发方面的有效性,从而量化改进。
2.3 ISO/IEC 27034:应用安全的国际标准
ISO/IEC 27034标准是信息技术、安全技术和应用安全领域的国际标准。它提供了一套管理应用程序安全的指南,涵盖了基于风险的方法,通过流程整合和改进来管理应用程序的安全性。ISO/IEC 27034标准的出现标志着软件安全标准和框架开始整合,类似于ISO/IEC 27001标准对信息安全的影响。
ISO/IEC 27034标准的实施有助于组织内嵌过程安全方面的指导,帮助环境中运行安全的应用程序。它不仅仅是一种框架,更是一种基于风险的方法,通过设计流程来持续提高应用程序的安全性。