幽灵、熔毁、预兆、行锤击、捣乱者——突然之间好像处理器新出现的漏洞没完没了了。曾经的小众概念,如预测执行、缓存定时侧通道,如今已成为关注焦点。整个软硬件系统中,新的漏洞也开始出现了,例如对不可靠外围组件快速互连(PCIe)或雷雳(Thunderbolt)USB-C外围设备访问存储器的保护不足、恶意Wi-Fi固件、所谓的硬件植入。
我们可能面临着一次系统设计危机。对此,我们可以做什么呢?本文中,我们探讨了现有方法是否够用,以及在哪些地方需要投入大量新工作。
1 去证明,不要去打补丁
现有的许多商业操作系统都存在大量的漏洞。美国非营利组织MITRE的通用软件安全漏洞库(CVEs: Http://cve.mitre.org))目前公开列举了已报道的11万多个漏洞(不包括已被解决的漏洞,还完全忽略了无数从未被报道过的其他漏洞);这份漏洞清单还在以大约每天50个新漏洞的速度不断增加。补丁肯定不可能跟上漏洞的速度。而且,给芯片打补丁要耗时数年,可能花费数十亿美元,这显然让天平大大地向攻击者倾斜了。
开源微内核seL4、CertiKOS 虚拟机层次结构、Comp-Cert验证的编译器等最新进展极大地提高了证明操作系统内核正确性的技术水平。这项技术还未广泛传播,但它有望证明不存在大型攻击种类。该技术依赖于可靠的架构抽象模型——硬件/软件接口,该作者和其他研究者最近也在这些模型的工作方面取得了进展。
2 深入硬件的背后
近年来,我们很清楚地意识到,我们在很多方面都做得还不够。第一,处理器硬件(通常要经过广泛的验证)长期以来一直被认为是软件的坚实基础,但其自身的漏洞也越来越多。第二,系统由来自多个供应商的多种软硬件组装而成,方式和复杂性都不断增加,这意味着我们不能只从单一处理器构架的角度来思考。我们需要站在全局考虑,认识到这一局面的复杂性。第三,也是最严重的,这些新的攻击涉及到跨越传统构架抽象的现象,这些抽象故意只描述硬件实现所允许的功能行为的外部,以允许实现性能的变化。这一灵活性对硬件性能的提升至关重要,但是攻击涉及通过性能属性进行的微妙信息流。它们揭示了一些微架构创新的潜在后果,这些创新在过去几十年给我们带来了越来越快的时序计算,因为缓存和预测导致了侧通道的出现。
3 硬件漏洞
理想情况下,必须从一开始就建立安全机制。我们如何通过建立安全硬件的基础来解决这一问题呢?
多年来,硬件安全对很多人而言都意味着聚焦于物理层。电源/电磁波侧通道和故障注入是提取加密密码的常用技术,通过操作芯片的物理实现而进行。这些技术也很有效,但值得注意的是,新一轮的攻击代表着完全不同的、更强大的攻击载体。
物理层安全社区的一个经验教训是,实现是至关重要的。硬件定义语言(hardware definition languages, HDLs)被编码成库逻辑单元之间的连接,然后放置和路由逻辑单元,生成芯片层设计。任何层级的小纰漏——从架构到硬件定义语言源和编译器、到单元晶体管定义、路由、功率、热学、电磁学、掺杂剂浓度和晶格——都可能导致潜在的可攻击故障。与恶意软件的二进制代码不同,我们无法观察到其中的许多物理性能。因此,系统更易出现设计错误,受到供应链攻击。
最近的攻击表明,侧通道正变得越来越强大,远超预期。传统的物理层侧通道是“区分信号与噪声”的问题。如果我们记录了足够多的电源使用情况,并有足够强大的信号处理能力,那么我们就能提取密码。架构侧通道具有更大的带宽和更好的信噪比,能更可靠地泄漏更多数据。
如果站在系统的角度,我们如何看待这个问题呢?首先,整体的问题比各部分问题之和更严重。系统由不同的组件构成,通常来自不同的供应商,它们得到的资源访问权限也比完成目标所需的权限要大;这对攻击者来说非常有用。例如,在谷歌“项目零”团队(Google Project Zero)对苹果手机内置的博通(Broadcom)无线芯片的攻击中,攻击者跳过坏的无线数据包,在无线芯片上安装恶意代码,然后威胁应用处理器上的苹果操作系统iOS。他们利用无线芯片作为跳板,使得攻击事半功倍。对这类组件的组合行为进行推断非常困难。攻击者可以通过意外的连接创建新的侧通道——例如,内存DIMM可以通过共享的I2C总线(带有以太网控制器)传输网络数据包。
硬件工程师经常谈起“寄生”电阻或电容,这种组件不是设计师放置的,而是由于物理实现而产生,往往会吸走信号或能量。现在,我们有了寄生计算机。许多组件有非预期的计算能力,就可能被误用,从x86页错误处理程序到直接内存访问(Direct Memory Access, DMA)控制器。这对理解所有计算都发生在何处(例如什么是软件而不是硬件)提出了挑战。
4 目标是精心设计的可靠系统
安全防护的全系统方法很重要(参见Bellovin3等文章)。从物理层攻击中得到的另一个教训是,由于有了更深层的保护,如今这种攻击不再是一种更大的威胁。利用激光故障注入从银行卡提取加密密钥还不够;攻击者还必须用它来偷钱。这就是银行的系统级防护起作用的时候了,例如交易限制和欺诈检测。如果密钥只与一个账户关联,那么结算仅限于该客户的钱,而不会牵涉到其他客户。应用程序级划分限制了回报,因此攻击者不能取得经济收益。
另一种方法是确保提供更丰富的背景信息,让硬件理解和加强安全特性。作者在一个团队中设计、开发和正式分析了CHERI硬件指令集架构(instruction-set architecture, ISA)、以及CHERI操作系统和应用程序安全性。CHERI指令集架构能让硬件提高指针起源,对虚拟内存的任意细粒度访问控制,抽象系统对象,包括粗粒度和细粒度分割。这些技术共同作用能提供可执行的分割和受控的共享,让可靠软件和不可靠软件(包括未修改的遗留代码)安全地共存。由于硬件注意到了软件的结构,例如指针和间隔,所以硬件可以保护软件,我们也可以推断防护的有效性——例如,形式化地证明体系结构抽象强制执行特定的安全属性。我们相信该CHERI系统构架具有很大的潜力,能提供前所未有的全系统可靠性,包括在某些侧通道攻击的概念都还未知时就处理这种攻击。
这种构架的有效性提高了目前的不安全语言(如C/C++)实现的安全性,并可以将已证明安全的操作系统内核置于更安全的基础之上。相似的方法还可以应用到其他领域,例如用在系统级芯片(system-on-chip, SoC)的脆弱性组件之间。
设计这类系统需要具有更全局的视野,硬件、操作系统和应用之间的相互影响更密切。设计者尤其需要对各层次之间发生了什么有更深入的理解,无论这些知识是否超出了其专业领域。更好的构架模型会实现更稳健的安全特性验证,在多个项目之间分摊验证成本有利于防护者而不是攻击者。这种验证必须具有包容性,测试系统的各个方面,包括实现相关行为的限制。
更好的验证能够保护我们不受抽象中存在的新漏洞的威胁,但是不能防护那些涉及与未建模现象相关的漏洞。悬而未决的问题是:是否存在构架规范与完整的硬件实现之间的抽象,让我们彻底推断出潜在漏洞,而不必如此棘手复杂?
5 结论
传统的模型——设计者在严格限制的层次中有自由权——已经不再适用。软硬件系统安全架构师需要更好地认识到哪些在自己专业领域之内、哪些超出了专业领域,以便推断出在抽象的其他层次发生了什么,理解这种构成的效果。要掌握整体复杂性,必须充分掌握与安全分析可能相关的信息,特别是全新漏洞种类相关的信息。安全保护战才刚刚打响。
(供稿人:唐川)
声明:本文来自新一代信息科技战略研究中心,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。