目前安全测试通常都存在以下问题:数据库
目前的状态:安全
基于以上两点须要一套完整的,连贯的方法指导安全及业务特性的安全测试设计,TM(ThreatModeling,威胁建模)安全测试设计方法应运而生。网络
威胁建模的本质:尽管一般咱们没法证实给定的设计是安全的,但咱们能够从本身的错误中汲取教训并避免犯一样的错误。测试
TM主要的理论、实践来源是微软的STRIDE威胁建模方法论,它从6个维度来考察系统设计时存在的来自外部威胁的风险点。网站
首先须要知道什么样的设计是“安全的”,安全设计原则:编码
设计 | 安全原则 |
---|---|
开放设计 | 假设攻击者具备源代码和规格。 |
故障安全预设值 | 出故障时自动关闭,无单点故障。 |
最低权限 | 只分配所需的权限。 |
机制经济性 | 保持简单、易懂的特性。 |
分离权限 | 不容许根据单一条件执行操做。 |
整体调节 | 每次检查全部内容。 |
最低公用机制 | 注意保护共享资源。 |
心理可接受性 | 他们将使用它吗? |
更进一步,设计完的系统应具备哪些安全相关的属性?加密
安全属性 | 详细 |
---|---|
机密性 | 数据只应限具备权限的人员访问。 |
完整性 | 数据和系统资源只限适当的人员以适当的方式进行更改。 |
可用性 | 系统在须要时一切就绪,能够正常操做。 |
身份验证 | 创建用户身份(或者接受匿名用户)。 |
受权 | 明确容许或拒绝用户访问资源。 |
承认 | 用户没法在执行某操做后否定执行了此操做。 |
STRIDE是这6个维度的单词的首字母的缩写;这6个维度分别为:设计
下图对这六项信息各自进行了距离:日志
属性 | 威胁 | 定义 | 例子 |
---|---|---|---|
认证 | Spoofing(假冒) | 冒充某人或某物 | 假冒billg、microsoft.com或ntdll.dll |
完整性 | Tampering(篡改) | 修改数据和代码 | 修改一个DLL,或一个局域网的封包 |
不可抵赖性 | Repudiation(否定) | 宣称未作过某个行为 | “我没有发送email” “我没有修改文件” “我确定没有访问那个网站” |
机密性 | Information Disclosure(信息泄露) | 暴露信息给未经受权的访问者 | 容许某人阅读Windows源代码;将客户列表发布在网站上 |
可用性 | Denial of Service(拒绝服务) | 使对服务对用户拒绝访问或降级 | 发送数据包使目标系统CPU满负荷或发送恶意代码使目标服务崩溃 |
受权 | Elevation of Privlege(权限提高) | 未经受权获取权限 | 远程用户执行任意代码,普通用户能够执行管理员私有的系统指令 |
不少安全从业者所接受的安全认知每每是进入一家企业后,拿到一份名为应用开发安全标准的文档,里面描述了访问控制、输入验证、编码过滤、认证鉴权、加密、日志等各类要求,长此以往就变成了一种惯性思惟,实际上之因此要这么作是由于在系统设计的某个环节存在STRIDE中的一种或几种风险,因此在那个设计关注点上要加入对应的安全措施,并非在全部的地方都要套用所有的或千篇一概的安全措施。不然就会变成另一种结果:“过分的安全设计”。orm
威胁建模的成果跟工做者自身的知识也有很大的关系,有攻防经验的人比较容易判断威胁的来源和利用场景,若是缺乏这方面的认知,可能会发现处处是风险,有些风险的利用场景不多或利用条件很是苛刻,若是一味地强调风险削减措施也会变成有点纸上谈兵的味道,虽然从安全的角度没有错,但从产品交付的总体视角看,安全仍是作过头了。
STIRDE如何使用?首先咱们须要画出数据流关系图(DFD),以图形的方式表示系统。数据流关系图由数据流、数据存储、进程和交互方四个元素标准符号组成。
- 数据流表示经过网络链接、命名管道、消息队列、RPC 通道等移动的数据。
- 数据存储表示文本、文件、关系型数据库、非结构化数据等。
- 进程指的是计算机运行的计算或程序。
而后咱们根据实际状况另外增长了一个元素,即信任边界。
添加信任边界后,对每个节点元素和过程进行分析判断是否存在上述6种威胁,并制定对应的风险缓解措施。
整体上看,STRIDE是一个不错的参考视角,即使有丰富攻防经验的人也不能保证本身在面对复杂系统的安全设计时考虑是全面的,而STRIDE则有助于风险识别的覆盖面。