[关闭]
@1qaz 2016-11-24T18:29:13.000000Z 字数 2030 阅读 1198

Drammer: Deterministic Rowhammer Attacks on Mobile Platforms

rowhammer


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

一句话:Deterministic rowhammer on android!

之前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权限)
nop
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
x86-arm

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*2^10 = 4MB
M chunk:row size, 32k/64K
S chunk:page size, 4k
steps
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=2^9个页
一个页中可以利用的flip bit大约为7%

Implementation

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

Evaluation

heat
list

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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注