从体系架构的角度解决安全性问题
既然我们已经描述了一些主要的攻击特征及策略,我们将开发一些设计系统所需要的元件,使得这些系统即使不具有刀枪不入的能力,也至少高度安全并具有抵御黑客的能力。
在需要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)的服务响应时间就越短。一个小的覆盖区允许系统管理程序根映像被保存在芯片上,从而减小外界对存储器总线的探测和代码细节的暴露。
评论
查看更多