威胁建模

威胁建模是一个识别潜在威胁的过程。通过威胁建模以期找出攻击者的画像及其最可能的攻击路线,以及最易遭受攻击的资产。所以威胁建模做的即是找到最易攻击的地方并制定出应对方案。

概念上讲,威胁建模就在我们的日常生活中,只是我们未察觉而已。上班早高峰规避危险的操作及地方等以防可能出现的事故。在操场玩耍的孩子们找出最佳路径直奔目的地以规避校霸围追堵截。在更正式的场景,威胁建模从远古起即已用于军事防卫等备战规划上了。

威胁建模的演进

主要有如下几个。

1999,微软提出STRIDE模型识别攻击。

  • S - Spoofing identity 身份欺骗
  • T - Tampering with data 数据篡改
  • R - Repudiation 抵赖
  • I - Information disclosure 信息暴露
  • D - Denial of service 拒绝服务
  • E - Elevation of privilege 特权提升

2014,Ryan提出DML(Detection Maturity Level,检测成熟等级)模型。该模型认为威胁者是一个威胁场景的实例,而一个威胁场景是指一个特定攻击者在脑海有了一个特定的攻击目标后使用各种策略以达到该目标。 目标以及策略表示DML模型的最高语义学等级;而TTP(Tactics, Techniques and Procedures 手段,技术及程序)表示中间的语义学等级;攻击者使用的工具表示DML模型的最低语义学等级。

威胁建模的方法

威胁建模可以独立的使用如下几个方法,即:以资产为中心,以攻击者为中心,还有以软件为中心。下面是比较著名的四种威胁建模方法。

  • STRIDE

微软1999年提出的该方法可为开发者提供找出“我们产品所面临威胁”的一个助记符。与此衍生出诸多模型,实践,数据流图等。

  • P.A.S.T.A.

PASTA(The Process for Attack Simulation and Threat Analysis,模拟攻击及威胁分析)是一个七步过程,以风险为中心的方法论。是一个动态威胁识别,威胁列举及评分的过程。

  • Trike

Trike是一个将威胁模型看作风险管理工具的方法论。

  • VAST

VAST(Visual, Agile, and Simple Threat modeling 可视化,敏捷及简化威胁建模)。是一个将威胁建模贯穿整个SDLC(软件开发生命周期)且与敏捷软件开发无缝集成的方法论。

常用的威胁建模流程

威胁建模的第一步是进行应用及基础设施的可视化表示。将应用及基础设施梳理划分成各个模块的目的是便于分析。划分完成并可视化表示后,即可以进行威胁识别及进行潜在威胁的列举。再后来进行威胁发生的风险评估,威胁的优先级评估,从而基于各种方法制定出合适的应对措施。 威胁的识别及列举可以从以攻击为中心的方式或从以资产为中心的方式来开展。前者注重找出可能的攻击类型以作应对;后者注重找出受保护的资产以防攻击。当然,两种方法各有利弊。

基于数据流程图的可视化表示

上述诸如STRIDE,PASTA,Trike建模方法都使用了DFD(data flow diagrams,数据流程图)来进行可视化表示。DFD是一个让系统工程师从上层来看一个应用的数据是如何流动,存储及操作的工具。DFD有五种特有符号:数据流,数据存储,过程,交互者,信任边界。 一旦一个系统被划分为这五个部分,安全专家即可对所有已知威胁类别进行识别以找出该系统的威胁切入点。一旦找到潜在威胁,即可对其进行分析及控制。

基于过程流程图的可视化表示

上述VAST建模方法使用了不同的方式,其将ATM(application threat models,应用威胁模型)与OTM(infrastructure threat models,基础设施威胁模型)进行了区分。ATM使用PFD(process flow diagrams,过程流程图)来进行创建。 过程流程图将应用划分为各种特性或用例,而每个特性又可由页面及代码块来构成,最后特性通过交互协议连接起来。这样,一个应用的过程流程图即是一个用户如何沿着各种特性移动的一张地图。

OTM则以类似于传统DFD的端到端的数据流图进行创建。端到端的数据流图将一个系统划分成各种独立共用的组件,然后,组件间又通过线路或协议进行通信。

一旦ATM及OTM构造好,则可进行潜在威胁识别,枚举,优先级划分,从而进行风险评估及安全控制。

参考资料

[1] https://en.wikipedia.org/wiki/Threat_model