背景

目前安全测试一般都存在如下问题:

  • 安全测试人员不懂业务,业务测试人员不懂安全,安全测试设计出现遗漏是无法避免的
  • 安全测试点繁多复杂,单点分析会导致风险暴露,不安全

目前的状态:

  • 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的更多相关文章

  1. Robot Framework测试框架用例脚本设计方法

    Robot Framework介绍 Robot Framework是一个通用的关键字驱动自动化测试框架.测试用例以HTML,纯文本或TSV(制表符分隔的一系列值)文件存储.通过测试库中实现的关键字驱动 ...

  2. STRIDE威胁建模

    一.什么是威胁建模 简单的来说,威胁建模就是通过结构化的方法,系统的识别.评估产品的安全风险和威胁,并针对这些风险.威胁制定消减措施的一个过程. 威胁建模是一个非常有用的工具,它的核心是“像攻击者一样 ...

  3. 文摘:威胁建模(STRIDE方法)

    文摘,原文地址:https://msdn.microsoft.com/zh-cn/magazine/cc163519.aspx 威胁建模的本质:尽管通常我们无法证明给定的设计是安全的,但我们可以从自己 ...

  4. [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 ...

  5. windows 测试数据库的连接状况-udl方法

    udl是windows系统上,用于测试数据库的连接状态的测试软件. 使用方法: 1.建立一个空白文本 2.将文件的后缀名更改为*.udl 即可     文件内容一定为空 3.选择windows的“提供 ...

  6. 编写测试类,了解ArrayList的方法

    这篇文章主要介绍了C#中动态数组用法,实例分析了C#中ArrayList实现动态数组的技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了C#中动态数组用法.分享给大家供大家参考.具体分析如下 ...

  7. 微软&中科大提出新型自动神经架构设计方法NAO

    近期,来自微软和中国科学技术大学的刘铁岩等人发表论文,介绍了一种新型自动神经架构设计方法 NAO,该方法由三个部分组成:编码器.预测器和解码器.实验证明,该方法所发现的架构在 CIFAR-10 上的图 ...

  8. DDD不是架构设计方法

    DDD不是架构设计方法 一文读懂DDD 2019-05-28 19:18 by 春哥大魔王, 413 阅读, 3 评论, 收藏, 编辑 何为DDD DDD不是架构设计方法,不能把每个设计细节具象化,D ...

  9. 黑盒测试用例设计方法&理论联系实际-> 功能图法

    一. 概念 功能图由状态迁移图和布尔函数组成.状态迁移图用状态和迁移来描述.一个状态指出数据输入的位置(或时间),而迁移则指明状态的改变.同时要依靠判定表或因果图表示的逻辑功能.例,一个简化的自动出纳 ...

随机推荐

  1. 微信小程序 --- Image组件

    Image组件可以在小程序中展示图片,支持外链. Image组件可以调用API,进行三种缩放,九种裁剪. Image组件有默认值:300*225 属性: src:图片资源地址. mode:图片裁剪缩放 ...

  2. loading图标modal弹窗 和jquery ajax的关系

    在ajax配置中 ,async:false,非异步,modal窗口会失效,只有重新设置为async:true,或者删除async的设置,则loading的模态框才能展示出来 loading图标的模态框 ...

  3. RGBA HSB opengl光照模型

    RGBA HSB   HSV颜色模型对应于画家的配色的方法.画家用改变色浓和色深的方法来从某种纯色获得不同色调的颜色.其做法是:在一种纯色中加入白色以改变色浓,加入黑色以改变色深,同时加入不同比例的白 ...

  4. 个人理解---KMP与Next数组详解

    Kmp就是求子串在母串中的位置等相关问题:当然KMP最重要的是Next数组,也称失败数组,Next[i]代表的意思是子串 sub 从sub[0] 到 sub[i-1]的前缀和后缀的最大匹配.模拟KMP ...

  5. P2750 贰五语言Two Five USACO5.5 记忆化搜索

    正解:记搜+逼近 解题报告: 神仙题预警,,, 我真滴觉得还是挺难的了,,, 大概说下思路趴QAQ 首先我们要知道逼近法是什么! 逼近法,有点像二分的思路,以这题为例举个eg 假如它给了个数字k.我们 ...

  6. 【Loadrunner】平台1.9环境APP成功录制并调试成功后的脚本备份

    1.录制相关Loadrunner及录制的APP所在手机网络代理相关设置请参考日志:http://www.cnblogs.com/zhuzhubaoya/p/9152022.html 2.调试成功的脚本 ...

  7. Squeeze-and-Excitation Networks

    Squeeze-and-Excitation Networks Paper 近些年来,卷积神经网络在很多领域都取得了巨大的突破.而卷积核作为卷积神经网络的核心,通常被看做是在局部感受野上,将空间上(s ...

  8. MongDb的安装

    MongoDB是一个基于分布式文件存储的数据库,由c++语言编写,为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB属于非关系数据库,也不能说完全属于,更像是介于关系数据库和非关系数据库之 ...

  9. 6.安装pyhook报错is not a supported wheel on this platform

    解决方法: 先找到合适的格式: 然后,选择合适的版本: 安装即可成功:

  10. 用tsunami-udp加速网络传输

    概述 tsunami-udp是一款专为网络加速诞生的小工具. 思路很简单,使用TCP进行传输控制.UDP进行数据传输. 这样可以无状态的进行数据传输,然后中间加一些文件校验和重传机制,达到加速传输的目 ...