3
史上最佳的編程笑話之一是:為什么程序員會死在浴室?因為洗發(fā)水瓶上寫著“揉出泡沫、沖洗、重復”。
其實這是一個無限循環(huán)。很顯然,條理分明的程序員“重復”了這一循環(huán)指令,直到死。覺得這很荒謬?但計算機多年來一直被人帶入這種循環(huán)中。
事實上,這是經(jīng)典的“fork 炸彈”攻擊。雖然一個 fork 炸彈可能只有幾個字符長,但它卻能讓計算機用光自己的資源,再也沒法干別的事。
在一些計算機語言中,這種小字符集能定義一個毫無意義的函數(shù),然后要求計算機重復執(zhí)行它。計算機不會問為什么,只會照做。不過,不要嘗試在家中運行這一代碼,因為它會極大地拖慢你的計算機運行速度,甚至可能會導致電腦崩潰。
劍橋大學的研究人員們在 2013 年預計,計算機漏洞每年給全球經(jīng)濟帶來的損失約為 3120 億美元。即便小漏洞也能造成巨大損失,比如一行錯誤代碼就可能讓軍艦無法行駛。但這些由極少字節(jié)組成的代碼怎么會造成這么大的損失呢?
威斯康星大學計算機科學家 Ben Liblit 說道:“計算機會按照接受到的指令執(zhí)行,你給它什么,它就會執(zhí)行什么。計算機沒有常識可以依靠?!?/p>
為什么會存在無限循環(huán)呢?Ben Liblit 表示,因為很多時候重復執(zhí)行一項任務能做很多人類覺得無聊和花時間的事情,節(jié)省人類的時間,比如編輯一大張人名列表,并把所有人名的第一個字母大寫。循環(huán)重復執(zhí)行的次數(shù)并沒有硬性規(guī)定,從理論上講,只要計算機能應付,循環(huán)可以永遠重復執(zhí)行下去。
第一個有記錄的 fork 炸彈要追溯到 1978 年。和上面的例子差不多,這個名為 wabbit 的小程序做的事就是不斷復制自己。
像這樣的代碼(惡意軟件的一種)會先偽裝成普通文件,作為電子郵件附件進入受害者的電腦。如果受害者下載并運行了這一文件,這個等待被觸發(fā)的 fork 炸彈就會引爆。
F-Secure 的網(wǎng)絡安全專家 Mikko Hypponen 還表示,黑客們還可以讓受害者在打開壓縮的文件夾時,讓計算機不斷解壓更多內(nèi)部文件。這被稱為“壓縮炸彈”(zip bomb),其中一個著名的壓縮炸彈在解壓前只有 42 字節(jié)。它可以填滿受害者的硬盤,癱瘓解壓文件的病毒查殺軟件,耗盡計算機的內(nèi)存。
在 2014 年,一個被用來加密網(wǎng)絡敏感數(shù)據(jù)的計算機軟件被發(fā)現(xiàn)存在嚴重漏洞。這個名為“心跳失血”(Heartbleed)的漏洞可以讓攻擊者竊取私密數(shù)據(jù),如密碼或信用卡信息等。英國薩里大學(University of Surrey)的 Alan Woodward 表示,執(zhí)行這一攻擊的程序只有 4 字節(jié)。
對于有惡意的黑客們來說,用極少字節(jié)來實現(xiàn)破壞力驚人的行動非常有用。比如,2010 年著名的“Twitter 病毒”就可以打開彈出窗口。用戶只需將鼠標滑到 twitter.com 上的問題推文,瀏覽器就會彈出一個窗口,即便白宮官方 Twitter 也一度受到了影響。
Mandalorian 的網(wǎng)絡安全專家 Steve Lord 則表示,他最近在研究的一個漏洞可以往單個數(shù)據(jù)包中插入惡意代碼。這是個相當復雜的漏洞,可以讓攻擊者們攻破虛擬專用網(wǎng)絡(VPN)的安全連接。
造成破壞的最短代碼應該就是“0”了。除以 0 會產(chǎn)生一個不確定數(shù),而計算機無法處理這一情況。
Steve Lord 表示,這正是 1997 年 9 月發(fā)生在美國約克郡軍艦上的事。軍艦上的某個程序錯誤地除以了 0,結果導致整艘戰(zhàn)艦在巡航時徹底關閉,不得不拖回港口維修。
Steve Lord 說道:“謝天謝地,這不是在戰(zhàn)斗中發(fā)生的?!彼€提到了名為 Tiny Banker 的惡意軟件,這個惡意軟件會感染受害者的瀏覽器,每當受害者登陸自己的網(wǎng)絡銀行帳號時,Tiny Banker 就會復制這些信息。它的大小只有 2 萬字節(jié),卻感染了全世界成千上萬個計算機系統(tǒng)?!霸?Windows 程序中,Tiny Banker 真的很小了。”
上面的例子并不是說計算機本身就滿是漏洞,但也確實證明了要保護計算機系統(tǒng)免受惡意攻擊非常具有挑戰(zhàn)。Steve Lord 甚至還說,有些錯誤還挺“美”的,不過美國海軍可能不會同意這一點。
正如 Ben Liblit 所說的,不管執(zhí)行的后果是有利還是有害,計算機都會一絲不茍地按照指令執(zhí)行。他說道:“計算機能做很有用的事,也能做很有破壞力的事。”
不管怎樣,至少在大多數(shù)情況下,你都可以重啟電腦來解決問題。畢竟,“重啟試試”可是和“不行就分”一樣好用的人生哲理啊。
via bbc
推薦閱讀:
Win 10補丁讓電腦陷重啟死循環(huán),你中槍了嗎?
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。