STRIDE威胁建模
一、什么是威胁建模
简单的来说,威胁建模就是通过结构化的方法,系统的识别、评估产品的安全风险和威胁,并针对这些风险、威胁制定消减措施的一个过程。
威胁建模是一个非常有用的工具,它的核心是“像攻击者一样思考”。威胁建模可以在产品设计阶段、架构评审阶段或者产品运行时开展,强迫我们站在攻击者的角度去评估产品的安全性,分析产品中每个组件是否可能被篡改、仿冒,是否可能会造成信息泄露、拒绝攻击。威胁建模的作用更偏向于确保产品架构、功能设计的安全,无法保证编码的安全,但是输出的威胁建模报告中包含了全面的安全需求,这些安全需求不仅包括大的方案设计,如要认证、鉴权、审计,也可以包括安全细节的实现,比如具体的认证方式、密码使用哪种安全算法存储,使用什么方法生成安全随机数等。所以,威胁建模虽不能保证编码的安全,但可以指导研发人员编写出安全的代码,同时也可以辅助渗透测试人员开展安全测试。
二、为什么要做威胁建模
1. 站在攻击者的角度通过识别威胁,尽可能多的发现产品架构和功能设计中的安全风险
2. 制定措施消减威胁,规避风险,确保产品的安全性
三、应该在什么时候做威胁建模
威胁建模应融入企业的软件开发安全生命周期(SDL)中。
1. 新产品或新功能的设计阶段应开展威胁建模,发现风险、制定消减措施,消减措施是安全需求的一部分,需落入产品需求跟踪,确保产品安全。
2. 系统运行过程中也可以开展威胁建模,发现的风险可以为企业渗透测试提供支持,尽可能发现更多的漏洞。
四、常用的威胁建模方法—STRIDE
STRIDE是微软开发的用于威胁建模的方法和工具。
STRIDE威胁建模的总体流程:
五、STRIDE的六类威胁与四类元素
在正式开始威胁建模前,我们先来了解STRIDE的六类威胁和数据流图中的四类元素。
5.1 六类威胁
STRIDE是从攻击者的角度,把威胁划分成6个类别,分别是Spooling(仿冒)、Tampering(篡改)、Repudiation(抵赖)、InformationDisclosure(信息泄露)、Dos(拒绝服务)和Elevation of privilege (权限提升)。
为什么划分这6类,这与信息安全三要素和信息安全基本的三个属性相关。
信息安全三要素 |
信息安全三属性 |
保密性 |
认证 |
完整性 |
鉴权 |
可用性 |
审计 |
表:六类威胁与信息安全三要素、三属性的对应关系
威胁 |
安全属性 |
定义 |
举例 |
仿冒(S) |
认证 |
冒充人或物 |
冒充其他用户账号 |
篡改(T) |
完整性 |
修改数据或代码 |
修改订单信息 |
抵赖(R) |
审计 |
不承认做过某行为 |
不承认修改行为 |
信息泄露(I) |
保密性 |
信息被泄露或窃取 |
用户信息被泄露 |
拒绝服务(D) |
可用性 |
消耗资源、服务可不用 |
DDOS导致网站不可用 |
权限提升(E) |
授权 |
未经授权获取、提升权限 |
普通用户提升到管理员 |
随着全球对隐私保护重视程度的加大,隐私安全也成了产品的一个重要威胁,因此STRIDE的6个威胁也添加了一项隐私(Privacy),也就变成了ASTRIDE,A代表Advanced。
5.2 四类元素
我们在来了解下四类元素,STRIDE威胁建模的第一步就是绘制数据流图,数据流图是由【外部实体】、【处理过程】、【数据存储】、【数据流】这四类元素组成。STRIDE威胁建模的核心就是使用这四类元素绘制数据流图,然后分析每个元素可能面临的上述六类威胁,针对这些威胁制定消减方法。
四类元素的介绍如下:
1. 外部实体
系统控制范围之外的用户、软件系统或者设备。作为一个系统或产品的输入或输出。在数据流图中用矩形表示外部实体。
2. 处理过程
表示一个任务、一个执行过程,一定有数据流入和流出。在数据流图中用圆形表示。
3. 数据存储
存储数据的内部实体,如数据库、消息队列、文件等。用中间带标签的两条平行线表示。
4. 数据流
外部实体与进程、进程与进程或者进程与数据存储之间的交互,表示数据的流转。在数据流图中用箭头表示。
使用以上四个元素绘制完数据流图后,还需要引入信任边界,安全的本质就是信任问题,信任边界往往就是攻击发起的地方。在数据流图中可以用红色的虚线隔离出信任边界。
如下是一个比较简单的数据流图演示:
六、STRIDE四类元素与六类威胁的对应关系
具体的对应关系如下图所示,并不是每个元素都会面临6个威胁,比如外部实体只有仿冒和抵赖两类威胁,我们不用关心外部实体会不会被篡改、会不会发生信息泄露、以及拒绝服务等,因为外部实体本来就是我们控制范围之外的。
其中进程(处理过程)会面临全部的6个威胁,数据存储中Repudiation(抵赖)是红色,表示只有存储的数据是审计类日志才会有抵赖的风险,存储其他数据的时候无抵赖。
七、威胁建模的整体流程
通过上面的介绍,我们已经了解了四个元素和六个威胁,STRIDE威胁建模的总体流程:
7.1 微软威胁建模工具
微软发布了STRIDE威胁建模工具,提供免费下载,因为使用便利性、威胁攻击库等原因,微软建模工具不见得可以直接拿来在企业内推广使用。
下载地址:https://docs.microsoft.com/en-us/azure/security/azure-security-threat-modeling-tool
7.1.1 安装过程:
7.1.2 工具首页:
7.1.3
Create A Model(绘制数据流图)
7.1.4 威胁分析模式
进入分析模式后,数据流图下方会自动弹出很多的威胁以及建议,如下图所示:
可以在Justification里面填写相关的消减举措。
7.1.5 导出报告
7.2 绘制数据流图
介绍微软威胁建模工具的时候也可以看到,绘制数据流图就是用上面所介绍的【外部实体】、【处理过程(进程)】、【数据存储】、【数据流】把系统(产品)的数据流转图画出来。这个工作需要开展威胁建模工作的人对产品有比较深入的了解,如果有遗漏可能就会导致威胁分析不全,具体在做的过程中可以把产品架构图拿来参考,如果是新上线的重要且复杂度较高的产品,也可以由产品经理、研发、安全坐在一起完成。
7.3 分析威胁
根据绘制的数据流图,按照元素与威胁对应表,分析所有元素可能遇到的威胁。这部分工作对威胁分析人员的安全能力要求很高,如果威胁分析不全,则风险就会被带到线上。而且威胁建模工作不仅仅是安全人员在架构评审时去做,更应该是产品经理在产品设计阶段需要完成,这就要求非安全人员要具备较高的安全能力。所以,企业一般需要借助威胁建模工具去辅助进行威胁分析。
威胁建模工具需要具备两个库,一个是威胁分析阶段使用的《威胁库》,一个是制定消减措施阶段使用的《消减措施库》。这里的《威胁库》可以分为两类,一类就是各种威胁,比如绕过认证、获取口令、破解口令等等,还有一类是合规,各类法律法规的要求,比如隐私声明、企业内部要求等。
当我们在数据流图上面选中某个元素进行威胁分析时,威胁建模工具可以自动的把这个元素可能涉及的威胁列出来,让分析人员去选择,并针对选择的威胁给出一定的消减措施提醒,这样便可以降低对分析人员的能力要求。
威胁分析举例,用户通过浏览器登录web网站,用户就是一个外部实体,面临的威胁包括仿冒和抵赖。
仿冒威胁分析:
1. 【威胁】攻击者仿冒用户登录网站
【消减措施】增加认证功能,通过用户名+密码的方式认证,暂不使用双因素、短信、指纹等其他认证方式
2. 【威胁】攻击者绕过当前的认证方式,仿冒用户登录
【消减措施】:
2.1 增加图形验证码防暴力破解
2.2 密码增加复杂度要求,防暴力破解
2.3 认证错误返回统一提示,防止checkUser
2.4 确保密码重置、密码找回逻辑的安全,谨防绕过
3. 【威胁】攻击者通过中间人窃取用户密码
【消减措施】:
3.1 登录请求走HTTPS
3.2 开启HSTS
3.3 确保SSL证书安全,算法套中使用的是安全的算法
3.4 密码传输前先做一次加密或哈希
4. 【威胁】攻击者窃取正常用户的会话,仿冒用户登录web网站
【消减措施】:
4.1 长度大于24位,通过安全随机数生成
4.2 登录前后强制改变会话
4.3 限制会话过期时间
不在一一列举,总之把可能遇到的威胁列到《威胁库》,让威胁建模人员选择涉及的威胁并确认消减措施。同时,需要认识到威胁库是需要动态更新的一个过程,消减措施也要遵循安全设计的基本原则,如纵深防御、授权最小化、默认安全,满足安全基本原则的消减措施,才可能让产品更安全、抵御更多的攻击。
上述所列举的所有消减措施都是安全需求,最终输出一份威胁建模报告,研发人员在开发阶段需要参考威胁建模报告,把这些全部需求实现。SDL代码评审阶段也可以参考威胁建模报告对研发人员的实现情况进行正向和逆向测试。
7.4 风险评估
风险=影响*可能性
利用风险评估方法,为识别的威胁进行风险定级,根据企业实际情况,确认哪些级别的风险必须规避、哪些级别的风险可以消减后遗留。
7.5 制定、落实消减措施
制定威胁消减措施,并落入软件安全开发生命周期,确保措施有效落地执行。
常见的消减措施如下:
威胁 |
消减措施 |
仿冒 |
身份管理、认证(密码认证、单点登录、双因素、证书认证)、会话管理 |
篡改 |
完整性校验、访问控制 |
抵赖 |
安全管理、安全审计、监控 |
信息泄露 |
敏感信息保护、数据加密、访问控制 |
拒绝服务 |
负载均衡 防DDOS |
权限提升 |
授权,最小化 |
八、 一点关于威胁建模面临的困境与对策的思考
威胁建模在企业经常面临落地、推广困难的问题,主要原因有以下几方面:
1. 流程复杂,耗费时间
2. 人员能力要求高
3. 需要开发威胁建模工具、维护威胁库、消减库
威胁建模是一个结构化的分析方法,目的是尽可能多的识别产品风险,正因为要把风险尽可能识别全,所以面临流程复杂,花费时间多、推广困难的困境。
企业可以根据自己的实际情况做调整和优化,找到平衡点,比如:
1. 以产品维护控制范围
1.1 新产品一般周期研发、上线比较长,可以预留威胁建模时间
1.2 重要系统的重要功能要求开展威胁建模
1.3 其他产品和功能不做要求
2. 以风险角度控制范围
2.1 对暴露在信任边界的元素开展威胁建模
2.2 对暴露到公网的元素开展威胁建模
2.3 优化威胁库,仅保留风险级别比较高的威胁
3. 优化威胁建模工具
通过工具降低对威胁建模人员的能力要求,提高威胁建模效率,减少时间。
STRIDE威胁建模的更多相关文章
- 【安全测试】安全测试威胁建模设计方法STRIDE
背景 目前安全测试一般都存在如下问题: 安全测试人员不懂业务,业务测试人员不懂安全,安全测试设计出现遗漏是无法避免的 安全测试点繁多复杂,单点分析会导致风险暴露,不安全 目前的状态: TR2阶段测试人 ...
- 文摘:威胁建模(STRIDE方法)
文摘,原文地址:https://msdn.microsoft.com/zh-cn/magazine/cc163519.aspx 威胁建模的本质:尽管通常我们无法证明给定的设计是安全的,但我们可以从自己 ...
- SDL 威胁建模工具入门 threat modeling tool
http://msdn.microsoft.com/zh-cn/magazine/dd347831.aspx threat modeling tool 威胁建模工具 minifuzz 文件模糊工具 c ...
- 白帽子讲web安全——一个安全解决方案的诞生细节
1.白帽子:做安全的人.主要做的事,防御,是制定一套解决攻击的方案.而不是只是解决某个漏洞. 2.黑帽子:现在说的黑客.让web变的不安全的人.利用漏洞获取特权.主要做的事,攻击,组合各种方法利用漏洞 ...
- 学习web安全之--初识安全
随笔:随着互联网行业的飞速发展,互联网行业可谓日新月异,然而在繁华的背后,大多的互联网公司对于网络安全还是处于无重视,不作为的阶段,而作为一个程序员,如果也对信息安全视而不见的话,那将是这个公司的噩梦 ...
- 读书笔记——吴翰清《白帽子讲Web安全》
目录 第一篇 世界观安全 一 我的安全世界观 第二篇 客户端脚本安全 一 浏览器安全二 跨站脚本攻击(XSS)三 跨站点请求伪造(CSRF)四 点击劫持(ClickJacking)五 HTML5 安全 ...
- 【网络安全】——客户端安全(浏览器安全、XSS、CSRF、Clickjacking)
近在学习网络安全相关的知识,于是先从业内一本系统讲Web安全的书<白帽子讲Web安全>系统学习Web安全的相关知识.在此整理书中的知识层次,不求详尽,只求自己对整个Web安全梗概有所了 ...
- 应急响应-PDCERF模型 (转)
目录 应急响应流程 防御模型 SDL 应急响应流程 很多人认为应急响应就是脸上被黑的机器去查查什么情况,是不是被中了botnet病毒.是不是被人中了rootkit等,是不是被挂了webshell等.应 ...
- chapter1 渗透测试与metasploit
网络对抗技术课程学习 chapter1 渗透测试与metasploit 一.读书笔记 二.渗透测试 通过模拟恶意攻击者的技术与方法进行攻击,挫败目标系统安全控制措施,取得访问控制权,并发现具备业务影响 ...
随机推荐
- laravel中控制器的创建和使用(五)
laravel中我们可以使用 artisan 命令来帮助我们创建控制器文件. php artisan make:controller TestController TestController 控制器 ...
- 前端之jquery2
jquery属性操作 1.html() 取出或设置html内容 // 取出html内容 var $htm = $('#div1').html(); // 设置html内容 $('#div1').htm ...
- git报错:fatal: bad config line 1 in file C:/Users/JIANGXIAOLIANG/.gitconfig
在给git设置用户名和邮箱的时候报下面的错误:fatal: bad config line 1 in file C:/Users/JIANGXIAOLIANG/.gitconfig看提示的意思是git ...
- 2018-2-13-win10-UWP-MessageDialog-和-ContentDialog
原文:2018-2-13-win10-UWP-MessageDialog-和-ContentDialog title author date CreateTime categories win10 U ...
- C# WebClient,HttpClient,WebRequest
static void WebClientDemo() { string url = "https://www.cnblogs.com/Fred1987/p/11843418.html&qu ...
- MySQL问题记录——ERROR 1728 (HY000)
MySQL问题记录——ERROR 1728 (HY000) 摘要:本文主要记录了在使用MySQL的过程中遇到错误代码为1728的问题以及解决方案. 问题重现 在创建自定义函数的时候,出现了问题: my ...
- Java之IO模型
首先来看一下同步与异步的概念: 1.同步是指当前端发起一次操作请求时,只有后台执行完所有的代码操作才会给前端返回值. 2.异步是将前端发回的消息加入消息队列,并且立刻给前端返回请求,告诉用户可以离开当 ...
- springmvc学习笔记二:重定向,拦截器,参数绑定
Controller方法返回值 返回ModelAndView controller方法中定义ModelAndView对象并返回,对象中可添加model数据.指定view. 返回void 在Contro ...
- pycharm2019.2一个奇怪的bugger,执行后输出内容被莫名处理
2019-08-20 07:45:07 python爬虫是一直来大家都用的多的,我也是常常用到. requests做请求方便的很,但是今天却遇到requests的bug.text内容不可信. pych ...
- CSS语法规范一
CSS语法规范 CSS规则由两个主要的部分构成:选择器以及一条或多条声明. p{ color: red; font-size: 12px; } CSS代码风格 样式格式书写 紧凑格式 h3 {colo ...