CPU缓存侧信道攻击
2018年年初,多个独立的安全研究团队披露了现代CPU架构的若干严重漏洞,在业界造成了极大地影响,至今仍余波未了。在这些漏洞的利用方式中,针对CPU缓存的侧信道攻击技术是主要方式。什么是针对CPU缓存的侧信道攻击?黑客会如何利用侧信道攻击技术?
密码是一种用来混淆的技术,它将正常的(可识别的)信息转变为无法识别的信息。现阶段用户的隐私信息大多是依靠加密技术实现,如登录网站、电子邮箱、银行取款等等。用户信息的安全性依靠于加密算法的安全性。然而理论上的安全并不等同于物理实现上的安全。
关于侧信道攻击
侧信道攻击是利用密码算法执行过程中泄漏的与内部运算紧密相关的多种物理状态信息如声光信息、功耗、电磁辐射以及运行时间等,再结合统计学手段等进行攻击。近年来,侧信道技术已经逐渐地从设备外部深入到计算机内部的CPU、高速缓存(Cache)、分支预测单元等等得到其中蕴含的敏感信息(如密钥)。Cache攻击是一种新型的侧信道分析技术,它可以跨平台、跨CPU、突破安全边界对目标设备进行攻击,对现有安全防护造成极大的威胁。另外,由于Cache侧信道攻击可以利用cache共享实施攻击,因此具有不易发现且极难防御的特点。
Cache是什么?
Cache的学名是中央处理单元高速缓冲存储器,由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。主要由三大部分组成:
➡Cache存储体:存放由主存调入的指令与数据块。
➡地址转换部件:建立目录表以实现主存地址到缓存地址的转换。
➡替换部件:在缓存已满时按一定策略进行数据块替换,并修改地址转换部件。
Cache的作用
冯.诺依曼体系结构是现代计算机的基础,现在大多计算机仍是冯.诺依曼计算机的组织结构。一个典型的冯诺依曼系统如图1所示,包含下面几大件:计算机由控制器、运算器、存储器、输入设备、输出设备五部分组成。然而由于计算机技术发展,主存储器速度比CPU处理速度慢得多,使得CPU的高速处理能力不能充分发挥,整个计算机系统的工作效率受到影响。为了缓和中央处理器和主存储器之间速度不匹配的矛盾,计算机系统加入了Cache模块,现代计算机CPU与内存和Cache基本关系如图2所示 。CPU在Cache中找到有用的数据被称为命中,当Cache中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。
图1 冯诺依曼体系结构
图2 最简单的高速缓存配置图
Cache结构
一般处理器的cache分三层,其架构如下图3所示,L1 Cache一般分为Data Cache(数据缓存)和Instruction Cache(指令缓存),为每个核单独占有。L2 Cache一般是每个核心单独占有,或者两个核心共享。L3 Cache一般在多核CPU中是所有核心CPU共用。访问时间关系为T(内存)>T(L3)>T(L2)>T(L1)。
图3 Intel cache架构
如下为Intel Sandy Bridge架构处理器实图,可以看到多核共享的L3 Cache:
Cache侧信道攻击原理
多核之间cache数据共享,而cache命中和失效对应响应时间有差别,攻击者可以通过访问时间的差异,推测cache中的信息,从而获得隐私数据。根据采集信息不同,cache侧信道攻击可分为时序驱动攻击、访问驱动攻击以及踪迹驱动攻击。时序驱动攻击需要获得目标攻击系统详细配置参数,重建对照环境,利用统计分析方法,对照采集到的密码算法一次加密/解密的整体时间,推测密钥。踪迹驱动攻击需采集密码算法执行过程中所有cache访问命中和失效序列,再结合明文或密文推测密钥,一般通过功耗检测手段进行,但该手段需要特殊的信息采集设备而且需要物理接触密码设备,实现起来比较复杂。访问驱动攻击通过采集加密或解密过程中访问的cache组集合,再利用数学分析方法推测密钥,可以远程实现,攻击实现可行性较强。目前,Cache侧信道攻击包含四种方法,分别为Flush-Reload方法、Flush-Flush方法、Prime-Probe方法和Evict-Time方法。下面将对每类方法原理进行说明,并引用IAIK项目flush_flush [1]中的代码来解释关键行为点。
1 Flush-Reload
Flush-Reload(FR)方法是prime-probe方法的变种,基于共享内存实现,是一种跨内核、跨虚拟机的Cache 探测方法。在Flush 阶段,攻击者将监控的内存块从cache中驱逐出去,然后在Trigger阶段等待目标用户访问共享内存。在Reload阶段,攻击者重新加载监控的共享内存块。如果在等待的期间,目标虚拟机访问过的内存块不需要重新加载,时间将会较短,因为这些数据已经被缓存在cache中。根据加载时间长短,可判定目标虚拟机访问过的数据。Flush-Reload具体步骤如下:
步骤1. Flush:将共享内存中特定位置映射的cache数据驱逐
步骤2. Trigger:等待目标虚拟机响应服务请求,更新Cache
步骤3. Reload:重新加载Flush阶段驱逐的内存块,测量并记录cache组的重载时间
示例代码说明:
下面这段代码实现了Flush+Reload攻击。通过rdtsc_begin和rdtsc_end来标记访问目标内存的开始和结束时间,从而计算出访问时长。然后再判断该时长是否小于一个Cache命中的临界值,最终便可知道该内存是否被目标程序访问过:
2 Flush-Flush
与Flush-Reload不同的是,Flush-Flush攻击是基于clflush指令执行时间的长短来实施攻击的。如果数据没在Cache中则clflush指令执行时间会比较短,反之若有数据在cache中则执行时间会比较长。与其它Cache攻击不同,Flush Flush侧信道攻击技术在整个攻击过程中是不需要对内存进行存取的,因此该攻击技术更加隐蔽。然而根据我们的经验,由于有无数据情况下Cache被flush的时间差别其实并非特别明显,因此在攻击过程中数据判断的精度并不高。
Flush-Flush具体步骤如下:
步骤1:通过flush清空Cache原始数据
步骤2:等待目标进程运行,更新Cache,并刷新共享缓存行,测量刷新时间
步骤3:根据测量时间判断原始数据是否被缓存
该方法攻击原理如图所示:
示例代码说明:
下面这段代码实现了Flush-Flush攻击。代码主要通过rdtsc()来标记flush(addr)运行前后的时间点,计算出清理目标Cache数据所需的时间。如果flush(对应clflush指令)执行的时间较长,则表示数据被缓存,如果时间较短则表示数据未被缓存。
3 Prime-Probe
Prime-Probe方法具体步骤如下:
步骤1. Prime: 攻击者用预先准备的数据填充特定多个cache 组
步骤2. Trigger: 等待目标虚拟机响应服务请求,将cache数据更新
步骤3. Probe: 重新读取Prime 阶段填充的数据,测量并记录各个cache 组读取时间
该方法攻击原理如图所示:
示例代码说明:
4 Evict-Time
Evict-Time具体步骤如下
步骤2:等待目标程序运行,并记录其运行时间(运行过程有可能使用到第一步所说的Cache数据)
步骤3:使用Evict方法覆盖Cache上的数据
步骤4:然后再运行一次该函数,并第二次记录执行时间,如果时间不一致且执行时间变长则说明程序运行时读取了第一步所说的Cache数据(Cache未命中)
与其他三种侧信道攻击技术相比,Evict-Time不是当前主流的侧信道攻击技术。
应用场景最广泛的是Prime-Probe,而Flush-Rload和Flush-Flush要用到SSE2指令clflush,因此受到一定限制,在JavaScript和非Intel CPU中无法使用。但同时,Prime-Probe也有缺点,在攻击速度、攻击稳定性方面,则不如Flush-Reload和Flush-Flush。
在支持clflush指令的环境中,Flush-Flush和Flush-Reload都可以使用,主要的区别是Flush-Flush无需访问内存,使用的CPU指令更少,速度也更快,也更不容易被检测。但flush-flush精度上要求更高,因为clflush指令的执行时间一般在100多个时钟周期,相较于数据未被缓存,数据被缓存时,clflush执行时间只会增加10多个时钟周期,因此Flush Flush更容易受到其它程序噪音的影响。
Cache侧信道的攻击发展
1998 年,Kesley 等人首次提出Cache 命中率可用于密钥分析的思想,颠覆了传统密钥分析方法,引起了研究人员的广泛关注。之后,研究人员以数据缓存、指令缓存作为研究对象,提出了多种可行的Cache 侧信道攻击方法,对算法安全性带来了严重威胁。但大部分研究成果都是基于单机非虚拟化环境。直到2009年,Ristenpart等人首次提出在云环境中存在跨虚拟机cache侧信道攻击的安全威胁,并利用Prime-Probe 方法在Amazon EC2 云平台中探测得到同驻虚拟机的Cache 负载状态信息以及用户击键间隔时间信息等。2014年,Yarom提出第一个跨内核的cache侧信道攻击Flush-reload。其利用Intel X86处理器系统共享内存的漏洞,通过监测内存得到CPU处理的cache line。此种攻击主要利用L3层cache实现攻击,同时并不需要共享执行core。2015年,Liu和Irazoqu使Prime-Probe攻击可以应用于跨内核的cache侧信道攻击。2016年,Irazaqui提出第一个可以跨CPU的AMD平台的cache攻击。攻击环境逐渐从单核转为跨核,从微处理器转到云环境。
攻击实例
在2015CCS大会上,Yossef Oren等人利用不安全的网站链接,探测得到用户的鼠标和网页活动信息,甚至可以利用受害者的正在访问的网页信息。此种攻击可移植性强,不用安装恶意软件,可行性较高,攻击原理如图6所示。
图6 利用Java的cache侧信道攻击原理
在Europe 2016 Blackhat上,Moritz Lipp等人演示了如何从cache中得到信息确定用户正在输入的字符,演示情况如图7所示,用户输入字符,攻击者可以很快获得相应的信息。
图7 Moritz Lipp演示在智能手机上的cache 侧信道攻击
在USA 2016 Blackhat上,Taylor Hornby等人演示了如何从cache的侧信道信息中得到其他用户正在浏览的网页,演示现场图如图8所示。
图8 Taylor Hornby演示如何获取受害者正在浏览的网页
此外,伴随着云服务越来越贴近生活,云用户持续增多。云环境中同驻虚拟机cache资源共享也成为cache侧信道攻击的目标,近几年针对云上安全的研究也逐渐增多。在CHES 2016,Inci,M.等人成功实现了在亚马逊云上得到用户RSA私钥,现场如图9所示。
图9 Inci,M等人在CHES上讲解攻击原理
在2016 USENIX, Moritz Lipp等人上演示了如何在拥有trustzone安全环境的安卓手机上实施cache攻击,得到精准的用户信息,部分成果如图10 所示。
图10 利用cache模版侧信道攻击得到用户输入信息
在arXiv 2017 ,Schwarz,M等人在Malware Guard Extension: Using SGX to Conceal Cache Attacks一文中,利用SGX来隐藏cache攻击(Intel声称的SGX可以消除侧信道攻击,并且推荐使用SGX保护加密计算),得到用户的私钥。一条迹的数据可以恢复96%的私钥,11条迹可以恢复全部的私钥,其攻击原理如图11所示。
图11 在SGX可信执行环境下的cache侧信道攻击原理
总结
Cache侧信道攻击方法严重威胁加密算法的安全性,而且随着云服务技术的大规模应用,虚拟化技术的普及,使得Cache侧信道远程攻击更为隐蔽从而也更具攻击力。Cache攻击逐渐渗透到我们的日常应用中,智能手机的可信环境在此种攻击方法下也存在严重安全隐患。安全问题日益突出,用户的隐私需要更加完善的安全措施来保护。希望更多地研究学者加入我们的队伍中,为隐私保驾护航。
CPU缓存侧信道攻击相关推荐
- CATalyst——针对末级缓存侧信道攻击的防御技术
CATalyst: Defeating Last-Level Cache Side Channel Attacks inCloud Computing, HPCA'16 (A类), 2016年3月[1 ...
- Packet Chasing:通过缓存侧信道监视网络数据包
摘要 本文介绍了一种对网络的攻击–Packet Chasing,这种攻击不需要访问网络,无论接收数据包的进程的特权级别如何,都能发挥作用.一个间谍进程可以很容易地探测和发现网络驱动程序使用的每个缓冲区 ...
- Intel CPU 易受新型的 SGAxe 和 CrossTalk 侧信道攻击
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 网络安全研究员发现了两种针对当代 Intel 处理器的攻击,可泄露CPU 可新执行环境 (TEE) 中的敏感信息. 第一种攻击名为 & ...
- 头歌-信息安全技术-Spectre侧信道攻击过程验证
头歌-信息安全技术-Spectre侧信道攻击过程验证 一.第1关:Cache vs Memory 1.编程要求 2.评测代码 二.第2关:基于Flush+Reload的侧信道实现 1.编程要求 2.评 ...
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]43 为AES 对抗侧信道攻击的防御
这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么. 为AES描述一些基础的(可能无 ...
- 简单来看看什么是侧信道攻击
前言 之前在看逻辑层面的安全,其中有个旁路攻击,书里面说这玩意就是防范侧信道攻击. 旁路攻击又被称为旁路信道攻击或侧信道攻击.这种硬件层面的攻击通常以从电子设备获取机密信息为目标.对于密码算法,加密是 ...
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第39篇]侧信道攻击和故障攻击有什么区别
这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么. 侧信道攻击(Side-chan ...
- 【安全硬件】Chap.6 IC和半导体产业的全球化;芯片生产猜疑链与SoC设计流程;可能会存在的安全威胁: 硬件木马、IP盗版、逆向工程、侧信道攻击、伪造
[安全硬件]Chap.6 IC和半导体产业的全球化:芯片生产猜疑链与SoC设计流程:可能会存在的安全威胁: 硬件木马.IP盗版.逆向工程.侧信道攻击.伪造 背景 1. IC和半导体产业的全球化 2. ...
- 基于Montgomery算法的高速、可配置 RSA密码IP核硬件设计系列(五)——模幂模块(抵抗侧信道攻击)模块的设计实现方案
基于Montgomery算法的高速.可配置RSA密码IP核硬件设计系列(五) 2.2 模幂模块设计(抵抗测信道攻击模块) 2.2.1 模幂模块及内部模块的功能 2.2.3 模幂各模块的实现方案 2.2 ...
- 基于RF算法的侧信道攻击方法研究
摘要 目前,随机森林(RF)算法在侧信道分析领域的潜力还没有得到充分利用.文章提出一种基于RF算法的侧信道攻击方法,分别从输入数据处理和参数控制两方面进行模型优化,在特征点选择和RF算法参数调优两方面 ...
最新文章
- 静态方法是一种特殊的成员方法,它不属于类的某一个具体的实例。
- Sybase数据库 概述部署命令
- 基于jquery的一个javascript前端框架实现
- 8.1 A Bayesian Methodology for Systemic Risk Assessment in Financial Networks(1)
- 生物信息学搞计算机,生物信息学前景展望,谈谈感想(已经停止)
- linux 串口读取陀螺仪,stm32读取陀螺仪MPU6050发送数据到串口
- jQuery的页面加载事件
- memcached可视化客户端工具
- PATH与CLASSPATH的区别
- Gym 100703F Game of words 动态规划
- atitit 未来学课程体系.docx
- input type=file 选取文件路径时出现fakepath问题IE浏览器解决办法
- 车载激光扫描系统检校
- 计算机网络专业以后装网线,安装了1000M宽带后,您就不必再上网了吗?千兆宽带有多快?...
- python打包时出现RecursionError: maximum recursion depth exceeded的解决方法
- 华三路由交换配置命令_华为-华三交换机路由器命令大全
- 行程卡是怎么记录行程的?
- 【转】PHP乱码问题,UTF-8(乱码)
- cesium-加载geoserver发布的tms服务
- IDEA 加断点debug时阻塞问题