随着电子装置担负的责任越来越多,我们放入蜂窝式电话、媒体播放器、机顶盒以及其他电器的个人信息也越来越多。于是,嵌入式系统的安全性涵盖了隐私信息保护的方方面面,从在商业终端(POS)上进行的信用卡交易的真实性保护,一直到私人语音邮件的防护。
在这篇调研报告中,我们将回顾最基本的攻击状况、系统弱点,并讨论最好的防卫策略。我们从硬件、软件及软硬件混合的角度来分析系统的强化,比如安全引导、系统管理程序对存储器的控制。
产品层次的正式安全认证可以具体到某一特定的应用,于是,详情会被保存得相当隐秘,这也就不难理解了。同样的,我们也从安全的角度,提出能够产生有用度量的方法,来决定SOC及系统组件的一般鲁棒性和适用性。(注:鲁棒性(robustness)就是系统的健壮性。它是在异常和危险情况下系统生存的关键。比如说,计算机软件在输入错误、磁盘故障、网络过载或有意攻击情况下,能否不死机、不崩溃,就是该软件的鲁棒性。)
攻击状况分析
知道我们所担心的是什么,这是很重要的。它们的技巧是什么?它们的资源有几种?威胁的类型千变万化,从相对低强度的软件攻击—这种攻击基于一些可在网上新闻组(如:alt.hacker或各种各样的“warez”站点)找到的软件—一直到资金充足的工业间谍活动。
攻击状况可合乎情理地划分为如下几类:
。一个聪明的外部人员:这个人很聪明但对系统的了解却很有限。他已经可以使用先进程度中等的设备,并可以利用已知的弱点而不是制造新的弱点。
。一个充分了解系统的内部人员:这个人受过专业技术教育并拥有技术方面的经验。他对系统各个部件的了解程度不同,但是,由于其位置处于“防火墙之后”,他将会获得具有高度损坏性的详细资料。这种人可以利用高度专业化的工具和手段进行分析。
。一个有资金支持的组织:一个组织将能够组建具有技术互补性的专家队伍。在那个对系统了解充分的内部人可能在某些特定的领域具有专长,而该组织可以通过增加人手来填补这些领域内的空白。他们将有机会使用先进的分析工具和精密的仪器来更改组件。聚焦离子束(FIB)是一种复杂且昂贵设备的技术,可以用来修改集成电路。这种设备远远超过大多数个人的使用需要,但是,那些破解有着重要价值的对象的安全防护措施的组织却要利用该技术。
攻击
攻击者技术和能力不同,他们的方法也不同。我们从一些基本可以在分属各种威胁程度的几种攻击方法开始。
一类范围很宽的软件的攻击,依赖于攻击者在执行环境中获得足够的特权,以便能控制和获取敏感的装置及数据。例如,在iPhone软件体系结构的开发过程中,诸如浏览器等部分就处于系统的优先层面1。从系统集成的角度来说,这是有道理的。但是使得系统易遭攻击,因为任何会受到威胁的系统组成部分,可以具有最高权限级别,因此可以访问大量系统资源。
使用这种方法的最近的一个例子,由Charlie Miller等人在去年夏天公布于众。通过将一个恶意的HTML文件指向电话的Safari网络浏览器,可以控制对包含敏感信息的存储区的访问。这会使电话的Safari网络浏览器崩溃。
在实际应用中,这种攻击可以通过发含有链接的邮件,这样一个简单的权宜之计来实现。其中,邮件中链接所指的是一个具有恶意HTML的服务器。如果接收者电击那个链接,使用那个攻击所转化的安装程序,接收者就很可能受到攻击。
从安全的角度来说, DMA(直接存储器存取)存储器是一个令人头疼的问题。它们使用一种强大的机制来迅速而有效地转移数据,但是它们转移数据的过程也是大多数系统所无法控制的。如果目标装置是有DMA能力的,一个恶意的应用程序通过注入代码和数据或获取敏感信息,可以完全地搞垮一个系统。DMA控制器,由于它们可以很轻松地进行绕过保护层和访问存储器,因此在正在设计的SOC和系统中,必须对其进行一系列详细的审查。
有一种掠夺普遍使用的数据结构的攻击方法是缓存器溢出攻击。这种攻击普遍利用那些被用来存储用户向一个程序所提供的输入的堆栈,比如说:姓名、住址、电话号码和其他的典型表格性数据。在正常操作条件下,数据按照操作者的输入顺序,与返回存储地址一起,存储在堆栈里。
然而,在一些情况下,应用软件并不进行适当的检查,来确定接受到的数据是否超出了所分配的缓冲存储区域。向缓存中本该操作者输入数据的区域,传送尺寸过大的数据,并伴以一段恶意的执行代码及一个用来覆盖调用程序的返回地址的地址数据。那个特大的数据导致比堆栈配置空间更大空间的使用,造成缓存溢出。同时,由于地址数据过多的返回地址指向攻击者的恶意代码,当功能尝试返回时,就开始执行黑客在错误返回地址所写的代码。这种危害已经达成,侵入者掌握了控制权。
一旦攻击行动成功地将执行代码放入它的域中,系统水平上的危险度就依赖于赋予被劫持的进程的授权水平。当然,如果被危及的程序在系统中被许可控制的范围并不宽,那么危害的程度就会相对减小。
由于这些种类数据结构的广泛使用,这是一种相当普遍的攻击方式。所以,在一些任何安全防护壁垒中,如:系统管理程序,安全内核,应该尽量少地使用缓存和堆栈,如果能够完全避免使用它们,那就更好了。
正如我们所指出的,通过破袭正在运行系统的组件,可以进行大量的控制。然而,当系统关闭时,可以生成大量其它的恶意程序。在一些情况下,侵入者可以在存储装置上写入代码,比如导入代码。这就允许侵入者可以更改代码,使驱动程序在下次导入时按照攻击者所希望的方式而不是它原来的设计所期望的方式工作。这种进攻更有可能是由更高一个层次的黑客来执行的,比如:“了解情况的内部人员”。
在整个程序开发过程中所使用的设计功能,通常是进入系统的秘密途径。联合测试行动组(JTAG)标准的端口是一个边界扫描端口,可以连接到许多电路板级和芯片级的资源上,可以让攻击者获得对几乎任何一种敏感资源的控制,更改执行流程或执行代码。
通常情况下,是否在交付产品时提供JTAG端口,是一个复杂而难以决断的问题,这是因为,将其取消,就意味着在现场进行的调试变得十分困难,但是,若是保留它,又会让系统存在潜在的弱点,而极易被击破。这是一个很好的例子,它说明,在设计过程中,把产品设计得尽可能开放有用,而同时又要封闭可造成危害的途径,这两者是相互冲突的。
如果存在一条外部存储总线,它为攻击者提供了重要的机会,并对安全设计来说是一个重要的挑战。如果攻击者可以侦测外部存储总线,那么他就有可能形成一个代码序列,这个序列反加到原来的那些总线上后,可以诱骗系统泄漏一些内部秘密。这就是我们之前所提到的“重放攻击”(replay attack)。即使加密的SDRAM,也可由于复制或回放被选择的存储内容,而受到这种类型的攻击。
旁路转换缓冲器(translation lookaside buffer,TLB)是一个高速缓冲存储器,它将虚拟内存地址转换成物理地址。应对对这个子系统进行特别严格的审查,这是因为,作为系统的一部分,不但对于系统性能来说很重要,而且也是可被攻击的弱点。从我们的目标出发,主要有两大类:硬件填充,即集成一个称作“硬件表walker”的装置,以及软件填充。
对于具有“硬件表walker”的系统而言,TLB再次填充是在出现TLB丢失时由硬件自动完成的。如果攻击者具有可以向存储有MMU描述符表格的存储器写入的权限,那么攻击者就可以改变表内的内容,并写入错误的转换关系。这种行为会产生很多影响,比如产生一个对内存或敏感装置的映射。
一个稍微有些不同的策略适用于具有TLB的软件填充策略的体系架构。MMU和TLB是寄存器控制的,而且需要进入优先权才能访问,但系统仍然存在弱点,即执行重填入的代码和该代码所操作的数据都保留在内存中,因此容易被恶意的应用程序所使用。
在密码学中,“旁路攻击”是基于从加密系统的物理实现方案所获取的信息、而非基于理论算法缺陷的任何攻击行为。众所周知的攻击包括定时攻击2、功率测量、辐射监测。在这些攻击中,功率或辐射特征经汇编后,与已知的系统行为相比较,以便找出行为的模式。一旦模式和相应的内部行为被确定,就可以设定故障误注入的时机和位置,以使得系统按照需要出现异常。
而一些黑客满足于他们从SOC封装之外所了解的信息,为了实现一些高价值的目标[如电子收款机系统(POS)终端],我们应关注一个更现实的问题,黑客们将会尝试将嵌入式器件的封装去除,来进行信号探查和内部存储的分析。作为这个方法的第一步,攻击者,很可能是一个团伙中的一员,会通过加热或酸腐蚀来融化芯片的外壳,以便能置入微探针。完成这一步后,器件开始运行,黑客尝试分析模式并测定弱点。
图1 描述硬件表Walker攻击的代码序列。在初始状态下(1),敏感数据驻留在内部存储中,无法从虚拟地址空间获取。攻击者利用专门的探测手段,可以直接访问外部存储,以修改MMU描述符表(2)。当应当进行下一次虚拟地址(3)的TLB重填的时刻到来时,所针对的数据被映射到虚拟地址空间中,从而被攻击者所截获
黑客通过使用故障注入的方法,使用能量脉冲、热量和高频率,试图影响正常的系统运行。一旦这些方法的某种组合可以将系统驱动到一个更“有用”的状态,黑客就能获得更多的信息,从而进一步破坏系统的安全性。
在一种资源可再生的攻击中,应用程序的开发者已经假设,一旦某种资源,如一个目标文件,被删除,存储器中资源的内容也就会被删除了。但实际情况并不总是这样,攻击可以利用这个情况来扫描存储器,找到有用的残留信息。一般而言,在一个安全的环境中,用密码写的应用程序,被用来跟踪任何包含敏感信息的资源,并在将那些资源返回信息资源池之前将其清除。
然而,在应用程序崩溃或外部中止的情况下,那种行为就不能得到保证。即使安全地使用存储器,紧密地控制资源区,只要在一个恰当时机注入故障条件,比如能量脉冲,存储器中就会残留数据,而这些数据随后将被黑客所盗取。
拒绝服务型(DoS)攻击,是试图通过让某个计算机的通信通道饱和或者公然强制发生复位来阻止计算机的资源为其合法用户所用。
在这个分类中,攻击者可以利用很多途径,包括命名很有创意性的攻击状况,如“Smurf攻击”。这个攻击利用配置不好的网络,这种网络将对查询IP广播地址的“Ping”要求作出回应。这种情况下的“ping”操作,可以诱骗受害人返回其地址。这些网络就变成了“Smurf 放大器”,产生大量针对受害者的通信流量。这种攻击并不是什么新鲜招数。对系统管理员来说,配置他们的网络以拒绝“ping”对广播地址的请求且不转移这类信息包,是一件相当简单的事情。虽然这种方法不再是一个活跃的威胁,但很好地说明了DoS的共同特征,或者,更准确的说,是分布拒绝式服务(DDOS)攻击:利用共同的系统特征的漏洞,劫持大量无辜的器件,来放大攻击所产生的影响,和对目标系统的防护措施的破坏力。
在当前出现的多种攻击方法中,恶意软件的分布式攻击方法已演变为包括高级的软件机器人或定位于以前所破解的系统中的“bots(木马)”。这些bot被拴绑在团块或“botnet(僵尸网络)”上,协同形成实际DDOS的攻击。
随着电子装置担负的责任越来越多,我们放入蜂窝式电话、媒体播放器、机顶盒以及其他电器的个人信息也越来越多。于是,嵌入式系统的安全性涵盖了隐私信息保护的方方面面,从在商业终端(POS)上进行的信用卡交易的真实性保护,一直到私人语音邮件的防护。
在这篇调研报告中,我们将回顾最基本的攻击状况、系统弱点,并讨论最好的防卫策略。我们从硬件、软件及软硬件混合的角度来分析系统的强化,比如安全引导、系统管理程序对存储器的控制。
产品层次的正式安全认证可以具体到某一特定的应用,于是,详情会被保存得相当隐秘,这也就不难理解了。同样的,我们也从安全的角度,提出能够产生有用度量的方法,来决定SOC及系统组件的一般鲁棒性和适用性。(注:鲁棒性(robustness)就是系统的健壮性。它是在异常和危险情况下系统生存的关键。比如说,计算机软件在输入错误、磁盘故障、网络过载或有意攻击情况下,能否不死机、不崩溃,就是该软件的鲁棒性。)
攻击状况分析
知道我们所担心的是什么,这是很重要的。它们的技巧是什么?它们的资源有几种?威胁的类型千变万化,从相对低强度的软件攻击—这种攻击基于一些可在网上新闻组(如:alt.hacker或各种各样的“warez”站点)找到的软件—一直到资金充足的工业间谍活动。
攻击状况可合乎情理地划分为如下几类:
。一个聪明的外部人员:这个人很聪明但对系统的了解却很有限。他已经可以使用先进程度中等的设备,并可以利用已知的弱点而不是制造新的弱点。
。一个充分了解系统的内部人员:这个人受过专业技术教育并拥有技术方面的经验。他对系统各个部件的了解程度不同,但是,由于其位置处于“防火墙之后”,他将会获得具有高度损坏性的详细资料。这种人可以利用高度专业化的工具和手段进行分析。
。一个有资金支持的组织:一个组织将能够组建具有技术互补性的专家队伍。在那个对系统了解充分的内部人可能在某些特定的领域具有专长,而该组织可以通过增加人手来填补这些领域内的空白。他们将有机会使用先进的分析工具和精密的仪器来更改组件。聚焦离子束(FIB)是一种复杂且昂贵设备的技术,可以用来修改集成电路。这种设备远远超过大多数个人的使用需要,但是,那些破解有着重要价值的对象的安全防护措施的组织却要利用该技术。
从体系架构的角度解决安全性问题
既然我们已经描述了一些主要的攻击特征及策略,我们将开发一些设计系统所需要的元件,使得这些系统即使不具有刀枪不入的能力,也至少高度安全并具有抵御黑客的能力。
在需要DMA控制器的系统中,保护程序免受攻击的策略包括:将DMA控制器置于防火墙或虚拟层之后,并确保所有接口都内置于SOC内部。如果除了将存储器置于SOC外部别无选择,那么就应该考虑对与存储器间的数据传输使用加密方案。这不会保护系统不受之前讨论的所谓“重放攻击”,但确实会使系统免受较低级别的攻击。
一般来说,从安全角度看外部存储器总线是应该避免的。如果片上资源有限,设计者就会被驱使使用外部存储器,这时控制哪些东西可以从芯片取出以及提供何人在探测总线者的线索就变得很重要了。设计者应该保证芯片上保存有尽可能多的系统关键信息,这样,黑客的探查即使不是完全不可能,至少也变得极为困难。
在某些导入码会被破坏的情况下,比如当ROM或者OTP存储器不能使用时,一个防卫措施是产生一个安全引导载入器。这种机制涉及硬件与软件,创造了一个进程,在导入序列继续执行时,系统BIOS可以利用该进程来进行加密标记及验证。这保证了当引导序列将控制权交给操作系统时,机器正处于设计者想要的状态。
然而,虽然引导过程得到完全的保护,一旦系统完全引导完毕,运行时间映像仍然可能被攻击。IBM已经进一步拓宽了这一概念, 在BE处理单元中提供一个运行时间信令能力,由此增加了额外的器件安全防护层4。
如果设计者选择让交付用户的产品的调试端口保持激活状态,纯粹从安全角度看,很显然这是不被推荐的做法;那么应考虑对JTAG的访问也给予和系统其他部分的保护程度相同的保护措施。可以置入挑战/响应机制,为某一特殊通路建立围墙保护,同时已经提出了一种高级的解决方案,它将对内部资源的访问划分为不同等级,这种方案基于与内部处理器分离的访问管理器,并与外部安全服务器接口,以管理密钥以及对测试设备访问5。
同样的策略,使用一个分立的安全处理器来控制系统内的其他处理器对系统资源的访问,可以在多处理器SOC中广泛应用;在这些应用中,被保护的资源的属性决定了额外的花费和复杂度是合理的,比如机顶盒。
将集成电路的包装去除的情况下,使它运行并用探针进行探查,并不是获得某人的iTunes密码的合适的方法。然而,对系统的成功破解如果真正造成了巨大的经济损失,比如攻击一个销售点终端或敏感军事政府设备,这个攻击必然是高度复杂的,而且其攻击必须得到大量的资金支持。
为了避免这种情况,可以在敏感电子器件外覆盖极其精细的、能检测侵入的网格。当一个芯片电路确定被侵入时,敏感数据,如秘钥、安全引导映像、根管理程序等就会自动被销毁,器件将无法工作。
加固客户系统和网络以抵抗DoS攻击的策略,包括各种基于协议的、能赋予合法的或已授权传送超出背景或攻击性传送的优先级别的方法。其中比较好的一个例子是“快速传递协议”6。
快速传递协议为用户提供了加密的可用性令牌。用户信息以一个设定信息包开头,信息包中含有提供给下游程序的认证信息。当设定信息包经过验证后, 信息包中的其他信息以高优先级按链条模式穿过通道。含有未经验证的令牌的信息,则在时间以及带宽允许的情况下得到处理。
大多数的操作系统都内置有一定程度的安全设置。内置安全设置的成熟性以及集成性是广受争议的论题,不过一般来说,加载贯彻了安全思想的Linux,如SE Linux(源于NSA的Linux派生发布),从安全角度看被认为是很强壮的系统(http://selinux.sourceforge.net/。SE Linux包含有一套丰富的访问控制集,它允许系统被分化为众多细密的安全区。过去的“用户——群——外界环境”分类被扩展为包含了无数额外的、可用来创造极其成熟的安全政策的类型。其思想是:例如,如果一个系统驱动器被破解并尝试访问驱动器权限范围外的资源,操作系统将拒绝访问、并产生异议。
这些机制很重要,但从整个系统结构角度来看,它们忽略了一个重要方面——“攻击表面”仍然很大。仍然需要对操作系统及其附带的服务进行分析,以查找出任何可能忽略的易受攻击的弱点进行分析,而且开发者是人,因此这些弱点终将被找到。集成在任意给定的操作系统中的安全设置只是安全难题中的一项。
借助虚拟化实现安全性
虚拟技术已从企业计算空间转向嵌入式世界。虚拟技术包括在虚拟计算机监控器的控制下提取系统资源,有时称为系统管理程序。系统管理程序使运行同时执行环境具有可能性,每个环境孤立存在,分别运行在基础硬件平台的一个虚拟代表上。
从器件整合和资源最优化的角度来说,虚拟计算机有很多优点。它们可以采用不同设计方法,从“纯粹”的或“完全”的虚拟到“部分虚拟(Paravirtualization)”,部分虚拟是嵌入式应用中最常用的方法。在部分虚拟中,进行进一步的细分,包括微内核、微调度程序和轻薄的产品,这种轻薄产品实际上扩大了硬件抽象层,使之包括了虚拟特性。
从安全的角度来看,虚拟技术的使用,允许设计者通过执行特权分离和最小权限原则7,8,来减轻计算机安全攻击的潜在危害。
特权分离要求应用程序被分为有特权部分和无特权部分,有特权的部分应保存得越小越好,来减小攻击的表面。因此,一个成功的、针对对更大的、不安全的组件的攻击,只会获得对敏感数据的极低的访问能力。
最小权限要求,每个软件模块仅能获得合理用途所需的信息和资源。
各种各样不同的虚拟技术的一个共同点就是整齐。对于纯粹虚拟和完全虚拟,VMM负责捕捉和处理所有由客户操作系统执行的指令。这种方法的好处是客户操作系统可以不更改地运行。另外,由于操作系统是与硬件完全脱钩的,才有可能创造更高的便携式应用,其应用平台多样化且在应用程序中。这种方法的缺点是在系统功耗方面是一个重大的支出,特别是当硬件平台没有配置软件虚拟支持的情况下。
纯粹虚拟技术依靠具有重要硬件支持的底层硬件平台来实现,如Intel公司的VT体系机构和AMD的Pacifica。在这些系统中,虚拟计算机资源的状态在硬件中维持,而且VMM的性能消耗大幅度减小。这种技术的优点是它类似于全虚拟,表现在客户操作系统可以无修改地运行。缺点是那些运用这一技术的产品占用的裸片面积稍大一些,而且现有可用的嵌入式装置中纳入这种水平的支持能力者并不多。
部分虚拟技术(Paravirtualization)是这样一种技术,其特定操作系统的指示,一般具有“特权”和内核模式指示,被“hypercalls”或API对管理程序的调用所代替。这减轻了处理所有客户指示的负担,降低了系统的开销,明显地提高了执行绩效。缺点是客户操作系统必须被“触及”,但是,实际上这种影响是很小的。
例如,分析Linux时,发现/dev/arch中具有优先权的指令仅存在15个文件中。
在普通的部分虚拟技术种类中,存在一些系统管理程序的子程序。
微调度器(如图2),正如其名称所暗示的那样,是按照一个固定的进度表来分配系统资源的程序。商业上典型的具体实施方法是在内核模式下运行微调度程序,并且作为主控来控制一个客户操作系统,该OS也在类似的内核模式下进行操作。从安全的角度来说,这意味着客户操作系统一定得是一个“良好的市民”,因为客户完全可能绕过微调度程序。这使得整个空闲的存储器易受攻击。为了消除这个弱点,微调度程序的开发者增加了一个可供选择的安全引擎,以监测和控制硬件的访问。
图2 使用微调度器的虚拟化
微内核(图3)本质上是一个操作系统,这个系统移去了大量的典型操作系统服务,并代之以可以在用户级别执行服务的机制。从安全的角度来看,它的优点是,用户模式实体访问底层硬件时不具有危险性,因为内核模式指令调用已被移去。其缺点主要是多重处理域的维护,当执行从微核的本地处理区运行到客户操作系统及其应用程序处理区时,这些处理域需要具体实现复杂的进程间通信(IPS)机制和额外的环境转换。
图3 基于微内核的虚拟化方法
虚拟的另一个途径是产生一个硬件抽象层(HAL),并增加额外的服务,以照顾多重执行环境(图4)的需求。HAL是一个硬件微薄转换层,它可以使得软件具有更好的可移植性。为增加对多重执行环境的支持,开发者创造了超微内核,尽管这种表述不是很准确。在实践中,这种途径和微核型解决方案的不同之处是,虽然微核在设计时已经考虑到要运行某种客户操作系统,而HAL更趋向于以硬件为中心,而且并不了解操作系统的具体情况。
图4 利用HAL或者超微内核性管理程序实现的虚拟化
从安全的角度来说,最关键的因素是所有商业管理程序控制对硬件资源(如MMU系统)访问的能力。例如,如果一个客户端应用程序(比如web浏览器)被一个流氓HTML站点所破坏,并试图侵入存储器禁区,那么系统管理程序就会向存储器强加边界,并适当地保护敏感数据。通过使用安全的系统管理员,根据驻留在特定的执行环境中的应用程序的已知边界检查可疑的重填数据,就可以实现由软件填充的TBL不受侵扰,由此保证程序的执行处于“界限内”。在路由器或其他客户端装置中,系统管理程序可以用来提供一定程度的DoS保护,这可以通过使用多重VM来控制对任何特定资源的访问或是要求提供适当的通行证来实现的,这样做可以避免VM使用“界限外”的资源。
在虚拟化架构的设计过程中,虚拟计算机之间的默认通信途径要尽可能减少,理想的情况是,如果从VM到VM没有公开昭示的授权的话,最好没有任何通信。
由于增加一个VM的开销是很低的,用VM自己已经完成引导的、处于挂起状态的“候补”操作系统来生成”候补”VM是可能的。那么,当一个处理域被DoS所危及时,一直在自己的执行环境中运行的系统健康度监督程序,可以将被危及的VM的执行挂起,将激活的程序转移到候补的VM,并继续执行。这种方法在受到攻击的情况下维持更长的计算机正常运行时间。
由于VM一般来说必须从CPU时间和可用内存的角度来公开地界定,VM所需要的资源在DoS面前仅呈现一个很小的“攻击面”,在一些情况下,可以通过限制收到的消息数量来进一步限制弱点的发展,从而避免饱和攻击。
将认证机制扩展到虚拟计算机上可以使安全导入机制变得更健全。硬件引导完成后,安全引导机制标记第一个VM。第一个虚拟机可以执行第二个层次的安全引导,通过额外标记和经过验证的VMs来扩展“信任链”,直到系统饱和以及所有物理、虚拟计算机序列导入完成。
就所有系统的基础部分而言,需要分析其优点和缺点。系统管理程序提供了一个高水平的安全性和执行环境之间的隔离。但是,当数据必须在环境之间共享时,会发生什么情况呢?很多系统管理程序通过生成通信渠道或是共用执行环境中的存储器区域来处理这个问题。这随之又造成了第二个层次上的弱点,所以应该确定这些通道不会被恶意软件利用来将数据从安全的/可信任的区域转移到不安全/不可信任的区域。在这些种类的环境中,可以运用分层的方法。例如,可以纳入一个激励/响应机制,来实现数据通过共用存储器在各执行环境之间的转移。当这种机制就位时,不可信区域的安全就会到危胁,危险就会侵入共用存储器区域,但它仍不能从可信区获得数据。举对Web浏览器的例子来说,攻击者可能会获得进入存储器共享区的许可,但它们不能侵入激励/响应机制,因此,敏感数据就不会从安全区转移到共用存储器区。
另一个系统级问题会影响虚拟化的运用的地方,是系统管理程序的响应时间。如果响应时间使实时操作系统(RTOS)不能在系统管理程序层次适当地运行,那么RTOS一般就会在微核模式下运行,并通过优先指令直接接触系统硬件。这就形成了,或更准确地说,遗留了一个可通过对RTOS的破坏来击破的弱点。
与设计的许多其他方面一样,少就是多。系统管理程序所占用的区域越小,需要去防范的的攻击面积就越小,而且对超级调用(hypercall)的服务响应时间就越短。一个小的覆盖区允许系统管理程序根映像被保存在芯片上,从而减小外界对存储器总线的探测和代码细节的暴露。
ARM的TrustZone技术
是一种将软件和硬件相结合为消费者产品提供安全保护的技术9,10,11。在硬件方面,特殊的具有“安全意识”的存储器包裹层(wrapper),系统总线,调试端口,及中断控制器都被集成到了SOC中。另外,TrustZone为CPU结构和核心增加了一个新的安全监控模式。
在软件方面,一个从受信任的逻辑提供的安全监控器,在新的安全监控模式下运行,并担当安全与不安全状态之间的看门监控任务。当操作系统调用TrustZone指令(安全监控中断或SMI)时,安全监控器受到了控制,与此同时,处理器获得了额外层次的特权以运行受到信任的代码,并通过嵌入已知有安全意识的外设的安全审核位或“S-位”,来控制对受到信任的资源的访问。对安全存储器的访问是通过使用MMU和TLB中的安全位标记符和“S-位标记符”来控制的。这些标志被用来将存储器划分为安全区和不安全区。安全监控器通过将中断分为安全和不安全两类,来进一步增强安全性,并实现断开/连接调试端口的能力。
TrustZone技术,已被用来保护在芯片上或不在芯片上的存储器和外围设备免受软件攻击。通过对系统的精心设计,TrustZone可以额外地提供安全措施以抵抗一些硬件攻击。例如,将可信的代码放入SoC内部存储器,并保证置于外部存储器的硬件表 walker列表不能指向内部存储器或敏感程序(TLB的再次写入会失败)。因此,有进入外部存储器的许可并不能提供进入敏感资源的许可。
TrustZone为操作系统在无安全状态下的运行提供了二进制兼容性。如果操作系统需要与安全区域的应用程序进行交流,就必须写扩展名。同样的,在无TrustZone的平台上处于特权模式的一些可以被访问的寄存器, 一旦在TrustZone.内运行时,可以被强迫处于特权/不可信模式。
然而,这种方法一个潜在的缺点是TrustZone仅提供两种环境。一般的应用程序需要三种或更多:一个操作系统核(如RTOS)、一个用于处理DRM或其它安全处理要求的安全内核,以及“丰富的操作系统”—用于控制用户的界面(一般包括Windows Mobile、Symbian、Linux等)。如图5所示的小型终端交互操作平台(STIP)应用12是一类安全付款的方式。正如图中所示的那样,它被保护起来,免受任何在壁垒的“正常”一侧所发生的入侵行为影响,该壁垒是受控于安全监测器。
很多嵌入式方案的一个关键目标是减少材料单成本。许多OEM的发展动力,则是确保了单独的处理器有足够的CPU马力来容纳大量功能。在理想情况下,一个CPU可以同时运行无线工作栈、应用操作系统,及安全应用软件(DRM,还款应用)。将无线工作栈置于特权安全模式下,则产生容易遭受在外部存储器上发生的硬件攻击的弱点,并大大地增大了可信代码基(TCB)的尺寸,其原因可以由如下的例子来说明:一个3G GSM堆栈普遍有几兆大小,比普通的SOC内部存储器要大很多。这就使得设计只能在如下两个方面进行选择:通过将GSM堆栈与应用操作系统集成到一起,使得它能够在正常模式下运行,或是在第三种执行环境中运行它,这种特性是TrustZone所不具有的。
所以TrustZone能够很好地保护硬件,但是却不能为很多系统级的应用程序管理其安全区域。一个独立的系统管理程序可以提供一定程度的、针对软件攻击的防护力,可以让开发者生成多种执行环境,但它在防范硬件攻击方面只采取了很少的措施。不过,把这两者组合起来,就可以产生一种对两个领域来说都是最佳的选择。
正如图6所示的那样,一个以监控模式运行的系统管理程序,可以取代TrustZone安全监控器以及图5所示的安全内核的位置。所有其他软件组件都被推入用户空间中,于是特权模式实际上并未被使用。
图5 TrustZone架构概览
图6 带有系统管理程序的TrustZone
这种方式的优点是,具有运行大量虚拟机的能力,其中一些有安全区,另一些有不被保护的区域。所以,在这种方法中,GSM堆栈可以在它自己的域中运行,但是当它在用户态模式下运行时,如果堆栈被攻击,对黑客公开的资源仅限于那些在引导时就被赋予的资源。STIP应用程序在有墙壁保护且安全的区域是安全的。
系统管理程序精心地管理着对SOC内部的硬件资源的访问,以保证所有可信的数据和应用程序仍存在于合适的安全区域。敏感资源受益于TrustZone所提供的硬件保护,而对安全性来说不那么关键的虚拟机,例如容纳GSM堆栈的虚拟机,可以在外部存储器运行。
MIPS技术处理器
MIPS为具有安全保护的应用程序提供4KSd13内核。这个核心包括应用专用的扩展——以改进加密算法的执行,隐藏处理器活动、使之不至于受到能量信号特征分析和探测的手段,以及具有每页读/写/执行特权设置功能的安全MMU。
这个核心除了具有安全保护功能外,获得使用许可的人还可以增加额外的工具,比如独有的芯片级序列号、加密处理器、随机数发生器、USB防火墙以及安全引导加载机制。
使用分层的方法以提高安全性,一个合理设计的系统管理程序可以利用内核内置的安全防护功能以及SOC设计者增加的特性,来增强整体系统的安全性。
处理器的旁路转换缓冲器(TLB)的设计是一个关键问题。MIPS处理器的TLB兼容了一个软件替换策略。当采取措施来保护MMU和关联的TLB时,执行TLB重填的代码和被该代码所操作的数据都处于内存之中,可能被流氓软件所访问。一个系统管理程序可以用来在TLB重填时执行额外的检查,以保护系统不受通过外部SDRAM进行的硬件攻击。
另外,一些MIPS处理器提供了一个中间“超级用户”模式,以使系统管理程序可以用其来执行一个执行虚拟内核模式。这样就减少了虚拟的开销。
Power/PowerPC处理器
32位和64位两种体系的PowerPC已经在很宽范围的产品中被广泛应用,包括通信处理器,通用设备,性能导向型游戏系统以及企业计算。
PowerPC的衍生体一般会应用于嵌入式产品中,比如32位PowerPC405和440,它们使用一种软件重填策略来保持TLB实体不断更新。另外,有一种区域保护寄存器(ZPR),它允许TLB访问控制被撤销。这些特征产生了一些弱点,这些薄弱环节可以通过组合操作系统的安全策略管理和虚拟技术来阻止流氓软件的访问。
一些PowerPC的衍生体,比如索尼Playstation 3中所使用的多核单元宽带引擎(BE),具有先进的安全机制,它包括经过加密的、得到标记的安全引导机制和将执行敏感任务的处理器在物理上单独隔离开的功能。
系统加固:多少才够用?
正如我们所述,有多少攻击的方法,就有多少防御攻击的技术。强劲的防御策略通常是依赖于一个“分层”防御,这个“分层”防御兼容了大量硬件和软件技术。确定一个系统是否被充分地保护起来,是一件很复杂的事情。
对于确定给定产品是否可以满足给定应用的安全需要的程度这一问题,有着正规的方法。对于安全分析来说,一个被广泛接受的标准是信息技术安全评估的通用标准(简称通用标注或CC14)。这是一个计算机安全方面的国际标准(国际标准化组织/国际电工委员会15408),它为厂商和客户创造了一套系统框架,供厂商和客户在该框架中运行,该框架可以为用户环境提供详细的描述和随之而来的威胁,以及分析和测试方法学,以便决定给定的产品满足环境的特定要求的程度。
例如,德国BMI(Bundesamt für Sicherheit in der Informationstechnik)与欧洲智能卡协会(EUROSMART)合作,开发了一种保护状况(PP),命名为智能卡IC平台保护状况(BSI-PP-0002),包括及其详细的、与他们行业特别相关的攻击状况描述。希望提供产品来响应这个特殊的保护状况需要的公司,随后选择了一种评估保证级别(EAL),此级别从1级(最低)到7级(最高)。这些保证级别不是对应于关于给定PP的保护程度,而是对应于实验室所测结果与列举的安全声明的符合程度。测试实验室会将一系列的保证要求与所选择的水平进行联系,进行分析、测试,得出合格/与不合格的结论。
我们提出一种更基本的度量方法,在开发阶段的初期给设计打分。每个保护的措施和结构的特征都会是一个得分点。那么,对不同种类基本分的调整,就要根据其安全要素(如:最大覆盖面和最小受攻击面)。
网格(+80):可能调整±40
TrustZone可信区(+80):可能调整±40
安全导入(+80) :可能调整±40
虚拟化 (+80): 可能调整±40
安全操作系统
DMA控制器(-80): 可能调整±40
在分层的策略中,每一个组件对整个安全性的贡献是可以相加的。一个组件,如操作系统,有一个固有的“虚拟化”以盗用一个加分条款,80就被加到另一个组件固有的分数上,比如安全导入机制的80分,加起来就是160分。现在,如果操作系统由于大量附加特征,呈现出一个大的攻击表面,那么,这个组分的分数就会降低一些,最多减少40分。
加权分数计算实例:挑选一个有MMU的SoC,MMU是系统管理程序对存储器的控制所不能缺少的,和一个安全操作系统。选择一个系统管理程序,它允许操作系统和应用程序在“用户空间”运行,从而产生一个更安全的处理环境。系统管理程序(+80)呈现出一个小的攻击表面,因此不会从它的安全分中减分。选择一个安全操作系统,比如SE Linux (+80),但是,在开发者加入大量代码的同时,也会生成一个大的攻击表面(-40)。加权分数就是:
虚拟化:80
安全操作系统:80
代码尺寸减分:-40
总安全分:160
一些设计的组成,由于其本身特点,在装置的安全装甲中形成了固有的裂痕,需要小心地处理。一个好的例子就是DMA控制器。有DMA控制器的系统,考虑到其存在这样一个弱点,应该从总分中减去80分,那么在那个分数上,就明显需要一个保护系统的机制。有DMA控制器的系统的调整范围表明,这样的系统可以被设计得更加安全,但是机制的性质就是这样,在成块存取中以及从安全的观点来说,它永远不可能达到100%的效率,这是不可避免的。
这种方法的正式、细致、凝练允许了度量的产生,它允许设计者使用安全措施来满足他们特定的需要。由于基准提供了处理器在特定应用中可能性能的粗略评估,所以安全分数的产生也就提供了测量产品在抵御外来攻击时可能性能的方式。
结语
现在应该清楚的是,真正强健的系统安全不能单靠软件来保证的。加密和迷惑仅能减缓黑客的进攻。即使是高度防篡改的系统,也会受到软件硬件联合的进攻15的威胁,而且,对于任何攻击者可以在物理上接触的器件,都它至少需要安全的引导。
另一方面,全硬件的解决方式很昂贵且不具有弹性的,由于这个原因,如果它们过于冗琐,就会迫使设计者和最终使用者转而采用节省时间的、规避性的方法,而这些方法是器件的安全防护架构所无法预料到的。因此,最好的安全解决方案是基于以硬件为中心(如TrustZone)、软件(如安全操作系统)和虚拟技术相结合的平衡结合方式,以保护存储区域,DMA控制器,或其他潜在的易受攻击的因素。