Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

Drammer: Deterministic Rowhammer Attacks on Mobile Platforms

  • Victor van der Veen,Yanick Fratantonio,Daniel Gruss et al.
  • Vrije Universiteit Amsterdam , CCS’16

论文下载

之前rowhammer的攻击要么是概率性的(ProjectZero),要么需要特殊的内存管理特性(KSM,THP)来把victim 数据放到会flip的物理地址上。这篇文章提出了利用android的内存管理接口来进行确定性的rowhammer攻击技术,不需要软件漏洞和权限的情况下进行root

Rowhammer

  • DRAM:row,rowbuffer,bank,refresh
  • Double-sided rowhammer: sandwich

000000000 111111111 000000000

攻击的基本条件:

  1. Fast uncached memory access:必须,bypass the cache
  2. Physical memory massaging:把victim 数据放到会flip的物理地址上 确定性 最有难度的一步
  3. Physical memroy address:非必须,需要连续的物理地址来做double-sided rowhammer

The First Flip

rowhARMer

android内核模块,ARM中的DCCIMVAC指令(类似x86中的clflush,但是需要root权限)

Fig

x86上实现3个利用条件的方式:

  • P1:Fast uncached memory access
    • 直接清cache:clflush
    • cache eviction set:不同地址映射到同一个cache line (rowhammer.js)
    • 非暂存的访问指令:不使用cache的内存访问操作
  • P2:Physical memory massaging
    • Page-table spraying
    • Memory duplication
    • MMU paravirtualization
  • P3:Physical memroy address
    • Pagemap interface
    • Huge pages

Fig

The Drammer Attack

  • 确定rowsize:时间旁路,同时访问page n和page n+i,当n+i位于下一个row时,n和n+i位于同一个bank中,第二次访问需要清空rowbufer,时间更长。(没有文档和工具)
  • DMA buffer management:让用户空间的程序访问外设的内存(用户控制cache,物理连续),解决了P1和P3
  • Physical memory massaging:
  • 整体思路:建立模板,利用物理内存分配器行为的可预测性,耗尽不同大小的连续物理块,从攻击者可以预测的地址开始分配内存
  • buddy allocator,slab

  • L chunk:slab largest chunk size,4k*210 = 4MB

  • M chunk:row size, 32k/64K
  • S chunk:page size, 4k

Fig

  • step2->step3:释放L*
  • step4->step5:释放M*
  • step6:不断消耗S chunk,S至M/2大小的chunk都会被用掉,一定会有一个落在刚刚释放出来的M*中。这里消耗S chunk就是不断mmap,产生页表项。
  • 判断是否达到临界条件:/proc/zoneinfo,/proc/pagetypeinfo

  • exploit:页表指向自身,写页表,任意地址读写

0->1,1—>0 不能超出攻击者的控制范围

  • 不可利用的flip:
    1. 位于page的后半部分 (ARM shadow pagetable)
    2. 位于32bit word的低12bit,PTE,页内偏移
    3. 位于32bit word的高11bit,L=4M时L中有512=29个页

一个页中可以利用的flip bit大约为7%

Implementation

  • android ion memory ,/dev/ion,用户空间获得uncached、物理连续的内存
  • 减少其他程序的干扰

Evaluation

Fig

Fig

  • Root Privilege Escalation
  • 寻找内核空间中的struct cred,并比较是否是攻击者进程的,通过访问不同page来刷TLB
  • 大约需要20s

Mitigation & Discussion

已有的措施:

  • 硬件:ECC,LPDDR4 Target Row Refresh
  • 软件:
    • 禁止cache有关指令 clflush
    • 封掉物理地址接口 pagemap

针对drammer的方法:

  • 限制用户空间的接口:google倾向于让设备提供商的代码运行在用户空间而不是kernel,限制ioctl
  • 隔离DMA的内存和其他内存:ION使得用户在ZONE_LOWMEM分配内存,而ZONE_LOWMEM通常是被kernel和pagetable使用的

vusec github