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个周期。

转载于:https://www.cnblogs.com/backahasten/p/7860254.html

FLUSH+RELOAD技术相关推荐

  1. Flush + Reload

    FLUSH+RELOAD技术是PRIME+PROBE[51]的变体,它依赖于在间谍和受害者进程之间共享页面 工作在在LLC层面上,LLC包含存储在较低缓存级别的所有数据的副本.因此,从LLC中刷新或驱 ...

  2. Meltdown:Reading Kernel Memory from User Space 论文中英对照

    Meltdown:Reading Kernel Memory from User Space 翻译目录 摘要(Abstract) 一.简介(Introduction) 二.背景介绍(Backgroun ...

  3. Meltdown: Reading Kernel Memory from User Space论文翻译

    Meltdown: Reading Kernel Memory from User Space翻译 摘要(Abstract) The security of computer systems fund ...

  4.  Meltdown论文翻译【转】

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

  5. Meltdown 论文翻译

    摘要(Abstract) The security of computer systems fundamentally relies on memory isolation, e.g., kernel ...

  6. 宇宙最强,meltdown论文中英文对照版(一)

    本文由郭健郭大侠翻译,将分为三次连载完成.郭大侠是蜗窝科技(http://www.wowotech.net/)的创始人,倡导"慢下来,享受技术"的健康理念,侠之大者,为国为民. 摘 ...

  7. CATalyst——针对末级缓存侧信道攻击的防御技术

    CATalyst: Defeating Last-Level Cache Side Channel Attacks inCloud Computing, HPCA'16 (A类), 2016年3月[1 ...

  8. 2011年至2019年制造的 AMD 处理器均易受两种新型攻击

    聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 本周,奥地利格拉茨技术大学和法国雷恩大学的六名研究人员表示,2011年至2019年制造的 AMD 处理器易受两种新型攻击的影响.它们影响 ...

  9. NetSpectre:通过网络读取任意内存

    摘要 推测执行是现代处理器能够实现高性能的一个关键因素.在推测执行过程中,处理器可能会执行程序一般不会执行到的操作.如果推测执行被中止,这些操作对体系结构的影响和结果会被丢弃,但对微架构的影响可能会保 ...

最新文章

  1. Mac用户SVN图形界面推荐
  2. 重理工c语言实验指导书答案,常熟理工学院 C语言程序设计实验实验指导书及答案...
  3. 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件的解决方法(webpack热加载)
  4. 写SQL语句需要注意的点
  5. vscode 中 markdown 插件和使用
  6. 计算机f8键的功能,详解:XP系统修改启动时F8键有哪些功能?
  7. 【C语言】牛客网编程初学者入门训练-BC88-BC98
  8. 感知机PLA算法实现[转载]
  9. 动态创建Sql Server用户及其权限
  10. JButton的使用
  11. 鼠标精灵对码软件_暗影精灵6游戏主机评测
  12. app被Rejected 的各种原因
  13. 思维导图 | XMind 8 Update 8 Pro 自动破解版
  14. 图扑软件智慧能源一体化管控平台
  15. [转]当当网高可用架构之道--转
  16. 学计算机怎么作宣传手册,用PowerPoint制作宣传册
  17. CALayer mask属性实现蒙板效果
  18. 逻辑删除真的不是一个好的设计
  19. SIGIR‘22 推荐系统论文之POI篇
  20. 河南大学校园平面图数字化

热门文章

  1. Ubuntu 12.04 LTS 中文输入法的安装
  2. Java中4种访问权限修饰符
  3. 为什么我们需要在C#中装箱和拆箱?
  4. SAP各模块常用事物代码
  5. linux date命令的格式
  6. 【Vue】v-xxx指令全面总结
  7. linux查看电脑内存情况
  8. 如何跟面试官解释事件循环
  9. mysql5.7与8.0密码加密方式
  10. Java八股文最全版本,高薪offer