文/管策
史上最佳的编程笑话之一是:为什么程序员会死在浴室?因为洗发水瓶上写着“揉出泡沫、冲洗、重复”。
其实这是一个无限循环。很显然,条理分明的程序员“重复”了这一循环指令,直到死。觉得这很荒谬?但计算机多年来一直被人带入这种循环中。
事实上,这是经典的“fork 炸弹”攻击。虽然一个 fork 炸弹可能只有几个字符长,但它却能让计算机用光自己的资源,再也没法干别的事。
在一些计算机语言中,这种小字符集能定义一个毫无意义的函数,然后要求计算机重复执行它。计算机不会问为什么,只会照做。不过,不要尝试在家中运行这一代码,因为它会极大地拖慢你的计算机运行速度,甚至可能会导致电脑崩溃。
剑桥大学的研究人员们在 2013 年预计,计算机漏洞每年给全球经济带来的损失约为 3120 亿美元。即便小漏洞也能造成巨大损失,比如一行错误代码就可能让军舰无法行驶。但这些由极少字节组成的代码怎么会造成这么大的损失呢?
威斯康星大学计算机科学家 Ben Liblit 说道:“计算机会按照接受到的指令执行,你给它什么,它就会执行什么。计算机没有常识可以依靠。”
为什么会存在无限循环呢?Ben Liblit 表示,因为很多时候重复执行一项任务能做很多人类觉得无聊和花时间的事情,节省人类的时间,比如编辑一大张人名列表,并把所有人名的第一个字母大写。循环重复执行的次数并没有硬性规定,从理论上讲,只要计算机能应付,循环可以永远重复执行下去。
第一个有记录的 fork 炸弹要追溯到 1978 年。和上面的例子差不多,这个名为 wabbit 的小程序做的事就是不断复制自己。
像这样的代码(恶意软件的一种)会先伪装成普通文件,作为电子邮件附件进入受害者的电脑。如果受害者下载并运行了这一文件,这个等待被触发的 fork 炸弹就会引爆。
F-Secure 的网络安全专家 Mikko Hypponen 还表示,黑客们还可以让受害者在打开压缩的文件夹时,让计算机不断解压更多内部文件。这被称为“压缩炸弹”(zip bomb),其中一个著名的压缩炸弹在解压前只有 42 字节。它可以填满受害者的硬盘,瘫痪解压文件的病毒查杀软件,耗尽计算机的内存。
在 2014 年,一个被用来加密网络敏感数据的计算机软件被发现存在严重漏洞。这个名为“心跳失血”(Heartbleed)的漏洞可以让攻击者窃取私密数据,如密码或信用卡信息等。英国萨里大学(University of Surrey)的 Alan Woodward 表示,执行这一攻击的程序只有 4 字节。
对于有恶意的黑客们来说,用极少字节来实现破坏力惊人的行动非常有用。比如,2010 年著名的“Twitter 病毒”就可以打开弹出窗口。用户只需将鼠标滑到 twitter.com 上的问题推文,浏览器就会弹出一个窗口,即便白宫官方 Twitter 也一度受到了影响。
Mandalorian 的网络安全专家 Steve Lord 则表示,他最近在研究的一个漏洞可以往单个数据包中插入恶意代码。这是个相当复杂的漏洞,可以让攻击者们攻破虚拟专用网络(VPN)的安全连接。
造成破坏的最短代码应该就是“0”了。除以 0 会产生一个不确定数,而计算机无法处理这一情况。
Steve Lord 表示,这正是 1997 年 9 月发生在美国约克郡军舰上的事。军舰上的某个程序错误地除以了 0,结果导致整艘战舰在巡航时彻底关闭,不得不拖回港口维修。
Steve Lord 说道:“谢天谢地,这不是在战斗中发生的。”他还提到了名为 Tiny Banker 的恶意软件,这个恶意软件会感染受害者的浏览器,每当受害者登陆自己的网络银行帐号时,Tiny Banker 就会复制这些信息。它的大小只有 2 万字节,却感染了全世界成千上万个计算机系统。“在 Windows 程序中,Tiny Banker 真的很小了。”
上面的例子并不是说计算机本身就满是漏洞,但也确实证明了要保护计算机系统免受恶意攻击非常具有挑战。Steve Lord 甚至还说,有些错误还挺“美”的,不过美国海军可能不会同意这一点。
正如 Ben Liblit 所说的,不管执行的后果是有利还是有害,计算机都会一丝不苟地按照指令执行。他说道:“计算机能做很有用的事,也能做很有破坏力的事。”
不管怎样,至少在大多数情况下,你都可以重启电脑来解决问题。毕竟,“重启试试”可是和“不行就分”一样好用的人生哲理啊。
via bbc
内容由 雷锋网 提供授权发布,未经许可谢绝转载。