開放原始碼有利於系統安全

souphp3l發表於2016-06-24

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

  近年來,隨著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++)即可防止此類錯誤。使用支援例外處理的現代程式語言也可以去除許多因為競爭條件導致的錯誤。


市場激勵機制


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

相關文章