萬盛學電腦網

 萬盛學電腦網 >> 系統工具 >> 開放源碼有利於系統安全

開放源碼有利於系統安全

開放源碼是近來人們的一個熱點話題。這會對信息安全帶來什麼影響?開放源碼和封閉源碼相比,哪個更安全?本文作者明確提出:開放源碼會改善信息安全。

  近年來,隨著Linux和Apache等開放源碼軟件受到越來越多的人的關注和喜愛,開放源碼運動在世界范圍內引起了一場風暴。但是,我們也經常可以看到有人對開放源碼軟件的安全性表示懷疑:"所有的源代碼都被黑客們看到了,還有什麼安全可言?""開放源代碼意味著黑客們可以找出代碼中存在的所有缺陷。"有人甚至列出等式:"開放源碼 = 打開信息系統之門 = 不安全"。


開放源碼到底安不安全


  那些認為開放源碼不安全的人,一般是出於如下的考慮。


一、黑客可以找到其中的安全漏洞


  這種觀點成立的前提是:黑客們不會找出封閉源碼軟件中的安全漏洞。但是我們只需要到網上去查找一下與封閉源碼軟件相關的安全警告和安全建議,就會知道這明顯不是事實。例如,1999年12月,Todd Sabin在Bugtraq郵件列表上宣布,他發現了一個Windows NT的SYSKEY缺陷,而這個缺陷就是在沒有源碼的情況下(眾所周知,微軟不提供源代碼),利用反匯編器發現的。實際上,大多數黑客們在破解程序時並不一定需要有源代碼。


二、開放的就是不安全的


  因為對大多數人來說,安全指的就是隱藏的、秘密的、不開放的。在加密學中有一句諺語:一個加密算法的安全不應當依賴於它是秘密的。歷史證明,秘密的加密算法終究會被破解。現在的加密算法(如AES)大都是公開的,而其安全強度依賴於所用密鑰的長度。這句話同樣可以應用於一般的安全軟件。算法可以被人采用反向工程攻破,協議可以通過分析技術去解析。隱藏的和秘密的東西最終會被發現並公布於眾。因此,靠封閉和隱秘達到安全的目的,在很大程度上可以說是不可能的。


三、開放代碼沒人注意


  有個例子,在PGP 2.6發布以後,有人就在Bugtraq郵件列表上宣布,在檢查代碼時發現,其中一個隨機數生成器中有一個"臭蟲"。這個錯誤很細小,在進行異或操作的代碼中,卻使用了賦值運算符號(=)。這表明,"即便代碼開放了,也沒有人會真正去檢查"的想法是站不住腳的,在開放源碼模型中,這樣細小的錯誤都能被發現,所以說,嚴重錯誤或後門不被發現的可能性極小。


四、開放源碼中可放置後門


  這在理論上是成立的,但是如何在其中放置後門或陷阱?因為開放源碼軟件使用代碼控制系統來管理代碼樹,而且有許多人在檢查和分析代碼,更重要的是,代碼本身意味著作者的個人名譽。誰願意冒險在開放的代碼中放置後門而喪失個人名譽和聲望呢? 對比而言,封閉源碼的軟件中更容易放置後門或者陷阱,在Windows操作系統中發現的NSA密鑰即是有力的證據。


開放源碼可以帶來安全


  封閉源碼軟件並不比開放源的軟件的安全性好,相反,開放源碼軟件更有能力和潛力提供更好的安全,有以下例子證明:


  ● openBSD,目前世界上最安全的操作系統之一,是開放源碼的項目。它是BSD Uinx的一個分支,安全是它的主要設計目標,它是在NetBSD的基礎上,花了幾十個人年的時間審查代碼形成的。更為重要的是,它在缺省安裝方式下,三年中從未出現過一個遠程漏洞。


  ● Linux,這個信息時代的軟件驕子,在2000年就已經占領了25%的服務器市場。已經廣泛應用在像Yahoo這樣的性能要求較高的站點上,並且已經得到了IBM、HP等大廠商的明確支持。


  事實表明,開源軟件比之封閉軟件更具有穩定性和安全性。而且,開放源代碼還會帶來如下好處:


一、開放代碼有助於快速修改錯誤


  由於開放代碼軟件會得到世界上成千上萬的開發者的審查,所以發現並修正它們的錯誤的時間很快。國外有人對Linux、Windows NT、Solaris三個操作系統做過統計,從發現其中的錯誤直到錯誤得到修正,不同的軟件開發商所花的平均時間如下:

軟件開發商 red hat microsoft sun
軟件名稱 linux windows NT solaris
改錯平均時間 11天 16天 89天


二、開放代碼有助於改善代碼質量


  在典型的封閉開發項目中,開發者的個人責任和職業名譽是相對有限的,更重要的是,因為源碼是封閉的,錯誤或失誤可能會被開發者悄悄掩蓋過去;相反,開源軟件的開發者寫的每一行代碼都體現著自己的聲望和名譽。混亂糟糕的代碼會受到同行們的批評甚至譏笑。發布源碼並讓同行審查,這在封閉源碼開發中是不可能的。


三、開源有助於促進安全代碼開發技術


  開放源碼的編程者經常會就開發中遇到的問題交換想法和解決辦法,他們樂於創新並實踐有關代碼安全的新理論,如果某個技術被發現有缺點,就會出現新的技術替代它,隨著舊的安全性較差的代碼逐漸被修正,新的代碼的安全性逐漸得到改善;而在封閉開發中,軟件的安全性可能會讓步於商業利益。開發者們可能因為任務時間緊或是編程習慣等因素,而不重視采納或創造新的安全代碼開發技術。


開放源碼並非百分百安全


  以上這些並不說明開放源碼就可以解決安全問題了,開放源碼模型也有不足之處。


打補丁 ≠ 安全


  有人認為,只要我們開放源代碼,並對軟件不停地審查代碼和修改漏洞,最終這個軟件會變成絕對安全的。顯然,這種看法有失偏頗,因為它把軟件看成是一個靜止不變的事物。實際上,軟件是不斷進化的,是動態發展的。通過調查Java的安全漏洞情況,我們可以看出,發現的安全漏洞會被修正,但是隨著功能的增加,又會引進新的安全漏洞,顯然只依賴於對軟件打補丁,是達不到安全目的的。


多眼球效應 ≠ 安全


  從安全角度來看,開放源碼軟件的一個主要好處是"多眼球效應",即眾多的開發者可以審查代碼,從而較快地發現和修改其中的"臭蟲"。但是,發布源代碼並不意味著就可以去除所有的"臭蟲",而且,即使經過廣泛審查的開源軟件也可能存在重要的未被發現的"臭蟲"。例如,被發現存在緩沖區溢出問題 的Wu-ftp(一個文件傳輸工具),它在公布之前,實際上已經由程序高手審查了它的代碼。另外,單純依賴不相干的外部人士檢查安全相關的代碼會帶來很多問題。例如,在某些情況下,第一個發現錯誤的人可能不作聲張,而把這個錯誤用於不良甚至是破壞性的目的。


開放的安全模型


  安全系統不應當依賴於源碼封閉,而且單純的開放源碼也不是萬能良方,那麼怎樣才能達到安全目的呢?我們建議構建如下的開放安全模型:開放安全模型 = 開放的設計 + 安全代碼技術 + 開放的源碼 + 市場激勵機制


開放設計


  現在的信息發展趨勢是系統體系結構具有高度可擴展能力。如果缺少安全功能設計,與現存的錯誤所帶來的攻擊相比,可能會導致更多的攻擊。例如Web浏覽器支持插件(plug-ins),因為通過開放設計,可以讓同行們對設計進行審查,利用形式化理論,錯誤假設方法,以及閱讀設計文檔,可以發現設計中存在的錯誤,這是開發安全系統和軟件的一個非常重要環節。


安全代碼技術


  現在來看,計算機緊急事故反應小組(CERT)發現的多數錯誤都是由緩沖溢出問題引起的,因為好多軟件是由C語言 + glib C庫編寫的,而它們提供的一些特性和函數都存在有安全漏洞。事實上,使用具有類型糾正檢查特性的編程語言(如C++)即可防止此類錯誤。使用支持例外處理的現代編程語言也可以去除許多因為競爭條件導致的錯誤。


市場激勵機制


  國外曾經有所大學在國際互聯網上作過安全評價試驗,他們開放軟件源碼,但是後來並沒有得到任何軟件安全特性的反饋。這也說明了在開放源碼模型中寫代碼對大多數人來說是很有趣的,但是讀別人的代碼則相反,枯燥乏味。開源模型中缺乏非開源模型中所具有的經濟激勵機制,如何吸引人來審查代碼呢?這就要讓市場激勵機制起作用,一個比較好的辦法是花錢雇人讀代碼。

copyright © 萬盛學電腦網 all rights reserved