C4:从一开始就考虑安全
描述
在设计新应用程序时,创建安全的架构可防止漏洞在成为应用程序一部分之前就出现。这可以避免昂贵的修复和声誉问题。
有一些设计原则可以导向安全的架构
- 保持简单明了(KISS):应用程序越容易理解,其组件及其交互就越容易推断。这使得能够推断应用程序的安全行为。
- 让做正确的事情变得容易:不要指望用户阅读文档或花费时间“以正确的方式做事”。默认情况下,应用程序应该以安全的方式运行。要使其不安全,用户必须采取明确的操作。
- 不要依赖模糊性:如果唯一的安全保障是由于应用程序或其源代码的不透明性,那么应用程序根本不安全。
- 识别并最小化您的暴露组件(“攻击面”):攻击者无法攻击不存在的东西。
- 设计深度防御:考虑当组件被攻破时会发生什么,以及攻击的潜在影响范围。
第三方组件(如库和框架)的使用
虽然可能可以手动实现所有要求,但强烈建议将架构建立在已建立且维护良好的第三方组件之上。这有多种好处
- 不要重复造轮子,并从他人的(安全)失败中学习。通常,现有的库和框架都经过了安全审计,安全问题已被识别并最终修复。受益于他人的安全工作!
- 安全默认值:越来越多的框架提供防御性和安全的默认值。要启用有风险的行为,需要开发人员手动交互。
- 但要保持更新。虽然使用维护良好的框架会带来好处,但您现在有责任跟踪其新版本以获取安全说明。
- 不要与框架作对。如果使用某个框架时感觉每一步都在与之作对,那么这个具体的框架可能不适合您的开发风格或架构(反之亦然)。
威胁
- 如果应用程序仅通过安全模糊性(security-by-obscurity)来保护,那么一旦混淆被清除,逆向工程该应用程序的攻击者就拥有完全权限。此外,攻击者能够监控网络流量:虽然混淆可能在代码级别执行,但网络级别的操作可以很容易地分析。
- 一个具有复杂授权方案的Web应用程序已部署。一名新软件开发人员被指派扩展其中一个组件。由于复杂性,他们错误地配置了授权方案,导致攻击者能够利用IDOR。
- 一个具有复杂授权方案的Web应用程序已部署。一名新软件开发人员向系统中添加了一个新插件。系统使得做正确的事情变得困难,所有安全配置必须手动添加到插件中,默认情况下不采取任何安全措施。新开发人员未进行任何配置,因此新插件将IDOR引入系统。
- 一个Web应用程序有许多组件,所有这些组件都暴露在公共互联网上。由此产生的攻击面巨大。例如,部署了一个数据库管理工具(例如
phpmyadmin
)。在mysqladmin
中发现0day漏洞后,整个数据库被提取。在正常使用期间,没有人使用phpmyadmin
。
实施
“复杂性是安全的敌人”这一座右铭贯穿于本实现指南中。
设计注重清晰度和透明度
架构应注重简洁:设计的软件应仅与预期用户的需求相符的复杂程度。注重简洁为所创建的软件带来多重好处
- 更容易推断一个简单的系统。这使得能够推断变更的潜在安全影响。
- 通过更简单的设计,有助于长期维护。
- 设计应注重透明度,即安全性不应依赖于模糊性安全。
让做正确的事情变得容易
经常听到的两个术语是“设计安全”(security by design)和“默认安全”(security by default)。前者意味着软件系统应该能够以安全的方式使用,而后者意味着软件系统的初始配置是安全的。
这意味着系统管理员必须做出明确的选择才能在系统中引入不安全的配置。相反,最省力的路径应始终导致一个安全的系统。
当专注于最终用户交互时,这个方面对于设计用户界面和流程很重要。当专注于开发人员交互时,开发人员面对的设施,如框架、API、网络API,都应该被设计成在使用默认值时,只发生安全操作。在设计您的配置文件时也应考虑这一点。
明确阐明哪些被信任可以做什么,并确保这些关系得到执行
明确阐明哪些被信任可以做什么,并确保这些关系得到执行,例如,信任边界划分了影响范围,并通过防火墙或网关等控制措施强制执行。
通过每一步的仔细验证来削弱允许的内容。通过威胁建模助记符(如STRIDE)或方法论(如按元素划分的STRIDE)进行更深入的分析。
识别并最小化您的暴露组件(“攻击面”)
识别攻击者可以访问的所有区域,审查它们并尝试最小化它们:攻击者无法攻击不存在的东西。
此外,只暴露最小的操作集使得长期维护更容易。
使用知名架构模式
专家们以易于理解的格式分享了他们的最佳实践智慧,称为安全架构模式。架构模式是可重用的,可以应用于多个应用程序。
一个解决方案要被视为模式,它必须具备以下特征
- 首先,安全架构模式必须解决安全问题。
- 其次,安全架构模式不能与特定供应商或技术绑定。
- 第三,安全架构模式必须演示其如何缓解威胁。
- 第四,安全架构模式必须使用标准化术语来描述威胁和控制,以便于重用。
架构模式是使用标准解决方案而非创建自定义解决方案来解决问题的一种方式。安全架构模式是经过审查并针对已知安全威胁进行强化的标准解决方案。
实施
- 识别需要解决的问题。
- 考虑现有安全架构模式的目录。
- 为设计选择一个安全架构模式。
- 实现安全架构模式。
防止的漏洞
- 业务逻辑缺陷:这些模式有助于构建应用程序以避免复杂且经常被忽视的业务逻辑漏洞。
- OWASP Top 10 2021-A04(不安全设计):安全架构模式直接旨在缓解与不安全设计相关的风险,这是OWASP强调的一个关键问题。
参考资料
- https://securitypatterns.io/what-is-a-security-pattern/
- https://owasp.org/www-pdf-archive/Vanhilst_owasp_140319.pdf
- OWASP 速查表系列:攻击面分析
- OWASP 速查表系列:基于微服务的安全架构文档
- OWASP 速查表:安全产品设计
- OWASP 速查表:威胁建模