处理器的安全漏洞及防御策略研究

2021-10-14 03:28李沛南
科技与创新 2021年19期
关键词:敏感数据体系结构攻击者

李沛南

(中国科学院信息工程研究所信息安全国家重点实验室,北京 100093;中国科学院大学网络空间安全学院,北京 100049)

随着大数据时代的到来,5G、云平台等技术日趋成熟,人们生活中记录的文件、音频、视频可以在网络上高速传播,并能使用云平台技术存储、分享。但随着计算机系统日趋复杂,软硬件技术日益繁多,近些年,越来越多的安全漏洞被披露。2011—2020 年新披露CVE 漏洞的数量统计如图1 所示,2020 年新披露的漏洞已接近10 年前的6 倍。更重要的是,除了软件上发现的漏洞外,硬件本身也被披露存在着大量的安全隐患。软件漏洞可以通过加补丁等方法进行修复,但硬件上的缺陷却无法在短时间内有效地根除。这些问题都来源于在传统的系统设计中,不论是硬件还是软件,都是一味地追求性能而忽略了安全性。因此,分析现有漏洞,归纳漏洞本质,并在下一代系统设计伊始便将安全性作为重要的考虑因素。

图1 2011—2020 年新披露CVE 漏洞的数量

1 攻击场景分析

在实际的攻击中,攻击者通常需要首先确定攻击的目标,再针对性地构造攻击。典型的攻击场景包括以下几个。

1.1 单核内攻击

攻击者可以通过脚本注入等方法与受害者程序在同一核内运行。这样一来,攻击者可以通过改变受害者的执行流,将信息传递给攻击者,或者直接恶意读取受害者的数据,进行攻击。当处理器核支持同时多线程(Simultaneous multithreading,SMT)机制时,攻击者甚至可以观察另一个硬件线程中正在运行的受害者程序,并获得敏感信息。

1.2 多核间攻击

多核间也存在各种各样共享的软件或者硬件资源,攻击者通过分析这些共享资源的变化,则可以获得其他核上受害者程序当前的运行状态或敏感数据。

1.3 网络攻击

通常情况下,处理器需要与网络上的其他设备进行通信,例如浏览网页时需要向网页服务器发起请求并响应。在此过程中,攻击者有机会通过执行恶意代码劫持服务程序,或者通过分析服务器的响应速度进而推出敏感信息。

1.4 安全执行环境内部攻击

尽管最新的处理器中提出了安全执行环境,例如Intel的 SGX(Software Guard Extension)机制、ARM 的 TrustZone机制。处理器会将机密程序部署在安全执行环境中执行,而其他非安全的程序在非安全模式下运行。但SGX 与TrustZone 机制都是基于现有的共享硬件资源进行设计,攻击者依然有机会通过观察资源的变化进而获得敏感信息。

在这些场景下,多种多样的信息都有可能成为攻击者的窃取目标,例如处理器中的AES 加密秘钥、SGX 机制中验证秘钥、其他用户程序的数据、操作系统中虚拟地址到物理地址的映射关系、虚拟机管理程序中存放的其他虚拟机信息、浏览器中其他页面信息等。

2 处理器中存在的漏洞

2.1 软件漏洞

由于大量的程序在最初设计时并未考虑安全性,这使得攻击者在分析源码后,可以利用潜在的漏洞来窃取信息。依据攻击过程中采用的方法,典型的软件漏洞攻击可以分为两大类,分别如下。

2.1.1 控制流劫持

在程序中,依据执行状态变换控制流的操作十分普遍。然而由于缺乏程序执行过程中指令地址存储与程序数据空间,因此,不论是前向的跳转、调用指令,还是后向的返回指令[1],攻击者有机会通过改变其目标地址从而劫持受害者程序的执行流。具体的方法灵活多样,攻击者可以通过输入参数,强行覆盖软件栈空间的数据,进而保证在程序跳转时,执行到特定的代码片段,进而导致信息泄露。

2.1.2 释放后使用(Use After Free,UAF)

除了与受害者程序交互,恶意劫持控制流外,攻击者还可以在其他进程内获取敏感数据。这是因为程序在分配或者释放空间时,对应的内容并不会被初始化,而残留着之前程序的数据。因此,当受害者程序执行后,残留的敏感信息可能被后续程序执行时访问到。这种攻击被广泛使用于实际的攻击场景中。

2.2 硬件漏洞

自2018 年推测执行漏洞的披露,揭示了现有商用处理器中最核心的性能优化技术——推测执行存在着严重的安全隐患,也说明了传统的以性能优先的设计方案缺乏严谨的安全性分析。处理器中存在的安全问题也被广泛关注。除了在设计过程中隐含的可疑“后门”外,芯片本身的特性也可能成为攻击者的目标。通过探针监听、电磁或功耗分析等物理方法,攻击者可以观测到处理器中的当前运行信息,进而获得敏感信息。这些攻击需要额外的硬件支持,攻击者还可以利用其他漏洞,采用软件方法即可观测到敏感信息。本节主要讨论这一类攻击。

2.2.1 缓存侧信道攻击

高速缓存(Cache)减小了CPU 处理数据与内存之间数据供给不足的剪刀差。考虑到实现的复杂性和硬件开销,缓存设计为多级结构。小尺寸的高级别高速缓存放置在靠近CPU 的位置,大尺寸的低级高速缓存放置在远离CPU 的位置。替换策略利用了空间和时间上的局部性,并帮助经常访问的高速缓存行始终命中高级高速缓存,从而确保加载这些数据仅花费最少的周期。尽管不经常访问的低级缓存数据加载需要相对更多的周期。通过测量访问时间,对手可以推断出相应数据来自哪个级别的缓存。通过进一步分析,攻击者可以推出敏感信息。现有的缓存侧信道攻击已经有多种方法,包括 Flush+Reload[2]、Prime+Probe 等。

2.2.2 分支预测器侧信道攻击

通常,程序并不是线性地按指令序列执行,而是通过许多分支、跳转、返回指令来控制程序的方向。处理器引入分支预测单元(Branch Predictor Unit,BPU),包括分支目标缓冲区(Branch Target Buffer,BTB)、模式历史表(Pattern History Table,PHT)和返回地址堆栈(Return Address Stack,RAS),以记录分支指令的执行历史,并预测执行目标。然而,这些预测历史表由所有程序共享,因此程序执行时可以感知到之前的运行历史。依据表中的历史信息,攻击者可以分析出敏感信息。目前,BranchScope[3]、Branch Shadowing证明了PHT 以及BTB 都存在信息泄露的风险。

2.2.3 端口竞争侧信道攻击

处理器流水线中通常采用大量的执行单元以增大指令并行执行能力,所有程序对执行单元共享。但资源数有限,攻击者通过频繁占用特定的资源可以观测到其他程序是否有使用对应的资源,进而分析出其他程序的执行状态与敏感信息。

2.2.4 推测执行攻击

基于前面的三种侧信道攻击可以发现,攻击者可以通过观察微体系结构状态的差别,进而分析出敏感信息。对于现有的推测执行技术,包括分支预测、乱序执行、前递技术,在发现错误预测后,仅仅会将对体系结构状态有影响的功能单元进行恢复,但考虑到硬件实现的复杂度和性能问题,对不影响程序正确性的微体系结构状态并不会被恢复。因此,攻击者通过控制受害者程序的推测执行指令,访问敏感信息,并依据敏感信息改变微体系结构的状态。之后,通过侧信道的方法,可以获得敏感信息。目前,采用该方法,攻击者通过 Spectre[4]、SMoTherSpectre、SpectrePrime、SgxPectre、NetSpectre 等攻击均证明了单核内、核间、安全执行环境、网络上都存在信息泄露的可能。

除以上几种方式之外,还有诸多其他微体系结构状态的改变也可以被攻击者,例如预取器、电压控制模块、电容模块的变化都有可能被攻击者用来构造攻击。

3 防御策略

3.1 软件漏洞防御策略

软件漏洞的本质是由于缺乏安全保障来防止攻击者恶意攻击但并未触发错误的读写操作。针对这一问题,可以通过为编译器和操作系统中添加补丁,在程序编译阶段,动态地识别潜在的安全风险,并在程序内添加严格的判断屏蔽非法读写操作或保证在分配空间过程中无法获取之前的数据。

仅采用软件方法或许无法准确地屏蔽所有安全隐患,引入硬件支持也是一种有效的方法。通过添加额外的硬件机制,在程序执行过程中动态地识别控制流地址,防止攻击者恶意读写该区域;对于释放后使用的攻击,可通过硬件识别内存分配、释放的过程,通过添加标签,进而避免后续程序获得之前程序的敏感数据。

3.2 硬件漏洞防御策略

针对芯片架构中的安全隐患,需通过隔离攻击者与受害者程序,或者干扰攻击者观察微体系结构状态的改变。主要有以下几种方法。

禁用特定模块:针对安全隐患,禁用有风险的模块是最直接的方法,但是已有的硬件模块大都是对处理器性能有显著提升的功能。例如禁用缓存后,处理器性能与内存吞吐量之间的“剪刀差”又凸显,处理器性能将大打折扣。

隔离:通过软件或硬件的方法将攻击者与受害者隔离,防止他们共享硬件或者软件资源。这样一来,攻击者将无法直接读取受害者的数据,无法影响受害者的执行流程,也无法观察共享资源的变化而推出敏感信息。例如,针对熔断漏洞,通过隔离用户态与内核态的程序,可以防止恶意用户直接窃取内核信息。

随机:现有的硬件漏洞中,攻击者之所以能从微体系结构状态的变化分析出敏感信息内容,是因为其微体系结构状态的变化方式固定,且每一个状态本身对应特定的敏感信息。对此,一方面可以通过随机缓存结构状态的变化方式,另一方面可以使微体系结构状态与敏感信息本身之间的对应关系随机变化,以解决此问题。随机从本质上讲是一种轻量的隔离方法。例如,通过随机化缓存地址与缓存行之间的映射关系,攻击者便无法通过分析敏感数据是否在缓存中,继而分析出对应的地址信息。

降低攻击者分析能力:在攻击过程中,需要借助特定的方法进行观察。比如在绝大部分的缓存侧信道与推测执行攻击中,攻击者往往通过微体系结构状态改变导致的时间差进而分析出隐含的敏感信息。因此,可以直接削减用户程序获得时间的精度,使得攻击者无法从时间差中获得有效的信息。

针对攻击特征制定特定方案:除以上几种方法外,攻击者还可以通过依据不同的攻击特征,指定不同的防御方法。例如针对推测执行侧信道攻击,可以防止推测执行过程中对于微体系结构状态的改变,从而避免信息泄露。针对分支预测器目标地址被恶意训练的攻击,可以通过将跳转分支转化为其他指令,从而直接避免受害者程序被恶意诱导。针对预取器固定预取规则分析出敏感信息的特征,可以引入随机预取方案,避免攻击者从中分析出受害者的访问规律。

4 防御策略的应用

本小节以后向控制流劫持以及推测执行攻击为例,分别讲述防御策略在真实防御机制中的应用。

4.1 后向控制流劫持的防御

为防止攻击者通过数组越界直接更改后向返回的目标地址,可以通过编译器在数组访问过程中进行边界检查,这一 功 能 已 实 现 在 Intel 的 MPX ( Memory Protection Extensions)机制中。这种方法会在程序执行时引入较多的地址比较,从而导致性能的下降。因此,可以通过引入单独的硬件模块,对真正的跳转地址进行存储,防止该地址被恶意篡改,保证程序控制流的完整性[5]。

4.2 推测执行攻击的防御

推测执行攻击的步骤为:①攻击者诱使受害者推测执行特定的代码片段;②在推测执行过程中首先访问敏感数据;③依据敏感数据,改变微体系结构的状态;④通过侧信道的方法从微体系结构状态的变化中分析出敏感信息。

针对推测执行攻击的步骤,分别列出以下防御目标:①防止恶意训练并堵塞可疑的推测执行;②隔离敏感数据;③防止推测执行改变微体系结构状态;④防止攻击者从微体系结构改变中分析出敏感信息。针对这四种防御目标,可以提出不同的防御方案。

防止恶意训练并堵塞可疑的推测执行:针对幽灵漏洞中攻击者恶意训练分支预测器现象,可以设计为不同的程序分配不同的分支预测器资源,进而进行隔离。但这种方法会导致较大的硬件开销,因此通过引入随机的方式更新分支预测器,也可以达到轻量隔离的效果。堵塞可疑的推测执行可以通过在推测执行前插入FENCE 指令,这种方法本质上为禁用推测执行,这会带来较大的性能开销,使用性不强。

隔离敏感数据:通过隔离用户空间与内核空间、隔离浏览器中不同的页面,可以避免攻击者在推测执行过程中访问到本不该访问的敏感数据。除此之外,还可以通过软件方法,标注对应的敏感信息,并在程序执行过程中,动态地随机化敏感信息的内存分布。这会干扰攻击者直接访问敏感信息。

防止推测执行改变微体系结构状态:可以通过引入单独的硬件或在发现错误推测执行后回滚微体系结构状态,从而提供一种隔离机制,保证在非推测机制下无法感知推测执行过程中改变。

防止攻击者从微体系结构改变中分析出敏感信息:通过降低用户获得时间的精准度,可以降低攻击者感知微体系结构状态变化的能力。

除此之外,针对推测执行攻击,以制定的防御方案,比如禁止推测执行过程中改变缓存状态,但不影响不改变缓存状态指令的执行。可以通过将分支跳转指令转变为其他指令,进而防止攻击者的恶意训练。

5 结语

在大数据时代的背景下,日益增多的漏洞揭示了现有的计算机系统中存在着严重的安全隐患,也为传统的以性能优先的处理器设计策略敲响了警钟。人们迫切需要在下一代处理器设计伊始,便引入安全因素。本文着重分析了已知的软硬件漏洞,并归纳总结了有效的防御策略。在此基础上,以后向控制流劫持与推测执行攻击为例,分别讲述了防御策略在软硬件漏洞中的应用,并分析各方法的缺陷及优势。通过结合多种防御方法,未来的处理器可以在保证安全性的前提下,提升性能并降低硬件开销。

猜你喜欢
敏感数据体系结构攻击者
基于贝叶斯博弈的防御资源调配模型研究
基于思维导图的化学知识体系结构构建
软件通信体系结构(SCA)理念下的无线通信系统探究
基于PPP工程采购模式的工程项目合同体系结构研究
关于数据防泄露(DLP)的论述
正面迎接批判
正面迎接批判
无线传感器网络中敏感数据分布密度控制方法研究
浅谈企业数据安全风险分析及保护
认知无线网络中的重点技术和研究