巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)

文|谢幺

    

1.一个儿时的疑惑

我盯着电视,小小的眼睛藏着大大的疑惑:为什么所有人施法都要念一段叽里呱啦的咒语,或者做出一些迷惑行为?

你看,哈利波特是这样:

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(1)

看着像是骂街

奇异博士是这样:

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(2)

像是颈椎不舒服

中国的道士施法前要念急急如律令,巴啦啦小魔仙也要巴拉拉能量:

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(3)

就连日本的火影忍者放招也要不停地搓手结印……

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(4)

这些莫名其妙的咒语和动作是单纯为了酷炫吗?可是明明很尴尬啊,而且极其影响打斗效率有木有?除非……这是启动魔法招数的必备条件?可是原理是什么呢?

若干年后,那个脑子里想着奇怪事情的孩子,已经长成一个科普作者,也就是现在的我。前几天我无意中看到一篇文章,讲一种非常奇特的黑客攻击手法,读到原理时,我仿佛醍醐灌顶,记忆像一万匹草泥马奔袭而来,儿时的疑惑竟瞬间全都解开了!

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(5)

2.一个计算机漏洞

2014年,卡梅隆大学的一位研究人员发表了一篇论文《无需访问,翻转内存里的比特》(Flipping Bits in Memory Without Accessing Them),提出一种叫 Rowhammer 的攻击方法。

简单解释一下,比特是信息量的基本单位,计算机的0101010中的0或1就是一个比特。“无需访问,翻转内存里的比特”又是啥意思呢?如果把软件空间看作《黑客帝国》里的世界,这就相当于主角尼奥凌空一指,大喝一声,就能改掉远处的某个东西的参数,把1改成0。

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(6)

于是,尼奥就有了超能力,比如隔空把控制子弹是否移动速度的参数从1改成0,就可以让它静止。

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(7)

在实际当中,这种攻击有啥用呢?黑客可以用来破解程序、入侵计算机呀。

比方说,电脑里有一个加密了的程序 B,原本程序A打不开它,因为没有密码,现在有了Rowhammer攻击,只需要控制程序A对着程序B“大喝一声”,就能隔空改掉(不需接触)程序B里头控制密码开关的参数,把1改成0,让它打开。

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(8)

那它是怎么做到的呢?

正常情况下,程序A没有权限访问程序B。

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(9)

我们知道,所有程序都是运行在内存里的,无论这个操作系统是什么,也无论程序是用什么语言编写的,最终都可以表示成0101这样的二进制编码。

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(10)

既然如此,程序B的二进制代码里就一定有某个参数是用来控制锁开关的,只要找到这个参数,是0的话就改成1,锁就会被打开。

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(11)

可是问题来了,在软件应用层面,程序A访问无法访问程序B的那一段0101010101,因为没有权限,自然也就没法改掉那个参数。

但前文提到的那篇论文的讲了一个特别邪门的办法。我们知道,所有程序的0101010编码最终都是以电路开合(或者电荷)的形式存储在内存的晶体管里,1代表“合”,0代表“开”。

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(12)

内存条当然不可能无限长,所以它实际是一些方格子。

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(13)

一个指甲盖大小的内存芯片上可能有几千万上亿个这样的小格子:

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(14)

你其实可以想象,计算机内存是由无数个“小算盘”构成的,算盘珠子在上面就是1,在下面就是0,无数个小算盘紧紧挨着,以此来存储和处理信息,构成一个内存芯片。

那篇论文里讲了这么一个奇特的现象:由于内存芯片做得太小,内存单元挨得太近,只要疯狂读写某一行内存单元,就会产生电磁效应,使得它相邻的内存单元的状态也发生反转。

这就好比是疯狂拨动算盘珠子的某一列,由于算盘珠子挨得太近,会不小心碰到旁边的一颗珠子,使之发生变化。

这个发现真是太有用了,这就为软件空间的“隔空施法”创造了可能性。

由于内存芯片的设计原理,一个程序在物理层面并不是以“一整块”的形式存在,而是分散在不同的地方。

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(15)

这就意味着,哪怕在软件层面,程序A和程序B完全独立,在物理层面,程序A的某一部分也可以跟程序B的某一部分紧紧相邻。那么就存在一种可能性,只要我疯狂读写程序A的特定部分,就能改变相邻的程序B的特定部分。

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(16)

这种Rowhammer攻击最厉害之处在于,所以不管你用的什么设备,手机或是电脑,不管你什么操作系统,是 Linux、Windows、Android、iOS,全部通杀。

但它的利用难度非常大,因为很难很难很难摸清程序和物理内存之间的映射关系,你想打开程序B的锁,必须在浩如烟海的“010101010”和“开合开合开合”之中,准确找到你需要的那一个。

于是,在相当一段时间里,这种攻击方法停留在理论阶段,或者说,只有站在巅峰的极少数安全研究人员才能掌握这项绝技。

2015年说谷歌的Project Zero团队曾经演示过用这种攻击方法劫持了一台Linux系统的英特尔个人电脑。之后的几年陆陆续续还有一些人展示过,或者研发了相关的工具。

漏洞就讲到这里,接下来该讲(hu)讲(shuo)脑(ba)洞(dao)了。

3.一段毫无根据的脑洞

和计算机的世界一样,我们所在的宇宙,也可以用数学来描述。

也许我们的三维世界之外,也存在另一个我们看不见的“底层世界”。正如电脑里的一个个程序,意识不到晶体管、内存、CPU芯片的存在一样,它们也不知道自己其实只是一个个晶体管的特定开合状态。

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(17)

魔法是怎么来的?一段叽里呱啦的咒语“巴拉拉能量—华沙加鲁”,一个特定的,看起来莫名其妙的动作,刚好触发了那个看不到的空间里里的内存扰动,再反馈回我们的三维空间,于是就有了明明两个人隔得很远,中间没有任何介质,却能隔空发生作用的魔法。

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(18)

很多科幻作品乃至于科学作品里都提到四维空间、五维空间。

电影《星际穿越》里头有一个场景:男主角被吸进黑洞,穿越到五维空间,通过引力作用,使得自己家里时钟的秒针跳动,形成一段摩斯电码,把拯救世界的重要信息传递给女儿,父女二人跨越时间空间的情况下实现了信息传递。

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(19)

星际穿越的五维世界

你有没有觉得,三维空间、四维空间、五维空间和软件世界里的的软件层、二进制逻辑层、物理层有一点类似?

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(20)

为什么在古代,不论西方、东方都有许多魔法神话传说,到现代却又都消失了?也许是有一天,造物主(系统管理员)忽然觉得魔法让这个世界乱糟糟的,就随手打了个补丁,混淆了三维空间和四维空间的映射关系,于是,原有的魔法咒语就都失效了。

直到后来,人类以另一种方式——量子纠缠,重新发现到这个BUG。

两个相互纠缠的粒子,即便把它们分开很远,只要改变其中一个,另一个也会跟着改变,毫无缘由,中间也没有任何信息传递。

巴啦啦小魔仙里面的诡异细节(一个计算机漏洞引发的脑洞:为何巴啦啦小魔仙施法前要念一段咒语)(21)

或许,在那个看不见的底层世界里,这两个相隔万里的粒子,其实紧紧相拥在一起。

本文纯属胡说八道,我是谢幺,科技科普作者一枚,日常是把各路技术讲得通俗有趣。想跟我做朋友,可以加我的个人xieyaopro。不想走丢的话,请关注浅黑科技:qianheikeji(别忘了加星标哦)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页