Flush + Reload

FLUSH+RELOAD技术是PRIME+PROBE[51]的变体,它依赖于在间谍和受害者进程之间共享页面
工作在在LLC层面上,LLC包含存储在较低缓存级别的所有数据的副本。因此,从LLC中刷新或驱逐数据也会从处理器的所有其他缓存级别中删除这些数据。攻击正是利用了这种缓存行为
方式:
攻击间谍进程和目标进程的共享页,在共享页中,间谍进程可以确保一个特定的内存的映射从整个cache的层级中剔除。间谍进程就是使用这一点去监控所有的内存映射。这个攻击的方式以Gullasch 等人提出技术为基础的,增加了多核和VM条件
页共享:由于内存页可以在不合作的进程之间共享,因此系统必须保护页的内容,以防止恶意进程修改共享的内容。为了实现这一点,系统将共享页面映射为即写即拷[13,40]。允许在写时复制页面上执行读操作,而写操作会导致CPU陷阱。系统软件在陷阱期间获得对CPU的控制,复制共享页面的内容,将复制的页面映射到写进程的地址空间,并恢复进程。
虽然写时复制可以保护共享页面不被修改,但它不是完全透明的。进程可以检测到修改共享页面时引入的延迟,从而导致潜在的信息泄漏攻击。此类攻击已经在虚拟环境中实现,用于创建隐蔽通道[58]、操作系统指纹[44]和检测其他来宾[49]中的应用程序和数据。
Cache Architecture:
在这里插入图片描述
主要在于利用时间差:
从两个方面可以利用,1>是测量受害者执行所需的时间。由于这个时间依赖于受害者开始操作时缓存的状态,所以攻击者可以推断出受害者访问的缓存集,从而了解受害者的信息.
2>让攻击者度量攻击者在受害者操作后访问数据所需的时间。这个时间依赖于受害操作之前的缓存状态,以及受害操作在缓存状态下造成的变化。flush+reload采用第二种。
攻击分为三个阶段:
1.将从缓存层次结构中刷新受监视的内存行
2.等待一段时间,目标进程访问内存行
3.间谍重新加载内存行,测量加载它的时间
关键在于目标进程访问了指定的内存行,那么这个进程存在cache中,间谍进程再次重载时间短;如果目标进程没有访问相应的内存行,则需要从内存中取出该行,重载花费时间更长。
根据设定时间的不同,加载时间可能出现不同的情况。在不增加错误率的情况下提高攻击分辨率的一种方法是针对频繁发生的内存访问,比如循环体。攻击无法区分不同的访问。
由于受害者的处理器[34]发出的投机性内存访问,一些处理器优化可能导致误报。这些优化包括数据预取以利用空间局部性和推测性执行[52]。在分析攻击结果时,攻击者必须意识到这些优化并开发策略来过滤它们。

RSA加密

RSA:一个支持加密和签名的公钥加密系统。生成一个加密系统需要以下几个步骤:
1.随机选择两个素数p和q,计算n = pq。
2.选择一个公共指数e。GnuPG使用e = 65537。
3.计算私有指数d≡e^(−1) (mod (p−1)(q−1))。
生成的加密系统包括:
1.公钥是对(n,e)。
2.私钥是三重(p,q,d)。
3.加密函数是E(m) = m^e mod n。•
4.解密函数是D© = c^d mod n。

在这里插入图片描述

具体代码:程序集代码接受一个输入,即存储在寄存器%ecx中的地址。(16行)。它返回读取寄存器%eax中此地址的时间,该寄存器存储在变量time中。
第10行从%ecx中的内存地址读取4个字节,即adrs指向的地址。要度量执行此读取所需的时间,我们使用处理器的时间戳计数器。
第7行中的rdtsc指令读取64位计数器,返回计数器的低32位(%eax)和高32位(%edx)。由于我们测量的时间很短,所以我们将它视为一个32位计数器,忽略%edx中最重要的32位。第9行将计数器复制到%esi。
读取内存之后,将再次读取时间戳计数器。(第12行)。第13行减去内存读取之前的计数器值,将结果保留在输出寄存器%eax中。
该技术的关键是能够从缓存中清除特定的内存行。这是第14行clflush指令的功能。clflush指令从所有缓存层次结构中清除特定的内存行,包括所有核心的L1和L2缓存。从所有核心中清除这一行可以确保下一次受害者访问内存行时,它将被加载到L3中。
第5、6、8和11行中的mfence和lfence指令的目的是序列化指令流。处理器可以并行执行指令,也可以不按顺序执行。没有串行化,围绕测量代码段的指令可以在该段内执行。
lfence指令执行部分序列化。它确保在它之前的加载指令在它被执行之前已经完成,而在它之后的指令在lfence指令之前没有执行。mfence指令对所有内存访问、fence指令和clflush指令进行排序。但是,相对于其他指令,它不是有序的,因此,不足以确保有序。
在非虚拟化环境中,为了共享缓存层次结构,攻击者需要能够在受害计算机上执行软件。然而,攻击者不需要提升受害计算机上的特权。对于一个虚拟化的环境,攻击者需要访问与受害客户位于同一主机上的客户。

如何利用FLUSH+reload技术从RSA的GnuPG实现中提取私钥的组件。在每个硬件平台上,我们都尝试了两种场景。相同操作系统场景测试同一操作系统中两个不相关进程之间的攻击,而跨vm场景则演示了攻击在虚拟化环境中跨虚拟机隔离边界进行。相同的操作系统测试使用在硬件上运行的CentOS 6.5 Linux。在这个系统中,间谍和受害者作为两个进程执行。为了实现共享,间谍将受害者的可执行文件映射到间谍的虚拟地址空间。当Linux加载程序在执行可执行文件时将它们映射到进程中,间谍和受害者共享映射文件的内存映像。在Dell机器上,我们设置进程的CPU关联性,以确保受害者和间谍在相同的物理处理器上执行。我们让进程在处理器的核心之间浮动。

对于跨vm场景,我们使用了两个不同的管理程序:HP机器上的VMware ESXi 5.1和Dell机器上的带有KVM的Centos 6.5。在每个系统管理程序中,我们创建了两个虚拟机,一个用于受害者,另一个用于间谍。虚拟机运行CentOS 6.5 Linux。在这个场景中,间谍映射受害者的可执行文件的副本。(怎么映射??) 共享是通过***管理程序的页面去重机制*实现的。与在相同的操作系统场景中一样,在戴尔计算机上,我们设置了虚拟机的CPU关联性,以确保在相同的物理处理器上执行。当一个页面被共享时,共享进程的虚拟地址空间中的所有页面条目都映射到同一个物理页面。缓存中的条目只依赖于共享页面的物理地址,而不依赖于页面所映射的虚拟地址。

我们采用的方法是跟踪受害者程序的执行情况。为此,间谍程序将FLUSH+RELOAD技术应用于受害者代码段中的内存位置。这有效地将探测放置在受害者程序中,当受害者在被探测的内存行中执行代码时,就会触发该程序。跟踪执行允许间谍程序推断受害者程序的内部状态

内存共享:
工作原理:
间谍进程可以删除特定内存的映射。并使用这一点去监控目标主机的内存内容。在相同的操作系统场景中,间谍和受害者都作为进程在相同操作系统中
执行。在跨vm场景中,间谍和受害者在单独的、位于同一位置的虚拟机中执行。
当使用content-aware sharing时,通过加载页面内容的磁盘位置来标识相同的页面。用于在执行可执行文件的进程之间以及使用共享库[26]时共享可执行文件的文本段。
Intel建议使用串行化指令cpuid来实现[45]。然而,在虚拟环境中,hypervisor模拟cpuid指令。这种软件模拟需要很长时间(超过1,000个周期)才能提供攻击所需的细粒度。
Content-based page sharing,也称为memory deduplication,是一种更积极的页面共享形式。当使用重复数据删除时,系统扫描活动内存,用相同的内容识别和合并不相关的页面。deduplication是在VMware ESX[54, 55]和PowerVM[17]管理程序中实现的,也在Linux[6]和Windows[33]中实现。
Context-aware(上下文感知共享):

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值