当有人告诉我时,我问了一个有关如何确保我的应用程序安全的问题:


这取决于您的威胁模型。


什么是威胁模型?如何为我的应用程序建立威胁模型?

评论

参与此过程的相关有用信息:security.stackexchange.com/questions/104137/threat-modeling

每当有人问“这是安全/安全吗?”时,我都会使用它。好吧,从什么安全?如果您不告诉我您在担心什么,我就不能告诉您是否足够。

@ MechMK1您将问题放在软件开发的上下文中。您是否仅在此范围内寻找答案?

@schroeder不一定。我这样说,因为这是我最常看到这种情况的地方。我非常乐意接受有关如何使这个问题更笼统的建议。

如果您正在寻找要使用的威胁模型,我的GitHub上有一个威胁模型方法,该方法基于STRIDE和VAST之类的标准,并且专门为在软件开发期间的敏捷周期中使用而设计。它还具有模板,说明和示例。如果这不适合您的需求,那么本页面已经提到了许多其他方法,它们也可以正常工作。

#1 楼

FilipedosSantos的回答在解释正式的威胁建模练习(例如,Microsoft STRIDE方法)方面做得非常出色。

另一个很棒的资源是executionByFork的github上的威胁建模课程概述。不太正式的。我通常将其用作对新用户的询问,“这是否安全?”好像“安全”是是/否属性。通常是这样的段落的一部分:


这取决于您的威胁模型。 “安全”不是问题。防范什么?你的孩子姐姐在你的iPhone上窥探?外国政府将芯片焊接到您的数据中心设备上吗?还是介于两者之间?我真的很喜欢电子前沿基金会的威胁建模框架,该框架着重提出以下三个问题:



/>您在保护什么?
您在保护谁?
您可以投入多少资源来保护它?



我真的就像EFF编写此书的方式一样,因为这些简单易回答的问题可以指导安全背景为零的人为他们找出“适当数量的安全性”。

评论


@FilipedosSantos我同意,一旦您熟悉了框架,便可以将其应用于更简单的情况。但是,如果有人问他们应该在自己的gmail帐户上使用哪种2FA方法,那么IMO会教他们STRIDE模型过大了,相反,我宁愿用EFF问题来轻推他们。

– Mike Ounsworth
20年1月29日在15:43

切线,但是:应该是“多少资源”还是“多少资源”?他们俩对我来说都错了...

– Conor Mancone
20年1月29日在17:22

我的经典示例是询问他们是否正在建立“匿名的可爱猫咪图片投票站点”或“用于发起先发制人的核打击的网络门户”。显然,在这两种情况下,安全问题完全不同(以及为什么要在世界上创建一个用于发射核导弹的门户网站!

– Conor Mancone
20 Jan 29 '17:25



@MikeOunsworth :)的确如此。尽管我实际上已经看到:“我正在为一家金融科技初创公司建立支付门户。如何保护支付门户,这是我的新手吗?”。我的回答是:“雇别人做。”

– Conor Mancone
20年1月29日在19:05

@ConorMancone我会说“什么资源”?问多少或多少听起来不对劲,因为这就像问您需要多少工具来制造汽车一样。数量或金额并不是很有趣。

–JiK
20年1月30日在10:33

#2 楼

可以在OWASP页面上有关威胁建模的摘录中找到一个很好的定义:一个应用程序。本质上,
是通过安全性眼镜来查看应用程序及其环境的视图。


如何制作威胁模型将完全取决于威胁建模应用的方法。微软公司使用的是基于STRIDE威胁模型的最常用方法之一。

通常,威胁建模研讨会/会议是所有开发人员,产品所有者,安全专家和主持人的圆桌会议(如果您不在团队中,则可以单独完成)。所涉及的将按顺序执行其方法所建议的步骤,结果将是线程模型文档/工件。

Microsoft威胁建模方法之一定义了5个主要步骤:

定义安全要求。
创建应用程序图。
识别威胁。
缓解威胁。
验证威胁已得到缓解。

我工作的公司使用类似的方法,并且所有开发中的产品都需要使用该方法。我发现一个很有趣的区别是,我们可以为整个产品建立一个威胁模型,也可以为每个产品用例建立一个威胁模型。

最后,威胁模型就是结果在许多威胁建模会议中,开发团队,采购总监和安全专家将集思广益,以发现可能的漏洞,然后使用定义的方法来创建威胁模型文档。

#3 楼

威胁模型回答了这个问题-具体软件(或“系统”)的合理预期威胁是什么?强调具体的(==并非学术/理论上的)和合理的(==不能过分承担的,也被称为偏执狂)

偏执狂的威胁模型可以(从字面上看)使一切瘫痪(不限于软件)。学术/理论上的威胁模型可能会将防御/缓解的成本增加到无穷大。

威胁模型涉及您要保护的东西的生与死,必须保护的内容以及应对的内容。客户或“更大的系统”有望处理。你不信任谁,为什么? “为什么”部分非常重要,答案不能是“因为”。您正在定义责任范围。

防御和缓解计划不是威胁模型的一部分。缓解措施是指某些事情无法合理防御,或者被认为是胡言乱语或一时的流行风潮(过去几年中曾发生过几次-成为头条新闻-国家安全局最新发布))

示例:

#1假设您正在为军事承包商编写服务器,以对引擎(或整个设备/车辆)进行FEM分析。什么是合理预期的威胁?拒绝服务和保密。不是什么欺骗,篡改,拒绝和特权提升。

为什么?

认证和授权以及(更强大的)加密由软件外部的系统处理(您合理地期望由客户的“环境”处理,通常是这样)。破坏“完整性”是没有意义的(将破碎的网格提交给分析),不需要的抵赖(有人提交了“破碎的网格”或“不是真正的“引擎”的网格”,然后否认了)-无关紧要您的业​​务)。

拒绝服务确实会伤害您(服务器不工作==没有钱),并且是有道理的(从谚语;“俄罗斯人”到马路对决到“来自中国的一般性网络攻击”的竞争)已经发生,并且将会发生。损坏是真实的)。机密性-即使您是美国公司,您也无法信任云-即使是.gov Azure(有人也会将线框出售给洛克希德公司),更不用说了,更不用说您的客户是中国人还是俄罗斯人,德国人或英国人...-您已经了解了图片

#2假设您正在编写/移植会计或银行软件以“作为服务”。什么是合理预期的威胁?欺骗,篡改,否认。没什么拒绝服务。可能是什么?特权提升(取决于软件的性质)。有什么复杂的?保密。

为什么?您必须转到云(它将处理DoS),并且机密性是该业务线的合法类别,受法律系统保护(或不受其保护)(防止“ mol亵”,这会给女友的口哨声敲响首席执行官与您无关。您的责任变得很复杂,因为您要回答矛盾的要求。您需要律师。

另一方面,不可否认性或多或少是您业务的生死攸关,并且经常发生。根据合同甚至法律要求,您可能需要进行过多的审核。篡改是相关的(有人证明篡改是可能的-不可抵赖性已经消失),并且对于攻击者(金钱,金钱,金钱)非常致命且具有吸引力。一个人可以在不破坏(通常)加密货币的情况下进行篡改-您的“篡改”有很多分支-现在呢?

欺骗不是“身份验证”-第三方可以记录交互/事务(转移资金,销售记录,一切),而无需任何人注意。”欺骗的第二部分实际上是在篡改(能够“即时”更改数据的能力)真正的“中间人”攻击。“无人注意”是定义方面。一个人根本不必破坏身份验证,如果他不这样做,则更好-最终的“不注意” )。

特权的提升可能会或可能不会成为您的问题,具体取决于您的系统通过“有线”提供的服务即私有/受保护的渠道(始终是其他人的问题)提供的服务是谁?您的客户,您是否想要/必须集成到更大的系统中或编写自己的系统?您可能必须两者都做,但重要的是要知道什么以及为什么。当有人问你“你有威胁模型”时,他在问:“你知道你有什么吗? e为您的非常特殊的案件辩护”。

评论


#1-您不在乎auth&auth,因为环境可以处理auth&auth,但是您是否在担心DoS,因为环境不处理它?

–彼得
20年2月2日在20:23

#4 楼

威胁建模是使用模型来考虑安全性。这可能真的很简单,例如“我们考虑使用随机Oracle威胁模型”,也可以是一种更加结构化和系统化的分析方法,例如使用数据流程图为应用程序建模并使用STRIDE查找针对它的威胁。 />
我主张以四个问题的框架作为威胁建模的核心:


我们正在从事什么工作?
会出错吗?
>我们要怎么做?
我们做得好吗?

有很多方法可以回答这些问题-我们可以将Web应用建模为状态机。我们可以使用终止链来解决可能出现的问题。我们可以考虑将消除/减轻/转移/接受作为解决问题的策略,并且在缓解范围内,有很多优先级划分方法和策略,例如重构解析代码或添加TLS。

此框架之所以有效,是因为它从工程师可以理解和访问的东西(即他们正在研究的东西)开始。它之所以有效,是因为有足够的回顾时间,可以花些时间进行调整并帮助您学习。使用STRIDE建立威胁模型”,我们可以说“我们使用STRIDE帮助我们找出可能出了问题的地方”,这使我们从讨论什么是威胁模型转变为讨论不同的方法。

这是一种以软件为中心的方法,也有以资产为中心和以攻击者为中心的方法。以资产为中心的方法往往会失败,因为资产库存困难且耗时;列表中经常包含一些分散的东西,例如声誉。当软件项目团队接管资产时,以资产为中心的方法也会失败,因为大多数资产都远远超出了项目范围,或者很难在项目的唯一控制中识别资产。攻击者角色方法往往会失败,因为不可能采访大多数攻击者,而“采访参与者”是塑造角色的关键步骤。它们在列出攻击者列表时也存在问题,这意味着您依赖于路径。如果您没有包括孩子,巨魔或民族国家,那么您将错过重要的威胁。