FLUSH+RELOAD技术是PRIME+PROBE技术的变体,攻击间谍进程和目标进程的共享页。在共享页中,间谍进程可以确保一个特定的内存的映射从整个cache的层级中剔除。间谍进程就是使用这一点去监控所有的内存映射。这个攻击的方式是Gullasch 等人提出技术为基础的,增加了对虚拟化和多核条件下的适应。

一个攻击轮由三个阶段。在第一阶段中,被监控的内存的映射从cache中被剔除,在第三阶段之前,间谍进程允许目标访问内存。在第三阶段,间谍进程重新载入内存行,测量重新载入的时间。如果在等待的阶段,目标进程访问了指定的内存空间,那么这个内存的空间就在cache中有记录,重载就只需要很短的时间。另一方面,如果目标没有访问指定的内存空间,则这个空间就需要从内存中提取,重载话费更长的时间。图3(a)和(b)分别显示了无目标进程访问和有目标进程访问的时间线。

如图3(c)所示,目标进程访问可能和间谍的重载阶段重叠,在这种情况下,目标进程访问不会触发缓存的填充。相反,目标进程会使用重载阶段的缓存数据。因此,间谍进程就错过了访问机会。类似的,也发生在部分覆盖的情况。就像图3(D),重载发生在目标进程访问数据时。由于目标进程和间谍进程代码执行是无关的,因此增加等待的时间可以减少由于重叠而丢失访问的概率。另一方面,增加等待的时间也削弱了攻击的粒度。

提高攻击分辨率而不增加错误率的方法的就是提高针对指定区域提高访问速率,例如使用循环体。攻击无法区分不同访问,但是,如图3(e),丢失的几率很小。

由于目标进程的处理器的内存入口随机化,多处理器优化可能出现错误。这些优化包括数据的预提取以开辟空间和乱序执行。在分析攻击结果的时候,攻击着必须意识到优化和发展,并过滤他们的影响。我们的攻击代码如下,这个代码测量在内存地址读取数据的时间,然后剔除cache中的内存的映射。这个测量使用内嵌汇编指令的方式执行。

int probe(char *adrs) {
volatile unsigned long time; asm __volatile__ (
" mfence \n"
" lfence \n"
" rdtsc \n"
" lfence \n"
" movl %%eax, %%esi \n"
" movl (%1), %%eax \n"
" lfence \n"
" rdtsc \n"
" subl %%esi, %%eax \n"
" clflush 0(%1) \n"
: "=a" (time)
: "c" (adrs)
: "%esi", "%edx");
return time < threshold;
}

  

汇编代码需要一个输入,地址,储存在%ecx中(16行)。变量time是返回值,他是读取%eax寄存器中地址储存值的时间(15行)。第10行读取%ecx中地址指向4个bytes,地址由adrs变量指向。

为了测量此次读取所需要的时间,我们使用处理器的时间戳计数器。在第7行rdtsc指令读取64位计数器,低32bits在%eax中,%edx中储存高32bits。由于我们测量的时间很短,所以我们只是用低位,忽略%edx中的高位。第9行将计数器复制到%ESI。读取内存之后,再次调用,时间戳计数器(12行)。第13行,减去计数器的值,把结果放在寄存器%eax中。这个技术的关键是在cache中剔除指定的内存映射的能力。这个功能使用在14行中clflush这个指令。clflush指令可以从所有的cache层次中剔除指定的内存映射,包括所有核心的L1层和L2层。剔除所核心的映射,确保下次目标进程被映射到L3层上。

mfence和ifence指令的作用是使指令连续化。处理器可能在执行指令的时候是并行化或者不按顺序的。如果没有连续化,指令可能被分割执行。lfence指令可以使指令部分连续。他确保这个指令后面的指令不会在它之前执行。mfence指令作用于储存操作。然而,他不针对其他指令,无法有效的分割。英特尔推荐使用cpuid进行指令串行化,然而,在虚拟化环境中,虚拟机管理器中cpuid仿真耗时过长(1000个周期以上),无法提供攻击所需的粒度。18行比较两个rdtsc指令与预定阈值之间的时间差。应为之前已经被清除了映射关系,如果返回的时间差小于阈值,则表明另一个进程访问了内存行,超过的话,则没有访问。

攻击中阈值的选择是依赖于系统,为了找到测试系统的阈值,我们使用代码测试内存和L1缓存的加载时间(为了测量L1的时间,我们移除14行的clflush指令)。在centos6.5系统,HP Elite 8300电脑的测试,如图5,电脑使用i5-3470处理器。

来自L1cache缓存的数据经历了44个周期(注意,这里包括了rdtsc和fence指令的执行时间,因此比单一指令时间更长)。从内存加载数据的时间,超过百分之98的时间在270到290个周期之间。其余分布在880个周期,大约200个在1140到1175个周期。内存访问,没有小于200个时钟周期。

这个时间取决于硬件和软件环境,戴尔PowerEdge T420,从L1载入需要33到43个,而内存需要230个周期,在相同的硬件条件下,使用KVM虚拟化,有百分之0.02从内存载入需要6000个周期。

基于测量结果和英特尔文档,我们将阈值设置为120个周期。

FLUSH+RELOAD技术的更多相关文章

  1.  Meltdown论文翻译【转】

    转自:http://www.wowotech.net/basic_subject/meltdown.html#6596 摘要(Abstract) The security of computer sy ...

  2. CPU Meltdown和Spectre漏洞分析

    一.背景: 1月4日,国外爆出了整个一代处理器都存在的灾难性漏洞:Meltdown和Spectre. 几乎影响了全球20年内所有cpu处理器:这两个漏洞可以使攻击者通过利用并行运行进程的方式来破坏处理 ...

  3. intel:spectre&Meltdown侧信道攻击(三)—— raw hammer

    今天介绍raw hammer攻击的原理:这次有点“标题党”了.事实上,raw hammer是基于DRAM内存的攻击:所以理论上,只要是用了DRAM内存的设备,不论是什么cpu(intel.amd,或则 ...

  4. 【转】Yeoman:Web 应用开发流程与工具

    原文转自:http://blog.jobbole.com/62098/ 随着 Web 2.0 和 HTML 5 的流行,现在的 Web 应用所能提供的功能和交互能力比之前传统的 Web 应用要强大很多 ...

  5. Meltdown Attack

    1. 引言 2018年1月3日,Google Project Zero(GPZ)团队安全研究员Jann Horn在其团队博客中爆出CPU芯片的两组漏洞,分别是Meltdown与Spectre. Mel ...

  6. MySql(十一):MySQL性能调优——常用存储引擎优化

    一.前言 MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.本章将介绍最为常用的两种存储引擎进行针对性的优化建议. 二.MyISAM存储 ...

  7. 数据库分享一: MySQL的Innodb缓存相关优化

    无论是对于哪一种数据库来说,缓存技术都是提高数据库性能的关键技术,物理磁盘的访问速度永 远都会与内存的访问速度永远都不是一个数量级的.通过缓存技术无论是在读还是写方面都可以大大提 高数据库整体性能. ...

  8. MySQL性能调优与架构设计——第11章 常用存储引擎优化

    第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处. ...

  9. 深入理解“骑士”漏洞 VoltJockey

    先理解一下题目:VoltJockey: Breaching TrustZone by Software-Controlled Voltage Manipulation over Multi-core ...

随机推荐

  1. curl 和 tcpdump

    curl: 1.通常使用curl 来监控网址状态, #curl -m 5 -s -o /dev/null -w %{http_code} www.baidu.com #200 -m 设置访问超时时间, ...

  2. shell脚本 server httpd 控制程序

    原版的脚本里  查看status  需要用 lynx这个命令,还要开启http://localhost:80/server-status   比较麻烦,我直接注释了,新加的代码用红色字体       ...

  3. 线段树学习----C语言

    /* 线段树学习:如果一个节点为i,那么他的左孩子为2I+1,右孩子为2i+2: */ #include<stdio.h> #define min(a,b) a<b?a:b; ]; ...

  4. C# 如何实现完整的INI文件读写类

    作者: 魔法软糖 日期: 2020-02-27 引言 ************************************* .ini 文件是Initialization File的缩写,即配置文 ...

  5. Android中通过数组资源文件xml与适配器两种方式给ListView列表视图设置数据源

    场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将布局改 ...

  6. 百度架构师带你进阶高级JAVA架构,让你快速从代码开发者成长为系统架构者

    百度架构师带你进阶高级JAVA架构,让你快速从代码开发者成长为系统架构者 1.

  7. (二)LoadRunner目录分析

    学习一个软件的适用,首先应该了解软件目录,对以后深入学习工具有很大的好处. 查看目录文件如下: Analysis Templates——分析模板(默认的模板,可以将自己的模板保存到该目录下) bin— ...

  8. 一次线上nohup.out日志丢失的问题

    今天有小伙伴求助,线上一个应用的nohup.out日志不更新了,但进程还是正常的.此时需要查看这个日志排查一些问题,这可怎么办呢? nohup.out文件的更新时间停留在了昨天9点36,日志也刚好打到 ...

  9. warning: LF will be replaced by CRLF in

    warning: LF will be replaced by CRLF in analysis/Result.csv. The file will have its original line en ...

  10. 蓝眼睛与红眼睛(The blue-eyed islanders puzzle)

    澳大利亚的华裔数学神童陶哲轩曾在网上贴出来一个问题 The blue-eyed islanders puzzle 让大家思考,逗大家玩儿. 说一个岛上有100个人,其中有5个红眼睛,95个蓝眼睛.这个 ...