美国普林斯顿大学的一名学生利用一只灯泡、计算机内存上一些已知的特性再加上一点点运气,使Java和.Net虚拟机上安全问题显现了出来。
普林斯顿大学应届毕业生Sudhakar Govindavajhala本周二(5月13日)在加州伯克利市演示这一过程时断言,对计算机的攻击通常需要对计算机进行物理访问,因此这种技巧并不能对运行在PC和服务器上的虚拟机构成多大的威胁。但这种攻击可被用来窃取智能卡上的数据。
这一技巧有赖于内存中的“异常比特”(flip bits)。偶尔发出的宇宙射线会引起内存中随机比特值发生改变,从0变成1或由1变成0。Govindavajhala于是一不作二不休,他用一只灯泡烤热计算机内的芯片,便造成了更多的内存中比特的变化。
通过以上实验,这名大学生便打破了虚拟机所依赖的安全模式:即计算机忠诚地执行所下达的指令。
Govindavajhala攻击系统的手段是把自己的代码加入到内存当中,并把剩余的内存空间用新的代码地址来填补。他发现,如果用这些地址充满60%的内存,随机出现的异常比特就会使他的攻击代码在70%的时间内运行,在其余的情况下,计算机上的关键程序将处于瘫痪状态。
Govindavajhala的手段可被用于窃取智能卡上的数据,因为这些看似信用卡的东西拥有内存和简单的处理器。