開放源碼是近來人們的一個(gè)熱點(diǎn)話題。這會(huì)對信息安全帶來什么影響?開放源碼和封閉源碼相比,哪個(gè)更安全?本文作者明確提出:開放源碼會(huì)改善信息安全。
近年來,隨著Linux和Apache等開放源碼軟件受到越來越多的人的關(guān)注和喜愛,開放源碼運(yùn)動(dòng)在世界范圍內(nèi)引起了一場風(fēng)暴。但是,我們也經(jīng)常可以看到有人對開放源碼軟件的安全性表示懷疑:"所有的源代碼都被黑客們看到了,還有什么安全可言?""開放源代碼意味著黑客們可以找出代碼中存在的所有缺陷。"有人甚至列出等式:"開放源碼 = 打開信息系統(tǒng)之門 = 不安全"。
開放源碼到底安不安全
那些認(rèn)為開放源碼不安全的人,一般是出于如下的考慮。
一、黑客可以找到其中的安全漏洞
這種觀點(diǎn)成立的前提是:黑客們不會(huì)找出封閉源碼軟件中的安全漏洞。但是我們只需要到網(wǎng)上去查找一下與封閉源碼軟件相關(guān)的安全警告和安全建議,就會(huì)知道這明顯不是事實(shí)。例如,1999年12月,Todd Sabin在Bugtraq郵件列表上宣布,他發(fā)現(xiàn)了一個(gè)Windows NT的SYSKEY缺陷,而這個(gè)缺陷就是在沒有源碼的情況下(眾所周知,微軟不提供源代碼),利用反匯編器發(fā)現(xiàn)的。實(shí)際上,大多數(shù)黑客們在破解程序時(shí)并不一定需要有源代碼。
二、開放的就是不安全的
因?yàn)閷Υ蠖鄶?shù)人來說,安全指的就是隱藏的、秘密的、不開放的。在加密學(xué)中有一句諺語:一個(gè)加密算法的安全不應(yīng)當(dāng)依賴于它是秘密的。歷史證明,秘密的加密算法終究會(huì)被破解。現(xiàn)在的加密算法(如AES)大都是公開的,而其安全強(qiáng)度依賴于所用密鑰的長度。這句話同樣可以應(yīng)用于一般的安全軟件。算法可以被人采用反向工程攻破,協(xié)議可以通過分析技術(shù)去解析。隱藏的和秘密的東西最終會(huì)被發(fā)現(xiàn)并公布于眾。因此,靠封閉和隱秘達(dá)到安全的目的,在很大程度上可以說是不可能的。
三、開放代碼沒人注意
有個(gè)例子,在PGP 2.6發(fā)布以后,有人就在Bugtraq郵件列表上宣布,在檢查代碼時(shí)發(fā)現(xiàn),其中一個(gè)隨機(jī)數(shù)生成器中有一個(gè)"臭蟲"。這個(gè)錯(cuò)誤很細(xì)小,在進(jìn)行異或操作的代碼中,卻使用了賦值運(yùn)算符號(=)。這表明,"即便代碼開放了,也沒有人會(huì)真正去檢查"的想法是站不住腳的,在開放源碼模型中,這樣細(xì)小的錯(cuò)誤都能被發(fā)現(xiàn),所以說,嚴(yán)重錯(cuò)誤或后門不被發(fā)現(xiàn)的可能性極小。
四、開放源碼中可放置后門
這在理論上是成立的,但是如何在其中放置后門或陷阱?因?yàn)殚_放源碼軟件使用代碼控制系統(tǒng)來管理代碼樹,而且有許多人在檢查和分析代碼,更重要的是,代碼本身意味著作者的個(gè)人名譽(yù)。誰愿意冒險(xiǎn)在開放的代碼中放置后門而喪失個(gè)人名譽(yù)和聲望呢? 對比而言,封閉源碼的軟件中更容易放置后門或者陷阱,在Windows操作系統(tǒng)中發(fā)現(xiàn)的NSA密鑰即是有力的證據(jù)。
開放源碼可以帶來安全
封閉源碼軟件并不比開放源的軟件的安全性好,相反,開放源碼軟件更有能力和潛力提供更好的安全,有以下例子證明:
● openBSD,目前世界上最安全的操作系統(tǒng)之一,是開放源碼的項(xiàng)目。它是BSD Uinx的一個(gè)分支,安全是它的主要設(shè)計(jì)目標(biāo),它是在NetBSD的基礎(chǔ)上,花了幾十個(gè)人年的時(shí)間審查代碼形成的。更為重要的是,它在缺省安裝方式下,三年中從未出現(xiàn)過一個(gè)遠(yuǎn)程漏洞。
● Linux,這個(gè)信息時(shí)代的軟件驕子,在2000年就已經(jīng)占領(lǐng)了25%的服務(wù)器市場。已經(jīng)廣泛應(yīng)用在像Yahoo這樣的性能要求較高的站點(diǎn)上,并且已經(jīng)得到了IBM、HP等大廠商的明確支持。
事實(shí)表明,開源軟件比之封閉軟件更具有穩(wěn)定性和安全性。而且,開放源代碼還會(huì)帶來如下好處:
一、開放代碼有助于快速修改錯(cuò)誤
由于開放代碼軟件會(huì)得到世界上成千上萬的開發(fā)者的審查,所以發(fā)現(xiàn)并修正它們的錯(cuò)誤的時(shí)間很快。國外有人對Linux、Windows NT、Solaris三個(gè)操作系統(tǒng)做過統(tǒng)計(jì),從發(fā)現(xiàn)其中的錯(cuò)誤直到錯(cuò)誤得到修正,不同的軟件開發(fā)商所花的平均時(shí)間如下:
軟件開發(fā)商 red hat microsoft sun 軟件名稱 linux windows NT solaris 改錯(cuò)平均時(shí)間 11天 16天 89天
二、開放代碼有助于改善代碼質(zhì)量
在典型的封閉開發(fā)項(xiàng)目中,開發(fā)者的個(gè)人責(zé)任和職業(yè)名譽(yù)是相對有限的,更重要的是,因?yàn)樵创a是封閉的,錯(cuò)誤或失誤可能會(huì)被開發(fā)者悄悄掩蓋過去;相反,開源軟件的開發(fā)者寫的每一行代碼都體現(xiàn)著自己的聲望和名譽(yù)。混亂糟糕的代碼會(huì)受到同行們的批評甚至譏笑。發(fā)布源碼并讓同行審查,這在封閉源碼開發(fā)中是不可能的。
三、開源有助于促進(jìn)安全代碼開發(fā)技術(shù)
開放源碼的編程者經(jīng)常會(huì)就開發(fā)中遇到的問題交換想法和解決辦法,他們樂于創(chuàng)新并實(shí)踐有關(guān)代碼安全的新理論,如果某個(gè)技術(shù)被發(fā)現(xiàn)有缺點(diǎn),就會(huì)出現(xiàn)新的技術(shù)替代它,隨著舊的安全性較差的代碼逐漸被修正,新的代碼的安全性逐漸得到改善;而在封閉開發(fā)中,軟件的安全性可能會(huì)讓步于商業(yè)利益。開發(fā)者們可能因?yàn)槿蝿?wù)時(shí)間緊或是編程習(xí)慣等因素,而不重視采納或創(chuàng)造新的安全代碼開發(fā)技術(shù)。
開放源碼并非百分百安全
以上這些并不說明開放源碼就可以解決安全問題了,開放源碼模型也有不足之處。
打補(bǔ)丁 ≠ 安全
有人認(rèn)為,只要我們開放源代碼,并對軟件不停地審查代碼和修改漏洞,最終這個(gè)軟件會(huì)變成絕對安全的。顯然,這種看法有失偏頗,因?yàn)樗衍浖闯墒且粋€(gè)靜止不變的事物。實(shí)際上,軟件是不斷進(jìn)化的,是動(dòng)態(tài)發(fā)展的。通過調(diào)查Java的安全漏洞情況,我們可以看出,發(fā)現(xiàn)的安全漏洞會(huì)被修正,但是隨著功能的增加,又會(huì)引進(jìn)新的安全漏洞,顯然只依賴于對軟件打補(bǔ)丁,是達(dá)不到安全目的的。
多眼球效應(yīng) ≠ 安全
從安全角度來看,開放源碼軟件的一個(gè)主要好處是"多眼球效應(yīng)",即眾多的開發(fā)者可以審查代碼,從而較快地發(fā)現(xiàn)和修改其中的"臭蟲"。但是,發(fā)布源代碼并不意味著就可以去除所有的"臭蟲",而且,即使經(jīng)過廣泛審查的開源軟件也可能存在重要的未被發(fā)現(xiàn)的"臭蟲"。例如,被發(fā)現(xiàn)存在緩沖區(qū)溢出問題 的Wu-ftp(一個(gè)文件傳輸工具),它在公布之前,實(shí)際上已經(jīng)由程序高手審查了它的代碼。另外,單純依賴不相干的外部人士檢查安全相關(guān)的代碼會(huì)帶來很多問題。例如,在某些情況下,第一個(gè)發(fā)現(xiàn)錯(cuò)誤的人可能不作聲張,而把這個(gè)錯(cuò)誤用于不良甚至是破壞性的目的。
開放的安全模型
安全系統(tǒng)不應(yīng)當(dāng)依賴于源碼封閉,而且單純的開放源碼也不是萬能良方,那么怎樣才能達(dá)到安全目的呢?我們建議構(gòu)建如下的開放安全模型:開放安全模型 = 開放的設(shè)計(jì) + 安全代碼技術(shù) + 開放的源碼 + 市場激勵(lì)機(jī)制
開放設(shè)計(jì)
現(xiàn)在的信息發(fā)展趨勢是系統(tǒng)體系結(jié)構(gòu)具有高度可擴(kuò)展能力。如果缺少安全功能設(shè)計(jì),與現(xiàn)存的錯(cuò)誤所帶來的攻擊相比,可能會(huì)導(dǎo)致更多的攻擊。例如Web瀏覽器支持插件(plug-ins),因?yàn)橥ㄟ^開放設(shè)計(jì),可以讓同行們對設(shè)計(jì)進(jìn)行審查,利用形式化理論,錯(cuò)誤假設(shè)方法,以及閱讀設(shè)計(jì)文檔,可以發(fā)現(xiàn)設(shè)計(jì)中存在的錯(cuò)誤,這是開發(fā)安全系統(tǒng)和軟件的一個(gè)非常重要環(huán)節(jié)。
安全代碼技術(shù)
現(xiàn)在來看,計(jì)算機(jī)緊急事故反應(yīng)小組(CERT)發(fā)現(xiàn)的多數(shù)錯(cuò)誤都是由緩沖溢出問題引起的,因?yàn)楹枚嘬浖怯蒀語言 + glib C庫編寫的,而它們提供的一些特性和函數(shù)都存在有安全漏洞。事實(shí)上,使用具有類型糾正檢查特性的編程語言(如C++)即可防止此類錯(cuò)誤。使用支持例外處理的現(xiàn)代編程語言也可以去除許多因?yàn)楦偁帡l件導(dǎo)致的錯(cuò)誤。
市場激勵(lì)機(jī)制
國外曾經(jīng)有所大學(xué)在國際互聯(lián)網(wǎng)上作過安全評價(jià)試驗(yàn),他們開放軟件源碼,但是后來并沒有得到任何軟件安全特性的反饋。這也說明了在開放源碼模型中寫代碼對大多數(shù)人來說是很有趣的,但是讀別人的代碼則相反,枯燥乏味。開源模型中缺乏非開源模型中所具有的經(jīng)濟(jì)激勵(lì)機(jī)制,如何吸引人來審查代碼呢?這就要讓市場激勵(lì)機(jī)制起作用,一個(gè)比較好的辦法是花錢雇人讀代碼。
新聞熱點(diǎn)
疑難解答