阿尼亚是安妮亞
26-06-14 11:39 微博认证:AI博主

前两天在tk老师群里,我说想在家里观测内存条出现比特翻转,这个念想的来源是这条微博 http://t.cn/AXfFTY6k 。

tk老师给了我提示,说“可以用灯泡”。在Gemini的帮助下很快就定位到了下面这篇论文。
Using memory errors to attack a virtual machine
DOI: 10.1109/SECPRI.2003.1199334

虽然论文中没有明说 DDR 的类型,但结合论文发布的时间和描述,测试大概率使用的是 SDR SDRAM。我们知道 DRAM 的每个比特是依赖一个电容和一个晶体管组成的,电容的电荷状态对应二进制的0或者1。但是,电容会自然漏电,所以内存会以非常高的频率进行刷新,这样才能保持数据。而半导体材料的漏电流会随着温度的升高呈指数级增长,所以理论上只要漏电够快,电荷是有机会在内存刷新之前泄露完,从而引发比特翻转。

论文中的试验利用灯泡的热辐射对内存条进行加热,在 80~100°C 的范围内能观测到孤立、随机、间歇性的比特翻转。后续还利用了这种比特翻转实现了对 JVM 的攻击。

如果我想在家里观测内存条出现比特翻转,最简单的办法就是照着论文,找一台使用 SDR SDRAM 的老电脑,然后找个老灯泡加热。不过使用 DDR1 的老电脑可能比较难找,而且因为具有一定“收藏价值”可能反而更贵。所以我在闲鱼用200块收了一台H61主板的奔腾G840电脑,8G DDR3+120G固态,而热源就用我家中常备的热风枪即可。

昨天老电脑到了,我去妈那边把她那个VGA的显示器也搬了过来,准备开始复刻。不过这个卖家并不是特别实诚,描述是带硬盘带系统,送过来后发现硬盘都被拔了。不过问题不是很大,我这个实验本身就不太需要硬盘,能开机就行。

不过也开不了机。

我把两条4GB的DDR3拔下来测试了一下,电脑能嘟嘟嘟响,那大概率就是内存条或者是插槽的问题了。拿橡皮擦给两条内存的金手指进行仔细擦拭,简单AB测了下,大概是一条内存+一个槽坏了。不过问题不大,单条4GB测试更方便加热和监测温度。

用U盘做了Memtest86+的启动盘,给内存条粘上K型热电偶,在老电脑上先跑了一轮完整的测试,确认这条DDR3本身是正常的。

之后就是加热测试了,用热风枪控制温度在85℃~95℃左右,测了10分钟都没有观测到哪怕一个比特的错误。目前有的可控变量是:SMP开关、Memtest86+配置、温度、时间。不能变的:DDR3、tREFI。

因为用的是Memtest86+测试,所以还是先看看默认的10个test分别是什么,哪个最适合用来观测比特翻转。最后选择的是 test10,原因是在校验前会休眠一段时间,这段时间正好是我加热的最好时机。

Test 10 : Bit fade test, 2 patterns
Across all memory regions, and for each pattern in turn, initialises each memory location with a pattern, sleeps for a period of time, then checks each memory location for consistency. The test is performed with patterns of all zeros and all ones.

我关掉了SMP,把 Memtest86+ 的测试项设置成了循环 test10 ,然后再加热尝试,85℃~95℃ 依旧没有翻转,继续升温到105℃左右的时候抓到了4个错误。出错的地址范围是0x0000131396f8~0x00005a19d588,算是跨度比较大了,一定程度上也印证了论文中描述的“孤立、随机、间歇性”。

实验后想了下一开始难翻转的可能原因:首先想到的是,DDR3 会根据温度来调节刷新速度的,所以加热虽然漏电快了,但刷新速度也变快就缓解了出现错误的概率。而且这块主板无法配置 tREFI,本想着降低一点频率更好复现来着。

但是,从我的经验来看,DDR3的储存单元尺寸更小,应该更加容易受到温度的影响才对,为什么体感DDR3更加难出现错误呢?我问了下Gemini,有以下可能:

1. 温度在85℃以上的时候刷新速度是翻倍,tREFI 只有 3.9µs,刷新周期是 32ms。
2. DDR3 使用了 High-K 材料。
3. 工作电压降低了。DDR3是1.35V~1.5V。

————
那么对于DDR3,除了加热,还有没有别的办法引发比特翻转呢?

查了一下,有个比较有名的 Rowhammer行锤攻击,能够在不对某个内存地址进行写操作、甚至不直接访问它的情况下,仅仅通过高频率地读取其相邻的内存地址,就能够改变该地址中存储的数据。

参考阅读:Flipping Bits in Memory Without Accessing Them:
An Experimental Study of DRAM Disturbance Errors
DOI: 10.1145/2678373.266572

发布于 广东