Threat Modeling 介绍

概述

Threat Modeling, 百度百科翻译成“威胁模型”,这个翻译很不准确,因为,Threat Modeling有时候可能当名次使用,也可以作为动词使用。在以后的介绍中,大多使用Threat Modeling这个术语。 Threat Modeling本质上是影响应用程序安全性的所有信息的结构化表示。 从本质上讲,它是通过从安全的角度来仔细审视和看待应用程序及其环境。

Threat Modeling是捕获,组织和分析所有这些影响系统安全性信息的过程。良好的Threat Modeling可以对应用程序安全风险做出明智的决策。 除了生成Threat Model之外,通常情况下,“威胁建模”还产生了对系统的设计或实现的安全性改进的优先级列表。

几个概念

Threat Agent(威胁代理) : 一组执行attack “攻击”的攻击者。 Threat Agent可以是人(有意或无意的)或自然事件(如洪水,火灾等)

Attack(攻击): 攻击者用来利用应用程序漏洞的技术。 攻击通常与系统漏洞相混淆,攻击通常是利用应用程序中的弱点。例如Brute Force(暴力攻击),通过测试参数的每个可能值(密码,文件名等)来进行暴力的攻击

Vulnerability漏洞: 是应用程序中的漏洞或弱点,可能是设计缺陷或实现错误,允许攻击者对应用程序的利益相关者造成伤害。 利益相关者包括应用程序所有者,应用程序用户以及依赖于该应用程序的其他实体

Threat Modeling的目标

Threat Modeling通过识别系统中的目标和可能的漏洞来提高系统的安全性,然后定义相应的对策以防止或减轻对系统的威胁。 威胁是潜在的或实际发生的不良事件,也可能是恶意的(例如DoS攻击)或偶然的(存储设备故障)。 Threat Modeling是用于识别和评估应用程序威胁和潜在的漏洞的有计划的一种方法。

整个系统生命周期中的Threat Modeling

Threat Modeling最好在整个软件开发项目中持续应用,从一开始的需求,设计阶段就行改考虑安全需求,如对系统密码强弱的要求,对加密算法的要求等,可以最大程度的提高系统的安全性并且节省成本。 理想情况下,在系统设计计划阶段定义出Threat Model,然后在整个生命周期中进行实现和安全实现的细化。 随着更多的系统细节被实现,可能就暴漏了更多的潜在的威胁隐患。 Threat Modeling应该持续地检查,诊断和解决这些潜在的威胁。

对于软件系统,在系统实现的过程中,引入新的潜在的安全威胁在大多数情况下是不可避免的,如实现工程师的编程水平或者平台的安全漏洞等 。 例如,当选择特定技术(例如Java)时,就将负责由该选择所导致的潜在的新的威胁等。

Threat Modeling – 通用步骤

对于应用程序可能存在的潜在威胁,可以通过以下步骤来评估威胁发生的可能性和及其带来的影响,通过回答以下问题有助于理解Threat Modeling的框架:

What are we working on?

我们在做什么?

刚开始,我们需要定义威胁模型的范围。 要做到这一点,我们需要详细了解正在构建的应用程序,可以采用的技术路线如下:

架构图

数据流转换

数据分类

还需要和技术强的工程人员和具有风险意识的角色中收集信息,以便就威胁建模使用的技术路线达成一致。

What can go wrong?

什么可能出错?

这是一个分析的过程,希望在分析的过程中,可以查找出适用于应用系统的主要和潜在的威胁。 可以采用头脑风暴或使用结构化列举的方法来帮助分析。

What are we going to do about it?

我们该怎么办呢?

在此阶段,需要根据上阶段分析出来的潜在的威胁,采取对应的解决方案。 

Did we do a good job?

我们做得好吗?此阶段是验证潜在的威胁及其解决方案是否生效的过程。

上述问题需要经过仔细琢磨,如果要评估应用程序是否足够安全,就必须评估可能导致系统暴露潜在威胁的种类及可能性。 

在分析的过程中,没有绝对正确的方法来评估可能的威胁。但是存在相对较好的方式,如果尝试评估所有的潜在的安全漏洞,威胁等,是不切实际的,而且是浪费时间和精力的。目前支持许多Threat Modeling自动化工具,会收集大量数据并产生数千种可能的潜在的威胁,如前说讲,尝试解决所有的安全问题通常是徒劳的,但是,专注于发现高可能性发生的威胁和有很大破坏影响的威胁是有意义的。

基本的Threat Modeling过程包含以下通用步骤。在系统中,研究发现潜在的威胁问题的过程是迭代的,并根据所做的工作不断完善。有时候,从所有可能的安全漏洞开始分析通常是毫无意义的,因为大多数漏洞都不会被(Threat Agent)威胁代理所攻击,因为该安全漏洞部分可能受到保护措施的保护,如置于防火墙之后和特定的内部环境,或者这些安全漏洞不会导致不良的后果。因此,通常需要仔细评估哪些安全问题是真正的系统威胁,从而采取相应的修复。

评估范围 – 最重要的是要深刻理解我们在做什么,识别系统的各个组件,比如,对于系统中的信息数据库或敏感文件通常是很容易定位的,但是如果想要了解应用程序提供的功能并对其进行评估就会困难。 

识别威胁代理(Threat Agent)和可能的攻击 (Attack)- 威胁模型的一个关键部分是对可能能够攻击应用程序的不同人群或系统的描述。这些群体或系统应该包括内部的和外部的,同时包括无意中执行的错误和特定的恶意攻击。

了解对策 – 威胁模型必须包括现有的潜在的威胁的对策

识别可利用的漏洞 一旦了解了应用程序中的安全性,就可以分析出潜在的安全漏洞。可以评估出针对改安全漏洞可能的攻击,以及这些攻击带来的负面后果等。

 确定优先级的风险 – 确定优先级是威胁建模的关键,总有很多安全漏洞根本不会引起任何负面的影响。对于每种威胁,可以估计该威胁发生的可能性和其所导致的影响大小,以确定该威胁的总体风险或严重性级别

确定减少威胁的对策 – 确定对策,将风险降低到可接受的水平

优点

如果Threat Modeling建模过程做得好,那么威胁建模可以在整个项目中提供明确的清晰的有条理的安全视角,该安全视角可以是产品经理和工程人员对产品系统的安全细节,可能的漏洞等方方面面有更加细致的认识,从而来证明所做安全工作的合理性,威胁模型允许合理地做出安全决策。如果在没有做Threat Modeling的情况下,对系统的潜在的安全细节没有细致全面的认识,很难做出和评估由此带来的安全风险 。威胁建模过程产生的报告可用于解释和保证应用程序的安全性,评估该系统是安全合理的。

Threat Modeling 包含什么?

Threat Modeling可以应用于各种各样的系统,包括软件,应用程序,网络,分布式系统,物联网中的系统,业务流程等。很少有技术产品不能进行Threat Modeling; 威胁建模可以在开发中的任何阶段进行,最好是尽早进行 – 以便可以为设计提供安全改进建议等。

在大多数情况下,Threat Modeling包括:

用户所担心的系统的描述,设计和模型等;

当威胁范围发生变化时,可以检查的假设判断列表等;如系统增加了REST的访问,就要对REST 接口进行安全检验;

系统的潜在的威胁列表;

对于每个威胁可以采取的改进措施清单;

验证Threat Modeling以及所采取措施是否成功的方法;

对于Threat Modeling, 很重要的一点是:Threat Modeling,越早越好,但永远不会太晚。

什么时候需要重新构建Threat Modeling?

当系统发生变化时,需要考虑这些更改对安全性的影响,有时这些影响并不明显。Threat Modeling通过在当前的开发阶段思考“我们现在正在在做什么?”来集成到日常的Agile开发中。对产品安全性的改进是伴随整个产品的开发周期的,不要试图在一个或几个Agile Sprint解决产品所有的安全问题。当产品引入新的特性时,需要分析新特性可能带来的新的安全威胁 。当系统的架构没有改变时,系统没有引入新的流程或数据流,并且传输的数据结构没有变化,那么“什么可能出错?”这个问题的答案不太可能会改变。当其中一个或多个发生变化时,就需要检查当前产品中可能出现的问题,并思考“我们该怎么办呢”这个问题,在当前的开发阶段,解决该安全隐患。 “我们做得好吗?”是在解决潜在的安全隐患后,进行交付和验证工作。如果发生安全事故后,需要返回并检查威胁模型并加以改进。

示例

本示例简单演示一个复杂系统的数据流图,并根据该数据流图生成Threat Modeling的报告。

1.用户在威胁建模工具中创建数据流图;

1543244454289068.png

2.用户为图元素分配属性,如下图所示,列出组件元素及属性;

1543244595788596.png

3. Threat Modeling工具根据图元素类型和分配的属性生成每个元素生成威胁列表和可能的解决方案。 然后开发人员分析这些潜在的威胁列表的优先级及修复措施等。下面列举一些报告作为参考:

1543244701907320.png

Threat Modeling 介绍

发表评论

邮箱地址不会被公开。 必填项已用*标注

八十 二 + = 九十

滚动到顶部