背景
SDL安全设计的背景是微软提出的安全开发生命周期(SDL),这是一种从安全角度指导软件开发过程的管理模式。在软件开发过程中,微软总结出若干核心的安全设计原则:基本隐私、默认安全、威胁建模、纵深防御、权限最小化和攻击面最小化。这些原则在软件开发的各个阶段都引入了安全和隐私的元素,以减少软件中的漏洞数量并将安全缺陷降低到最小程度。
基本隐私原则关注用户在使用软件时个人信息被收集、使用甚至分发的情况,企业有责任建立对用户个人信息的保护措施,抵御外部/内部攻击,确保用户基本隐私的安全性。攻击面最小化原则指出,程序任何能被用户或者其它程序所访问到的部分,都可能成为恶意攻击者的攻击目标。因此,应尽量减少暴露给用户的攻击面,这些暴露的部分往往也是最可能被恶意攻击者发现并试图利用的地方。
在实践中,微软用多年的经验总结出了这些方法来辅助安全人员对软件进行安全设计。其最终目标是构建可信任的应用程序,增加客户的信赖,履行法律规定和义务。
安全设计原则六大原则
1.基本隐私原则(Basic Privacy)
它强调保护用户数据的隐私。根据这一原则,隐私为一项基本人权,承诺为每个人和每个组织提供强有力的数据保护。此原则的基础包括客户控制、透明度、安全性、防止第三方访问数据,以及以为用户提供有意义权益的方式使用个人数据。
原则 | 描述 |
客户控制 | 用户有权决定他们的个人信息如何被收集、存储和使用。这涉及到用户对自身信息的控制权,包括选择是否分享信息,以及在何种程度上分享信息。 |
透明度 | 企业必须向用户清晰地展示他们如何使用和保护用户的个人信息。这包括明确的隐私政策,以及在收集和使用个人信息时的通知和同意机制。 |
安全性 | 确保用户个人信息不被未经授权的访问、泄露、更改或销毁的措施。这可能包括加密技术、访问控制等安全措施。 |
防止第三方访问数据 | 对企业和合作伙伴的保护要求,以防止他们未经用户同意就获取和使用用户的个人信息。 |
使用个人数据 | 企业应尊重用户的权利,并在处理用户数据时考虑到用户的利益。这可能包括提供个性化的服务,或者在收集和使用数据时获得用户的明确同意。 |
从法律、商业和安全的角度来看,在软件设计中充分考虑用户基本隐私主要体现在以下几个方面:
- 遵守法律规定和义务:保护用户隐私不仅是企业的道德责任,也是法律所规定的义务。例如,某些国家/地区的法律法规要求企业在收集、使用和存储用户数据时必须遵循特定的隐私保护规定。
- 提升客户信任度:尊重和保护用户隐私有助于增强用户对企业的信任度,从而提高客户忠诚度和市场份额。
- 避免部署受阻:如果一个应用程序被发现存在严重的隐私安全问题,可能会导致其在多个平台上被禁止或限制部署。
- 抵御外部攻击:通过建立有效的安全措施来保护用户的个人信息,可以抵御来自黑客和其他恶意攻击者的攻击。
2.默认安全原则(Secure Defaults)
强调在产品设计和配置过程中,应将安全性作为默认状态。所有的设置和配置都应该是安全的,除非用户有明确的需求来关闭或降低安全级别。例如:
- 在软件开发中,所有的功能默认应该是安全的,除非用户有特殊需求,否则不应开放可能存在安全隐患的功能。例如,系统应对默认账户设置最小的权限,只有当需要时才提升权限。
- 对于云服务、容器、数据库和缓存等基础系统和服务,其安全配置也应该是默认的。例如,数据库应默认禁止远程访问,容器应默认使用最小化镜像以减少攻击面。
- 对于Web接入层,可以默认覆盖WAF(Web应用防火墙),以防止常见的网络攻击。此外,统一的登录鉴权认证服务也应被默认启用,以确保只有经过授权的用户才能访问系统。
- 密钥管理系统(KMS)是另一个实施默认安全原则的好例子。它应该默认保护所有加密数据,以防止未经授权的访问。对于保护关键数据的票据系统,其安全策略也应该默认启用。例如,票据的有效期和用途应该在签发时就进行限制。
- 零信任(Zero Trust)架构也是实施默认安全原则的一个重要方式。这种架构假设任何用户或设备都可能是威胁,因此应该对所有的用户和设备进行验证和授权。
这一原则可以大大减少由于错误配置或误解设置而导致的安全风险。因为很多安全问题都是由于不当的配置或设置导致的,如果所有的设置都默认为安全,那么用户就不需要去考虑如何配置才能达到安全的效果,从而降低了安全风险。
需要注意的是,即使采用了默认安全原则,也不能保证产品的安全性。因为安全不仅仅是配置和设置的问题,还涉及到产品的设计和实现。
3.威胁建模(Threat Modeling)
威胁建模是一种安全设计方法,用于识别和评估潜在的安全威胁。在SDL(软件定义网络)中,威胁建模可以帮助开发人员识别潜在的安全漏洞,并采取相应的措施来保护系统免受攻击。
威胁建模步骤
- 识别威胁:分析系统可能面临的威胁,包括恶意用户、内部威胁、外部威胁等。这可以通过审查系统需求、了解潜在攻击者的技能和知识以及评估现有的安全措施来实现。
- 确定威胁的影响:评估每个威胁对系统的潜在影响,包括数据泄露、系统崩溃、拒绝服务攻击等。这有助于确定需要优先处理的威胁。
- 确定威胁的来源:分析威胁是如何进入系统的,例如通过漏洞、钓鱼攻击、中间人攻击等。这有助于确定需要修复的漏洞和加强的安全措施。
- 确定威胁的传播方式:分析威胁如何在整个系统中传播,例如通过网络、邮件、社交媒体等。这有助于确定需要加强的网络安全防护措施。
- 制定应对策略:根据威胁建模的结果,制定相应的应对策略,包括修复漏洞、加强身份验证、限制访问权限等。这有助于确保系统的安全性。
- 测试和验证:在实际环境中测试和验证威胁建模的结果,以确保所采取的措施能够有效地防止威胁。这可能需要进行渗透测试、模拟攻击等。
STRIDE模型
将安全威胁分为六类,分别是:Spoofing(伪装)、Tampering(篡改)、Repudiation(拒绝承认)、Information Disclosure(信息泄露)、