可以让电脑死机的小小代码

Image caption (图片来源:Getty Images)

有关编程的好笑的笑话太多了,其中最有趣的一个笑话是:为什么程序员在淋浴的时候死了?因为洗发液的瓶子说:“打泡,洗头,重复”。你没理解吗?这就是所谓的无限循环。程序员严格遵循这一清晰指令,“重复”执行指令循环——直到死亡。你觉得不可理喻吗?多年来,电脑一直陷入这样的圈套。

事实上,这是经典的“fork炸弹”(fork bomb)攻击——即耗尽电脑的资源,让人无法再使用它。fork炸弹非常精简,有时只有短短几个字符。

一位用户在网上作出解释,这组字符在一些计算机语言中定义某个无意义的功能,然后让计算机反复执行它。计算机不会问为什么——它只会服从命令。但是,请不要在家里运行这一代码,因为它有可能会导致你的系统变得非常迟缓,甚至造成死机。

2013年,据剑桥大学的研究人员估计,电脑病毒每年对全球经济造成的损失达3120亿美元。即使很小的程序错误也会造成很大的损失——比如放错位置的一行代码可能让战舰不能移动。那么,这些短小的代码具体是如何导致巨大灾难的呢?

“给出一套指令,计算机就会执行——但是计算机只会逐字逐句的执行,” 威斯康星大学麦迪逊分校(University of Wisconsin-Madison)的计算机专家本·利布利特(Ben Liblit)说。

“它们不具有常识。”

为什么计算机会陷入死循环?利比利特提到,那是因为电脑循环计算数千次甚至数百万次是一件非常有用的事。正是通过这一方式,电脑可以在一瞬间完成人类需要很长时间才能完成的计算——比如编辑一份长长的名单,确保首字母都是大写的。对循环次数并没有限制,这就意味着不管在理论上,还是在实践中,计算机可以一直循环下去,直到它无法运行。

Image caption 计算机可以做一些有用的事,计算机系统可以发挥很大作用,但计算机也会出现故障,计算机系统也会出故障。(图片来源:Getty Images )

历史记载,首例造成问题的fork炸弹发生于1978年。与上述例子类似,它涉及的程序也十分短小——昵称是“wabbit”——它会无限次备份自己。

这是一种恶意程序,它常常伪装成日常的文件,并作为电邮附件发送至受害者的电脑。如果受害者下载并运行该文件,那就会引爆等待着的fork炸弹。

F-Secure的网络安全专家米科·许珀宁(Mikko Hypponen)称,还可以制作一种压缩文件夹,当你去解压缩时,它会不断解压出越来越多的内部文件。这被称为“解压炸弹”,一个著名的例子是一个在未解压时只有42比特的病毒。它可以塞满整个硬盘,并且占满内存,让杀毒软件失效。

2014年,有人发现加密敏感数据的软件存在严重的缺陷,它被成为Heartbleed,攻击者可以通过这一错误窃取隐私数据,比如密码和信用卡信息。但是,正如萨里大学的艾伦·伍德沃德(Alan Woodward)所说,发起攻击的代码非常短——只有四比特。

最近,对心怀恶意的黑客来说,这些打包后十分短小的病毒代码非常有用。比如在2010年,有人报告发现“推特病毒”,它会打开多个弹出窗口。电脑使用者一旦把鼠标指针移至被感染的推文上就会激活它。连白宫的官方推特账户也在一时间受到影响。

在Mandalorian公司工作的网络安全专家史蒂夫·洛德(Steve Lord)也常常发现非常短小的恶意程序。他说,最近他在研究的是把而已代码插入单个数据包内。数据包是电脑之间通过互联网发送的小段数据。这个病毒相当复杂,它会破坏VPN安全连接。

或许造成电脑故障的最短小的代码是“0”。任何数除以零都无法得到确定的数字,这是计算机无法处理的。

Image caption 因为放错位置的“0”,导致整艘约克城号航空母舰(USS Yorktown)在演习中停止运转。(图片来源:Getty Images)

洛德指出,这一情况出现在1997年9月的约克城号航空母舰上。航母上运行的某一程序中,数字0放错了地方,它所带来的错误导致整艘船在演习过程中被迫停止运行。它后来被拖回港口。

“感谢上帝这不是发生在战斗中。”洛德说。

洛德还提到Tiny Banker这一恶意软件,它会感染电脑的浏览器,当用户试图登录网银账户时,它就会复制登录信息。它的大小是20000比特,已经感染了全世界数千个系统。

“就视窗系统的程序来说,它小到可笑的地步。”洛德说。

但这一切都不意味着电脑在根本上容易出错——它只是说明工程师面临棘手的挑战,他们要想办法保护电脑免受恶意攻击或出现内部错误。洛德认为,虚拟世界的一点小错误就会造成严重的后果,这一现象带有一定的“美感”。不过了,美国海军恐怕不会同意。

利布利特说,计算机有一种能力,它会坚定不移的贯彻执行,不论结果的好坏。他说:“计算机可以做一些有用的事,计算机系统可以发挥很大作用,但计算机也会出现故障,计算机系统也会出故障”至少,在大多数情况下,你可以关机重启。

请访问 BBC Future 阅读 英文原文

更多有关此项报道的内容