解析Frozen Cache抵内存威胁

来源:不详 责任编辑:栏目编辑 发表时间:2013-07-01 03:30 点击:
  Cold boot 攻击对全磁盘加密解决方案所提供的数据安全保护是一个重大威胁,大部分计算机都容易受到这种攻击,而到目前为止还没有通用方法可以解决这个问题。

  为什么这篇文章名为“冻结缓存(Frozen Cache)”呢?因为我们决定采用CPU缓存来抵御Cold boot 攻击(至少对于所有X86系统)。

  这个概念很简单:将缓存切换到特殊模式,该模式下可以强迫数据在缓存中而不是被写入支持RAM位置。因此,加密密钥不能从RAM提取,其实这种技术并不新鲜:LinuxBIOS/CoreBoot将这种技术称为Cache-as-RAM,并使用这种技术来允许“RAM访问”,即使是在初始化内存控制器前。

  下列步骤加载并维护CPU缓存中的256位的加密密钥,并假定加密密钥存放在RAM的线性地址X中:

  1. 从RAM将加密密钥加载到一些CPU注册器中(如SSE注册器):

  movq 电脑技术学习:, %xmm0

  movq [X+8], %xmm1

  movq [X+16], %xmm2

  movq [X+24], %xmm3

  2. 使用0值复写RAM中加密密钥

  movq 0, 电脑技术学习:

  movq 0, [X+8]

  movq 0, [X+16]

  movq 0, [X+24]

  3. 刷新缓存(从而真正覆盖RAM中的加密密钥)

  wbinvd

  4. 添加需要的RAM区域到CPU的MTRR(4K部分包含密钥)

  movl (X | MEMORY_TYPE_WRITEBACK), %eax

  xorl %edx, %edx

  movl 0x200, %ecx

  wrmsr

  movl ( ~(1) | MTRR_VALID ), %eax

  movl 0x1, %edx

  movl 0x201, %ecx

  wrmsr

  5. 禁用/冻结CPU的缓存(CR0.CD=1)

  movl %cr0, %eax

  orl 0x40000000, %eax

  movl %eax, %cr0

  6. 从CPU注册器向RAM写入加密密钥(数据仍然在缓存中,不会写入内存)

  movq %xmm0, 电脑技术学习:

  movq %xmm1, [X+8]

  movq %xmm2, [X+16]

  movq %xmm3, [X+24]

  “禁用/冻结”CPU的缓存严重降低了性能,但是,这似乎也是可以接受的,因为考虑到只需在屏幕锁定时设置特殊模式(如果笔记本被盗,那么所以努力都毫无意义)。在Linux系统的首次概念证明测试结果表明,需要对解锁GUI进行很多必要的性能优化(从性能/可用性角度考虑)。

  这段文字只是描述了基本的概念,下面将涉及多CPU/Core问题、性能考虑和优化等问题。

  性能方面

  如上所述,性能问题是将缓存切换到“冻结”模式的主要关注问题,CPU架构的广泛范围(多CPU、多核和多线程)和各自的缓存配置让问题变得更加复杂。

  首先:只有一个CPU缓存需要“冻结”以有效保护加密密钥。其他CPU允许执行政策缓存模式。只要每个(逻辑或者虚拟的)CPU完全使用自己的缓存:采用线程技术(如英特尔的超线程HyperThreading)CPU会作为两个(或者可能更多)逻辑CPU,但是这两个CPU共享相同的缓存,而它们必须同时切换至冻结缓存模式。对于多核CPU,可能情况更加复杂,如果内核都有自己的(L1和L2)缓存。

  加密密钥仅位于单个CPU的缓存中,只有这个CPU必须执行加密和解密线程,在全磁盘加密解决方案中最常见的架构就是采用内核模块,它会产生一个为加密和解密逻辑指定的内核线程,内核线程是可调度实体,因此可以绑定在CPU上,CPU缓存中有加密密钥。

  回到更加“传统的”性能考虑,怎样做可以减少冻结CPU缓存带来的影响呢?将最常用的内存区域加载到缓存(冻结前)是个不错的开始,其中最适合的包括:系统调用入口端点、计时器中断线程及其“帮助”功能,以及内核线程执行的加密/解密功能。目前L2缓存通常可以容纳所有这些代码,但是同时还需要考虑缓存的结合问题,以避免相关问题。另一个好办法就是将所有其他进程的时间表分配给其他可用的CPU(不使用冻结缓存的CPU):这样可以以正常的速度执行,另一个很重要的原因就是,我们能获得更多时间。

  现在已经很明显了,将需要部署确定具体(运行中的)CPU/缓存组件的程序并有针对性的管理他们。

  缺乏缓存控制

  一旦缓存被冻结,对这些缓存内容的管理就没有结束:同样重要的是,缓存中的数据(加密密钥)并没有写回内存。不幸的是,英特尔架构只允许非常少的缓存控制:

  · 启用/禁用缓存(系统范围:CR0.CD,每个内存区域:MTRR,每页:PAT)

  · 清除缓存(wbinvd

  就是如此,根本没有查询缓存状态(目前在单个缓存线中的RAM
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • ESC键实用方法介绍
    • 索尼 SONY OEM Windows XP PRO SP3 CD-KEY 序列号
    • 10招最有效防电脑辐射方法
    • 一个问题阻止windows正确检查此机器的许可证 错误代码为:0x8007
    • 强行删除文件夹及工具
    • 笔记本屏幕倒了过来如何恢复正常
    • EPSON EPL-6200L激光打印机打印时“通讯错误”
    • 电脑开机弹出SCSIAdapter硬件驱动安装向导的原因及解决方案
    • 845主板鼠标口,USB都异常
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1