异构计算系统是指存在多种不同架构、功能处理器的计算系统。在日常生活中,异构计算系统随处可见,手机便是一个典型的异构计算系统。手机的SoC中一般都会包含CPU(中央处理器)和GPU(图形处理器)。部分手机还会包含NPU等定制处理器来加速手机的某项功能,如华为的麒麟970中就加入了NPU,用于加速图像识别等数据处理能力。另一方面,相较于普通的单CPU计算系统,异构计算系统带来了新的安全隐患和风险。
1 苹果M1芯片
微架构侧信道攻击是什么
侧信道攻击又称侧信道密码分析,最早是由美国密码学家P.C.Kocher于上个世纪九十年代末提出,用于针对密码实现的物理攻击方法。该方法主要利用密码实现在执行过程中产生的侧信息(如能量消耗、电磁辐射、运行时间等)来恢复密钥。
相较于传统侧信道攻击利用物理信息,微架构侧信道攻击利用CPU、内存等组件的实现特性,能够获取更细粒度、更准确的信息。同时攻击更加隐蔽和高效,尤其适用于目前广泛应用的云计算平台场景。
微架构侧信道攻击已经成为了计算机体系结构中难以绕过的一个安全问题。由于侧信道的产生的根本原因是有限资源的共享,而现代处理器中出于效率和成本的考虑,无法提供无限的资源或者完全的隔离机制,因此不能从根本上解决侧信道问题。由于侧信道攻击并不直接接触数据本身,这使得传统的基于权限的访问控制系统不能抵御侧信道攻击。近年来研究者针对现有的可信执行环境如Intel SGX[1]、Arm TrustZone[2]等,提出了多种侧信道攻击方式,完全破坏了受保护程序数据的机密性。
CPU中的侧信道攻击
目前CPU微架构中几乎每个组件都被发现可被用于进行侧信道攻击。其中缓存(cache)侧信道攻击[3]是最常见的攻击手法。由于CPU访问内存的速度较慢,因此通过将程序常用的数据放在靠近CPU、速度更快的缓存中,能够加速程序执行。利用这一特性,攻击者通过测量内存数据的访问速度快慢,来判断该内存数据事先是否位于缓存中。以Flush-Reload攻击方法为例,攻击者通过Flush指令,将共享内存中的某个内存数据从缓存中驱逐;在受害者执行一段时间后,攻击者再尝试Reload该内存数据,通过指令执行速度的快慢,攻击者能够判断该内存数据是否在缓存中,进而判断受害者在执行过程中是否读取了该数据,进而推测受害者的敏感信息。此外,攻击者还可以利用微架构侧信道攻击建立隐蔽通道,实现跨权限的数据传输。在18年发现的Spectre攻击[4]中,就利用了缓存侧信道攻击来建立隐蔽通道,将推测执行窗口中获取到的数据传递出来。
2 CPU中的存储层次
CPU中的分支预测功能也常被用于进行侧信道攻击[5]。当程序执行过程中发现后续的控制流依赖于某个值,而这个值位于内存中,因此CPU需要读取内存后再进行判断。然而,正如之前提到的,CPU访问内存的速度远远慢于自身的执行速度,一般需要上百个时钟周期,而在这个过程中,CPU只能处于空闲状态,等待数据返回,从而大大降低CPU的利用效率。因此现代CPU中往往会预测一个可能的分支方向,在等待内存数据返回的过程中,先执行后续的指令,再根据分支判断结果来保留或者丢弃执行内容。该过程也被称为推测执行或者乱序执行。现代CPU中使用了大量的技术和芯片面积来优化分支预测的准确率。一般来说,CPU中的分支预测过程如图3所示,预测的结果依赖于历史的分支跳转。
3 分支预测过程[6]
攻击者利用这一特点,通过在自身的内存空间中模仿受害者进程的分支结构,利用自身程序分支预测结果从而影响受害者进程的分支跳转。分支预测功能虽然大大加快了程序执行的效率,但会导致程序产生了在设计者设想之外的控制流,从而带来了诸多隐患。Meltdown[7]、Spectre[4]、Foreshadow[8]等攻击都是利用了乱序执行。
4 Meltdown和Spectre
超线程技术[9]也常被用于进行侧信道攻击。超线程技术能够在一个核心上同时运行两个执行上下文,从而提高了CPU核心的利用率。然而,这也产生了新的侧信道攻击方式。由于超线程技术并没有增加核心中的计算单元数量,因此核心中的2个执行上下文同时共享核心中的组件(如ALU),因此可以通过利用组件竞争来进行侧信道攻击。另一方面,如果攻击者能够控制受害进程和攻击进程在同一个核心上,那么就能够在避免中断用户程序的情况下,实时地进行攻击。
5 Intel 超线程技术
除去CPU组件中侧信道问题之外,操作系统中的缺页异常也被用于进行侧信道攻击[10]。由于计算机的内存大小有限,因此操作系统会对内存页进行换入和换出操作。当程序需要访问的内存页并未在内存中时,会触发缺页异常,由操作系统将硬盘上的内存页数据读取到内存中。攻击者可利用程序的缺页异常对受SGX保护的程序进行侧信道攻击。攻击者通过将程序运行所能使用的物理内存大小限制为一个内存页大小,然后观察程序运行过程中的缺页序列,从而获取程序的控制流,进而推导出程序输入中的敏感信息。
GPU中的侧信道攻击
目前最为常见的异构计算系统为CPU-GPU计算系统。在手机中,在一个SoC中包含CPU、GPU,二者通过核间的高速通道连接,并且一般共享同一个LLC和内存;在PC中,CPU和GPU之间一般都是通过PCIe通道进行连接,GPU拥有独立的缓存和内存。
相较于CPU,GPU中现有的侧信道攻击相对较少,其原因一方面是因为研究关注度相对较低,另一方面是因为GPU的体系结构与CPU存在较大差异,许多CPU中的侧信道攻击方法在GPU中并不适用。比如,GPU中存在大量的核心,不同的上下文一般不会共享一个核心,并且同时会有多个线程同时运行,使得缓存侧信道攻击的噪声过大、效果差。不过,GPU也带来了新的侧信道攻击方法。
在PC中,由于CPU和GPU之间通过PCIe通道进行连接,GPU上的多个上下文都需要在同一条PCIe通道中进行数据传输,因此攻击者能够通过PCIe中的拥塞情况进行侧信道攻击[11]。攻击者通过测量自身程序的数据传输速度来推测受害者的数据传输情况,进而推测受害程序的行为。
6 利用PCIe通道拥塞的侧信道攻击[11]
这种利用拥塞的侧信道攻击也同样可被用于GPU内部[12]。在Nvidia GPU中,计算单元会在物理上被划分为不同的组,同组之间共享输入输出的管道。因此,攻击者能够利用管道中的拥塞建立隐蔽通道,接收方根据指令执行的速度快慢来区分0和1。
7 利用GPU内部管道拥塞的侧信道攻击[12]
相较于CPU,GPU中的核心数量更多,数据处理过程会由多个核心并行处理,因此GPU中需要额外的功能单元进行线程调度、指令优化等,而这些特殊组件也带来了新的侧信道问题。在GPU中,不同线程可能会执行同一条指令流,因此不同线程会同时进行内存访问。而内存读写的最小单位为行,一个行的大小一般为64或128 Byte,各个线程读取访问的数据可能位于同一行中,最终导致重复读取同一行。为了对这种内存访问行为进行优化,GPU中的内存聚合单元会将访问同一个行的指令聚合,压缩内存访问指令的数量,提高程序执行的速度,而执行速度的差异便产生了侧信道信息。攻击者通过观察受害程序执行的速度,来推测受害程序在执行过程中访问的内存地址是否在同一行中[13]。如AES加密算法中通过查找表来实现快速的非线性变换,而查找过程中的索引由明文和密钥共同决定,因此攻击者通过测量加密算法执行的速度,能够推测访问的索引是否相近,并结合明文推测密钥。
8 GPU 内存访问聚合
此外,GPU中的可用显存大小、频率、功耗等也可被用于进行侧信道攻击。攻击者可以利用GPU提供的性能计数器来获取GPU运行过程中的状态信息[14]。比如,现代浏览器在渲染网页时会使用GPU进行物理加速,于是攻击者利用不同网页渲染网页所需要的显存变化,来判断用户正在访问的网页。
9 不同网页渲染过程的内存请求[14]
最新的一项研究[15]发现,在智能手机的键盘输入的过程中由于动画的不同,GPU在渲染时的性能计数器会发生变化,因此,攻击者能够通过监控GPU的性能计数器来判断用户的输入内容。
10 渲染不同的按键动画导致的GPU性能计数器变化[15]
FPGA中的侧信道攻击
相较于GPU,其他的硬件加速器的应用范围相对较小,其中较为常见的一种硬件加速器为FPGA(Field-Programmable Gate Arrays)。FPGA是一种可定制的半定制电路,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA常被用于电路设计验证,以及作为硬件加速器使用。例如,通过FPGA加速深度学习的计算过程。
由于电压的波动会影响FPGA中逻辑计算模式的运行速度,因此攻击者可以通过在FPGA中通过功耗传感器检测电路的电压变化,并利用电压的波动进行侧信道攻击,窃取机密信息。攻击者可以在FPGA中不同槽中部署环形振荡器,由于不同的电压会显著影响环形振荡器的频率,因此攻击者可以将该电路的输出与T触发器相连,从而获取环形振荡器的频率。
由于FPGA中执行的不同操作都会影响功耗传感器的数值,因此攻击者可以通过追踪功耗来推导FPGA中的操作。以攻击CNN为例[16],CNN中的全连接层、卷积层和池化层会在FPGA的功耗上产生明显区别,因此攻击者能够通过功耗推测受害者的CNN模型结构。
11 通过多个环形振荡器获取功耗信息[16]
总 结
随着5G、人工智能、高性能大数据分析等应用的蓬勃发展,数据体量的急剧膨胀,数据中心对计算能力的需求也日益庞大,远超CPU处理器的能力所及。由CPU、GPU、FPGA等不同类型的计算设备组成的异构计算系统,具备强大计算性能、灵活可配置等特征,成为大规模高性能数据计算的趋势。亚马逊、阿里云、腾讯云等公有云服务提供商相继推出了相应的异构计算服务。同时,在云数据中心提供大规模、高效能的数据计算服务的同时,其数据外包计算、计算平台不可信等特征,使得数据安全问题相比传统计算模式更加严重。虽然,Intel、ARM等芯片提供商提出了各种可信执行环境方案来保护数据安全,但侧信道攻击能够绕过安全保护,窃取敏感数据,已经成为了云环境的一大安全威胁。(赵宇、羌卫中)
参考文献:
Intel. Intel SGX. https://www.intel.com/content/www/us/en/developer/tools/software-guard-extensions/overview.html.
Arm.TrustZone. https://www.arm.com/technologies/trustzone-for-cortex-m.
Lou Xiaoxuan, Zhang Tianwei, Jiang Jun and Zhang Yiqian. 2021. A Survey of Microarchitectural Side-channel Vulnerabilities, Attacks, and Defenses in Cryptography. ACM Computing Surveys.
Kocher Paul, Horn Jann, Fogh Anders, Genkin Daniel and Gruss Daniel. 2019. Spectre Attacks: Exploiting Speculative Execution. 2019 IEEE Symposium on Security and Privacy.
Lee Sangho, Shih Ming-Wei, Gera Prasun, Kim Taesoo, Kim Hyesoon and Peinado Marcus. 2017. Inferring fine-grained control flow inside SGX enclaves with branch shadowing. 26th USENIX Security Symposium.
Barberis Enrico, Frigo Pietro, Muench Marius, Bos Herbert and Giuffrida Cristiano. 2022. Branch History Injection: On the Effectiveness of Hardware Mitigations Against Cross-Privilege Spectre-v2 Attacks. 31th USENIX Security Symposium.
Lipp Moritz, Schwarz Michael, Gruss Daniel, Prescher Thomas and Haas Werner. 2018. Meltdown: Reading Kernel Memory from User Space. 27th USENIX Security Symposium.
Bulck Jo Van, Minkin Marina, Weisse Ofir, Genkin Daniel and Kasikci Baris. 2018. Foreshadow: Extracting the Keys to the Intel SGX Kingdom with Transient Out-of-Order Execution. 27th USENIX Security Symposium.
Intel. What is Hyper-threading . https://www.intel.com/content/www/us/en/gaming/r-esources/hyper-threading.html
Xu Yuanzhong, Cui Weidong and Peinado Marcus. 2015. Controlled-Channel Attacks: Deterministic Side Channels for Untrusted Operating Systems. 2015 IEEE Symposium on Security and Privacy.
Tan Mingtian, Wan Junpeng, Zhou Zhe and Li Zhou. 2021. Invisible Probe: Timing Attacks with PCIe Congestion Side-channel. 2021 IEEE Symposium on Security and Privacy (SP).
Ahn Jaeguk, Kim Jiho, Kasan Hans, Delshadtehrani Leila, Song Wonjun, Joshi Ajay and Kim John. 2021. Network-on-Chip Microarchitecture-based Covert Channel in GPUs. 54th Annual IEEE/ACM International Symposium on Microarchitecture.
Jiang Zhenhang, Fei Yunsi and Kaeli David. 2016. A complete key recovery timing attack on a GPU. 2016 IEEE International Symposium on High Performance Computer Architecture.
Naghibijouybari Hoda, Neupane Ajaya, Qian Zhiyun and Abu-Ghazaleh Nael. 2018. Rendered Insecure: GPU Side Channel Attacks are Practical. 2018 ACM SIGSAC Conference on Computer and Communications Security.
Yang Boyuan, Chen Ruirong, Huang Kai, Yang Jun and Gao Wei. 2022. Eavesdropping user credentials via GPU side channels on smartphones. 27th ACM International Conference on Architectural Support for Programming Languages and Operating Systems.
Zhang Yicheng, Yasaei Rozhin, Chen Hao, Li Zhou and Faruque Mohammad Abdullah Al. 2021. Stealing Neural Network Structure Through Remote FPGA Side-Channel Analysis. IEEE Transactions on Information Forensics and Security.
声明:本文来自穿过丛林,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。