type
status
date
slug
summary
tags
category
icon
password
实习过程中零零碎碎学了一些,但还没系统学过,发现微软有个挺全面的,打算系统学习一波~
感觉讲的特别好…所以就直接索性一边看一边补充的 copy 下来了,整成一篇长文也不用各种链接跳来跳去
威胁建模简介
威胁建模是一种有助于保护系统、应用程序、网络和服务的有效技术。它可帮助你在开发生命周期的早期确定潜在的威胁和降低风险策略。
威胁建模使用以图形形式演示系统工作方式的数据流关系图。之后,它应用一个框架来帮助你发现和修复安全问题。
如果未首先建立威胁模型而发布系统,该系统将使你的客户和组织面临风险。
| 简单起见,此学习路径将系统、应用程序和服务统称为系统。
何时使用威胁建模
在设计新系统或更新现有系统时,可使用威胁建模。 示例包括:
- 创建新的 Azure 微服务,用于报告组织的云资源使用情况以便进行预算
- 设计公共 API 以向客户提供对数据的访问权限
- 向现有应用程序添加新功能
谁可以进行威胁建模
只要了解系统如何工作,并且对安全性有基本的理解,任何人都可以进行威胁建模。 此技术可应用于任何:
- 部署节奏(每小时、每月或每年)
学习目标
在本模块,你将了解威胁建模的四个概括性步骤,并能够学得以下内容:
- 了解明确要求和假设以帮助创建数据流关系图的重要性
- 了解可帮助你查找系统中安全问题的框架
- 了解有助于减轻或消除潜在威胁的安全控制类别
- 重点介绍在部署之前验证假设、要求和修复的重要性
| 无必备知识即可学习 (
模块1 | 威胁建模阶段
只要了解系统工作原理,并具有信息安全知识,任何人都可以使用威胁建模技术。
此方法分为四个不同的阶段,每个阶段都包含重要步骤,可帮助你创建数据流关系图并对其进行分析,以发现潜在的威胁。
阶段 | 标题 | 说明 |
1 | 设计 | 明确系统的所有要求,并创建数据流关系图 |
2 | 中断 | 将威胁建模框架应用到数据流关系图 |
3 | 修复 | 确定如何正确组合安全控制来解决每个问题 |
4 | 验证 | 验证是否满足了要求 |
| 本模块(1) 中的单元将较为概括地介绍重要的威胁建模概念,本文 模块2 开始将详细讨论这些概念。
步骤1 - 设计
设计阶段是进行威胁建模活动的基础。 你需要尽可能多地收集关于你所构建的内容及所用资源的数据。
目标
- 清楚地了解系统的工作原理
- 列出系统使用的每个服务
- 枚举有关环境和默认安全配置的所有假设
- 使用正确的上下文深度级别创建数据流关系图
| 如果不完成此阶段,你可能会忽略系统的重要安全设计注意事项,这可能会使你的客户面临风险。
提出有关系统的问题
尽可能多地提出有关系统的问题。 可以考虑以下问题:
区域 | 问题 |
系统说明 | 系统的功能是什么? 服务处理的业务流程是什么? 是否明确定义了这些流程? |
系统环境 | 系统是在云中还是在本地构建的? 它将在哪个 OS 上构建? 是否将使用容器? 系统是应用程序、服务还是其他完全不同的东西? |
方案 | 用户将如何使用系统? 如何不使用系统? |
权限 | 系统是否有脚本执行、数据或硬件访问要求? 如果有,是哪些要求? |
云提供商 | 系统将使用哪个云提供商? 它提供哪些默认安全配置选项? 这些选项如何影响系统安全要求? |
操作系统 | 系统将使用哪种操作系统? 它提供哪些默认安全配置选项? 这些选项如何影响系统安全要求? |
第一方和第三方 | 系统将使用哪些第一方和第三方服务? 它们提供哪些默认安全配置选项? 这些选项如何影响系统安全要求? |
帐户 | 系统中将使用哪些帐户类型,例如用户和管理员? 这些帐户是本地帐户还是云帐户? 它们需要哪些访问权限?为什么? |
标识和访问控制 | 系统将如何帮助保护这些帐户? 它会依赖 Azure Active Directory (Azure AD) 吗? 它会使用访问控制列表 (ACL)、多重身份验证 (MFA) 和会话控制等功能吗? |
令牌和会话 | 系统会处理 SOAP API 或 REST API 之类的请求吗? 它将如何处理不同的会话? |
旁路 | 系统是否使用或需要后门? 如果需要,它将如何工作? |
记录、监视和备份 | 系统使用什么机制来记录安全事件、监视异常和备份系统数据? 它会捕获哪些事件类型? |
网络 | 将使用哪些入侵检测和保护系统? 如何对通信进行加密? |
数据 | 系统将创建或处理哪种类型的数据? 数据分类类型是什么? 系统如何信任数据源? 它将如何分析数据? 预期的输入和输出行为是什么? 如何处理验证? 如何在所有状态下对数据进行加密? |
机密管理 | 系统如何处理密钥、证书和凭据? |
| 上面列出的内容很广泛,但并不详尽。 与你的同事和安全团队联系,以明确系统的所有相关上下文
| 如果你有专门的安全团队,请与他们安排白板会议以进行初始设计。 它将节省相当长的时间。
创建数据流关系图
使用答案创建数据流关系图。 它显示了数据生命周期中每个阶段的数据,包括信任区中的更改。 示例包括:
- 用户登录到 Azure 中托管的 Web 应用程序以访问数据
- 管理员更改 Web 应用程序使用的弹性资源的默认安全配置
- 自动化的每日脚本,用于监视 Web 应用程序的活动日志并通知管理员任何异常情况
Microsoft 工程团队需要提交数据流关系图,这是其安全合规性要求。 这些关系图有助于进行与安全性相关的探讨。
图解工具
Microsoft 工程师建议使用现在提供的两种工具之一:
- Threat Modeling Tool
- 在线安装版,https://www.microsoft.com/en-us/securityengineering/sdl/threatmodeling
- 离线安装版,https://www.microsoft.com/en-us/download/details.aspx?id=49168 (2016)
- 想装其他离线版本的,Guguru 一下 就好了
microsoft threat modeling tool offline installer
- Visio,(要钱的 打扰了
关系图元素
数据流关系图显示了给定系统中的数据流。 它通常以用户或数据存储的请求开始,以数据存储或 Analytics Services 结束。 数据流关系图使用不同的形状来指示它们所表示的元素。
数据流关系图元素还需要上下文,以帮助人们了解如何在系统中的使用和保护它们。
数据流图标中应包含的信息量
数据流关系图中包含的信息量取决于几个关键因素:
因素 | 说明 |
正在构建的系统类型 | 如果系统不处理敏感数据或仅在内部使用,则它可能比面向外部的系统需要更少的上下文 |
安全团队所需的上下文 | 安全团队在威胁模型中的目标非常精确。 与安全团队交流,确认所需的层次 |
如果未能包含正确的上下文,将导致安全检查不完整、系统存在潜在的风险。
关系图层次
为了帮助你了解要包含的信息量,请在以下四个上下文层次之间进行选择:
层次 | 标题 | 说明 |
0 | 系统 | 任何系统的基础。 数据流关系图包含系统的主要部分,并提供足够的上下文,可帮助你了解其工作原理及彼此交互方式。 |
1 | 流程 | 使用额外的数据流关系图,关注系统每个部分的数据流关系图。 用于每个系统,尤其是处理敏感数据的系统。 此层的上下文应有助于确定威胁以及更有效地降低或消除风险的方法。 |
2 | 子过程 | 关注系统中某一部分的每个次级部分的数据流关系图。 用于关键的系统。 示例包括适用于安全环境的系统、处理高度敏感数据的系统或包含高风险评级的系统。 |
3 | 更详细 | 关注高度关键的内核级系统。 数据流关系图详细描述每个子过程。 |
| 大多数数据流关系图应同时包含第 0 层和第 1 层。 与安全团队交流,确认所需的层次深度。
知识检查
- 设计阶段要进行哪些工作?
A. 你知道系统的工作方式。 还可以确定从云提供商和集成服务继承的安全要求、保证或差距
B. 此时不必研究所有安全保证、假设和差距,唯一的任务就是创建数据流关系图
C. 在创建数据流关系图之前,确定并解决与系统相关的所有安全问题
参考答案
A
解释:A. 在创建数据流关系图之前,请尽可能收集有关系统的上下文。B. 在设计阶段较早收集尽可能多的上下文,你就可以做出明智的决策以更好地保护系统。C. 在设计阶段之后的中断和修复阶段执行创建关系图的任务。
步骤2 - 中断
在中断阶段,需使用数据流关系图查找针对系统的潜在威胁。 此过程使用威胁建模框架,以帮助你查找最常见的威胁和防范威胁的方法。
目标
- 选择以 “保护系统” 或 “了解攻击者” 为核心的方法 (可参考模块4了解这两种方法)
- 使用 STRIDE 框架识别常见威胁(STRIDE威胁模型几乎可以涵盖目前绝大部分安全问题),即
| 如果不完成此阶段,就不会发现系统中的潜在威胁,这可能会导致未来出现违规现象。
确定方法侧重点
首先,选择是要找到保护系统的方法,还是想要尽可能地了解攻击者及其动机。 示例包括:
侧重点 | 可以查找的内容示例 |
系统 | 发现用户与系统之间的未加密连接存在问题。 |
攻击者 | 进一步了解方法、动机和强化系统入口点的方法。 |
资产 | 基于分类数据处理等功能确定关键资产,主要专注于保护这些资产。 |
| Microsoft 产品工程师主要致力于保护系统。 渗透测试团队两者兼顾。
选择威胁框架
接下来,选择一个框架,帮助生成系统中的潜在威胁。 Microsoft 通常使用 STRIDE(六个主要威胁类别的首字母缩写)提供广泛但不完整的威胁列表。
此框架可帮助你提出有关系统的几个重要问题:
威胁 | 定义 | 问题 | 威胁示例 |
欺骗 | 攻击者冒充某人或某物 | 通信的双方是否都通过了身份验证? | 通过看似合法的帐户向用户发送一封带有恶意链接和附件的电子邮件,以捕获用户的凭据、数据和设备访问权限。 |
篡改 | 攻击者在未经授权的情况下更改数据 | 如何得知某人无法更改传输中的数据、正在使用的数据或静态数据? | 通过弱 API 调用处理修改内存,导致崩溃和泄漏敏感错误消息。 |
否认性 | 攻击者声称尚未执行任何操作 | 每个操作是否可以绑定到标识? | 声称没有删除数据库记录。 |
信息泄露 | 攻击者看到了不应看到的数据 | 如何得知某人无法看到传输中的数据、正在使用的数据或静态数据? | 访问安全控制较弱的未授权文档和文件夹。 |
拒绝服务 | 攻击者使你的系统崩溃 | 系统中是否存在资源受限的区域? | 向网络发送大量请求。 |
权限提升 | 攻击者未经授权而可访问数据 | 如何得知某人可以执行此操作? | 利用输入处理逻辑或内存中的弱点来提取数据。 |
知识检查
- 中断阶段要进行哪些工作?
A. 通过相关框架选择重点领域,以系统地识别系统中的潜在威胁。
B. 通过相关框架选择重点领域,以系统地识别可以应用到系统的解决方案。
C. 安全团队开会讨论,选择重点领域和相关框架,以系统地识别系统中的潜在威胁。
参考答案:
A
解释:A. 在使用 STRIDE 查找潜在威胁时,请关注系统或攻击者。B. 此任务属于阶段 3 - 修复阶段。C. 在大多数情况下,可以选择与安全团队开会讨论,但不强制要求这么做(除非组织有相关要求)。
步骤3 - 修复
在修复阶段,需要决定如何处理所有威胁。 每个 STRIDE 威胁都对应到一项或多项安全控制,这些控制措施提供不同的功能和类型供你选择。
目标
- 根据优先级框架或安全 bug 栏衡量每个威胁的优先级
- 在 bug 管理服务中将每个威胁作为任务或工作项进行跟踪
- 生成对应于 STRIDE 威胁的安全控制建议
- 选择一项或多项安全控制类型和功能来应对每个威胁
- 解决任务
| 如果不完成此阶段,就找不到安全控制来帮助降低风险或正确跟踪每个威胁。
设置威胁跟增工作流
确定威胁的优先级
首先,根据优先级框架或安全 bug 栏来衡量每个威胁。 此过程可帮助你计划资源来解决对组织而言更重要的问题。
此过程使用三个关键变量:
变量 | 说明 |
影响 | 使用 STRIDE 类别分配影响。 |
严重性 | 使用内部 bug 栏或优先级框架来分配最坏情况下的严重性。 |
风险 | 对安全控制有效性和实现成本进行计算。 |
| Microsoft 工程师使用内部安全 bug 栏,为威胁分配“严重”、“重要”、“中等”、“低”或“信息”严重性等级。 请咨询安全团队,确认如何确定问题的优先级。
创建任务
接下来,在 Azure DevOps Services 等 bug 管理解决方案中添加每个威胁。 部分优点包括:
- 进一步确定问题责任人
- 有效跟踪历史记录
- 让你能够使用标准化模板来进行优先级和解决方案演练
评估威胁有效性和成本
查看对应于 STRIDE 威胁的每项安全控制建议。 记下最有效和成本最低的建议。 以下是一些示例:
威胁 | 安全控制 | 安全控制示例 |
欺骗 | 身份验证 | 发送和接收使用数字签名进行签名的消息,以验证来源并确保消息完整性。 |
篡改 | 完整性 | 验证输入以防止处理恶意有效负载和错误处理意外行为。 |
否认性 | 不可否认性 | 创建和保护包含用户操作和时间戳的安全日志。 |
信息泄露 | 保密性 | 应用访问控制列表,以确保合适的用户可以访问适当的数据。 |
拒绝服务 | 可用性 | 使用弹性资源管理不断增加或减少的使用量。 |
权限提升 | 授权 | 使用最少的访问量运行服务。 |
| 可能有这样的安全控制,可以同时减轻或完全消除多个威胁。 例如,使用 SSL/TLS 创建安全传输通道,以帮助防止恶意数据修改或泄露。
安全控制措施类型和功能
安全控制具有不同的类型和功能。 结合使用时,它们有助于保护系统的安全,并创建多个安全保护层,也称为深层防御。
你可以选择一种或多种安全控制类型:
- 物理类型,如摄像头
- 技术类型,如加密
- 管理类型,如策略
它们可能有一项或多项安全控制功能:
函数 | 描述 |
预防 | 降低威胁的概率或影响,如防火墙。 |
检测 | 识别发生的攻击,如监视。 |
纠正 | 控制系统如何响应其受到的攻击,如系统修补程序。 |
恢复 | 从攻击中恢复系统,如备份。 |
阻碍 | 阻止攻击者访问系统,如最低权限。 |
为每个问题添加安全控制详细信息
在 bug 管理解决方案中为每个问题添加详细信息,然后使用以下其中一个解决方案解决各个问题。 这在不同组织之间存在略微差异:
解决方案 | 描述 |
减轻 | 将通过 Bug 修复或重新设计来解决问题,以减轻或消除威胁影响和严重性。 |
转移 | 由其他系统或团队处理问题。 |
避免 | 去除系统中包含问题的部分。 |
接受 | 没有解决方案,将接受风险。 需要经授权的风险决策者的批准,其中决策者可能取决于威胁的严重性。 严重威胁可能需要高级领导的批准,而深层防御风险可能需要高级工程师批准。 与你的团队交流以获得战略指导。 |
知识检查
- 修复阶段要进行哪些工作?
A. 在部署系统之前验证所有修补程序。
B. 在这一阶段,你将生成并验证一系列安全控制,并设置其优先级,以减轻或消除风险。
C. 此时,选择框架以帮助生成潜在的威胁。
参考答案:
B
解释:A. 属于步骤 4 - 验证阶段。B. psw 每个威胁都对应到一个可降低或消除风险的安全控制。 根据组织的安全风险惯例,确定这些威胁的优先级并进行跟踪。C. 此任务属于步骤 2 - 中断阶段。
步骤4 - 验证
验证阶段是威胁建模过程的最后一步,通常发生在部署系统之前。 它涉及到确保满足要求、验证假设以及准备好安全控制。
目标
- 确认系统满足所有新旧安全要求
- 配置云提供商、操作系统和组件以满足安全要求
- 确保使用正确的安全控制解决所有问题
- 在部署前对系统进行手动和自动验证
| 如果不完成此阶段,就无法验证是否已成功完成安全工作。
验证要求和设置默认值
首先,验证是否满足第一阶段创建的所有要求。
示例:
- 网络安全计划
- 机密管理解决方案实施
- 日志记录和监视系统
- 标识和访问控制
然后,确保云提供商、操作系统和组件的默认配置设置已更改,可满足所有安全要求。
示例:
- 启用 Azure SQL 数据库透明数据加密以保护磁盘上的数据
- 使用基于角色的访问控制 (RBAC) 向用户、组和应用程序分配权限
- 跨所有配置文件启用 Windows 防火墙
应解决 bug 管理解决方案中记录的所有问题并验证所有修补程序。
执行验证
最后一部分涉及运行手动和自动验证。 在 Microsoft,部署系统之前必须对其进行验证,验证过程可能包含自动扫描程序、代码评审和渗透测试。 可以在每次部署之前或隔一定的时间(如每 6 - 12 个月)强制执行该过程。
如果以下任一问题的答案为“是”,最好设置较短的验证周期:
- 我的系统会在部使用吗?
- 它可以处理机密数据吗?
- 我必须遵守某些规定吗?
- 我的组织是否要求实施其他安全保护过程,以应对隐私影响、运营风险或开发要求?
知识检查
- 验证阶段要进行哪些工作?
A. 实施一系列适用的安全控制,以减轻或消除风险。
B. 在将代码推送到暂存分支进行部署之前,需要对其进行手动检查。
C. 针对先前产生的威胁手动或自动验证系统,以验证安全控制是否降低或消除了风险。
参考答案:
C
解释:A. 此任务属于步骤 3 - 修复阶段。B. 此答案更适用于操作方面,而不是威胁建模过程。C. 此阶段的主要工作是验证修复、假设和满足要求。
小结
摘要
威胁建模是帮助保护系统、应用程序、网络和服务的有效方法。 它可以识别潜在的威胁并推荐风险降低策略,以帮助你在开发生命周期的早期实现安全目标。
本模块涵盖了以下内容:
- 了解明确要求和假设以帮助创建数据流关系图的重要性
- 了解可帮助你查找系统中安全问题的框架
- 了解有助于减轻或消除潜在威胁的安全控制类别
- 重点介绍在部署之前验证假设、要求和修复的重要性
后续步骤
在此学习路径的后续几个模块中,我们将了解在四个阶段引入的每个概念,并进行详细讨论:
模块 | 标题 | 说明 |
2 | 使用数据流关系图元素创建威胁模型 | 了解数据流关系图中的每个元素,包括何时使用它们以及要包含的上下文。 |
3 | 提供具有适当深度层的上下文 | 在创建数据流关系图之前,了解每个上下文层次的差异和适用情形。 |
4 | 处理数据流关系图时关注适当的威胁模型 | 了解关注威胁建模活动的不同方法。 |
5 | 使用框架识别威胁并找到减少或消除风险的方法 | 深入研究 STRIDE,并进一步了解存在的风险以及如何针对这些风险保护系统。 |
6 | 设置问题的优先级并应用安全控制措施 | 了解如何设置威胁优先级,并了解系统安全控制的不同类型和功能。 |
7 | 使用推荐工具创建数据流图 | 了解可用于威胁建模的工具。 |
了解详细信息
模块2 | 使用数据流关系图元素创建威胁模型
简介
数据流关系图由呈现为形状和线条的元素构成。 数据流关系图以图形方式表示系统的各个主要部分。
示例包括:
- 用于存储客户数据的 Azure DB
- 处理用户请求的 Web 服务
- 与系统交互的用户
- 跨信任区域级别更改的数据流
在威胁建模中使用元素及其交互,以帮助确定威胁并降低系统风险。 此过程可帮助工程师更有效地进行协作,同时保护其系统免受最常见的威胁攻击。
本模块将介绍数据流关系图的每个元素。 这些元素具有不同的形状和功能,并且需要特定的上下文。
| 在整个学习路径中,元素也可以称为“模具”。
何时使用元素
在创建数据流关系图时使用这些元素。 关系图可显示系统创建、操纵、存储以及删除数据的方式。 我们以第一个模块中的示例为基础进行构建:
- Azure 微服务 - 添加元素以指定用户、身份验证过程、数据存储、数据请求和响应处理过程。
- 别忘了指定信任区域级别更改。
- 公共 API - 添加元素以指定用户、数据存储、日志记录和监视流程以及系统的其他部分。
- 现有应用程序上的新功能 - 添加元素以表示系统的现有部分和新的部分。
学习目标
在本模块中,你将能够:
- 区分每个元素的形状和功能
- 在创建数据流关系图时,包含元素的正确上下文
| 无必备知识即可学习 (
数据流关系图元素
数据流关系图由各种形状组成,这些形状用于创建系统的图形表示形式。 每个形状都表示一个独特的功能。 系统将分析每个交互以帮助识别潜在的威胁和找到降低风险的方法。
通过正确使用形状,你能更好地明白同事和安全团队提供的信息。 每个人都能了解该系统的工作方式。 这还可以使他们无需查阅无数的设计文档和开发计划即可启动系统并使其正常运行。
| 如果无法在数据流关系图中正确地体现系统的所有部分,则有可能部署具有潜在漏洞的系统。
我们将在接下来的几个单元中讨论每个元素。
过程 - 任务元素
此元素用一个圆圈表示,表示可以修改接收的输入或将接收的输入重定向到其相应输出的活动。
示例包括:
- 接收 API 调用请求并将其转发到 API 处理服务的微服务
- 在数据写入数据存储之前验证数据输入的代码
何时使用过程元素
在以下项之间添加过程元素:
- 数据存储 - 处理数据存储之间的所有通信的过程
- 具有其他元素的外部实体 - 处理所有任务和通信的过程
- 过程 - 处理所有任务的过程
根据数据流关系图所需的信息深度级别,可以使用过程元素来表示几个不同的用例:
用例 | 描述 |
存根 | 在较高级别的数据流关系图中将过程元素用作“存根”,这是一种有助于保持整洁的好方法。 它涉及为特定过程创建一个单独的数据流关系图,并将其映射回更高级别的关系图。 它的工作方式类似于“放大”功能,在“放大”过程时,可以使用深层数据流关系图。 |
多个任务 | 当过程处理多个任务时,此用例适用。 此上下文非常重要,因为它允许查看数据流程图的任何人为每个任务应用适当的安全控制。 |
包括上下文
在每个过程元素中包含以下上下文:
上下文 | 问题 |
代码 | 此过程是否以 C#、C++、Objective C、Java 或脚本语言运行? |
权限级别 | 此过程是否需要内核、本地或管理级别权限才能运行? |
服务隔离 | 该过程是否在沙盒中运行? |
输入 | 此过程可以接受所有人、本地帐户还是仅限管理员的输入? |
验证 | 此过程如何分析、处理和接受输入? |
身份验证 | 此过程是否依赖于 Azure Active Directory 进行身份验证? 如果不是,此过程依赖于什么进行身份验证? |
授权 | 它是否依赖于访问控制列表 (ACL) 进行授权? 如果不是,此过程依赖于什么进行授权? |
知识检查
- 以下哪一项操作最能描述过程?
A. Web 门户要求用户提供其凭据。
B. 缓存为用户存储与服务相关的 Cookie。
C. 第三方 API 向其请求者发送请求的数据。
参考答案:
A
解释:A. 门户将处理用户输入,并将其发送到过程的下一部分。B. 存储数据的行为是与数据存储相关的事件。C. 传输数据的行为是与数据流相关的事件。
数据存储 - 存储元素
此元素用平行线表示,表示临时或永久存储的数据。
示例包括:
- 使用浏览器缓存来存储与用户会话相关的数据
- 向数据库添加安全日志事件
何时使用数据存储元素
- 在每次将数据存储在 Azure DB 或本地缓存等位置时
- 如果要在两个数据存储之间建立通信,请不要忘记在它们之间添加进程
- 数据存储和外部实体都可启动数据流,因此请验证这两者中的任意一个是否已就绪
- 确保将数据后期处理包含在内,例如 Azure Analytics 等分析服务。 此过程经常被忽略。
包含上下文
在每个数据存储元素中包含以下上下文:
上下文 | 问题 |
类型 | 系统是否使用 Azure SQL、Cookie、本地或其他某种类型的存储? 如果是,系统使用的是哪种存储? |
功能 | 如何使用存储? 它是否用于共享数据、存储备份、安全日志、凭据和机密? |
权限级别 | 如何实现访问控制? 拥有读写权限的人员有哪些? |
其他控制 | 数据是否加密? 磁盘是否加密? 是否使用数字签名? |
知识检查
- 以下哪一项操作最能描述数据存储?
A. Web 门户要求用户提供其凭据
B. 缓存为用户存储与服务相关的 Cookie。
C. 第三方 API 向其请求者发送请求的数据。
参考答案:
B
解释:A. 处理输入和输出的行为是与过程相关的事件。B. 存储数据的行为是与数据存储相关的事件。C. 传输数据的行为是与数据流相关的事件。
外部实体 - 无控制元素
外部实体元素由正方形表示,外部实体可以是过程、数据存储,甚至是直接控制之外的完整系统。
示例包括:
- 与服务交互的用户
- 与第三方身份验证服务紧密集成
- 组织内由其他团队创建的服务
何时使用外部实体元素
- 在要表示不能直接修改的内容时
- 数据存储和外部实体都可启动数据流,因此请验证这两者中的任意一个是否已就绪
包含上下文
在每个外部实体元素中包含以下上下文:
上下文 | 问题 |
源 | 实体是内部实体还是外部实体? |
类型 | 实体是用户、服务提供商还是 Web 服务? |
身份验证 | 此过程是否依赖于 Azure Active Directory 进行身份验证? 如果不是,此过程依赖于什么进行身份验证? |
授权 | 它是否依赖于访问控制列表 (ACL) 进行授权? 如果不是,此过程依赖于什么进行授权? |
知识检查
- 以下哪一项操作最准确地描述了外部实体?
A. Web 门户要求用户提供其凭据。
B. 缓存为用户存储与服务相关的 Cookie。
C. 第三方 API 向其请求者发送请求的数据。
参考答案:
C
解释:A. 处理输入和输出的行为是与过程相关的事件。B. 存储数据的行为是与数据存储相关的事件。C. 传输数据的行为是与数据流相关的事件。 这 C 答案的解释好像有点问题?应该解释为 第三方 API 向请求者启动了数据流?
数据流 - 传输元素中的数据
元素之间的数据移动用方向箭头表示,用于指示数据源和目标之间的通信。
示例包括:
- 用户提交的用于访问服务的凭据
- 过程发出的向数据存储添加项的请求
何时使用数据流元素
- 在每个元素交互之间
- 调出正在传输的数据类型,并包括其传输方式
- 在大多数情况下,包括对每个请求的响应
包含上下文
包含每个数据流元素的以下上下文:
上下文 | 问题 |
描述 | 数据流是否传递会话令牌、SQL 字符串或用户凭据? 如果不是,那么数据流传递哪些内容? |
协议 | 流使用 HTTPS 还是 SOAP? 如果都不是,那么流使用的是什么协议? |
流序列 | 系统是否枚举数据流以便更容易遵循流序列? |
类型 | 数据流中包含哪些类型的数据? Cookie? XML? SOAP 有效负载? REST 有效负载? JSON 有效负载? |
其他控制 | 数据流是否启用了伪造保护? 是否启用了其他安全标志? |
身份验证 | 此过程是否依赖于 Azure Active Directory 进行身份验证? 如果不是,此过程依赖于什么进行身份验证? |
授权 | 它是否依赖于访问控制列表 (ACL) 进行授权? 如果不是,此过程依赖于什么进行授权? |
知识检查
- 以下哪一项操作最能描述数据流?
A. 用户凭据从过程传输到身份验证服务提供商。
B. 存储会话令牌以供以后使用。
C. 第三方 API 处理服务分析请求。
参考答案:
A
解释:A. 传输数据的行为是与数据流相关的事件。B. 存储数据的行为是与数据存储相关的事件。C. 处理数据的行为是与过程相关的事件。
信任边界 - 信任区域更改元素
信任边界框
信任边界线
信任边界用虚线或方框表示,用于描述跨不同信任区域级别的数据流。
示例包括:
- 防火墙
- 与第三方服务的连接
- 系统的某些部分仅对管理员可用
| 信任区域不断变化的区域最易受到攻击者的攻击,应谨慎设计此类区域。
Microsoft 已预定义了一些供工程师内部使用的信任区域要求。你能清楚地确定要应用哪些边界。对于 Microsoft 的员工,请与安全团队联系以了解详细信息。
何时使用信任边界元素
关于信任边界,需要记住以下几个要点:
- 包含信任边界以处理跨不同信任区域的数据流
- 信任边界线用于表示跨大型环境(例如 Internet)的数据流
- 信任边界框表示小型环境,例如沙盒环境和企业网络
包含上下文
在每个信任边界元素中包含以下上下文:
上下文 | 问题 |
描述 | 公司网络边界?Internet? Azure 订阅? |
知识检查
- 以下哪一项操作最能描述跨信任边界的数据?
A. 用户发送到托管在 Azure 上的 Web 服务的数据。
B. 在同一 Azure 订阅下,从 Web 服务发送到 Azure 上的数据存储的数据。
C. 从数据存储发送到 Azure 上同一租户下的进程的数据。
参考答案:
A
解释:A. 将数据从不受信任的区域传输到受信任区域的行为跨越了信任边界。B. 从同一受信任区域内的资源传输数据的行为不会跨越信任边界。C. 从同一受信任区域内的资源传输数据的行为不会跨越信任边界。
小结
数据流关系图是系统的图形表示形式,它应包含每个适用的过程、数据存储、外部实体、数据流和信任边界。
本模块涵盖了以下内容:
- 区分了每个元素的形状和功能
- 了解了在创建数据流关系图时元素的正确上下文
模块3 | 提供具有适当深度层的上下文
介绍
工程师利用威胁建模能够以图形方式向他人描述系统。 它创建了一个共同的基础,并实现了更加集中的安全对话。
深度层的重要性
根据要构建的系统和所需的上下文,威胁模型可能变得太复杂或级别太高。
数据流关系图深度层可帮助你了解要包含多少上下文以及何时使用它们。
| 请与同事和安全团队联系,选择适当的深度层。 也可以将此模块用作参考。
学习目标
在本模块中,你将能够:
- 了解数据流关系图深度层之间的差异
- 了解何时使用每个层
| 无必备知识即可学习
数据流关系图深度层
数据流关系图深度层可帮助你确定要成功进行威胁建模练习应包括多少上下文。 有多个因素可帮助确定要了解的深度。
每个系统都应该大致了解它们的工作方式。 大多数系统应该具有附加的数据流关系图,这些关系图侧重于需要仔细研究的系统部分。
示例包括:
- 分析高度敏感数据的过程
- 第三方身份验证系统
威胁建模中大致使用了四个深度层:
层 | 描述 |
0 | 对于所有系统都是必需的,并且包含主要系统部分。 |
1 | 对于大多数系统是必需的,并且包含每个系统部分的其他关系图。 |
2 | 对于高度敏感的系统是必需的,并且包含系统子部分的其他关系图。 |
3 | 对于关键级别系统或内核级别系统是必需的,并且包含每个过程的其他关系图。 |
我们将在接下来的几个单元中介绍各个深度层。
第 0 层 - 系统层
数据流关系图的系统层是任何系统的起点,因此必须为所有系统创建系统层。
目标:表示主要的系统部分(具有足够的上下文),可帮助你了解其工作原理及彼此交互方式。
系统层关系图应容纳在一个页面中。 它还应只包含系统处理的主要过程。 提供尽可能多的上下文,并清楚标记每个元素,以便任何人都能理解它的工作方式。
| 系统层也称为上下文层。
何时使用系统层
你创建的每个系统都需要系统层。 高级别的上下文可以帮助任何人深入了解系统,从而参与更有意义的讨论。
深入了解系统部分
在大多数情况下,系统部分需要进行更深入的研究,因为它们会带来风险。
示例包括:
- 任何新系统都会给环境带来未知风险
- 新的分析程序、协议和文件格式
- 新的身份验证和授权机制
- 新的机密存储或加密算法
- 与第三方身份验证系统(例如 Facebook)集成
- 主要功能所需的提升权限
- 所需的未加密信道
如果是这种情况,请为每个系统部分创建其他数据流关系图。 执行以下步骤:
步骤 | 指南 |
1 | 使用清晰的描述标签创建一个过程元素,例如“Web 服务名称”。 |
2 | 创建一个新文件,并完全按照描述标签为其命名。 |
3 | 仅将数据流关系图侧重于要“放大”的系统部分。 |
结果将获得过程层(称为第 1 层)中的一系列数据流关系图。
知识检查
- 第 0 层通常被称为什么?
A. 上下文层。
B. 过程层。
C. 子过程层。
参考答案:
A
解释:A. 此层是任何系统的起点。 也称为系统层。B. 此层侧重于每个系统部分。C. 此层侧重于特定系统部分的系统子部分。
第 1 层 - 过程层
数据流关系图的过程层是第二层且应该用于大多数系统。 此层的数据流关系图包含单独的数据流关系图,这些关系图详细介绍每个系统部分。
目标:表示次要的系统部分(具有足够的上下文),可帮助你了解其工作原理及彼此交互方式。
与系统层相似,过程层中的数据流关系图应容纳在一个页面中,并包含其各自系统部分的所有过程。
| 大多数数据流关系图都需要过程级别深度层才能进行正确评估。
何时使用过程层
对每个系统都使用过程层,尤其是在处理敏感数据时。 具有敏感数据的系统遭受攻击的风险更高。 此级别的上下文可帮助你找出威胁以及更有效地降低或消除风险的方法。
深入了解系统部分
在某些情况下,由于系统部分的敏感性和风险增加,可能需要更精细的上下文。 通过转到此层,可以更好地评估威胁和风险降低策略。 遵循系统层中的相同规则。
步骤 | 指南 |
1 | 使用清晰的描述标签创建一个过程元素,例如“Web 服务工作进程名称”。 |
2 | 创建一个新文件,并完全按照描述标签为其命名,命名采用类似路径的结构,例如“Web 服务名称 - Web 服务工作进程名称”。 |
3 | 仅将数据流关系图侧重于要“放大”的系统子部分。 |
结果将获得子过程层(称为第 2 层)中的一系列数据流关系图。
{% note green, %}
知识检查
- 大多数应用程序属于哪一层?
A. 上下文层。
B. 过程层。
C. 子过程层。
参考答案:
B
解释:A. 此层是任何系统的起点。 也称为系统层。B. 此层侧重于每个系统部分。C. 此层侧重于特定系统部分的系统子部分。
第 2 层 - 子过程层
数据流关系图子过程是第三层。 每当在创建高度敏感的系统时就应使用该层。 此层的数据流关系图包含单独的数据流关系图,这些关系图分别详细介绍每个系统子部分。
目标:表示系统子部分(具有足够的上下文),可帮助你了解其工作原理及彼此交互方式。
与过程层相似,系统子过程层中的数据流关系图应容纳在一个页面中,并包含其各自系统子部分的所有过程。
| 请与你的团队核对以确认是否需要此深度级别。
何时使用子过程层
将子过程层用于组织认为比较关键的系统。 系统子部分中的漏洞可能会使整个系统、客户和组织面临重大风险。
示例包括以下系统:
- 在安全环境中使用的系统
- 处理敏感数据的系统
- 具有高风险评分的系统
深入了解系统子部分
任何需要更深入研究的系统子部分都应遵循过程层中的相同规则,并具有各自独立的数据流关系图。 通过较低级别的视图,用户可以“放大”和“缩小”系统,以展现尽可能多的上下文并达到更佳的清晰度。 方法如下:
步骤 | 指南 |
1 | 使用清晰的描述标签创建一个过程元素,例如“输入分析程序名称”。 |
2 | 创建一个新文件,并使用与描述标签完全相同的名称为其命名,命名采用树状结构,例如“Web 服务名称 - Web 服务工作进程名称 - 输入分析程序名称”。 |
3 | 仅将数据流关系图侧重于要“放大”的较低级别的系统子部分。 |
结果将得到较低级别层(称为第 3 层)中的一系列数据流关系图。
| 类似路径的文件命名结构有助于区分不同的级别。
第 3 层 - 较低级别层
低级别层是最后一层,应在创建内核级别系统或关键级别系统时使用。 此层的数据流关系图包含单独的数据流关系图,这些关系图详细介绍每个低级别系统子部分。
目标:表示低级别系统子部分(具有足够的上下文),可帮助你了解其工作原理及彼此交互方式。
与过程层相似,系统子过程层中的数据流关系图应容纳在一个页面中,并包含其各自系统子部分的所有过程。
| 请与你的团队核对以确认是否需要此深度级别。
何时使用低级别层
高度关键级别系统和内核级别的系统应在此层进行威胁建模。 数据流关系图应详细描述每个子过程。 此外,通常只为一个子过程进行多轮安全检查。
按照前面各层中的步骤操作,将每个关系图追溯到各自的系统部分。
小结
摘要
工程师利用威胁建模能够以图形方式向他人描述系统。 它创建了一个共同的基础,并实现了更加集中的安全对话。
但是,根据要构建的系统和所需的上下文,威胁模型可能变得太复杂或级别太高。
在本模块中,你了解了如何确定问题的优先级,以及如何根据类型和功能应用恰当的安全控制层。
本模块涵盖了以下内容:
- 了解了数据流关系图深度层之间的差异
- 了解了何时使用每个层
| 你知道吗? 除了这四个层之外,你还可以根据用户角色创建关系图,以帮助找出身份验证和授权方面的缺陷。 据 OWASP 等信息源的报道,这些事故是目前各个组织面临的最大安全问题,因此,根据适用的角色应用威胁模型可以增强整个系统的安全性并帮助保护客户。
知识检查
- 以下哪条陈述概括了在威胁建模阶段提早定义上下文深度层的重要性
A. 这样我可以收集所有使用的外部组件的详细信息。
B. 这样做可以帮助我根据要求和期望生成恰当级别的上下文。
C. 这样做有助于在进行安全评审之前找出所有相关威胁。
参考答案:
B
解释:A. 该陈述描述了设计阶段的一部分,但未定义上下文深度层的重要性。B. 此陈述阐明了在创建数据流关系图之前设置适当上下文级别的重要性。C. 此陈述描述了中断阶段的一部分,该阶段发生在创建数据流之后。
模块4 | 处理数据流关系图关注适当的威胁模型
威胁建模是一种有效的技术,可帮助你确定威胁以及找到降低风险的方法。 你可以选择重点关注发现需要保护的方面或者攻击者在系统中的行为方式。
简介
重点关注重要方面
关注适当的方面可以帮助你定制威胁建模练习,以得出优秀的效果。
示例包括:
- 设计文件共享应用程序,并专注于保护其进程、数据存储和数据流。
- 设计文件共享应用程序,并专注于深入了解攻击者。
- 包括攻击者的动机以及可能用于攻击应用程序的方式
在此模块中,你将了解执行针对系统的威胁建模练习的含义。 还会了解针对系统、资产和攻击者的方法之间的大概差异。
学习目标
在本模块中,你将能够:
- 定义针对系统的威胁建模练习
- 说明针对系统、资产和攻击者的方法之间的大概差异
| 无必备知识即可学习
威胁建模针对性方法
威胁建模是一种很好的技术,可帮助你在开发生命周期的更早阶段发现问题。 选择侧重点恰当的方法有助于定制威胁建模练习。 你可以发现更多可对其执行操作的威胁和解决威胁的方法。
侧重系统的方法
目的是保护整个系统。 关注每个过程、数据存储、数据流、外部实体和信任边界。 利用此信息,可用选择安全控制措施来帮助保护系统。
此框架有助于分析系统及其对其他资产的影响,具体包括:
资产类型 | 示例 |
逻辑 | 源代码、API 和逻辑安全控制措施 |
物理 | 服务器和物理安全控制资产 |
侧重攻击者的方法
你可以着眼于攻击者、其动机、方法,以及他们能够在系统中造成破坏的所有方式。 这种方法关注入口点,而不是整个系统。
使用此方法,你可以专注于包含系统高度机密数据的关键资产。 重点是保护这些资产,而不是整个系统。
侧重资产的方法
评估每项资产的风险。 此方法基于分类数据处理等功能确定关键资产,主要专注于保护这些资产。
| Microsoft 工程师致力于保护系统。 渗透测试团队致力于保护系统和了解攻击者。
针对系统的和其他方面的方法
侧重系统的方法的重要性
使用 Azure 对用户进行身份验证是很好的做法。 了解它的工作原理,了解它是如何与系统的每个部分进行交互,可以更好地避免产生实现部署后的未知风险。
毕竟,威胁建模的目标是验证之前做出的假设,确定潜在的威胁,并在开发生命周期中更早地降低风险。
侧重系统的方法的实践示例
让我们以文件共享应用程序为例。 在这种情况下,查看数据流关系图时,可能会看到以下流:
- 用户请求访问应用程序
- 身份验证流启动
- 用户与其他用户共享文件
此方法分析并保护每个元素, 例如用户、Web 服务、身份验证服务、数据存储、Internet 与 Azure 之间的信任边界以及数据流。
| 针对系统的方法包含其他一些方法,但可能需要一一试用才能获得更精细的效果。
知识检查
- 针对系统的方法有什么好处?
A. 使用此方法,你可以一次专注一个关键资产,以帮助确定所有潜在威胁以及降低或消除风险的方法。
B. 此方法可提供潜在攻击者的信息,其中包括其手段、动机和行动计划。
C. 此方法可让你专注于改进系统处理用户和数据的方法。 它还会验证关于通过服务使用的物理和逻辑资产的安全假设。
- 针对攻击者的方法有什么好处?
A. 使用此方法,你可以一次专注一个关键资产,以识别所有潜在威胁以及降低风险的方法。
B. 此方法可提供潜在攻击者的信息,其中包括其手段、动机和行动计划。
C. 此方法可让你专注于改进系统处理用户和数据的方法。 它还会验证关于通过服务使用的物理和逻辑资产的安全假设。
参考答案:
- C
- B
解释:
- A. 此条目对应于针对资产的方法。B. 此条目对应于针对攻击者的方法。C. 针对系统的方法考察整个系统,而不仅仅是其中的某些部分。
- A. 此条目对应于针对资产的方法。B. 针对攻击者的方法基于攻击者及其攻击计划。C. 此条目描述针对系统的方法。
小结
威胁建模是一种有效的技术,可帮助你确定威胁以及降低或消除风险的方法。 你可以侧重于发现需要保护的方面或者攻击者在系统中的行为方式。
你了解了执行针对系统的威胁建模练习的含义。 还了解了针对系统、资产和攻击者的方法之间的差异。
在本模块中,你已经学习了以下内容:
- 定义了针对系统的威胁建模练习
- 说明了针对系统、资产和攻击者的方法之间的大概差异
模块5 | 使用框架识别威胁并找到减少或消除风险的方法
介绍
威胁建模框架可帮助你生成潜在威胁的列表,并找到降低或消除风险的方法。
你只需具备信息安全方面的应用知识,框架就可为你列出威胁的主要类别,以确保它们得到适当的处理。
何时使用框架
此框架应适用于为新系统或现有系统创建的每个数据流关系图。
| 目的是在开发生命周期的早期尽可能多地发现并修复问题。 等待时间越长,客户的风险就越高。
预期结果
框架将为你呈现六个主要威胁类别,每个类别下有无数个潜在威胁。
通过该框架,你将能够回答以下问题:
- 通信的双方是否都通过了身份验证?
- 如何得知某人无法更改传输中的数据、正在使用的数据或静态数据?
- 每个操作是否可以绑定到标识?
- 如何得知某人无法看到传输中的数据、正在使用的数据或静态数据?
- 系统中是否存在资源受限的区域?
- 如何得知某人可以执行此操作?
在本模块中,你将了解每种威胁类别及其相应的安全控制。
学习目标
在本模块中,你将能够:
- 讨论威胁建模框架中的每个威胁类别
- 了解有助于降低或消除风险的安全控制
| 无必备知识即可学习 (
威胁建模框架
威胁建模框架查看数据流关系图中的每个元素(包括它们的交互)。 这有助于发现潜在威胁和找到降低或消除风险的方式。
威胁类别
Microsoft 工程师使用 STRIDE 框架中的六个主要威胁类别来发现安全设计问题:
Category | 说明 |
欺骗 | 冒充某人或某物 |
篡改 | 未经授权更改数据 |
否认性 | 不宣称对执行的操作负责 |
信息泄露 | 未经许可查看数据 |
拒绝服务 | 系统繁忙 |
权限提升 | 拥有本不应该拥有的权限 |
安全控制类别
每个威胁类别都与安全控制关联,以帮助你降低或消除风险
类别 | 安全控制 | 描述 |
欺骗 | 身份验证 | 其身份是否如其所述 |
篡改 | 完整性 | 防止恶意修改数据 |
否认性 | 不可否认性 | 操作与用户绑定 |
信息泄露 | 机密性 | 保护数据免遭意外泄露 |
拒绝服务 | 可用性 | 系统适当处理所有请求 |
特权提升 | 授权 | 用户拥有执行请求的适当权限 |
我们在接下来的几个单元中来了解一下各种威胁类别。
欺骗 - 冒充某人或某物
当恶意人员或程序成功地冒充用户或系统进行恶意活动时,就会发生欺骗。
示例包括:
- 攻击者通过看似合法的帐户向用户发送一封带有恶意链接和附件的电子邮件,以捕获用户的凭据、数据和设备访问权限
- 攻击者欺骗 SSID 和 IP 地址,同时使用开放且原本不安全的 TCP/IP 协议向受害者发送恶意的有效负载
可能面临欺骗攻击风险的元素和交互
元素
交互
如何防止欺骗攻击
身份验证验证了用户和系统的身份是否属实。
示例包括:
- 发送和接收使用数字签名进行签名的消息,以验证来源并确保消息完整性
- 使用 SSL/TLS 保护数据传输,以加密信息源和目标之间的流量
- 使用具有时效有限的令牌、密码或多重身份验证的唯一凭据来帮助保护用户、管理员和服务帐户
用于降低或消除风险的常用安全控制
对于数据:
- 哈希
- 消息验证码
- 数字签名
对于系统:
- 用户身份验证
- Cookie 身份验证
- Kerberos
- SSL/TLS
- 证书
- IPSec
- 数字签名的数据包
{% note green, 推荐问题:是否已验证通信双方的身份? %}
知识检查
- 哪一条陈述描述了针对欺骗的安全控制?
A. 发送方对消息进行数字签名,以便接收方了解消息的来源。
B. 系统记录所有操作和用户,明确每个人的责任。
C. 系统为访问控制列表中列出的用户授予管理访问权限。
参考答案:
A
解释:A. 此消息适用于欺骗。B. 这条陈述适用于否认性。C. 这条陈述适用于篡改、信息泄露、拒绝服务和权限提升。
篡改 - 未经授权更改数据
当恶意攻击者未经授权在系统中读取、修改、删除或插入数据时,就会发生篡改。
示例包括:
- 修改临时存储在缓存中、通过网络发送或永久存储在数据库中的数据以破坏数据完整性
- 将恶意有效负载插入浏览器缓存中,以导致进程和数据存储中的行为异常
- 通过弱 API 调用处理修改内存,导致崩溃和泄漏敏感错误消息
- 将数据重定向到被入侵的计算机以接管系统
- 诱使用户连接网络或下载文件,从而授予他们流量和设备访问权限(与欺骗结合使用)
可能面临篡改攻击风险的元素和交互
元素
交互
如何防止篡改
完整性防止恶意修改数据。 示例包括:
- 验证输入以防止处理恶意有效负载和错误处理意外行为
- 使用数字签名对消息进行签名,以确保消息不被篡改
- 使用访问控制列表应用权限
- 使用 SSL/TLS 保护传输
- 创建 IPSec 隧道,以保护终结点之间的通信
用于降低或消除风险的常用安全控制
- 操作系统完整性控制
- 访问控制列表 (ACL)
- 数字签名
- 消息验证码
| 推荐问题:如何得知某人无法更改传输中的数据或静态数据?
知识检查
- 哪一条陈述描述了针对篡改的安全控制?
A. 发件人对电子邮件附件进行加密,以便让收件人知道电子邮件由何人所发。
B. 系统记录所有操作和用户,明确每个人的责任。
C. 系统为访问控制列表中列出的用户授予管理访问权限。
参考答案:
C
解释:A. 加密附件是不够的。 对消息进行数字签名,以确保不会发生篡改。B. 这条陈述适用于否认性。C. 这条陈述适用于篡改、信息泄露、拒绝服务和权限提升。
否认性 - 不宣称对执行的操作负责
当有人出于恶意或无意采取某个操作,但声明其他操作时,就会发生否认性。
示例包括:
- 拒绝修改包含敏感操作的日志
- 使用其他人的帐户以避免被抓
- 声称没有删除数据库记录
| 系统日志是攻击者的金矿,不仅可用于操纵,而且可用于收集有关用户、环境和弱点的数据。
可能面临否认性攻击风险的元素和交互
元素
交互
如何防止否认性攻击
不可否认性通过创建和保护安全日志来确保每个操作都可以追溯到其来源。
用于降低或消除风险的常用安全控制
- 强身份验证
- 安全日志记录和监视
- 数字签名
- 安全时间戳
- 受信任的第三方
| 推荐问题:是否可以将每个操作与身份绑定?
知识检查
- 哪一条陈述描述了针对否认性的安全控制?
A. 发送方对消息进行数字签名,以便接收方了解消息的来源。
B. 系统记录所有操作和用户,明确每个人的责任。
C. 系统为访问控制列表中列出的用户授予管理访问权限。
参考答案:
B
解释:A. 此消息适用于欺骗。B. 这条陈述适用于否认性。C. 这条陈述适用于篡改、信息泄露、拒绝服务和权限提升。
信息泄漏 - 查看不应查看的数据
向未经授权的个人公开敏感数据时,会发生信息泄漏。 无论是在有意或无意的情况下,都有可能发生信息泄露。
示例包括:
- 系统通过错误消息泄露敏感数据
- 用户访问安全控制较弱的未授权文档和文件夹
- 用户访问流经非安全网络的数据
可能面临信息泄漏风险的元素和交互
元素
交互
如何防止信息泄漏
机密性确保数据受到保护。
示例包括:
- 应用访问控制列表,以确保合适的用户可以访问适当的数据
- 加密静态数据、传输中数据和正在使用的数据
- 强制实施 SSL/TLS 以保护传输
- 使用 IPSec 隧道保护跨终结点的通信
用于降低或消除风险的常用安全控制
- 加密
- 访问控制列表 (ACL)
| 推荐问题:是否可以确保没有人能查看我的传输中的数据和静态数据?
知识检查
- 哪一条陈述描述了针对信息泄漏的安全控制?
A. 发送方对消息进行数字签名,以便接收方了解消息的来源。
B. 系统为访问控制列表中列出的用户授予管理访问权限。
C. 系统记录所有操作和用户,明确每个人的责任。
参考答案:
A
解释:A. 此消息适用于欺骗。B. 这条陈述适用于篡改、信息泄露、拒绝服务和权限提升。C. 这条陈述适用于否认性。
拒绝服务 - 系统繁忙
当攻击者导致系统不可用时,将发生拒绝服务。
示例包括:
- 向网络发送大量请求
- 占用内存和 CPU 进程
- 请求数量过多导致数据存储崩溃
可能面临拒绝服务风险的元素和交互
元素
交互
如何防止拒绝服务
可用性确保系统为用户启动且正常运行。 示例包括:
- 使用网络访问控制列表控制传入和传出的流量
- 使用弹性资源管理不断增加或减少的使用量
- 监视系统以检测是否出现异常
- 启用操作系统标志来处理内存和 CPU 进程
用于降低或消除风险的常用安全控制
- 访问控制列表 (ACL)
- 筛选
- 配额
- 授权
- 高可用性
| 推荐问题:我的服务在某些地区是否会被限制资源?
知识检查
- 哪一条陈述描述了针对拒绝服务的安全控制?
A. 发送方对消息进行数字签名,以便接收方了解消息的来源。
B. 系统记录所有操作和用户,明确每个人的责任。
C. 系统依靠弹性资源来处理接收到的更多请求。
参考答案:
C
解释:A. 此消息适用于欺骗。B. 这条陈述适用于否认性C. 这条陈述适用于拒绝服务。
权限提升 - 拥有本不应该有用的权限
个人未经许可访问资源时,就会发生权限提升。 示例包括:
- 利用输入处理逻辑或内存中的弱点来提取数据
- 查找并使用特权帐户破坏服务(与欺骗和篡改威胁结合使用)
可能面临权限提升 风险的元素和交互
元素
交互
如何防止权限提升
授权确保用户拥有适当的权限。 示例包括:
- 实现授权机制以验证对数据和资源的权限
- 应用安全控制,以使用最少的访问权限运行服务
- 监视访问以检测异常和未经授权的访问尝试。
用于降低或消除风险的常用安全控制
- 访问控制列表 (ACL)
- 基于角色的访问控制 (RBAC)
- 基于组的访问
- 权限
- 输入验证
| 推荐问题:如何得知用户可以执行此操作?
知识检查
- 哪一条陈述描述了针对权限提升的安全控制?
A. 系统使用尽可能少的权限运行进程。
B. 发送方对消息进行数字签名,以便接收方了解消息的来源。
C. 系统记录所有操作和用户,明确每个人的责任。
参考答案:
A
解释:A. 这条陈述适用于权限提升。B. 此消息适用于欺骗。C. 这条陈述适用于否认性。
小结
摘要
威胁建模框架可帮助你生成潜在威胁的列表,并找到降低或消除系统风险的方法。 了解每种威胁类别及其相应的安全控制。
本模块涵盖了以下内容:
- 讨论了威胁建模框架中的每种威胁类别
- 了解了有助于降低或消除风险的安全控制
| 你知道吗? 可以使用许多其他框架来实现不同的目标。 例如,渗透测试团队可将 LINDDUN 用于隐私威胁和攻击树。 攻击树有助于通过“假定违规”思维来确定攻击可能发生的方式。
了解详细信息
- LINDDUN - 一种隐私威胁建模方法,支持分析人员系统地查找和解决软件体系结构中的隐私威胁。
- 网络终止链 - 介绍典型的工作流,包括攻击者用于渗入组织网络和系统的技术、策略和过程。
- 补上一个微软安全博客 ( https://www.microsoft.com/security/blog/
模块6 | 设置问题的优先级并应用安全控制措施
介绍
威胁建模框架可以帮助你生成威胁列表和降低风险的方法,但不会为你确定其优先级。
此外,它不会基于安全控制措施的类型和功能提供分层建议,因此更难确定要实现哪些控制措施。
确实问题的优先级
确定问题的优先级是威胁建模中一个重要的部分。 在资源有限的情况下,它可以帮助将资源分配给最关键的问题。
示例包括:
- 必须选择是要实现记录所有管理操作的功能,还是使用 SSL/TLS 对流量进行加密
- 确定是先实现访问控制列表,还是先增强系统的输入验证过程
何时设置优先级
根据每个问题的风险因素对其指定优先级。 此外,选择可与其他措施联用的安全控制措施,可帮助为你的系统提供分层安全保护机制。
此过程可能需要一段时间才能完成。 还需要同事和安全团队的帮助。 请留出足够的时间来与其协作。
学习目标
在本模块中,你将能够:
- 对问题分配优先级
- 对安全控制进行分类
- 了解每个安全控制措施类型和功能
| 无必备知识即可学习
问题优先级、安全控制措施类型和功能
威胁建模练习可帮助你发现一些问题,有时还会有意想不到的收获。 缺少优先级可能会让工程师感到不知所措,无法确定要首先解决哪些问题。
方法
首先,确定问题对于系统的重要程度。 然后,选择有利于以最低的成本提供最大程度保护的安全控制措施。
确定安全问题的优先级
根据风险严重性来确定安全问题的优先级。 各组织的标签可能不同。 但通常会根据威胁被攻击者利用时带来的风险影响,以从严重到低风险的模式设置优先级标签。
类型和功能
安全控制具有不同的类型和功能。
有三个主要的类别可帮助你关注安全性的三种形式。
示例包括:
- 物理:摄像头、徽章和围栏
- 技术:加密、虚拟防火墙和防病毒软件
- 管理:策略、法规和书面要求
功能的意义在于针对潜在威胁每个阶段帮助保护系统。
示例包括:
- 用锁防止入侵
- 安装摄像头来检测入侵
- 制定入侵响应计划
- 修复由入侵导致的破坏
- 使用标志和其他安全控制措施防患于未然
在接下来的几个单元中,我们将了解优先级、类型和功能。
设置安全问题的优先级
生成包含降低或消除风险的方法的威胁列表。 然后,与同事合作分配优先级。
选择优先级框架
优先级练习应遵循组织创建的内部安全 bug 栏。
Microsoft 工程师使用的内部 bug 栏类似于下表,供你参考:
Microsoft 工程师使用的内部 bug 栏类似于下表,供你参考:
知识检查
- 可能会对用户造成严重影响的问题通常属于哪个优先级?
A. 重要说明。
B. 严重。
C. 适中。
参考答案:
A
解释:A. 可能会对系统用户造成严重影响。 示例包括在没有已知的解决方法时显示系统不可用。B. 可能会对系统用户造成严重影响。 示例包括涉及敏感信息泄漏的行为和需要隐私和法律参与的威胁。C. 可能对系统用户造成中等程度的影响。 示例包括存在可能的解决方法的可用性问题。 (Emmm 感觉 B 也行?
安全控制措施类型和功能
确定每个问题的优先级后,请查看安全控制措施列表,并选择对你的系统最有益的选项。
最有益的安全控制措施一般会跨多个 STRIDE 类别。 在大多数情况下,实现这些步骤的成本相对较低。
安全控制措施类型
评估每项安全控制措施时,你会注意到它们属于以下类型之一:
| 根据系统,你需要应用各种类型的安全控制措施,帮助建立多层保护以提升系统的安全性。
安全控制功能
除了这三种主要类型外,安全控制还具有五个不同的功能,可帮助你应用多个安全层。
函数 | 说明 | 示例 |
预防 | 此策略是否有助于降低此威胁的概率或影响? | 锁定、防火墙、数据分类。 |
检测 | 此策略是否有助于识别所发生的系统攻击? | 监视、诱捕系统、审核日志。 |
纠正 | 此策略是否有助于控制如何响应传入攻击? | 物理修复、系统修补程序、事件响应计划。 |
恢复 | 此风险缓解措施是否有助于服务从攻击中恢复? | 热站点、系统备份、灾难恢复计划。 |
阻碍 | 此风险缓解措施是否有助于阻止攻击者访问系统? | 时限、最低权限、授权使用策略。 |
| 根据问题的优先级,可以考虑在系统被破坏之前、破坏过程中和破坏之后使用多项安全控制功能来保护它。
如何综合利用所有信息
它们与安全控制措施类型共同形成一个矩阵,可帮助你做出正确的选择。 以下是一些示例:
功能 | 物理 | 逻辑 | 管理 |
预防 | 锁定 | 防火墙 | 数据分类 |
检测 | 监视 | 诱捕系统 | 审核日志 |
纠正 | 物理修复 | 系统修补程序 | 事件响应计划 |
恢复 | 热站点 | 系统备份 | 灾难恢复计划 |
阻碍 | 时限 | 最低权限 | 授权使用策略 |
知识检查
- 管理安全控制措施有什么示例?
A. 创建事件响应计划。
B. 安装新防火墙。
C. 在入口添加徽章扫描仪。
- 管理安全控制措施有什么示例?
A. 创建事件响应计划。
B. 安装新防火墙。
C. 在入口添加徽章扫描仪。
参考答案:
- A
解释:
- A. 此条目适用于管理型安全控制措施。B. 此条目适用于逻辑型(可能还有物理型)安全控制措施。C. 此条目适用于物理型安全控制措施。
- A. 此条目适用于预防性安全控制功能。B. 此条目适用于检测性安全控制功能。C. 此条目适用于矫正性安全控制功能。
小结
威胁建模框架会为你提供威胁列表,并提供降低或消除风险的方法。 但是,它不会为你确定威胁的优先级。 此外,没有基于其类型和功能的分层安全控制建议。
你了解了如何确定问题的优先级,以及如何根据类型和功能应用恰当的安全控制层。
在本模块中,你已经学习了以下内容:
- 了解了如何确定问题的优先级
- 分类安全控制
- 了解每个型安全控制措施和功能
模块7 | 使用推荐工具创建数据流图
简介
数据流关系图是系统工作方式的图形化表示形式。 这包括所有数据存储、进程、外部实体、信任边界和数据流。
如何创建数据流关系图
你可以使用任何画布(物理的或虚拟的)来创建数据流关系图。 但是,确实需要了解威胁建模的原理,才能正确地对其进行分析。
某些应用程序提供的多种工具,它们可以通过威胁生成引擎和风险降低策略,帮助你创建数据流关系图。 其他工具仅提供创建数据流关系图的功能。
目标
该学习路径的目标是让你了解威胁建模的基础知识,以便在任何地方、任何画布上进行威胁建模。
为了帮助你实现这个目标,我们会在介绍过程中推荐一些工具。
学习目标
在本模块中,你将学习以下内容:
- 详细了解了 Threat Modeling Tool
- 详细了解 Visio
| 无必备知识即可学习 (
建议的工具
威胁建模将对你的数据流关系图应用一个框架,以帮助找到降低或消除风险的威胁和方法。
某些工具可帮助你创建数据流关系图,另一些还可以帮助你进行威胁生成练习。 根据你在威胁建模方面的专业水平,其中一些工具可能会很有帮助。
详细了解 Threat Modeling Tool
在接下来的几个单元中,你将了解有关一些工具的详细信息:
- Threat Modeling Tool 提供多种工具,可用于创建数据流关系图并对其进行分析,以查找潜在威胁和风险降低策略
- 在线安装版,https://www.microsoft.com/en-us/securityengineering/sdl/threatmodeling
- 离线安装版,https://www.microsoft.com/en-us/download/details.aspx?id=49168 (2016)
- 想装其他离线版本的,Guguru 一下 就好了
microsoft threat modeling tool offline installer
- Visio 提供了一个干净的画布,帮助你创建数据流关系图
- Visio,(要钱的 打扰了
我们将在接下来的几个单元中进行介绍。
Threat Modeling Tool
Microsoft Threat Modeling Tool 由 Microsoft 发布,并获得威胁建模社区进行认可,可以帮助工程师创建数据流关系图并将 STRIDE 应用于其威胁建模工作。
Threat Modeling Tool 提供:
- 可自定义的模板
- 威胁生成引擎,其中包含威胁和风险降低策略
默认模板称为“SDL TM 知识库”,提供一组基本元素和威胁生成功能。 只要对数据流关系图和 STRIDE 有基本的了解即可使用。
STRIDE 回顾
STRIDE 是六个主要威胁类别的首字母缩写:
- 欺骗 - 冒充某人或某物
- 篡改 - 未经授权更改数据
- 否认性 - 不宣称对执行的操作负责
- 信息泄露 - 在未获得权限的情况下查看数据
- 拒绝服务 - 使系统过载
- 权限提升 - 拥有本不应拥有的权限
高级用户部分
对于更高级的用户,可以在三个主要部分对模板进行自定义。
模具
进程、外部实体、数据存储、数据流和信任边界构成了父元素。
你还可以创建子元素,以帮助为其他上下文、可操作的威胁生成和风险降低策略提供粒度。
子元素的工作原理示例
父元素提供了选择 HTTP 和 HTTPS 子元素的选项。
HTTP 应生成更多的威胁,因为篡改、信息泄露和欺骗威胁常见于未加密通道。
使用 HTTP
使用 HTTPS
如何添加元素属性
如果有必须包括在默认模板中的其他属性,可以在管理员视图中将其添加到每个元素。
当用户将该元素拖放到画布上时,将看到自己的更改。
威胁属性
使用属性可以创建为每个生成的威胁填充的字段,就像使用模具属性可以为每个元素创建字段一样。
请记住:目标是以最简单的方式获得尽可能多的上下文。
威胁属性的示例
管理员视图
添加可为你提供更多上下文和可操作步骤的字段。 示例包括:
- 问题优先级 - 了解需要首先处理哪些问题
- 超链接 - 将问题链接到联机文档
- 外部风险映射 - 通过使用可靠的第三方源(如 OWASP Top 10 和 CWE 详细信息),使用与其他组织相同的语言来描述风险
啊这,超链接和外部风险在哪 (
用户视图
Threat Modeling Tool 用户将在分析其数据流关系图时看到这些更改。
威胁和风险降低策略
这一部分是 Threat Modeling Tool 的核心。 威胁生成引擎考察独立元素和已连接的元素,以确定生成哪个威胁。
威胁生成的原理
步骤 1 - 指定源和目标
威胁生成引擎使用简单的句子来生成威胁。 示例包括:
- 目标为[元素名称]
- 源为[元素名称]
你还可以在标题和说明中使用元素名称。 格式为:“{target.Name}”或“{source.Name}”
步骤 2 - 合并源和目标
你可以精确规定如何生成威胁。 用 AND OR 运算符组合目标、源及其各个属性。 示例包括:
- target.[property name] is ‘Yes’ AND source.[property name] is ‘No’
- 流交叉[信任边界名称]
步骤 3 - 生成或忽略威胁
威胁生成引擎使用两个字段来生成或忽略威胁:
- Include - 如果在此字段中添加的句子为 true,则会生成威胁
- Exclude - 如果在此字段中添加的句子为 true,则不会生成威胁
下面是默认模板的实际示例,以便将这些步骤结合在一起:
- 威胁: 跨站点脚本
- Include: (target is [Web Server]) OR (target is [Web Application])
- Exclude: (target.[Sanitizes Output] is ‘Yes’) AND (target.[Sanitizes Input] is ‘Yes’)
仅在以下情况时才会生成上述跨站点脚本威胁:
- 进程是 Web 服务器或 Web 应用程序
- 未净化输入和输出
| “Microsoft Threat Modeling Tool 模板创建” 主题很复杂,本学习路径中不会进行充分讨论。
知识检查
- Threat Modeling Tool 不提供哪些优势?
A. 生成的威胁基于整个关系图,而不仅是每个元素或每次交互。
B. 可以更改威胁、模具和模具属性。
C. 生成每个威胁时,都会包含降低或消除风险的方法。
参考答案:
A
解释:A. 该工具仅考察各个元素和各次交互。B. 可以更改字段。C. 某些模板只包含威胁,但较新版本确实包含风险降低策略。
Visio
Visio 归为 Microsoft 所有,其功能强大,可帮助任何人创建优质的流程图和数据流关系图。
优点
Visio 提供拖放功能和关系图批注功能。 在为系统创建关系图时,这两种功能都很有用。
缺点
该应用程序不提供自动威胁建模功能。 因此,没有威胁生成引擎来帮助工程师集体讨论威胁和风险降低策略。
| 如果使用 Visio,你将负责对每个元素和交互进行手动威胁建模。
知识检查
- Visio 不提供哪些优势?
A. 使用默认模具提供拖放功能。
B. 输出一系列生成的威胁,帮助工程师集体讨论可以如何降低或消除风险。
C. 让工程师可以为数据流图表添加批注以提供服务上下文。
参考答案:
A
解释:A. 它确实提供拖放功能。B. Visio 没有威胁生成引擎。C. 它提供批注功能。
小结
你可以使用任何画布(物理的或虚拟的)来创建数据流关系图。 Microsoft 的工程师推荐几个工具来帮助你进行威胁建模。
你了解了可用于创建数据流关系图的不同工具。
在本模块中,你已经学习了以下内容:
- 详细了解了 Threat Modeling Tool
- 详细了解了 Visio
| 还有很多其他工具可以帮助你解决威胁建模需求。 其中某些工具需要付费订阅才能使用,另一些则完全开放源代码。 你甚至可以使用白板,其学习难度较低,但以威胁建模专业知识为使用前提,并且难以保存。
了解详细信息
完结撒花~ ~