[关闭]
@1qaz 2015-12-23T04:42:07.000000Z 字数 1628 阅读 982

Rowhammer and fault attack

Memory background

  1. 基本结构
    DDR3 SDRAM rank,bank,row
    DRAM1
    dram2
    2G,1个rank有8个bank,1个bank有32K row,一个row有8KB
  2. 内存读写
    打开Row:将同一row的wordline加电,使得电容中的数据传输到bitline,存进bank的row buffer中。该操作使得电容丧失了数据
    读写Column:根据column读写row buffer中的数据。
    关闭Row:在同一个bank中的不同row可以被打开前,原来的row必须被关闭。wordline降低电压,清空row buffer

  3. 内存刷新
    Dynamic
    漏电
    DDR的标准规定至少在64ms内,rank中的每个cell都要被刷新。refresh即打开row,读出cell的值并写回。温度高于85℃的话,漏电会更明显,刷新时间减少为32ms。
    对于DDR3,一个rank的刷新分为8192个小的操作,每个刷新操作更新4个row,需要64ms/8192 = 7.8μs
    refresh1
    refresh2

Faults in memory

clflush
clflush 清除某个内存地址的缓存
code1a: ACTx,READx,PREx,ACTy,READy,PREy,...
code1b: ACTx,READx,READx,READx,...,PREx
Same bank,different row 与 same bank,same row
在同一个bank中不断open row,会产生DRAM Disturbance Errors:一个wordline上的电压不断toggle时,相邻row中某些cell会快速失去电荷,在下次刷新时也不能恢复电荷

如何做到same bank,different row?
1. 物理地址
绝对物理地址 /proc/PID/pagemap
相邻物理地址 4k内存页小于一个8k的row,linux可以有2MB的大内存页,连续的2MB物理内存可能会有same bank,differnt row
物理地址中的某些比特与内存bank,row之间的关系 AMD published,Intel Sandy Bridge REed
2. 随机地址选取
申请一块大内存 1G,在其中随机选虚拟地址,
3. bypass os:memtest
提高成功几率:double-sided hammering 同时敲击N-1行和N+1行,可以提高第N行翻转的成功率

Attack:
NaCl沙盒逃逸:修改代码 jmp *%rax
内核提权:篡改PTE物理页号 内存喷射
How to observe the bit flip?

实验结果
Yoongu Kim:FPGA,129 modules,110 induce errors
Mark Seaborn:29 laptops,15 saw bit flip

Mitigation:
DRAM:最大激活次数
ECC:Single-Error-Correct,Double-Error-Detecct
BIOS:提高刷新频率
禁用clflush? No CLFLUSH in userland(ARM)

Daniel Gruss:rowhammer.js CACHE EVICTION
Lenovo T420 i5-2540M Sandy Bridge Corsair DDR3-1333 8 GB
Lenovo x230 i5-3320M Ivy Bridge Samsung DDR3-1600 4 GB (2×)
Asus H97-Pro i7-4790 Haswell Kingston DDR3-1600 8 GB

Faults in cryptography

Hardware fault

RSA-CRT fault attack
e一般为0x10001,d很大,为了加快运算,使用中国剩余定理优化

crt1
crt2
exponent1,exponent2,coefficient
Software induced fault?
Openssl 1.0.2 BN_mod_exp may produce incorrect results on x86_64 (CVE-2015-3193)

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