天天看点

A survey of microarchitectural timing attacks and countermeasures on contemporary hardware

A survey of microarchitectural timing attacks and countermeasures on contemporary hardware

  1. 侧信道是指受信任方意外泄露敏感数据;隐蔽信道是利用特洛伊木马利用故意泄露信息。在通用系统中,主要关心侧信道攻击,隐蔽信道攻击主要对不信任内部组件的系统感兴趣。
  2. side-channel attack:time driven, trace driven or access driven。
    • trace driven的攻击中,攻击者根据缓冲命中和未命中来了解每个受害者的内存访问结果,这种攻击主要应用于硬件之中
    • time driven的攻击,类似于trace driven攻击,会观察缓冲命中和未命中,但是不会生成这种trace,而是通过间接测量受害者的总执行时间来观察缓冲命中和未命中的总数。
    • access driven的攻击,可以观察到受害者访问的地址的部分信息。
  3. Flushing caches是一种用于缓解基于cache的信道的简单软件方法。主要成本包括直接成本和间接成本,直接成本指cache中的dirty数据写回成本和让所有cache lines都失效的成本。间接成本是指在每次上下文切换之后的cold cache带来的性能下降
  4. A timing channel can be viewed, abstractly, as a pair of clocks. If the relative rate of these two clocks varies in some way that depends on supposedly hidden state, a timing channel exists. These clocks need not be actual time sources; they are simply sequences of events, e.g. real clock ticks, network packets, CPU instructions being retired.
  5. Attack types ——Exploiting caches
    • Prime and probe (Prime+Probe) :填充和探测。攻击者首先将cache中填充自己的数据,然后在victim执行之后检测之前cache中的数据是否还在。如果没有,意味着victim肯定访问了映射到同一个组的地址
    • Flush and reload (Flush+Reload) :刷新和重新加载。依赖于共享虚拟内存的存在和通过虚拟地址刷新的能力。攻击者首先刷新感兴趣的cache line,在victim执行完之后,攻击者重新加载之前刷新的cache line,通过测量加载时间,来判断是否victim访问了该cache line。如果时间短,意味着访问了。这种方法相对于前一种的好处在于:可以指定具体的line,而不是一个cache set
    • Evict and time (Evict+Time) :有针对性的evicted某一个cache line,然后观察总体时间。攻击者首先预先加载所有victim执行所需要的数据,得到基准时间,然后evict其中某一个感兴趣的line,然后重新执行,得到新的时间。时间的变化即表示了访问了感兴趣的行
    • Covert channel techniques (隐蔽信道攻击)。要将缓存用作隐蔽通道,各方采用相互Prime + Probe攻击。 发送方通过访问一定数量的缓存集来编码一点。 接收器通过测量访问其自身碰撞线的时间来解码消息。隐蔽信道攻击已经在所有层次的cache上证明可行
    • Denial of service (拒绝服务)。当多个核心共享较低级别的缓存时,恶意线程可以与其他核心上的那些实时竞争空间。 这样做也会使低级缓存的共享总线饱和。 受害者线程遭受的性能下降比时间复用攻击更差。 如果缓存体系结构具有包容性,则从较低级别缓存中逐出内容也会使其他核心上的更高级别缓存无效。
    • Unmasking the victim’s layout 。
  6. Attack types ——Exploiting real-time contention
    • 实时攻击通过恶意增加对共享资源的消耗来利用资源争用。 例如,攻击者可以耗尽共享总线带宽,并有大量的内存请求。 其他当前运行的实体遭受严重的性能影响:DoS攻击。
  7. Thread-shared state
    • Hardware threads:
      • 乘法器单元上的硬件线程之间的争用是可检测的和可利用的。
      • BTB争用攻击。一种是使用evict+time攻击,另一种是通过测量执行initial eviction的时间来改进第一次攻击。第三种是简单分支预测分析。这三种攻击都依赖于SMT中涉及的细粒度共享。
      • CacheBleed,利用cache bank的冲突,创建可测量的时间变化,来完成侧信道攻击。
      • Dos攻击。当一个线程处理异常时,另一个SMT线程性能也会下降,因为pipeline会被刷新。Pentium 4中,自修改代码会刷新trace cache的内容,性能会下降95%
    • Time slicing
      • 在上下文切换的时候,有的优化方法会选择在必要的时候才保存FPU的状态(因为很多)。因此在上下文切换之后,第一次执行FPU的等待时间取决于是否有任何其他进程正在使用FPU,因为如果它未保存,则不需要恢复。这被证明也是一个隐蔽信道攻击的方式
      • 对于浮点运算,指令和操作数的不同组合,会对运算的时间影响很大。特别在使用SIMD或者是x87指令时,所有测试的Intel和AMD处理器乘上或者除以某个非正常值,都会导致速度减慢。通过这种可测量的结果,可以对可缩放矢量图形SVG,实施时间timing attack。
      • ARM Cortex A8处理器上报告的周期计数器的数值随着单独进程中的分支预测错误而变化。这可以进行隐蔽信道攻击,也可以使用SBPA进行侧信道攻击
      • BTB的冲突可以进行侧信道攻击。同一地址空间的不同虚拟地址可能会产生BTB冲突,并且来自两个不同地址空间的相同虚拟地址也可以创建BTB冲突
      • 对返回地址堆栈缓冲区(return stack buffer)的侧信道攻击。
  8. Core-shared state
    • Hardware threads
      • 使用超线程的Pentium 4的L1 data cache和L2 cache的争用能够构建隐蔽信道攻击,也可以构建侧信道攻击,以区分平方根和乘法运算,并识别乘法器用于RSA的实现,从而泄露密钥
      • 针对L1 data cache,使用Prime+Probe攻击OpenSSL中的AES
      • 针对L1 I-cache的争用,确定victim的控制流,区分RSA中的平方根和乘法运算
  9. Package-shared state
    • Multicore
      • Contention on the shared LLC, creating covert channels, side channels or DoS attacks
      • Cache template attack involves a profile phase and a exploitation phase (配置阶段和开发阶段):在分析阶段,攻击在处理秘密信息期间为目标地址上的缓存命中率生成缓存模板矩阵。 在开发阶段,攻击进行Flush + Reload或Prime + Probe攻击,以持续监视缓存命中并计算收集的跟踪与缓存模板矩阵中相应的配置文件之间的相似性。
      • Evict+Reload, is much slower and less accurate than Flush+Reload; however, it obviates the need for dedicated instructions for flushing cache lines
      • Flush + Flush 是Flush + Reload的另一种变体,它测量x86 clflush指令执行时间的变化,以确定在刷新之前是否缓存了条目。
      • inclusive LLC, replacing a cache line from LLC can also evicts its copy from upper-level caches . To build this attack, the attacker massively fetched cache lines into LLC sets, causing the victim suffering from a large number of cache misses due to cache conflicts.
    • Time slicing
      • LLC会保持先前运行的线程或者VM留下的足迹,可以进行隐蔽或者侧信道攻击。两个进程可以通过交叉访问共享缓存的相同部分来传输信息
      • 预取指令不仅通过timing可以暴露虚拟地址空间布局,而且还允许从用户空间预取内核内存,因为缺少权限检查
  10. NUMA-shared state
    • Multicore
    • 多核系统中的共享内存控制器允许DoS攻击。攻击者从DRAM中发出大量的内存访问,导致从同一个内存bank或者同一个内存channel中的不同bank的访问受到影响。
    • 利用row buffer的冲突所带来的时间变化来对DRAM寻址策略进行反向工程(隐蔽信道)
    • Time slicing
    • 英特尔事务同步扩展(TSX)包含一个安全漏洞,它在不通知内核的情况下中止用户级事务
  11. System-shared state
    • Multicore
      • 系统总线(当时的系统具有单个共享总线)可以通过调制流量水平(以及因此的争用)用作隐蔽信道
      • 总线争用可以被利用于DoS攻击。例如使用L2的cache miss作为DoS攻击,或者攻击者可以在未对齐或者不可缓存的内存块上使用原子操作来锁定平台上的共享系统总线。
      • 由于片上网络共享内部资源,因此程序可能通过快速生成内存提取请求来注入网络流量,从而导致不平衡的内部带宽分配
      • 可编程路由表中包含的安全漏洞,可以通过恶意修改路由表,使得处理器互连的延迟和带宽均有负面影响
      • 包括PCI Express在内的低级总线也可以用于DoS攻击。例如通过使硬件缓冲区饱和,从单独的VM访问千兆以太网网络接口控制器的延迟增加了六倍多
      • 处理器间的中断IPIs的缓慢处理以及其可提升的优先级,允许跨处理器进行DoS攻击
  12. Countermeasures——Constant-time techniques
    • A common approach to protecting cryptographic code is to ensure that its behaviour is never data dependent : that the sequence of cache accesses or branches, for example, does not depend on either the key or the plaintext.
    • 开发了一个编译器,可以自动消除加密算法密钥的控制流相关性
    • 为了防止侧信道针对浮点操作的时间攻击,提出了 fix-point constant-time math library。另一种方式是在编译时将浮点操作使用SIMD指令来完成,因为SIMD的时间限制取决于最长的执行路径,因此每次都增加一个会产生最长执行路径的输入即可。性能在SPEC fp2006中下降了32.6倍
    • constant-time方式的问题:硬件可移植性较差
    • Hardware support:为了避免易受攻击的查表的一种方法是为重要的加密原语提供恒定时间的硬件操作。x86提供了AES加密指令。
    • Language-based approaches :为了控制外部可以观察的时间信道,一种基于语言的方法提供了具有非可变执行长度的专用语言语义,这些设计也需要硬件有相应的设计
  13. Injecting noise:使得攻击者测量得到的数据含有太多的噪声,以至于无法使用
    • 一种AES的实现:包括压缩,随机化和预加载查找表,从而在cache的访问足迹中引入噪声,防止cache-based timing attacks
    • random permutation cache(RP cache):它在每个缓存行中提供随机缓存索引方案和保护属性。 每个进程都有一个排列表来存储内存到缓存的映射,每个缓存行都包含一个代表其所有者进程的ID。 具有不同ID的缓存行不能相互替换。 相反,RPcache随机选择一个缓存集并evict该集合中的缓存行。
    • 修改Xen的hypervisor程序。通过修改rdtsc指令返回的值,将噪声插入到VM中的高分辨率的时间测量中,从而通过内部时间的不准确性来防止timing attack。
    • 缓存的按序获取策略会成为一个安全漏洞,基于重用的攻击可以利用这一点,获取在共享缓存中之前访问过的数据。解决方案:设计一个随机替换的缓存。在cache miss时,请求的数据直接返回处理器,而不分配cache line。替换cache line时,则在miss 的cache line的可配置领域内随机替换
    • 噪声注入对于获得高安全性而言是低效的,会显著的降低系统性能
  14. Virtual time:试图完全消除对real time的访问,仅提供虚拟时钟,其进度是完全确定的,并且独立于易受攻击组件的操作。
    • StopWatch运行系统的三个副本,并尝试以复制品确定的时间的中位数释放外部可见时间,虚拟化x86时间戳计数器。因为它可以虚拟化内部和外部的可见事件,原则上,一个完整的系统事件虚拟化对所有类型的timing channels都是有效的
    • IBS:基于指令的调度。一种更有限的确定性执行形式,试图阻止操作系统为攻击者提供时钟源。主要想法:使用CPU的性能计数器在固定数量的指令之后生成抢占中断,确保攻击者始终在每个间隔中完成相同的工作量。
  15. Black-box mitigation :这种方法试图通过控制外部可见事件的时间来实现系统作为一个整体的确定性,而不是试图同步所有可观察的时钟和单个进程的执行。因此,它只适用于依赖于系统响应时间变化的远程攻击。这避免了虚拟时间的性能成本,也避免了在系统中跟踪所有可能的时钟的棘手问题。
  16. Partitioning time ——Cache flushing
    • 针对于基于持久状态影响的攻击可以使用flushing来解决。在CPU进行切换时,刷新所有级别的缓存或者某些级别的缓存
    • 在VM切换时刷新L1 cache的合理性:cache很小,VM切换频率低,新的VM能够在L1 cache中找到指令或者数据的可能性很小
  17. Partitioning time —— Lattice scheduling:晶格调度试图通过将缓存刷新限制在敏感分区和不可信分区之间,来分摊上下文交换机上缓存刷新的成本。实际上,这种方法仅限于具有层次信任模型的系统,而不像云计算中相互不信任的世界。
  18. Partitioning time —— Minimum timeslice :为易受攻击的组件强制执行最小的timeslice,可以防止攻击者以增加延迟为代价,在敏感操作的中间检查状态。
  19. Partitioning time —— Networks-on-chip partitioning:为了防止通过在片上互连上竞争而建立隐蔽通道,网络容量可以通过临时分区仲裁器动态分配到域
    • 为单向信息流系统提供了基于优先级的解决方案,其中信息只允许从较低的安全级别流向较高的安全级别
    • 时分复用共享网络组件构成了一个简单的方案,可以防止对网络吞吐量的干扰,其中每个安全域的数据包只在分配给该域的时间段内传播
  20. Partitioning time —— Memory controller partitioning:为了防止攻击利用内存控制器中的争用,对控制器进行静态时分多路复用,以保留每个域的带宽
  21. Partitioning time —— Execution leases :一种新的硬件机制将保证资源使用和副作用的限制。在一个租约到期后,一个受信任的实体获得控制权,并且任何剩余的不受信任的操作将被驱逐。
  22. Partitioning time —— Kernel address space isolation :为每个用户使用分开的页面目录来隔离内核形成的用户地址空间,因此在用户和内核空间之间切换上下文时,要切换页面目录。
  23. Partitioning Hardware:真正的并发攻击只能通过在竞争的线程或核心之间划分硬件资源来防止。例如cache
  24. Partitioning Hardware——Disable hardware threading:只用超线程,大部分公共云服务的普遍做法,可以消除所有依赖于硬件线程的攻击,会造成一点的吞吐量损失
  25. Partitioning Hardware——Disable page sharing:因为Flush+Reload的攻击及其变体都是依赖于共享内存页面,防止共享能够减轻攻击。一种方法是使用”访问复制“,它创建一个页面的副本,而另一个安全域则会访问这个页面。
  26. Partitioning Hardware——Hardware cache partitions
    • 分区锁定cache(PLcache):提供硬件机制,为每条高速缓存线路分配锁定属性,允许有选择地、临时地将数据锁在cache之中
    • Intel的cache allocation technology(CAT):防止进程替换LLC中的某些内容。为了解决Prime+Probe和Evict+Time带来的问题,CAT将LLC划分为一个混合软硬件管理的缓存,LLC会被创建为两个分区:一个安全分区和一个非安全分区。安全分区仅存储缓存的安全页面。为了存储安全数据,用户级程序分配安全页面并将数据预加载到安全cache中。
  27. Partitioning Hardware——Cache Coloring
    • 缓存着色实现将内存划分为彩色内存池,并将来自不同池的内存分配到独立的安全域
    • StealthMem:为存储安全敏感数据提供隐形页面。StealthMem为每个核心保留不同颜色的隐形页面,并且不允许使用与隐形页颜色相同的内存帧,或者监视对这些页的访问。
    • 缓存着色的一个显著缺点是无法使用大页面。对于大页面,在地址中帧号和cache-selector位之间(通常没有)重叠更少(通常没有),减少可用颜色的数量(通常为1)。
      A survey of microarchitectural timing attacks and countermeasures on contemporary hardware
  28. Partitioning Hardware——Quasi-partitioning :防止攻击者垄断资源,以减少争用,从而降低侧信道攻击的有效性。
  29. Partitioning Hardware——Spatial network partitioning:将用于传输安全域网络流量的硬件组件分开,其中域位于多核系统上不相关的核心子集上
  30. Partitioning Hardware——Migrating VMs :为了减少共同驻留vm之间的信息泄漏,Nomad实现了一个迁移即服务(migration-as-a-service)云计算服务模型,该模型运行由云提供者配置的部署模型的放置算法。
  31. Auditing:审计。通过硬件检测异常行为来判断当前的恶意程序和攻击。例如检查缓存丢失或者命中率,内存的使用等。每一种审计技术都使用监视来识别与攻击一致的活动。因此,审计必然会遇到一些容易理解的问题:假阳性(善意行为被错误地识别为恶意行为)和假阴性(恶意行为被错误地识别为善意行为)。虽然统计方法可能对新的攻击有用,当监视器查看这些攻击时,它们的行为与现有的攻击相似,但是监视不能防御那些专门对攻击进行调制以避免被识别为恶意攻击的攻击者。
  32. Trend in attacks :攻击有一个明显的趋势,就是从高度本地(线程级和核心级)共享资源向系统共享资源“下降”
  33. Challenges for defenders
    • 基于完全虚拟化时间的防御在云环境中不适用——拒绝云租户的实时访问是不可行的。因此,任何防御都必须基于资源隔离
    • 缓存着色不适用于L1缓存,因为它实际上是索引的,而且几乎所有最近的处理器都太小而不能着色(即由单一颜色组成)
  34. Future directions for countermeasures
    • 改善云租户之间的资源隔离不仅有利于安全性,还可以提高性能的可预测性,因此,从经济角度讲,提供者应该追求的东西。
    • 硬件制造商仍然过于关注普通情况下的性能,并且在优化微架构的过程中频繁引入新的channel attack
  35. Conclusion

    微体系结构timing attack可用于云场景,用途从恶意性能干扰到窃取加密密钥。它们已经从简单的目标(使用硬件多线程来攻击本地资源)向下转移到系统范围的共享资源,在这些资源中,它们更难防御(而且更经济)。我们预计这种趋势将继续下去。云的经济模型从根本上是基于硬件共享的,共享可能随着每个处理器包的内核数量的增加而增加,排除了基于减少共享的最简单防御。要同时满足云的经济性和安全性,需要改进对分区硬件的硬件支持。

  36. 思考:统计硬件资源上所有的可共享资源在执行时可以量化的信息,使用神经网络进行综合预测
    A survey of microarchitectural timing attacks and countermeasures on contemporary hardware
    A survey of microarchitectural timing attacks and countermeasures on contemporary hardware

继续阅读