【安全测试】安全测试威胁建模设计方法STRIDE
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【安全测试】安全测试威胁建模设计⽅法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、或ntdll.dll
完整性Tampering(篡改)修改数据和代码修改⼀个DLL,或⼀个局域⽹的封包
不可抵赖性Repudiation(否认)宣称未做过某个⾏为“我没有发送email” “我没有修改⽂件” “我肯定没有访问那个⽹站”
机密性Information Disclosure(信息泄露)暴露信息给未经授权的访问者允许某⼈阅读Windows源代码;将客户列表发布在⽹站上
可⽤性Denial of Service(拒绝服务)使对服务对⽤户拒绝访问或降级发送数据包使⽬标系统CPU满负荷或发送恶意代码使⽬标服务崩溃
授权Elevation of Privlege(权限提升)未经授权获取权限远程⽤户执⾏任意代码,普通⽤户可以执⾏管理员私有的系统指令
实践
很多安全从业者所接受的安全认知往往是进⼊⼀家企业后,拿到⼀份名为应⽤开发安全标准的⽂档,⾥⾯描述了访问控制、输⼊验证、编码过滤、认证鉴权、加密、⽇志等各种要求,久⽽久之就变成了⼀种惯性思维,实际上之所以要这么做是因为在系统设计的某个环节存在STRIDE中的⼀种或⼏种风险,所以在那个设计关注点上要加⼊对应的安全措施,并不是在所有的地⽅都要套⽤全部的或千篇⼀律的安全措
施。
否则就会变成另外⼀种结果:“过度的安全设计”。
威胁建模的成果跟⼯作者⾃⾝的知识也有很⼤的关系,有攻防经验的⼈⽐较容易判断威胁的来源和利⽤场景,如果缺少这⽅⾯的认知,可能会发现到处是风险,有些风险的利⽤场景很少或利⽤条件⾮常苛刻,如果⼀味地强调风险削减措施也会变成有点纸上谈兵的味道,虽然从安全的⾓度没有错,但从产品交付的整体视⾓看,安全还是做过头了。
具体流程
STIRDE如何使⽤?⾸先我们需要画出数据流关系图(DFD),以图形的⽅式表⽰系统。
数据流关系图由数据流、数据存储、进程和交互⽅四个元素标准符号组成。
数据流表⽰通过⽹络连接、命名管道、消息队列、RPC 通道等移动的数据。
数据存储表⽰⽂本、⽂件、关系型数据库、⾮结构化数据等。
进程指的是计算机运⾏的计算或程序。
然后我们根据实际情况另外增加了⼀个元素,即信任边界。
添加信任边界后,对每⼀个节点元素和过程进⾏分析判断是否存在上述6种威胁,并制定对应的风险缓解措施。
总体上看,STRIDE是⼀个不错的参考视⾓,即便有丰富攻防经验的⼈也不能保证⾃⼰在⾯对复杂系统的安全设计时考虑是全⾯的,⽽STRIDE则有助于风险识别的覆盖⾯。