3.8 STRIDE威胁建模
STRIDE是微软开发的用于威胁建模的工具,或者是说一套方法论吧,它把外部威胁分成6个维度来考察系统设计时存在的风险点,这6个维度首字母的缩写就是STRIDE,分别为: Spoofing(假冒)、Tampering(篡改)、Repudiation(否认)、Information Disclosure(信息泄漏)、Denial of Service(拒绝服务)和 Elevation of Privilege(权限提升),如表3-1所示。
表3-1 STRIDE威胁建模
属性 威胁 定义 例子
认证 Spoofing(假冒) 冒充某人或某物 假冒billg、microsoft.com或ntdll.dll
完整性 Tampering(篡改) 修改数据和代码 修改一个DLL,或一个局域网的封包
不可抵赖性 Repudiation(否认) 宣称未做过某个行为 “我没有发送email” “我没有修改文件” “我肯定没有访问那个网站”
机密性 Information Disclosure(信息泄露) 暴露信息给未经授权的访问者 允许某人阅读Windows源代码;将客户列表发布在网站上
可用性 Denial of Service(拒绝服务) 使对服务对用户拒绝访问或降级 发送数据包使目标系统CPU满负荷或发送恶意代码使目标服务崩溃
授权 Elevation of Privlege(权限提升) 未经授权获取权限 远程用户执行任意代码,普通用户可以执行管理员私有的系统指令
STIRDE如何使用?先画出数据流关系图(DFD)用图形方式表示系统, DFD 使用一组标准符号,其中包含四个元素:数据流、数据存储、进程和交互方,对于威胁建模,另外增加了一个元素,即信任边界。数据流表示通过网络连接、命名管道、消息队列、RPC 通道等移动的数据。数据存储表示文本、文件、关系型数据库、非结构化数据等。进程指的是计算机运行的计算或程序。然后对每一个节点元素和过程进行分析判断是否存在上述6种威胁,并制定对应的风险缓解措施。例如图3-3所示的情况。
图3-3 STRIDE示例
图中,①、②、③其实都存在假冒、篡改、拒绝服务的风险,所以在这些环节都需要考虑认证、鉴权、加密、输入验证等安全措施。但根据风险的不同,过程③在内网的服务器被拒绝服务的风险较小,而在Internet上传输的过程①所受到的监听和篡改的风险更大,所以在每个环节上采取的风险削减措施的力度会不一样,这实际上也是什么安全措施一定要落地、什么安全措施可以适当妥协的一个参考视角。很多安全从业者所接受的安全认知往往是进入一家企业后,拿到一份名为应用开发安全标准的文档,里面描述了访问控制、输入验证、编码过滤、认证鉴权、加密、日志等各种要求,久而久之就变成了一种惯性思维,实际上之所以要这么做是因为在系统设计的某个环节存在STRIDE中的一种或几种风险,所以在那个设计关注点上要加入对应的安全措施,并不是在所有的地方都要套用全部的或千篇一律的安全措施。否则就会变成另外一种结果:“过度的安全设计”。威胁建模的成果跟工作者自身的知识也有很大的关系,有攻防经验的人比较容易判断威胁的来源和利用场景,如果缺少这方面的认知,可能会发现到处是风险,有些风险的利用场景很少或利用条件非常苛刻,如果一味地强调风险削减措施也会变成有点纸上谈兵的味道,虽然从安全的角度没有错,但从产品交付的整体视角看,安全还是做过头了。
总体上看,STRIDE是一个不错的参考视角,即便有丰富攻防经验的人也不能保证自己在面对复杂系统的安全设计时考虑是全面的,而STRIDE则有助于风险识别的覆盖面。
以上的例子是high level的威胁建模,low level的威胁建模需要画了时序图后根据具体的协议和数据交互进行更进一步的分析,细节可以参考威胁建模相关的方法论,但不管是high level还是low level都比较依赖于分析者自身的攻防技能。
参考资料
威胁建模:使用 STRIDE 方法发现安全设计缺陷(http://msdn.microsoft.com/zh-cn/magazine/cc163519.aspx)。
STRIDE图表(http://blogs.microsoft.com/cybertrust/2007/09/11/stride-chart/)。