摘自FreeBuf.COM
編譯|clouds
在IT時代,計算機漏洞或編程錯誤(Bug)是一種常見現象,以至于所有的開發軟件都有可能存在缺陷或漏洞。你信或不信,反正漏洞就在那里,只是要么根本沒人發現,或者有些人對它進行了測試并公開,而有些人對其測試但未公開(0-day漏洞)。任何軟件在其生命周期內都會存在漏洞或缺陷,而那些未被發現的漏洞、缺陷、錯誤或0-day漏洞將會對軟件本身和其應用系統產生嚴重的信息安全威脅,或造成巨大的經濟損失,軟件開發的安全性設計和測試工作應該得到更多重視。
在此,我們一起來看看——史上造成數百萬美元損失的10大著名安全漏洞。
1 阿麗亞娜5型火箭升空爆炸事件阿麗亞娜5型火箭,為歐洲空間局研發的民用衛星一次性運載火箭,名稱來源于神話人物阿麗雅杜妮(Ariadne)的法語拼寫。1996年6月4日,在風和日麗的法屬圭亞那太空發射場,阿麗亞娜5型運載火箭首航,計劃運送4顆太陽風觀察衛星到預定軌道。但在點火升空之后的40秒后,在4000米高空,這個價值5億美元的運載系統就發生了爆炸,瞬間灰飛煙滅化為烏有。
爆炸原因由于火箭某段控制程序直接移植自阿麗亞娜4型火箭,其中一個需要接收64位數據的變量為了節省存儲空間而使用了16位字節,從而在控制過程中產生了整數溢出,導致導航系統對火箭控制失效,程序進入異常處理模塊,引爆自毀。
2 愛國者反導系統軟件失靈事故1991年2月25日,部署沙特宰赫蘭基地的美軍“愛國者”防空導彈居然沒有發現伊拉克來襲的“飛毛腿”導彈,導致美軍兵營被炸,28人死亡98人受傷,而事故原因則由于“愛國者”防空導彈系統的一個致命軟件錯誤。該錯誤導致其雷達探測系統不能有效識別、跟蹤和攔截敵方導彈。
在后來的調查中發現,由于一個簡單的計算機bug,使基地的愛國者反導彈系統失效,未能在空中攔截飛毛腿導彈。當時,負責防衛該基地的愛國者反導彈系統已經連續工作了100個小時,每工作一個小時,系統內的時鐘會有一個微小的毫秒級延遲,這就是這個失效悲劇的根源。愛國者反導彈系統的時鐘寄存器設計為24位,因而時間的精度也只限于24位的精度。在長時間的工作后,這個微小的精度誤差被漸漸放大。在工作了100小時后,系統時間的延遲是三分之一秒。伊拉克戰爭開始前,美軍專業人士就對“愛國者”導彈的可靠性持懷疑態度。但雷神公司卻辯解稱,公司在試射“愛國者”導彈過程中的確發現存在難以分辨敵我的問題,但已經進行了技術改進。因此,“愛國者”防空導彈倉促投入了實戰。
3 千年蟲問題計算機2000年問題,又叫做“千年蟲”、“電腦千禧年千年蟲問題”或“千年危機”。縮寫為“Y2K”。在90年代末,千年蟲問題是許多專家廣泛討論的話題,它可能引發飛機碰撞、輪船偏離航向、證券交易所崩盤等問題。
問題原因在于某些使用了計算機程序的智能系統(包括計算機系統、自動控制芯片等)中,由于其中的年份只使用兩位十進制數來表示,因此當系統進行(或涉及到)跨世紀的日期處理運算時(如多個日期之間的計算或比較等),就會出現錯誤的結果,進而引發各種各樣的系統功能紊亂甚至崩潰。如1970年用70表示,1999年用99表示,所以當到了2000年1月1日時,很多采用這種計時方法的系統都錯誤地把日期識別為1900年1月1日。從根本上說千年蟲是一種程序處理日期上的bug(計算機程序故障),而非病毒。
4 PayPal系統錯誤導致的92萬億客戶存款2013年6月悶熱的一天,56歲的美國男子Chris Reynolds吃驚地發現,在PayPal發給他的對賬單中,他的賬戶余額竟然高達$92,233,720,368,547,800,接近92萬億美元!這個數字富可敵國,是當時世界首富墨西哥電信大亨Carlos Slim的一百萬倍。不過,經PayPal及時核實后,發現這是個嚴重的系統Bug。當他再次登陸自己的賬戶時,發現里面只剩下自己原本的100美元。
5 江南Style點擊量超出Youtube播放上限2014年,鳥叔的《江南Style》視頻在Youtube的播放次數超過了計數上限,導致谷歌不得不對Youtube進行技術調整。Youtube之前的播放計數上限為32位,即最多為2,147,483,647次觀看量,當《江南Style》出現后,點擊量遠遠超過該數,谷歌及時調整播放上限為64位,即9,223,372,036,854,775,808次播放數。對此,谷歌在其Google+上發表聲明稱:“我們從未想過一段視頻的觀看量會超過32比特的整數(=2,147,483,647次觀看量),直到我們遇到了鳥叔
”。
6 美F-22軟件錯誤導致系統癱瘓2008年,美國空軍聲稱12架“猛禽”執行從夏威夷飛往日本的任務中,當途經國際日期變更線的時候,飛機上的全球定位系統都失靈了,多個電腦系統發生崩潰,多次重啟也均告失敗。飛行員們再也沒有辦法正確辨識戰機的位置、飛行的高度和速度。他們不得不掉頭返航,但是幸運的是,當時天氣很好,能見度也非常高,這給“猛禽”加油的KC-135型加油機可以引導它們安全降落,順利地返回位于夏威夷的希卡姆空軍基地。
“猛禽”一到希卡姆機場,不出幾個小時,問題就真相大白:軟件開發工程師在電腦系統編碼中犯了一個錯誤,引發了一系列的問題。當時美國空軍退役少將史皮爾德稱:“對于那些“猛禽”戰斗機飛行員來說,他們很幸運,因為如果在實戰中發生這個問題,他們可能會被擊落。并且這個小小的軟件錯誤,將可能成為扭轉整個戰局的關鍵點,使美國陷入短時不利的戰爭局面”。
7 32位UNIX系統時間編碼機制的2038年問題當工程師在上個世紀七十年代開發出世界上的第一款UNIX操作系統時,他們做出了一個很隨意的決定,即使用32位簽名整數(或數字)來代表時間,整個計時系統的起始時間是1970年1月1日。但這個時間編碼機制存在一個嚴重的問題,因為32位軟件能夠檢測到的最大秒值為2147483647,對應時間為2038年1月19日。也就是說,如果無法解決這個問題,地球上的所有計算機將在那個時刻點將時間計數“歸零”,重新從1970年1月1日起算起。與千年蟲問題類似。
也就是說所有使用UNIX時間編碼的系統將在2038年發生溢出錯誤,計時器可能會停止工作,跟時間有關的所有系統都會亂套。值得慶幸的是,要解決這個問題,從技術上來說并不困難。我們只要將時鐘系統換成更高位數的值比如64位就行了,那樣就會得到一個更大的最大值。64位系統只是將這個問題發生的時間向后推了而已,雖然看似治標不治本,但是其時鐘系統的最大計數值對應的時間是2920億年之后!因此這也等于很好地解決了這個難題。
8 軟件競爭條件錯誤引發的美國大面積停電事故2003年8月14日,酷暑中的美國東北部和加拿大部分地區發生大面積停電事故,給當地交通、通信和居民生活造成嚴重影響。直到16日上午, 紐約市才全部恢復正常供電。據電腦專家分析認為,停電的直接原因在于電控系統的競爭條件錯誤,其中一個操作的兩個獨立線程在調用一段相同代碼時,導致輸電系統突然發生故障。由于沒有適當的同步和容錯機制,線程陷入崩潰,致使輸電系統出現連鎖反應。
9 軟件錯誤導致的火星氣候探測者號解體失聯火星氣候探測者號(Mars ClimateOrbiter)是美國國家航空航天局的火星探測衛星,也是火星探測98計劃的一部份,于1999年發射進入預定軌道。不幸的是,在運行286天之后,這個價值3億2760萬美元的飛行器失聯了。失聯原因在于,探測器的地面控制團隊使用英制單位來發送導航指令,而探測器的軟件系統使用公制來讀取指令。這一錯誤大大改變了導航控制的路徑。最后探測器進入過低的火星軌道,在過大的火星大氣壓力和摩擦下解體。
10 AT&T9小時長途電話網癱瘓事件90年代,AT&T公司在美國占據70%的長途通訊量,電話呼叫轉發超過11.5億次,是美國最大的電信通訊公司。然而就在1990年1月15日下午,該公司所有客戶都不能正常撥打長途電話,全國各地的長途電話交換機接連發生故障,陷入癱瘓。大量技術團隊參與了事故應急與分析,原因令所有人瞠目結舌。這個Bug是由一個非常簡單的語法錯誤引起:大型交換機軟件中一個C關鍵字break用法錯誤。最終AT&T工程師重裝了電話交換機以前的軟件版本才得以解決這個問題。但在電話網絡癱瘓的九個小時里,AT&T公司至少損失6000萬美元,該Bug可以算得上一個昂貴的Bug了。