《威胁建模:设计和交付更安全的软件》——3.9 STRIDE变种

3.9 STRIDE变种

在发现威胁中,STRIDE是非常有用的助记符,不过它也不是完美无缺的。在这一部分内容中,你会学到STRIDE的一些变种,以期能帮助弥补其部分弱点。
3.9.1 STRIDE-per-Element
对图表中的某些元素来说,所对应的威胁很普遍,而STRIDE-per-Element方法就是使得STRIDE方法更加规范。例如,一个数据存储区不太可能去假冒别的数据存储区(尽管运行代码可能对它正在访问哪个数据库而感到迷惑)。通过关注对每个元素的一系列威胁,该方法就能更容易地找到威胁。例如,微软利用表3-9作为其安全开发生命周期(SDL)威胁建模培训的核心部分。

利用这个表格,你可以分析攻击者是如何篡改、如何读取数据或阻止访问数据流。例如,如果数据在以太网上传输,很常见的是,在同一个网络的人可以读取、修改所有数据内容或是发送大量数据包导致TCP超时。你可能会说网络分段可以减缓这些威胁。上面表格中“否认”栏中有一个标记,它的意思是解决这个问题涉及日志数据存储,并且有时日志记录会受到特殊攻击而允许否认攻击。
这里讨论的威胁是针对表3-9中元素的。每个元素都是受害主体,不是攻击主体。如果你篡改了一个数据存储,威胁是针对数据存储及其本身数据的。如果你对一个进程实施假冒,那么这个进程就是受害主体。在不讨论技术细节的情况下,通过篡改网络来假冒实际上是对终端的假冒,也就是说,其他终端会对另一端连接的是什么而感到困惑。上述表格关注对一个进程的假冒,而不是对数据流的假冒。当然,你若在检查数据流时发现了假冒威胁,你一定要记录下来以便后续解决,不要太担心它属于哪种威胁。STRIDE-per-Element方法在规范性方面很有优势,它能帮助你确定该寻找什么威胁,而不是检查表的形式:“网络组件:跨站脚本攻击(XSS)、伪造请求攻击(XSRF)……”对于使用该方法有经验的人,可利用这些元素寻找组件中的脆弱点。对于不太熟悉方法的人来说,仍然可以用来寻找很多通用的问题。
STRIDE-per-Element确实有两个弱点:首先,在一个给定的威胁模型中,类似的问题会反复出现多次;其次,这个表格可能并不能描述你的问题。事实上,从某种程度上说,表3-9是特别针对微软公司的。最容易看出该弱点的是“由外部实体造成的信息泄露”,这是对一些隐私问题的描述。(但这绝非对隐私问题的完整描述。)然而,表中并没有暗示这可能是个问题,原因在于,微软有一套单独的隐私分析过程,而这是在安全威胁建模范畴之外的。因此,如果你打算采用这种方法,要分析该表格是否包含了你所关心的问题,如果不包含,重新构建一个适合你的分析场景的版本。另外很多人想要讨论数据流假冒威胁,这该是STRIDE-per-Element的内容吗?假冒行为是对终端的假冒,但是这样的描述可能会帮助寻找那些威胁。另外还要注意,你添加的“x”越多,你就离“针对图表中每个元素思考STRIDE”越近。有人会问这是好事还是坏事,这个问题提得很好。如果你希望更加全面,这是有帮助的,而如果你希望只关注最有可能出现的问题时,这就可能是个分心的事了。
那么什么时候代表完成了STRIDE-per-Element分析工作?在STRIDE-per-Element中,当每个检查框中都有一个威胁时,说明你正做得相当好;如果你思虑再三,还在考虑针对减缓措施的威胁时(或者寻找绕过他们的方法),你将能做得相当好。
3.9.2 STRIDE-per-Interaction
STRIDE-per-Interaction是识别威胁的最简化方法,初学者很容易理解。威胁不会凭空出现,它们是在与系统交互的过程中出现的。STRIDE-per-Interaction方法可以通过考虑数据元组(源、目的、交互)枚举威胁,以及枚举与其对抗的威胁。起初,这个方法的另一个目的是减少一个建模者需要思考的事情,但是没能按照计划实现。STRIDE-per-Interaction方法和STRIDE-per-Element方法会引出一样多的威胁,但是用这种方法可以更好地理解威胁。此方法是由Larry Osterman和Douglas MacIver研发出来的,他们二人都供职于微软公司。表3-10和表3-11展示了STRIDE-per-Interaction方法,都引用了两个过程Contoso.exe及Fabrikam.dll。表3-10展示了哪些威胁适用于每个交互过程,表3-11展示了STRIDE-per-Interaction方法应用于图3-1的例子。图3-1展示了两个表格中提到的命名实体和信任边界。

表3-10中列的内容如下:

  • 数字,代表某一行(例如,“请看第2行,让我们看看假冒和信息泄露威胁”)
  • 你要查看的主要元素
  • 元素与其他元素之间的交互
  • 适用于该次交互的STRIDE威胁

当STRIDE-per-Interaction中有每个威胁对应的检查表时,你可以完成得很好。假如你思虑再三,还在考虑针对减缓措施的威胁时(或者寻找绕过它们的方法),你将能做得相当好。
STRIDE-per-Interaction方法太复杂了,如果手边没有参照的图表,就很难使用该方法。(相比之下,STRIDE是个比较容易的助记符,而STRIDE-per-Element也足够简单,表格可以存储或者将表格打印在易于携带的卡片上。)
3.9.3 DESIST方法
DESIST是STRIDE方法的一个变种,由Gunnar Peterson创建。DESIST表示争论(Dispute)、权限提升(Elevation of privilege)、假冒(Spoofing)、信息泄露(Information disclosure)、拒绝服务(Service denial)及篡改(Tampering)。(用一个没那么华丽的词“争论”代替了否认,之所以拒绝服务的两个英文词的顺序进行调换,是为了能让首字母缩写呈现现在的样子。)如果从零开始做威胁建模,或许可以用DESIST方法而不是STRIDE方法,但是STRIDE方法已经存在了数十年,对微软来说,换一种方法的代价很高。(Scorpion软件公司的首席执行官Dana Epp表示,DESIST首字母缩写中有两个重复一样的首字母会比较具有挑战性,STRIDE就不存在这个问题。)因此,使用STRIDE-per-element就是常态,而不是使用DESIST-per-element。不管怎样,用助记符总是有助于人们寻找威胁的。

时间: 2024-10-21 21:01:25

《威胁建模:设计和交付更安全的软件》——3.9 STRIDE变种的相关文章

《威胁建模:设计和交付更安全的软件》——第2章威胁建模策略2.1 “你的威胁模型是什么样?”

第2章威胁建模策略 越早发现问题,越容易解决问题.威胁建模要做的就是发现问题,让你在开发与设计的早期阶段或准备发布操作系统时及时解决问题.威胁建模方法有很多种,有些方法是特定的,就好比模型飞机装备只能用于构建F-14战斗机一样.有些方法则比较通用,例如用乐高模型可以创造很多种东西.但有些威胁建模方法不是很容易融合,就像Erector的模块和乐高模块连接就不合适.本章内容将讲述多种威胁建模策略和方法,每一种都会深入讲解,为更有效地发现威胁做准备. 我们从简单的问题开始,例如询问"你的威胁模型是什么

《威胁建模:设计和交付更安全的软件》——2.2 集体研讨

2.2 集体研讨 集体研讨是列举威胁的最传统方法.召集经验丰富的专家集聚一堂,提供工作环境(白板和鸡尾酒餐巾纸都是很传统的),然后开始讨论威胁.集体研讨结果的质量与专家经验和所用时间有很大关系. 集体研讨分为产生创意.分析.选择创意三个阶段.集体研讨将会发现各种类型的可能发起的攻击.在产生创意阶段,应该禁止批评.如果你想要挖掘所有可能的潜在威胁,批评气氛会起到阻碍作用.可由一名会议主持人来不断推动研讨过程. 集体研讨的时候,关键是要有威胁建模技术方面的专家参与.不然,很容易陷入对威胁建模本身不能

《威胁建模:设计和交付更安全的软件》——第1章 潜心开始威胁建模1.1 学习威胁建模

第1章 潜心开始威胁建模 谁都可以学习威胁建模,更进一步说,每个人都应该学习威胁建模.威胁建模是利用模型来发现安全问题,这意味着通过提取大量细节对安全问题进行全面检查,而不是代码本身.之所以要构建模型,是因为模型能让你在没构建系统之前即可发现问题,以及在问题出现前提早发现问题.最后,威胁模型可以预见可能侵袭你的威胁. 首先,威胁建模是一门实用科学,本章系统地描述其实用性.尽管本书为你提供了很多有价值的定义.理论.观点.有效的方法和技术,但你还是希望能将这些用于实践.因此,本章内容主要从实践经验展

《威胁建模:设计和交付更安全的软件》——2.4 软件模型

2.4 软件模型 建立清晰的软件模型有助于寻找威胁,否则你会陷入到软件功能正确与否的细节中.图表是软件建模的最佳方法. 正如你在第1章学习到的内容,在白板上绘制图表是开始威胁建模非常有效的方法,但是当一个系统特别复杂,在白板上绘制或重新绘制模型就变得不可行了.这时,你要么简化系统要么使用计算机化的方法. 本章,你能学习到各种图表,在威胁建模时如何使用各种图表.如何处理大型系统威胁建模的复杂性.你也能学到信任边界.有效标签,以及如何验证图表等更多细节内容.2.4.1 图表类型 做图表有很多方法,不

《威胁建模:设计和交付更安全的软件》——1.2 独立威胁建模

1.2 独立威胁建模 你已经初步了解威胁建模,恭喜你!不过要记住:不反复练习的话是无法到达去卡内基音乐大厅表演的水平.这就意味着你要再来一次,这回你独立完成,因为再做一次才能做得更好.选择一个系统,然后对其威胁建模.按照下面简化的五步进行: 1.画示意图 2.用EoP游戏寻找威胁 3.用一些方法来解决每个威胁 4.用本章末尾的检查表来检查工作 5.庆祝和分享你的工作 现在,如果你仍对威胁建模生疏,最好的办法是经常练习,应用于对你来说重要的软件和系统.威胁建模一些系统后,你会发现运用这些工具和技术

《威胁建模:设计和交付更安全的软件》——第二部分 发 现 威 胁

第二部分 Part 2 发 现 威 胁 第3章 STRIDE方法 第4章 攻击树 第5章 攻击库 第6章 隐私工具 威胁建模的核心是威胁. 发现威胁有多种方法,这些方法就是第二部分的主要内容.每种威胁发现方法都各有优缺点,不同情况下可以使用不同的方法.本部分介绍的每种方法都可以看作一个乐高积木,在四步框架的第二步中,你可以用一种方法替代另一种方法. 威胁建模方法与其他建模方法最大的不同是,它关注哪些方面可能出现安全问题.本部分中提供的模型,通过将威胁抽象化,来进一步帮助你思考这些安全问题.模型(

《威胁建模:设计和交付更安全的软件》——3.11 小结

3.11 小结 对所有技术系统来说,STRIDE方法都有助于寻找威胁.能让这种方法更为有帮助的是一整套更为详尽的威胁,威胁表格可为信息安全领域新手提供帮助,或者作为安全专家的参考资料(附录B也有这样的功能).STRIDE的变种方法可突出威胁发现重点和注意事项.由此,STRIDE-per-element方法是非常有用的,它可以按照你的需求定制.如果威胁建模专家想要从头开始学习威胁建模,或许DESIST可能会让我们做得更好--并在寻找威胁上有所突破.

《威胁建模:设计和交付更安全的软件》——2.5 小结

2.5 小结 威胁建模的方法不止一种,可以采用资产建模.攻击者建模或软件建模."你的威胁模型是什么"和集体研讨方法,适用于安全专家,但是对没什么经验的威胁建模者来说,结构化不足.集体研讨有一些更为系统化的方法,包括场景分析.事前剖析.电影情节回放.文献检索,可以增添一些框架结构,但还不是最好的. 如果是从资产开始威胁建模,相互重叠的术语定义,包括攻击者想要的.你想保护的和垫脚石等,可能会让你寸步难行.资产会在哪里出问题,在以资产为中心的方法中没有提供相应的解决路径. 攻击者建模也是很有

《威胁建模:设计和交付更安全的软件》——1.4 小结

1.4 小结 每个技术专业人士都可学习威胁建模.威胁建模包含两个模型的交集:一种是可能出错的模型(威胁),应用于你所构建或部署的软件模型,在简图中是已编码的:另一种是威胁模型STRIDE:假冒.篡改.否认.信息泄露.拒绝服务.权限提升.将这一威胁模型制作成权限提升游戏,给模型添加结构化和提示. 有了示意图,还有一副权限提升游戏牌,软件开发者可以对他们正在构建的软件进行威胁建模,系统管理员可以对他们正在部署的软件或是正在构建的系统进行威胁建模,安全专家可以为那些安全以外的技术领域引入威胁建模. 解