首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >刷新和重发缓存侧通道攻击

刷新和重发缓存侧通道攻击
EN

Stack Overflow用户
提问于 2020-08-30 11:08:25
回答 2查看 4.1K关注 0票数 5

我想了解一下刷新+再发缓存侧通道攻击。据我所知,攻击利用了这样一个事实,即非特权数据可以加载到缓存中(当利用分支预测、推测执行等)。然后,攻击者使用一个探测数组来访问内存,该内存被快速加载到缓存(秘密数据的一部分)上。

有一件事我觉得不清楚,那就是攻击者如何能够迭代虚拟内存,即非特权内存?例如,迭代内核、虚拟内存或其他进程的内存。

EN

回答 2

Stack Overflow用户

发布于 2020-08-30 14:26:30

首先,您应该看看我对为什么使用查找表不会在固定时间内运行的描述,因为我有缓存和标记工作的图片。

缓存位于MMU和CPU之间,而MMU是创建虚拟内存的原因;因此,缓存攻击实际上是虚拟内存的一个独立功能。它们是强制缓存刷新,然后选择缓存将如何重新加载的函数,因为您正在寻找时间信息。缓存之间的外部获取是信息泄漏的原因。(注意,这基本上是一个x86问题,因为它不允许缓存锁定,不像1990年以来的大多数CPU。另一个警告是,我只为非x86架构制作了硬件,所以如果我对关键数据的缓存锁定错误,请让我知道)。

作为一个普通示例,我们有一个1k字节的缓存,我们将使用AES s-box作为查找表,因此有256个条目。

  • 通过从内存中读取2k字节,通过不同的进程强制缓存刷新。
  • AES进程开始运行,并通过总线获取代理将数据sbox数据放入缓存中。
  • 然后,我们从内存中读取1023字节不同数据的另一个进程,以覆盖除一个AES条目之外的所有数据,并查看该数据何时由于总线读取而缓慢释放。

现在是MMU版本,我们攻击虚拟内存。如果您查看我所链接的答案,您将看到有缓存标记。现在,让我们假设一个简单的例子,其中我有两个20位的进程(地址空间的1MiB)。MMU使这两个进程都具有来自0xYYY 00000的相同的虚拟表,其中YYY是内存中的实际前缀。如果我知道MMU是如何映射数据的,并且我可以根据缓存中创建的标记信息创建一个结构化攻击,因为内存是如何重叠的。

关于如何在伯恩斯坦对AES的缓存定时攻击中的软件端构建这些攻击,还有更多的细节。

票数 3
EN

Stack Overflow用户

发布于 2020-09-07 00:07:40

  1. 有不同的缓存侧通道攻击。有许多变体,但似乎您混淆了两个: Prime +探测和刷新+ Reload。因为这是一个关于刷新+ Reload的问题,我将坚持这个问题。
  2. Flush + Reload的工作方式是滥用共享代码/数据,结合cache刷新指令的工作方式,至少在x86上是这样的。还有其他架构的变体。受害者和攻击者必须实际共享至少1页数据。当攻击者使用带有指向此共享数据的地址的clflush命令时,它将被从缓存层次结构中完全清除。由于数据是共享的,因此允许攻击者在缓存中访问此数据。因此,攻击者重复地与受害者刷新共享数据,然后允许/等待受害者运行,然后重新加载数据。如果攻击者错过了缓存,则受害者没有访问数据(没有将数据带回缓存)。如果是命中的话,受害者就会这么做(至少可能是这样)。攻击者可以区分缓存命中和未命中,因为内存访问的时间非常不同。
  3. 如果攻击者和受害者是不同的进程,他们如何共享数据?你需要对现代操作系统有一点了解。通常,共享库只在内存中实际加载一次。例如,标准c库只加载一次,但是单独的应用程序访问相同的数据(物理上的),因为它们的页表指向相同的物理地址,因为OS是这样设置的。
  4. 有些操作系统更具侵略性,通过扫描物理内存来查找具有完全相同数据的页面。在本例中,它们通过更改页表“合并”页面,以便所有使用此数据的进程指向新的单一物理页,而不是有两个物理副本。不幸的是,这允许即使在非共享库中也会发生刷新+ Reload --如果您知道受害者的代码,并且希望监视它,您只需将其加载到您的地址空间(mmap it ),操作系统将很高兴地去复制内存,让您访问它们的数据。只要你们都读了数据,就可以了;如果你们试图写这些数据,操作系统就会被迫解合并页面。但是,这对于刷新+重新加载是可以的:您只对阅读感兴趣!
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63656794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档