若没有应用环境,安全就没有意义。嵌入式系统设计师经常误解安全,认为诸如特定的加密算法和安全协议等安全措施只是系统的附加特性。安全是一个过程,而不是永远保持不变的一款产品或一种终极状态。而且,也不能在产品将永远保持安全的假设下,把安全措施简单地加入到一款产品中。设计师应该在设计过程开始的时候,就把安全和其他参数如成本、性能和功耗等一并进行考虑。
在设计的初始阶段,利用安全设计检测威胁
在设计安全解决方案的时候,首先必须做的就是定义一个威胁模型,然后再创建安全策略。一旦评估完成,就能安心地选择具体的技术来实现安全对策。威胁决定应对策略,策略决定设计。
许多设计师都会犯同一个错误,在设计安全系统时没有首先明确和了解可能遇到的真正威胁、以及这些威胁会为他们的终端产品带来的重大风险。相反,他们教条地把分类的安全技术堆在一起,并希望能获得很高的安全性。这样做代价高昂,没有系统能防御所有的安全威胁,在设计中囊括那些没有必要的技术和防御没有实际威胁的风险毫无意义。
即使威胁建模有价值,它本身也存在风险
对于资源受限的设备,嵌入式系统必须在存储容量、功耗、处理能力、上市时间及成本等参数和安全需求之间获取一种平衡。尽管存在资源不足的挑战,通过仔细考虑威胁模型并设计系统使其工作在能满足该模型的可用计算能力限制之内,仍有可能开发出使产品在开放环境中有效工作的系统。
对系统设计师来说,考虑“威胁建模”的原理非常有用。威胁建模是基于一种假设,即每个系统都有值得保护的固有价值。然而,因为这些系统是有价值的,他们对内部或外部威胁也是开放的,这些威胁能够且经常给终端产品带来损害。设计完成后的安全漏洞常常是无法修正的,且危及投入的资金和开发资源,因此需要在设计周期的初始阶段增强对安全评估的需求,并在整个设计周期中进行监测和重复修正。
本质上,我们可以把威胁模型定义为识别一组可能的攻击,以便考虑配合一套彻底的风险评估策略。有了威胁模型,您就能估计攻击的概率、潜在危害和优先级。
威胁建模很难,但是很有必要,威胁建模需要考虑系统是怎样被攻击的。建模完成后,它解决了潜在的系统安全故障隐患,解决了诸如它是如何产生、以及在出现安全故障时发生了什么等问题。通常在市场和成本的压力下,这个评估以一种特别的方式来进行,即通过集思广益征集系统有可能受到的所有攻击(当然,潜在的黑客或许比您更超前一步)。对这个过程来说,一个更加系统化及可重复的方法是使用攻击树,这个概念首先是由Bruce Schneier [1,2]提出来的。攻击树提供一种将攻击系统的不同方式进行系统性分类的方法。大致来说,就是您以一种树的结构描述了系统所受的攻击,在树结构中节点代表着攻击时间。树的根节点是攻击者的总目标,达到该目标的不同路径则是叶节点。
当正确完成威胁建模时,真正的威胁就被确定下来了。然而,如果弄错了可能存在的威胁的话,其代价将是高昂的。设计师弄错威胁的一个案例是DVD的保护。尽管DVD碟片被加密,密钥也被放在播放机里,只要播放机里包含抗篡改硬件,这种保护方式是没有问题的。但当引入软件播放器时,密钥就被曝露出来,通过反向工程就能恢复密钥,也使任何人都能自由复制和散布任何DVD内容。在这种情况下,它是有缺陷的威胁模型。虽然有安全措施,但是这无法真正解决问题。