【安全测试】安全测试威胁建模设计方法STRIDE
背景
目前安全测试一般都存在如下问题:
- 安全测试人员不懂业务,业务测试人员不懂安全,安全测试设计出现遗漏是无法避免的
- 安全测试点繁多复杂,单点分析会导致风险暴露,不安全
目前的状态:
- TR2阶段测试人员根据开发人员提供的story威胁分析设计文档,检查已有的削减措施是否正常实现
- 检查建议的削减措施是否合理,待版本转测试后对削减措施进行多角度测试,确保削减措施被正确实施并真正削减产品分析出的威胁。
基于以上两点需要一套完整的,连贯的方法指导安全及业务特性的安全测试设计,TM(ThreatModeling,威胁建模)安全测试设计方法应运而生。
TM(ThreatModeling)
威胁建模的本质:尽管通常我们无法证明给定的设计是安全的,但我们可以从自己的错误中汲取教训并避免犯同样的错误。
TM主要的理论、实践来源是微软的STRIDE威胁建模方法论,它从6个维度来考察系统设计时存在的来自外部威胁的风险点。
首先需要知道什么样的设计是“安全的”,安全设计原则:
| 设计 | 安全原则 |
|---|---|
| 开放设计 | 假设攻击者具有源代码和规格。 |
| 故障安全预设值 | 出故障时自动关闭,无单点故障。 |
| 最低权限 | 只分配所需的权限。 |
| 机制经济性 | 保持简单、易懂的特性。 |
| 分离权限 | 不允许根据单一条件执行操作。 |
| 总体调节 | 每次检查所有内容。 |
| 最低公用机制 | 注意保护共享资源。 |
| 心理可接受性 | 他们将使用它吗? |
更进一步,设计完的系统应具有哪些安全相关的属性?
| 安全属性 | 详细 |
|---|---|
| 机密性 | 数据只应限具有权限的人员访问。 |
| 完整性 | 数据和系统资源只限适当的人员以适当的方式进行更改。 |
| 可用性 | 系统在需要时一切就绪,可以正常操作。 |
| 身份验证 | 建立用户身份(或者接受匿名用户)。 |
| 授权 | 明确允许或拒绝用户访问资源。 |
| 认可 | 用户无法在执行某操作后否认执行了此操作。 |
STRIDE是这6个维度的单词的首字母的缩写;这6个维度分别为:
- Spoofing(假冒)
- Tampering(篡改)
- Repudiation(否认)
- Information Disclosure(信息泄漏)
- Denial of Service(拒绝服务)
- Elevation of Privilege(权限提升)。
下图对这六项信息各自进行了距离:
| 属性 | 威胁 | 定义 | 例子 |
|---|---|---|---|
| 认证 | Spoofing(假冒) | 冒充某人或某物 | 假冒billg、microsoft.com或ntdll.dll |
| 完整性 | Tampering(篡改) | 修改数据和代码 | 修改一个DLL,或一个局域网的封包 |
| 不可抵赖性 | Repudiation(否认) | 宣称未做过某个行为 | “我没有发送email” “我没有修改文件” “我肯定没有访问那个网站” |
| 机密性 | Information Disclosure(信息泄露) | 暴露信息给未经授权的访问者 | 允许某人阅读Windows源代码;将客户列表发布在网站上 |
| 可用性 | Denial of Service(拒绝服务) | 使对服务对用户拒绝访问或降级 | 发送数据包使目标系统CPU满负荷或发送恶意代码使目标服务崩溃 |
| 授权 | Elevation of Privlege(权限提升) | 未经授权获取权限 | 远程用户执行任意代码,普通用户可以执行管理员私有的系统指令 |
实践
很多安全从业者所接受的安全认知往往是进入一家企业后,拿到一份名为应用开发安全标准的文档,里面描述了访问控制、输入验证、编码过滤、认证鉴权、加密、日志等各种要求,久而久之就变成了一种惯性思维,实际上之所以要这么做是因为在系统设计的某个环节存在STRIDE中的一种或几种风险,所以在那个设计关注点上要加入对应的安全措施,并不是在所有的地方都要套用全部的或千篇一律的安全措施。否则就会变成另外一种结果:“过度的安全设计”。
威胁建模的成果跟工作者自身的知识也有很大的关系,有攻防经验的人比较容易判断威胁的来源和利用场景,如果缺少这方面的认知,可能会发现到处是风险,有些风险的利用场景很少或利用条件非常苛刻,如果一味地强调风险削减措施也会变成有点纸上谈兵的味道,虽然从安全的角度没有错,但从产品交付的整体视角看,安全还是做过头了。
具体流程
STIRDE如何使用?首先我们需要画出数据流关系图(DFD),以图形的方式表示系统。数据流关系图由数据流、数据存储、进程和交互方四个元素标准符号组成。
- 数据流表示通过网络连接、命名管道、消息队列、RPC 通道等移动的数据。
- 数据存储表示文本、文件、关系型数据库、非结构化数据等。
- 进程指的是计算机运行的计算或程序。
然后我们根据实际情况另外增加了一个元素,即信任边界。
添加信任边界后,对每一个节点元素和过程进行分析判断是否存在上述6种威胁,并制定对应的风险缓解措施。
总体上看,STRIDE是一个不错的参考视角,即便有丰富攻防经验的人也不能保证自己在面对复杂系统的安全设计时考虑是全面的,而STRIDE则有助于风险识别的覆盖面。
【安全测试】安全测试威胁建模设计方法STRIDE的更多相关文章
- Robot Framework测试框架用例脚本设计方法
Robot Framework介绍 Robot Framework是一个通用的关键字驱动自动化测试框架.测试用例以HTML,纯文本或TSV(制表符分隔的一系列值)文件存储.通过测试库中实现的关键字驱动 ...
- STRIDE威胁建模
一.什么是威胁建模 简单的来说,威胁建模就是通过结构化的方法,系统的识别.评估产品的安全风险和威胁,并针对这些风险.威胁制定消减措施的一个过程. 威胁建模是一个非常有用的工具,它的核心是“像攻击者一样 ...
- 文摘:威胁建模(STRIDE方法)
文摘,原文地址:https://msdn.microsoft.com/zh-cn/magazine/cc163519.aspx 威胁建模的本质:尽管通常我们无法证明给定的设计是安全的,但我们可以从自己 ...
- [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
12.3 We have the following method used in a chess game: boolean canMoveTo( int x, int y). This metho ...
- windows 测试数据库的连接状况-udl方法
udl是windows系统上,用于测试数据库的连接状态的测试软件. 使用方法: 1.建立一个空白文本 2.将文件的后缀名更改为*.udl 即可 文件内容一定为空 3.选择windows的“提供 ...
- 编写测试类,了解ArrayList的方法
这篇文章主要介绍了C#中动态数组用法,实例分析了C#中ArrayList实现动态数组的技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了C#中动态数组用法.分享给大家供大家参考.具体分析如下 ...
- 微软&中科大提出新型自动神经架构设计方法NAO
近期,来自微软和中国科学技术大学的刘铁岩等人发表论文,介绍了一种新型自动神经架构设计方法 NAO,该方法由三个部分组成:编码器.预测器和解码器.实验证明,该方法所发现的架构在 CIFAR-10 上的图 ...
- DDD不是架构设计方法
DDD不是架构设计方法 一文读懂DDD 2019-05-28 19:18 by 春哥大魔王, 413 阅读, 3 评论, 收藏, 编辑 何为DDD DDD不是架构设计方法,不能把每个设计细节具象化,D ...
- 黑盒测试用例设计方法&理论联系实际-> 功能图法
一. 概念 功能图由状态迁移图和布尔函数组成.状态迁移图用状态和迁移来描述.一个状态指出数据输入的位置(或时间),而迁移则指明状态的改变.同时要依靠判定表或因果图表示的逻辑功能.例,一个简化的自动出纳 ...
随机推荐
- spring-boot集成redis
application.properties #redis 配置 # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redi ...
- 国外DNS服务器总结
国外12个免费的DNS DNS(即Domain Name System,域名系统),是因特网上作为域名和IP地址相互映射的一个分布式数据库,能够让用户更方便的访问互联网,而不用去记住能够被机器直接读取 ...
- 170627、springboot编程之定时任务
springboot定时任务,比较简单! 1.编写DemoSchedule.java类 package com.rick.common.schedule; import org.springframe ...
- IT求职部分网站汇总
哪合伙:http://nahehuo.com/ 过来人:http://www.guolairen.com/ 智联:www.zhaopin.com 前程:www.51job.com 中华英才:www.c ...
- 为什么不要使用"using namespace XXX"
为什么不要使用"using namespace XXX" 1.避免降低性能 2.避免Entity冲突 This is not related to performance at a ...
- Educational Codeforces Round 28
A. Curriculum Vitae 题目链接:http://codeforces.com/contest/846/problem/A 题目意思:给你一个只包含0-1的数组,现在要求去可以去掉一些元 ...
- 使用jquery的$.post()时浏览器崩溃
代码: function verifyStepOne() { var phoneNumber = $("#phoneNumber"); var username = $(" ...
- IoC COntainer Create Javabeans 可以通过读取beans.xml 文件来创建一个应用程序上下文对象 依赖反转
Spring初学快速入门 - Spring教程™ https://www.yiibai.com/spring/spring-tutorial-for-beginners.html# pom <? ...
- jQuery 的attr()方法
在JS中设置节点的属性与属性值用到setAttribute(),获得节点的属性与属性值用到getAttribute(),而在jquery中,用一个attr()就可以全部搞定了,赞一个先 ^^ jque ...
- 转载:Linux内核调试方法
转载文章请注明作者和二维码及全文信息. 转自:http://blog.csdn.net/swingwang/article/details/72331196 不会编程的程序员,不是好的架构师,编程和内 ...