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

简介:

本节书摘来自华章计算机《威胁建模:设计和交付更安全的软件》一书中的第3章,第3.9节,作者:[美] 亚当·斯塔克 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.9 STRIDE变种

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


27f4c8e3c6600dcf92a3acdd82d6cdc5482d6b6b

利用这个表格,你可以分析攻击者是如何篡改、如何读取数据或阻止访问数据流。例如,如果数据在以太网上传输,很常见的是,在同一个网络的人可以读取、修改所有数据内容或是发送大量数据包导致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展示了两个表格中提到的命名实体和信任边界。


<a href=https://yqfile.alicdn.com/ff358a81ab9edbd199e3a814f36dcc96b6885cd2.png" >

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

    3e0436e85921102b2e51263d847a17aea4ea48a9



    <a href=https://yqfile.alicdn.com/993e68ee30615c75cb4e61940c0a8c33c41257f8.png" >


    <a href=https://yqfile.alicdn.com/416b2820a6b2ffd11936dc0158f38e91a735225b.png" >

    当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。不管怎样,用助记符总是有助于人们寻找威胁的。

相关文章
|
11月前
|
机器学习/深度学习 人工智能 数据可视化
阿斯利康团队用具有域适应性的可解释双线性注意网络改进了药物靶标预测
阿斯利康团队用具有域适应性的可解释双线性注意网络改进了药物靶标预测
171 0
|
11月前
|
机器学习/深度学习 编解码 测试技术
解决CNN固有缺陷, CCNN凭借单一架构,实现多项SOTA
解决CNN固有缺陷, CCNN凭借单一架构,实现多项SOTA
118 0
|
机器学习/深度学习 数据采集 人工智能
推广TrustAI可信分析:通过提升数据质量来增强在ERNIE模型下性能
推广TrustAI可信分析:通过提升数据质量来增强在ERNIE模型下性能
推广TrustAI可信分析:通过提升数据质量来增强在ERNIE模型下性能
|
敏捷开发 测试技术 项目管理