关键词:防滑冲孔网
标题:ASLR on the Line:鱼鳞冲孔网一种通过旁路探测页表缓存绕过地址随机化的新型安全攻击
来源:知乎
文章内容: (题图来自于AnC攻击的介绍网站:AnC - VUSec)
本文是上海交通大学密码与计算机安全实验室(LoCCS)软件安全小组(GoSSIP)的论文讨论Seminar记录,版权所有,转载请与作者取得联系!
Address space layout randomization (ASLR) 是一种抵御代码重用攻击的软件安全保护技术,目前已被大多数主流操作系统采用。传统的针对ASLR的攻击主要依赖软件漏洞或者重复的内存探测。随着各种高级防御技术被添加到系统中,针对软件的攻击难度越来越高。鱼鳞冲孔网2017年顶级安全学术会议NDSS上,来自Vrije Universiteit Amsterdam的Ben Gras等人发表了一篇文章 《ASLR on the Line: Practical Cache Attacks on the MMU》,提出了一种利用硬件特征开展的针对ASLR的攻击方式,该攻击被称为AnC Attack,使用EVICT+TIME的旁路攻击方法来泄漏内存地址,以降低ASLR的熵。论文成功地展示了对来自Intel,ARM和AMD等公司的11种不同微架构的CPU实施的AnC攻击。下面,我们来详细分析一下该研究成果。
1. 攻击原理
图1 MMU在x86_64上的虚拟地址转换过程
当现有的系统进行虚拟地址寻址时,会使用4级页表(PTL)来找到对应的物理地址。每级页表中存放指向下一级页表物理地址的PTE(Page Table Entry)。*后一级页表(PTL1)存放到目的物理地址的PTE(如图1所示)。出于性能考虑,MMU和Cache中会缓存一部分*近经常访问的PTE,从而可以通过旁路攻击泄漏地址。
对64位的虚拟地址,12-20位确定PTL1中的PTE,21-29位确定PTL2中的PTE,30-38位确定PTL3中的PTE,39-46位确定PTL4中的PTE。64位系统中ASLR随机化了*多35bit熵,即虚拟地址的12-45位是随机的。
开展AnC攻击时,通过分配多个内存地址上连续(或者临近)的内存块,来暴破待泄漏内存地址的偏移。由于PTL对应的虚拟地址的分段特性,可以分配不同大小的内存块分段暴破。 攻击前需要清空cache中的PTE的缓存,通过多次访问一个偏远的内存空间来清cache。然后访问待泄漏的内存地址,因为cache已经清掉了,所有会进行一次Page Table Walk,目标虚拟地址对应的四级PTL都会装入cache。鱼鳞冲孔网这时候再访问预先分配的相邻(或者临近)的内存块中的地址,并记录时间。因为,这两个内存块的虚拟地址高位都一样,只有低位不同,因此可以通过(比如)PTL1的cache miss来旁路泄漏出目标地址的偏移。然后逐次访问更远的内存,来泄漏更高位的(e.g. PTL4)的地址。
2. 面临的挑战
2.1 准确测量时间
该攻击目前是在主流的浏览器上用javascript代码来实现的,需要依赖于一些计时特性。针对Firefox的攻击使用了performance.now() 计时,精度是每5μs一次;针对chrome的攻击因为performance.now()不太准确,所以用shared memory counter来计时。
2.2 内存排列
以2GB为单位分配内存块。使用不同的步长来分段泄漏地址。使用步长4KB来泄漏PTL1,2MB泄漏PTL2,8GB泄漏PTL3,4TB泄漏PTL4。
浏览器中,Firefox因为mmap的时候没有用MAP_POPULATE,所以可以顺利地分配到4TB的内存。但在Chrome中,mmap的时候会同时分配物理内存,所以攻击PTL3和PTL4时会有一定概率无法成功。
3. 实验
作者在实验中对Chrome和Firefox进行了攻击。实验环境是Intel Skylake i7- 6700K CPU,16 GB 内存,操作系统是 Ubuntu 16.04.1 LTS。
图2 AnC攻击的攻击效果
图2攻击是成功率的图,Chrome因为内存排列随机化的原因,会有失败的概率。Firefox PTL4攻击时,4TB内存会和其他对象共享,鱼鳞冲孔网产生噪声。
图3 AnC攻击对ASLR的熵的降低效果
图3展示了AnC攻击可以在50s内有效地降低ASLR的熵。
*后,表1列举了受到AnC攻击影响的一些CPU型号。
4 防御方法
作者讨论了一些简单的防御措施,然而大部分并不可能很快部署到现有系统上去
4.1 攻击检测
可以针对攻击者使用的计时器进行检测防御,但是有可能有误报。鱼鳞冲孔网
4.2 Cache分区
可以对每个程序划分LLC(Last Level Cache)进行进程隔离,防止其他进程受到攻击。但是这种方法可能会对计算机系统带来性能上的影响。
4.3 计时器修改
可以降低计时器的精度,来防止攻击者进行旁路信息收集。但是问题是,攻击者有很多其他的手段来构造出计时器,进行攻击。无法完全防御所有的计时器。
4.4 Cache隔离
可以加一个独立的cache把PTE都放进去,阻止旁路信息泄漏。但是这样的问题在于成本太高。
5. 感想
AnC攻击是一种新型的旁路攻击,巧妙地利用了Page Table Entry被缓存这一特性,开展了相关的信息泄漏攻击,攻击需要的时间很短,攻击所需的条件较之以往的一些约束条件更为通用。然而该攻击也存在要求计时准确,内存访问的控制要求很高等特点,应用上确实适合基于浏览器的攻击。鱼鳞冲孔网