本指南包含以下模块:
• | Web 应用程序威胁模型一览 |
• | How To:在设计时为 Web 应用程序创建威胁模型 |
• | 备忘单:Web 应用程序安全框架 |
• | 演练:为 Web 应用程序创建威胁模型 |
• | 模板:Web 应用程序威胁模型 |
• | 模板示例:Web 应用程序威胁模型 |
方法
威胁建模的五个主要步骤如图 1 所示。应该通过重复执行步骤 2 至步骤 5 来逐步细化威胁模型。随着应用程序开发周期的向前推进,您会发现有关应用程序设计的更多内容,并能够添加更多细节。
图 1. 重复执行的威胁建模过程
威胁建模的五个步骤是:
• | 步骤 1:确定安全目标。目标清晰有助于您将注意力集中在威胁建模活动上,以及确定后续步骤要做多少工作。 |
• | 步骤 2:创建应用程序概述。逐条列出应用程序的重要特征和参与者有助于在步骤 4 中确定相关威胁。 |
• | 步骤 3:分解应用程序。全面了解应用程序的结构可以使您更轻松地发现更相关、更具体的威胁。 |
• | 步骤 4:确定威胁。使用步骤 2 和 3 中的详细信息来确定与您的应用程序方案和上下文相关的威胁。 |
• | 步骤 5:确定漏洞。检查应用程序的各层以确定与威胁有关的弱点。使用漏洞类别来帮助您关注最常出现错误的区域。 |
入门
表 1 列出了许多常见的使用方案,以及每种方案中应该使用的相应资源。
表 1:方案和相关的资源 | |||||
方案 | 资源 | ||||
威胁建模新手。 |
| ||||
快速入门。 |
| ||||
准备进行威胁建模。 |
| ||||
需要模板或示例。 |
| ||||
需要参考资料以帮助确定威胁和漏洞。 |
|
什么是威胁建模?
威胁建模是一项工程技术,您可以使用它来帮助确定应用程序方案上下文中的威胁、攻击、漏洞和对策。威胁建模活动可以帮助您:
• | 确定安全目标。 |
• | 识别相关威胁。 |
• | 确定相关漏洞和对策。 |
为什么使用威胁建模?
使用威胁建模可以:
• | 使应用程序设计符合您的安全目标。 |
• | 帮助您在重大工程决策中进行权衡。 |
• | 降低在开发和操作过程中引出的安全问题的风险。 |
术语
威胁建模使用以下术语:
• | 资产。资产是值的资源。它因角度而异。对于企业,资产可能指信息的可用性,或者信息本身,例如客户数据。它也可能是无形的,例如公司的信誉。对于攻击者,资产可能是滥用您的应用程序来非法访问数据或特权操作的能力。 |
• | 威胁。威胁是一种不希望发生的事件。它是潜在事件,通常将它最佳形容为一种可能损坏资产或目标,或者危及其安全的影响力。从本质上看,它可能是恶意的,也可能不是恶意的。 |
• | |
• | 攻击(或利用)。攻击是指利用一个或多个漏洞来实现威胁的行为。该行为可能是某人通过跟踪威胁或利用漏洞而做出的。 |
• | 对策。对策可以解决漏洞,以降低攻击的可能性或威胁的影响。它们并不能直接解决威胁;相反,它们解决的是定义威胁的因素。对策的范围包括改进应用程序设计、改进代码,直至改进操作实践。 |
主要概念
模式和实践威胁建模方法已经过优化,可以帮助您确定应用程序方案上下文中的漏洞。通过这种方法,您可以迅速确定知道什么、不知道什么,以及下一步需要知道什么。安全目标可以帮助您获得成功,以及限定投入的精力。
使用基于模式的方法可让您以更系统和可重复的方式来组织漏洞,还可以帮助您利用共有知识和避免重复劳动。
您要构建的应用程序的类型(及其方案和上下文)是相关性的重要方面。例如,面向 Internet 的 Web 应用程序的漏洞可能与面向 Intranet 的业务应用程序中的可重用组件的漏洞不同。
表 2 归纳了与本威胁建模方法相关的主要概念。
表 2:主要概念 | |||||||
概念 | 描述 | ||||||
建模以降低风险 | 执行威胁建模是为了确定应该在何时、何地投入更多精力。可能存在的漏洞、威胁和攻击有很多;您的应用程序不大可能都遇到。您的公司也不大可能需要将它们全部解决。威胁建模有助于您确定组织需要将精力投入到什么地方。 | ||||||
递增呈现 | 威胁建模是反复进行的。您不需要担心在任何单次循环中遗漏细节 — 让每个循环都有效就可以了。您会反复进行如下操作:
不断呈现对您可用的信息,并明确您现在知道什么以及接下来需要知道什么。 | ||||||
上下文精确 | 上下文精确可提供关联性。上下文精确是指特定于上下文、应用程序类型和应用程序方案,以加强信息关联性。因为不同的应用程序类型、应用程序用法和角色会产生不同的威胁和漏洞,所以需要查看应用程序用例和角色才能真正确定威胁和实际的漏洞。 | ||||||
边界 | 建立边界有助于定义约束和目标。边界可以帮助您确定什么绝对不允许发生、什么需要发生,以及什么最好发生。 | ||||||
进入和退出条件 | 通过定义进入和退出条件,您可以建立测试来测试是否成功,以便知道威胁模型什么时候完成(足够好),并确保在该活动中花费的时间适当。 | ||||||
通信和协作工具 | 您的威胁模型是一个通信和协作工具,应该用来提高共享知识和理解。威胁建模用于将精力和决策集中在设计、开发、测试、操作和业务上。通过在文档中记录威胁和漏洞(即使它们已被解决),您可以帮助每个人理解它们,并避免意外遗漏某些步骤。 | ||||||
基于模式的信息模型 | 通过使用基于模式的信息模型,您可以确定可重复的问题和解决方案的模式,并将它们组织成类别。然后,您可以使用这些类别来分解应用程序,以便为应用程序进一步分析和确定与每个类别相关的漏洞。以这种方式组织漏洞使您能够以更系统的方式确定和处理漏洞,并帮助您利用共有的知识。总之,您不必从头开始,或者成为某方面问题的专家。使用类别还有助于促进信息重用和有效的通信。您可以使用这些基于模式的类别来组织和共享原则和实践。 | ||||||
重大工程决策 | 一个好的模型会指出您的高风险工程决策和设计选择。这些高风险选择是用于关注原型成果的很好的候选项。 |
Web 应用程序安全框架
Web 应用程序安全框架为 Web 应用程序定义了一组漏洞类别。这些类别是最常出现错误的区域,它们表示最应该将注意力集中于此的区域。
Web 应用程序安全框架定义的类别源于安全专家,他们检查和分析了许多 Web 应用程序的顶级安全问题。这些类别借助于 Microsoft 顾问、产品支持工程师、客户和 Microsoft 合作伙伴的反馈得以细化。
表 3 归纳了 Web 应用程序安全框架中的类别。
表 3:Web 应用程序安全框架 | |
类别 | 描述 |
输入和数据验证 | 如何知道应用程序接收的输入是有效且安全的呢?输入验证指的是应用程序在进行其他处理之前如何筛选、删除或拒绝输入。 |
身份验证 | 您是谁?身份验证是一个实体验证另一个实体身份的过程,通常通过凭据进行,例如用户名和密码。 |
授权 | 您可以做什么?授权是应用程序提供对资源和操作的访问控制的方式。 |
配置管理 | 您的应用程序以谁的身份运行?它连接到哪个数据库?如何管理您的应用程序?如何保护这些设置?配置管理指的是您的应用程序如何处理这些操作问题。 |
敏感数据 | 您的应用程序如何处理敏感数据?敏感数据是指您的应用程序如何处理必须受到保护的所有数据,不管数据是在内存中、网络上还是永久性存储中。 |
会话管理 | 您的应用程序如何处理和保护用户会话?会话是指用户与您的 Web 应用程序之间的一系列相关交互。 |
加密 | 如何保持机密(保密性)?如何防止他人篡改您的数据或库(完整性)?如何为必须具有很强机密性的随机值提供种子?加密是指应用程序保证机密性和完整性的方式。 |
参数操作 | 您的应用程序如何操作参数值?对于应用程序,表单字段、查询字符串参数和 cookie 值经常作为参数使用。参数操作既指应用程序保护这些值不被篡改的方式,也指应用程序处理输入参数的方式。 |
异常管理 | 当应用程序中的一个方法调用失败时,您的应用程序会做什么?显示了多少?您是否将错误信息友好地返回给最终用户?您是否将有价值的异常信息传递给调用方?应用程序的失败方式是否友好? |
审核与记录 | 谁在什么时候做了什么?审核与记录是指应用程序记录与安全相关的事件的方式。 |
您使用该框架来帮助确定威胁和漏洞。在威胁确定过程中,应该使用它来帮助确定与您自己的应用程序体系结构相关的常见威胁。为了帮助确定漏洞,您可以通过类似的方式逐层检查应用程序,并考虑每层中的各个漏洞类别。
工具集成
威胁建模和其他安全工程活动可以通过设计和开发工具来支持。模式和实践 威胁建模活动的工具支持由以下工具提供:
• | Visual Studio Team System Integration。MSF Agile Software Development 过程可将Patterns & Practices 威胁建模方法集成到 Microsoft Visual Studio Team System 中。有关更多信息,请参阅 MSF 过程指导,或访问 MSF Web 站点. |