開放源碼有利于系統(tǒng)安全

2016-06-24 08:21:44 來源:互聯(lián)網(wǎng)作者:souphp3l 人氣: 次閱讀 164 條評論

開放源碼是近來人們的一個熱點(diǎn)話題。這會對信息安全帶來什么影響?開放源碼和封閉源碼相比,哪個更安全?本文作者明確提出:開放源碼會改善信息安全。近年來,隨著Linux和Apache等開放源碼軟件受到越來越多的人的關(guān)注和喜...

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

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


開放源碼到底安不安全


那些認(rèn)為開放源碼不安全的人,一般是出于如下的考慮。


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


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


二、開放的就是不安全的


因?yàn)閷Υ蠖鄶?shù)人來說,安全指的就是隱藏的、秘密的、不開放的。在加密學(xué)中有一句諺語:一個加密算法的安全不應(yīng)當(dāng)依賴于它是秘密的。歷史證明,秘密的加密算法終究會被破解。現(xiàn)在的加密算法(如AES)大都是公開的,而其安全強(qiáng)度依賴于所用密鑰的長度。這句話同樣可以應(yīng)用于一般的安全軟件。算法可以被人采用反向工程攻破,協(xié)議可以通過分析技術(shù)去解析。隱藏的和秘密的東西最終會被發(fā)現(xiàn)并公布于眾。因此,靠封閉和隱秘達(dá)到安全的目的,在很大程度上可以說是不可能的。


三、開放代碼沒人注意


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


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


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


開放源碼可以帶來安全


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


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


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


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


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


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

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


二、開放代碼有助于改善代碼質(zhì)量


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


三、開源有助于促進(jìn)安全代碼開發(fā)技術(shù)


開放源碼的編程者經(jīng)常會就開發(fā)中遇到的問題交換想法和解決辦法,他們樂于創(chuàng)新并實(shí)踐有關(guān)代碼安全的新理論,如果某個技術(shù)被發(fā)現(xiàn)有缺點(diǎn),就會出現(xiàn)新的技術(shù)替代它,隨著舊的安全性較差的代碼逐漸被修正,新的代碼的安全性逐漸得到改善;而在封閉開發(fā)中,軟件的安全性可能會讓步于商業(yè)利益。開發(fā)者們可能因?yàn)槿蝿?wù)時間緊或是編程習(xí)慣等因素,而不重視采納或創(chuàng)造新的安全代碼開發(fā)技術(shù)。


開放源碼并非百分百安全


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


打補(bǔ)丁 ≠ 安全


有人認(rèn)為,只要我們開放源代碼,并對軟件不停地審查代碼和修改漏洞,最終這個軟件會變成絕對安全的。顯然,這種看法有失偏頗,因?yàn)樗衍浖闯墒且粋€靜止不變的事物。實(shí)際上,軟件是不斷進(jìn)化的,是動態(tài)發(fā)展的。通過調(diào)查Java的安全漏洞情況,我們可以看出,發(fā)現(xiàn)的安全漏洞會被修正,但是隨著功能的增加,又會引進(jìn)新的安全漏洞,顯然只依賴于對軟件打補(bǔ)丁,是達(dá)不到安全目的的。


多眼球效應(yīng) ≠ 安全


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


開放的安全模型


安全系統(tǒng)不應(yīng)當(dāng)依賴于源碼封閉,而且單純的開放源碼也不是萬能良方,那么怎樣才能達(dá)到安全目的呢?我們建議構(gòu)建如下的開放安全模型:開放安全模型 = 開放的設(shè)計 + 安全代碼技術(shù) + 開放的源碼 + 市場激勵機(jī)制


開放設(shè)計


現(xiàn)在的信息發(fā)展趨勢是系統(tǒng)體系結(jié)構(gòu)具有高度可擴(kuò)展能力。如果缺少安全功能設(shè)計,與現(xiàn)存的錯誤所帶來的攻擊相比,可能會導(dǎo)致更多的攻擊。例如Web瀏覽器支持插件(plug-ins),因?yàn)橥ㄟ^開放設(shè)計,可以讓同行們對設(shè)計進(jìn)行審查,利用形式化理論,錯誤假設(shè)方法,以及閱讀設(shè)計文檔,可以發(fā)現(xiàn)設(shè)計中存在的錯誤,這是開發(fā)安全系統(tǒng)和軟件的一個非常重要環(huán)節(jié)。


安全代碼技術(shù)


現(xiàn)在來看,計算機(jī)緊急事故反應(yīng)小組(CERT)發(fā)現(xiàn)的多數(shù)錯誤都是由緩沖溢出問題引起的,因?yàn)楹枚嘬浖怯蒀語言 + glib C庫編寫的,而它們提供的一些特性和函數(shù)都存在有安全漏洞。事實(shí)上,使用具有類型糾正檢查特性的編程語言(如C++)即可防止此類錯誤。使用支持例外處理的現(xiàn)代編程語言也可以去除許多因?yàn)楦偁帡l件導(dǎo)致的錯誤。


市場激勵機(jī)制


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

您可能感興趣的文章

相關(guān)文章