Microsoft SDL-威胁建模工具Threat Modeling Tool

0x00 背景

威胁建模工具是 Microsoft 安全开发生命周期 (SDL) 的核心要素。潜在安全问题处于无需花费过多成本即可相对容易解决的阶段,软件架构师可以使用威胁建模工具提前识别这些问题。因此,它能大幅减少开发总成本。此外,我们设计该工具时考虑到了非安全专家的体验,为他们提供有关创建和分析威胁模型的清晰指导,让所有开发人员都可以更轻松地使用威胁建模。

通过使用Microsoft threat-modeling工具进行进行威胁建模

0x01 下载安装

前期准备:

  1. 需要安装netframework 4.7.1 及其以上
  2. 下载代理程序后,需要联网进行安装

软件下载安装:

https://docs.microsoft.com/zh-cn/azure/security/azure-security-threat-modeling-tool

 

 

0x02 入门指南

指导你开始使用 Microsoft SDL 威胁建模方法的过程,并演示如何使用该工具来开发优秀的威胁模型,以作为安全进程的主干。详细文档在微软官网有连接,此外可以百度:威胁建模工具Microsoft Threat Modeling Tool

入门

https://docs.microsoft.com/zh-cn/azure/security/azure-security-threat-modeling-tool-getting-started

威胁建模工具功能概述

https://docs.microsoft.com/zh-cn/azure/security/azure-security-threat-modeling-tool-feature-overview

威胁

https://docs.microsoft.com/zh-cn/azure/security/azure-security-threat-modeling-tool-threats

发行版

https://docs.microsoft.com/zh-cn/azure/security/azure-security-threat-modeling-tool-releases

 

0x03 缓解措施

威胁建模工具缓解措施根据 Web 应用程序安全框架分类,具体如下:

类别

描述

审核和日志记录

谁在何时做了什么? 审核与日志记录是指应用程序如何记录安全相关的事件

身份验证

你是谁? 身份验证是某个实体证明另一实体的身份的过程,这通常是通过用户名和密码等凭据完成的。

授权

该怎么办? 授权是指应用程序如何提供对资源和操作的访问控制

通信安全

在与谁对话? 通信安全可确保以尽量安全的方式进行所有通信

配置管理

应用程序的运行身份是什么? 它连接到哪些数据库? 如何管理应用程序? 如何保护这些设置? 配置管理是指应用程序如何处理这些操作问题

加密

如何保守机密(保密性)? 如何防止对数据或库(完整性)进行篡改? 如何针对必须强加密的随机值提供种子? 加密是指应用程序强制实施保密性和完整性

异常管理

当应用程序中的方法调用失败时,应用程序会采取什么措施? 透露的信息量有多大? 是否向最终用户返回友好的错误信息? 是否向调用方传回有用的异常信息? 应用程序是否正常失败?

输入验证

如何知道应用程序接收的输入有效且安全? 输入验证是指应用程序在进一步处理之前筛选、清理或拒绝输入。 请考虑通过入口点限制输入,通过出口点为输出编码。 是否信任数据库和文件共享等源中的数据?

敏感数据

应用程序如何处理敏感数据? 敏感数据是指应用程序如何处理必须在内存中、通过网络或在持久性存储中保护的任何数据

会话管理

应用程序如何处理和保护用户会话? 会话是指用户与 Web 应用程序之间的一系列相关交互

它可以帮助识别:

  • 最常见的错误发生在哪个位置
  • 可在哪个位置实施可行性最大的改进

因此,可以使用这些类别来重点完成并优化安全工作,以便在输入验证、身份验证和授权类别中出现最流行的安全问题时,可以从这些位置着手。 

安全框架:审核和日志记录 | 缓解措施

产品/服务

文章

Dynamics CRM

  1. 识别解决方案中的敏感实体并实现更改审核

Web 应用程序

  1. 确保在应用程序中强制实施审核与日志记录
  2. 确保实施日志轮转和分离
  3. 确保应用程序不会记录敏感的用户数据
  4. 确保对审核与日志文件限制访问
  5. 确保记录用户管理事件
  6. 确保在系统中针对滥用提供内置防御机制
  7. 在 Azure 应用服务中启用 Web 应用的诊断日志记录

数据库

  1. 确保在 SQL Server 中启用登录审核
  2. 在 Azure SQL 中启用威胁检测

Azure 存储

  1. 使用 Azure 存储分析来审核对 Azure 存储的访问

WCF

  1. 实现充分的日志记录
  2. 实现充分的审核失败处理

Web API

  1. 确保在 Web API 中强制实施审核与日志记录

IoT 现场网关

  1. 确保在现场网关中强制实施适当的审核与日志记录

IoT 云网关

  1. 确保在云网关中强制实施适当的审核与日志记录

 

安全框架:身份验证 | 缓解措施

产品/服务

文章

Web 应用程序

  1. 考虑使用标准身份验证机制向 Web 应用程序进行身份验证
  2. 应用程序必须安全处理失败的身份验证方案
  3. 启用升级或自适应的身份验证
  4. 确保适当锁定管理界面
  5. 安全实施忘记密码功能
  6. 确保实施密码和帐户策略
  7. 实施控制来防止用户名枚举

数据库

  1. 尽可能使用 Windows 身份验证连接到 SQL Server
  2. 尽可能使用 Azure Active Directory 身份验证连接到 SQL 数据库
  3. 使用 SQL 身份验证模式时,确保对 SQL Server 实施帐户和密码策略
  4. 不要在包含的数据库中使用 SQL 身份验证

Azure 事件中心

  1. 结合 SaS 令牌使用每个设备的身份验证凭据

Azure 信任边界

  1. 启用面向 Azure 管理员的多重身份验证

Service Fabric 信任边界

  1. 限制对 Service Fabric 群集的匿名访问
  2. 确保 Service Fabric 的客户端到节点证书不同于节点到节点证书
  3. 使用 AAD 在 Service Fabric 群集中对客户端进行身份验证
  4. 确保从批准的证书颁发机构 (CA) 获取 Service Fabric 证书

标识服务器

  1. 使用标识服务器支持的标准身份验证方案
  2. 使用可缩放的替代方案覆盖默认的标识服务器令牌缓存

计算机信任边界

  1. 确保部署的应用程序的二进制文件经过数字签名

WCF

  1. 连接到 WCF 中的 MSMQ 队列时启用身份验证
  2. WCF - 不要将消息 clientCredentialType 设置为 none
  3. WCF - 不要将传输 clientCredentialType 设置为 none

Web API

  1. 确保使用标准身份验证技术保护 Web API

Azure AD

  1. 使用 Azure Active Directory 支持的标准身份验证方案
  2. 使用可缩放的替代方案覆盖默认的 ADAL 令牌缓存
  3. 确保使用 TokenReplayCache 防止 ADAL 身份验证令牌重放
  4. 使用 ADAL 库来管理从 OAuth2 客户端发往 AAD(或本地 AD)的令牌请求

IoT 现场网关

  1. 对连接到现场网关的设备进行身份验证

IoT 云网关

  1. 确保对连接到云网关的设备进行身份验证
  2. 使用每个设备的身份验证凭据

Azure 存储

  1. 确保只对所需的容器和 Blob 授予匿名读取访问权限
  2. 使用 SAS 或 SAP 对 Azure 存储中的对象授予受限的访问权限

安全框架:授权 | 缓解措施

产品/服务

文章

计算机信任边界

  1. 确保配置适当的 ACL 来限制对设备中的数据进行未经授权的访问
  2. 确保将特定于用户的敏感应用程序内容存储在用户配置文件目录中
  3. 确保以最低特权运行部署的应用程序

Web 应用程序

  1. 处理业务逻辑流时有序执行步骤顺序
  2. 实施频率限制机制来防止枚举
  3. 确保实施适当的授权并遵循最低特权原则
  4. 业务逻辑和资源访问授权决策不应该基于传入的请求参数
  5. 确保不可通过强行浏览来枚举或访问内容和资源

数据库

  1. 确保使用最低特权帐户连接到数据库服务器
  2. 实施行级别安全性 RLS 来防止租户访问彼此的数据
  3. Sysadmin 角色应该只包括必要的有效用户

IoT 云网关

  1. 使用最低特权令牌连接到云网关

Azure 事件中心

  1. 使用拥有仅限发送权限的 SAS 密钥来生成设备令牌
  2. 不要使用可提供事件中心直接访问权限的访问令牌
  3. 使用拥有所需最低权限的 SAS 密钥连接到事件中心

Azure Document DB

  1. 尽可能使用资源令牌连接到 Azure Cosmos DB

Azure 信任边界

  1. 使用 RBAC 启用对 Azure 订阅的精细访问管理

Service Fabric 信任边界

  1. 使用 RBAC 限制客户端对群集操作的访问

Dynamics CRM

  1. 根据需要执行安全建模并使用字段级别安全性

Dynamics CRM 门户

  1. 执行门户帐户的安全建模并注意门户的安全模型不同于 CRM 的其他组件

Azure 存储

  1. 针对 Azure 表存储中的一系列实体授予精细权限
  2. 使用 Azure 资源管理器对 Azure 存储帐户启用基于角色的访问控制 (RBAC)

移动客户端

  1. 实施隐式越狱或 root 检测

WCF

  1. WCF 中的弱类引用
  2. WCF - 实施授权控制

Web API

  1. 在 ASP.NET Web API 中实施适当的授权机制

IoT 设备

  1. 如果设备支持需要不同权限级别的各种操作,应在设备中执行授权检查

IoT 现场网关

  1. 如果现场网关支持需要不同权限级别的各种操作,应在现场网关中执行授权检查

 

 

安全框架:通信安全 | 缓解措施

产品/服务

文章

Azure 事件中心

  1. 使用 SSL/TLS 保护与事件中心之间的通信

Dynamics CRM

  1. 检查服务帐户特权,并检查自定义服务或 ASP.NET 页面是否遵循 CRM 的安全性

Azure 数据工厂

  1. 本地 SQL Server 连接到 Azure 数据工厂时使用数据管理网关

标识服务器

  1. 确保发往标识服务器的所有流量都通过 HTTPS 连接传输

Web 应用程序

  1. 验证用于对 SSL、TLS 和 DTLS 连接进行身份验证的 X.509 证书在 Azure 应用服务中为自定义域配置 SSL 证书
  2. 强制要求发往 Azure 应用服务的所有流量都通过 HTTPS 连接传输启用 HTTP 严格传输安全性 (HSTS)

数据库

  1. 确保加密 SQL Server 连接并验证证书
  2. 强制以加密形式来与 SQL Server 通信

Azure 存储

  1. 确保与 Azure 存储之间的通信通过 HTTPS 进行
  2. 如果无法启用 HTTPS,请在下载 Blob 后验证 MD5 哈希
  3. 使用 SMB 3.0 兼容的客户端来确保传输到 Azure 文件共享的数据经过加密

移动客户端

  1. 实施证书绑定

WCF

  1. 启用 HTTPS - 安全传输通道
  2. WCF:将消息安全保护级别设置为 EncryptAndSign
  3. WCF:使用最低特权帐户运行 WCF 服务

Web API

  1. 强制要求发往 Web API 的所有流量都通过 HTTPS 连接传输

用于 Redis 的 Azure 缓存

  1. 确保与 Azure Redis 缓存之间的通信通过 SSL 进行

IoT 现场网关

  1. 保护设备与现场网关之间的通信

IoT 云网关

  1. 使用 SSL/TLS 保护设备与云网关之间的通信

安全框架:配置管理 | 缓解措施

产品/服务

文章

Web 应用程序

  1. 实施内容安全策略 (CSP) 并禁用内联 JavaScript
  2. 启用浏览器的 XSS 筛选器
  3. ASP.NET 应用程序在部署之前必须禁用跟踪和调试
  4. 仅从受信任源访问第三方 JavaScript
  5. 确保在经过身份验证的 ASP.NET 页面中整合 UI 伪装或点击劫持防御机制
  6. 确保已在 ASP.NET Web 应用程序中启用 CORS 的情况下只允许受信任的来源
  7. 在 ASP.NET 页面中启用 ValidateRequest 特性
  8. 使用本地托管的最新版本的 JavaScript 库
  9. 禁用自动 MIME 探查
  10. 在 Windows Azure 网站中删除标准服务器标头避免留下指纹

数据库

  1. 为数据库引擎访问配置 Windows 防火墙

Web API

  1. 确保已在 ASP.NET Web API 中启用 CORS 的情况下只允许受信任的来源
  2. 加密 Web API 配置文件中包含敏感数据的部分

IoT 设备

  1. 确保使用强凭据保护所有管理界面
  2. 确保未知的代码无法在设备上执行
  3. 使用 bit-locker 加密 IoT 设备的 OS 和其他分区
  4. 确保只在设备上启用少量的服务/功能

IoT 现场网关

  1. 使用 bit-locker 加密 IoT 现场网关的 OS 和其他分区
  2. 确保在安装期间更改现场网关的默认登录凭据

IoT 云网关

  1. 确保云网关实施相应的过程来保持已连接设备固件的最新状态

计算机信任边界

  1. 确保根据组织的策略在设备上配置终结点安全控制

Azure 存储

  1. 确保对 Azure 存储访问密钥进行安全管理
  2. 确保已在 Azure 存储中启用 CORS 的情况下只允许受信任的来源

WCF

  1. 启用 WCF 的服务限制功能
  2. WCF - 通过元数据透露信息

 

安全框架:加密 | 缓解措施

产品/服务

文章

Web 应用程序

  1. 只使用批准的对称块加密法和密钥长度
  2. 为对称加密法使用批准的块加密法模式和初始化向量
  3. 使用批准的非对称算法、密钥长度和填充
  4. 使用批准的随机数生成器
  5. 不要使用对称流加密法
  6. 使用批准的 MAC/HMAC/键控哈希算法
  7. 只使用批准的加密哈希函数

数据库

  1. 使用强加密算法来加密数据库中的数据
  2. 应该对 SSIS 包加密和数字签名
  3. 将数字签名添加到关键的数据库安全对象
  4. 使用 SQL Server EKM 保护加密密钥
  5. 如果不应向数据库引擎透露加密密钥,请使用 AlwaysEncrypted 功能

IoT 设备

  1. 在 IoT 设备上安全存储加密密钥

IoT 云网关

  1. 生成足够长度的随机对称密钥用于向 IoT 中心进行身份验证

Dynamics CRM 移动客户端

  1. 确保实施要求使用 PIN 并允许远程擦除的设备管理策略

Dynamics CRM Outlook 客户端

  1. 确保实施要求 PIN/密码/自动锁定并加密所有数据的设备管理策略(例如 BitLocker)

标识服务器

  1. 使用标识服务器时确保滚动更新签名密钥
  2. 确保在标识服务器中使用强加密型客户端 ID 和客户端密码

 

安全框架:异常管理 |缓解措施

产品/服务

文章

WCF

  1. WCF - 不要在配置文件中包含 serviceDebug 节点
  2. WCF - 不要在配置文件中包含 serviceMetadata 节点

Web API

  1. 确保 ASP.NET Web API 中进行正确的异常处理

Web 应用程序

  1. 不公开错误消息中的安全详细信息
  2. 实现默认错误处理页
  3. 在 IIS 中将部署方法设置为 Retail
  4. 异常应安全失败

 

安全框架:输入验证 | 缓解措施

产品/服务

文章

Web 应用程序

  1. 使用不受信任样式表针对所有转换禁用 XSLT 脚本
  2. 确保可能包含用户可控内容的每个页面能够选择不使用自动 MIME 探查
  3. 强化或禁用 XML 实体解析
  4. 使用 http.sys 的应用程序执行 URL 规范化验证
  5. 确保接受用户的文件时实施适当的控制
  6. 确保在 Web 应用程序中使用类型安全的参数进行数据访问
  7. 使用单独的模型绑定类或绑定筛选列表来防止 MVC 大规模分配漏洞
  8. 在呈现之前为不受信任的 Web 输出编码
  9. 针对所有字符串类型的 Model 属性执行输入验证和筛选
  10. 应该针对接受所有字符的表单域(例如 RTF 编辑器)应用净化
  11. 不要将 DOM 元素分配到没有内置编码的接收器
  12. 验证应用程序中的所有重定向是否闭合且安全
  13. 针对 Controller 方法接受的所有字符串类型参数实施输入验证
  14. 针对正则表达式处理设置超时上限,防止由于正则表达式错误而出现 DoS
  15. 避免在 Razor 视图中使用 Html.Raw

数据库

  1. 不要在存储过程中使用动态查询

Web API

  1. 确保针对 Web API 方法执行模型验证
  2. 针对 Web API 方法接受的所有字符串类型参数实施输入验证
  3. 确保在 Web API 中使用类型安全的参数进行数据访问

Azure Document DB

  1. 对 Azure Cosmos DB 使用参数化 SQL 查询

WCF

  1. 通过架构绑定执行 WCF 输入验证
  2. WCF - 通过参数检查器执行输入验证

 

安全框架:敏感数据 | 缓解措施

产品/服务

文章

计算机信任边界

  1. 如果二进制文件包含敏感信息,请确保将其模糊处理
  2. 考虑使用加密文件系统 (EFS) 来保护用户特定的机密数据
  3. 确保应用程序在文件系统中存储的敏感数据经过加密

Web 应用程序

  1. 确保不要在浏览器中缓存敏感内容
  2. 加密 Web 应用配置文件中包含敏感数据的部分
  3. 在敏感窗体和输入中显式禁用自动填充 HTML 特性
  4. 确保用户屏幕上显示的敏感数据经过屏蔽

数据库

  1. 实施动态数据屏蔽,限制透露给非特权用户的敏感数据
  2. 确保以加盐哈希格式存储密码
  3. 确保在数据库列中的敏感数据经过加密
  4. 确保启用数据库级加密 (TDE)
  5. 确保数据库备份经过加密

Web API

  1. 确保不要在浏览器的存储中存储与 Web API 相关的敏感数据

Azure Document DB

  1. 加密 Azure Cosmos DB 中存储的敏感数据

Azure IaaS VM 信任边界

  1. 使用 Azure 磁盘加密来加密虚拟机所用的磁盘

Service Fabric 信任边界

  1. 加密 Service Fabric 应用程序中的机密

Dynamics CRM

  1. 根据需要执行安全建模并使用业务单位/团队
  2. 尽量避免访问关键实体的共享功能
  3. 为用户提供有关 Dynamics CRM 共享功能的风险与良好安全做法的培训
  4. 制定开发标准规则,禁止显示异常管理中的配置详细信息

Azure 存储

  1. 使用静态数据的 Azure 存储服务加密 (SSE)(预览版)
  2. 使用客户端加密在 Azure 存储中存储敏感数据

移动客户端

  1. 加密写入到手机本地存储的敏感或 PII 数据
  2. 向最终用户分发生成的二进制文件之前将它模糊处理

WCF

  1. 将 clientCredentialType 设置为 Certificate 或 Windows
  2. WCF - 安全模式未启用

安全框架:会话管理

产品/服务

文章

Azure AD

使用 Azure AD 时借助 ADAL 方法实现适当的注销

IoT 设备

对生成的 SaS 令牌使用有限生存期

Azure Document DB

对生成的资源令牌使用最短的令牌生存期

ADFS

使用 ADFS 时借助 WsFederation 方法实现适当的注销

标识服务器

使用标识服务器时实现适当的注销

Web 应用程序

可通过 HTTPS 使用的应用程序必须使用安全 Cookie

所有基于 HTTP 的应用程序只应为 Cookie 定义指定 HTTP

缓解针对 ASP.NET 网页的跨站点请求伪造 (CSRF) 攻击

设置会话的非活动生存期

通过应用程序实现适当的注销

Web API

缓解针对 ASP.NET Web API 的跨站点请求伪造 (CSRF) 攻击

风险缓解具体文档

https://docs.microsoft.com/zh-cn/azure/security/azure-security-threat-modeling-tool-mitigations

 

欢迎大家分享更好的思路,热切期待^^_^^ !

  • 9
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值