对于创建网络威胁模型并没有放之四海而皆准的办法,只需保持灵活性,并专注于谁、什么、为什么、如何以及何时。目前有很多关于创建威胁模型的理论。多年来,笔者从概念水平和应用水平以很多方式来使用威胁模型,这些威胁模型的可用性往往取决于它们被用于什么样的任务。
解构威胁模型的目的需要退后一步审视它们在任何风险情况下的价值,专注于谁、什么、如何、何时以及为什么:
˙谁在进行攻击,包括民族国家、有组织的犯罪团伙等?
˙攻击的终极目标是什么,例如信用卡数据或计算机资源?
˙攻击者将使用何种方法来获取数据,例如SQL注入攻击还是缓冲区溢出攻击?
˙攻击者为什么要执行攻击?其目标数据具有货币价值,或者攻击者可以利用你的资源来攻击其他目标?
简单地说,威胁可以被描述为谁将会攻击什么,使用何种方法来达到其目的。
什么以及如何:威胁模型通常把大部分重点放在什么和如何。从攻击什么以及如何攻击来入手,可以让你找出设计中的潜在漏洞,无论谁将执行这个攻击及其动机。然而,仅专注于什么和如何存在的挑战是,它们会随着时间而改变。
谁和为什么:与什么和如何不同,谁以及为什么往往是相当稳定的。这里的假设是,无所谓谁或者为什么攻击,重点应该是阻止攻击。不过,专注于谁和为什么可以带来提供更好保护的新思路。
例如,我们知道在进行高级持续威胁(APT)的攻击者正在模糊测试Flash Player。为了从不同的角度来看这个问题,我们决定停下来问为什么。这不仅仅是因为Flash Player的普及性。攻击者专注于Flash Player是因为他们可以将其嵌入到Office文档来执行有针对性的鱼叉式钓鱼攻击。
有针对性鱼叉式钓鱼攻击是有价值的攻击方法,因为攻击者可以在最小的风险下直接访问特定目标。通过添加Flash Player警告对话框来警告用户Office中潜在的鱼叉式钓鱼攻击尝试,我们解决了Flash Player带来的威胁,从而让攻击没那么有效。在添加简单的缓解措施后,零日攻击的数量减少,迫使攻击者开发新的漏洞利用方法。
何时:检查何时进行攻击也是非常有用的。大多数人认为威胁模型是针对设计阶段的工具。然而,威胁模型也可以用于制定事件响应计划。你可以考虑给定的风险,“这个缓解措施是何时失效或者被攻击者绕过,我们将如何响应。”
威胁模型灵活性
针对应用程序的威胁模型可以有利于控制高级别(谁/为什么)和低级别威胁(如何/什么)。但在快速发展的环境中,保持威胁模型的更新需要付出很大的努力。
并且,这个问题没有放之四海而皆准的办法。从以往的经验来看,最好的方法是尽量保持威胁建模的根本,同时保持灵活性。为了实现这一点,考虑这三个因素:
1. 应该有针对每个应用程序的一般高级别威胁模型。这种高级别模型可以确保每个人都朝着同一个方向,并且,它可以根据对应用程序的重大改变来进行更新。高级别的威胁模型可以与客户共享,帮助新员工了解应用程序的安全设计,并作为安全团队的参考。
2. 威胁模型不必记录在传统威胁模型格式中。 传统格式非常清楚且有组织性,但也很复杂。威胁模型的目标是记录风险并制定计划来解决这些问题。对于单个功能,这可能是让每个人都可以理解的简单的信息,例如“这个功能没有安全影响”。
3. 把信息放在开发人员最有可能找到的地方。 例如,如果你使用上述的简化格式,最好把威胁信息放在缓解措施存在的地方。这些威胁信息可以直接包含在规范中、在代码注释或者用于威胁单元测试中。当正式威胁模型作为完全独立的文件存在时,这可以帮助消除交叉引用问题。
威胁建模的概念可以帮助确保设计的全面性。通过检查谁、为什么以及什么时候,威胁建模的传统方法可以更有效地识别高基本环境和响应。通过灵活的方式来说明文件,安全信息可以放在开发人员最可能找到、使用和维护的地方。这些步骤可以帮助进行威胁建模。