可以讓電腦死機的小小代碼

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 閱讀 英文原文

更多有關此項報導的內容