開源軟件是否真的如我們想象中的那樣安全?
在兩年前開始接觸信息安全的時候,從開源的GNU,到各種網上各種開源工具,我一直認為,開源即相當安全,可是開源是否真的如我們所愿的那么安全么?
開源軟件安全現(xiàn)狀
上上月的心臟出血,給了我們當頭一捧!
在目前的個人和商業(yè)領域,開源軟件得到了更為廣泛的應用,隨之其安全問題也得到了更為廣泛的關注,有關開源與閉源軟件誰更安全的問題也爭論不休。其實安全都是相對的,沒有絕對的安全,閉源如此,開源也如此。
從軟件產業(yè)的誕生到現(xiàn)在,時間并不是很長,與其他在我們眼中被視作“傳統(tǒng)行業(yè)”的產業(yè)比較起來更是顯得年輕,但它卻發(fā)展得非常迅速,對我們的工作和生活的影響也越來越大。
總體而言,現(xiàn)在的軟件可以按照源代碼是否公開分為“開源”(Open Source)和“閉源”(Closed Source)兩大類,而前者對目前整個軟件業(yè)的影響正在以“星火燎原”的態(tài)式發(fā)展。開源軟件正在從我們計算機愛好者手中的摯愛變成企業(yè)應用中不可忽視、 舉足輕重的一個考慮對象。
有關開源軟件的一些問題也成為討論話題中的熱點,“開源軟件安全”這個問題的爭論也由來已久,在開源運動比較成熟的國家對其認識的更加深刻,大家已經用行動證明其“安全可靠”,而在國內,似乎我們的開源運動還沒有真正的到來,還需要“討論、討論”。
在討論“開源軟件安全”這個話題之前,有必要仔細地考慮一下在使用軟件時所關心的一些問題,這些問題是在成本允許的條件下:
- 軟件是否能夠滿足自己的功能需要;
- 軟件的功能特點是否安全;
- 軟件的后期維護和支持是否到位。
雖然上面三點不是全部都應當考慮的問題,但是已經算抽象意義上比較突出的幾個問題??梢钥闯?,在這三點中,第二點就是安全問題,似乎很多企業(yè)沒有意識到這個問題,或者說對這個問題認識不夠深刻。
產生這種現(xiàn)象的原因很多,一方面是安全意識淡薄,很多公司和企業(yè)使用的軟件授權還沒有徹底解決,而且總覺得夠用就行,忽視了軟件安全方面的 問題;另一方面把安全交給所謂的殺毒軟件和防火墻,這并沒有從根本上解決安全問題,要知道所謂的病毒和木馬,之所以存在或者說危害著軟件使用者,本身就是 所使用的軟件自身存在安全漏洞和Bug。
那么如何才能最大程度上保證軟件的安全性呢,或者如何才能盡快地發(fā)現(xiàn)軟件中的問題,并把問題解決掉呢?在軟件開發(fā)中有一些共識:
- 設計要盡可能完善;
- 測試要盡量全面;
- 維護和跟蹤及時持續(xù);
- 問題解決要快速;
- 信息發(fā)布要及時透明。
在這幾個方面,開源軟件做得都非常不錯,下面就分別說一下以上這幾個問題。
開源軟件文檔缺乏
很多人詬病開源軟件缺少文檔,更沒有什么設計資料,特別是國內的一些人士,由此就覺得開源軟件多么不可靠。這個問題看上去似乎成立,但如果 我們深入的了解一下就不會有這種片面的看法,事實上這些問題也許是開源軟件早期存在的一些問題,因為畢竟這時候開源軟件的目的和影響很小,而現(xiàn)在卻在發(fā)生 著根本的改變。一方面是開源軟件開發(fā)模式的日漸成熟,開發(fā)人員也越來越專業(yè)化,另一方面伴隨著整個軟件業(yè)的成熟,開源軟件也在不斷的成熟。
現(xiàn)在成熟的開源軟件基本上都有自己的網站和在線(離線)文檔,也有不斷完善的Wiki系統(tǒng),方便了大家的學習和反饋,可以說是一種構建型應用和推廣的典范,當然現(xiàn)在還是以英文材料為主。
嚴格意義而言,我們的政府應當撥款并成立相關部門解決這個問題,國內不同于國外,社區(qū)的推動模式在國內還存在很多問題,需要尋找不同的解決方案。盡 管一些大項目的漢化工作有了一定的進展,比如說Linux操作系統(tǒng)的幾個不同發(fā)行版,還有就是知名開源軟件的漢化,但是我們會發(fā)現(xiàn)做出貢獻的人未必是這個 領域的專家,所以從專業(yè)性上還未達到專業(yè)的要求。
我們從計算機圖書的出版也可以看到開源運動的影響和進展,從某種意義上而言,這些書籍成為開源軟件的設計說明和開發(fā)參考手冊,而且開源書籍 的出版劃分越來越詳細,甚至有的公司專門以開源書籍做為自己的主要經營業(yè)務。當然,國內在這一方面做的還不夠,所以我們應當學習國外成功的經驗和模式,在 開源運動中爭取雙贏或多贏。
安全從測試開始
測試作為軟件發(fā)布前重要的一步工作,肩負著軟件的可用性和安全性等諸多任務,所以也決定著軟件的質量,這是一個非常關鍵的指標。我們很熟悉閉源軟件的測試過程,正規(guī)的軟件都有正式的測試文檔,可以說對軟件的測試已經非常到位。
測試可分為白盒測試和黑盒測試,這是一個人們比較熟知的分類方法,在軟件公司內部可以進行這些測試,另一個模式就是把測試工作外包給專業(yè)的 測試公司,但是這些工作還是無法保障軟件的安全性。很重要的一點是由于我們自身的局限,我們很難寫出一個毫無遺漏的完整的測試用例,畢竟我們每個人的大腦 是有限的,而且有些問題也很難被考慮全面。
從程序本身而言,至今也沒有一套完整的理論和工具證明程序本身的正確性,這是安全性本質上的硬傷,但是如果不考慮這個因素,那么軟件的安全 性就要通過測試保證。由于閉源軟件存在開發(fā)周期、成本和代碼保密等缺點,使得測試的完整性不能得到很好的保證,也就是說閉源軟件最終得到的軟件是通過他們 自己設計的測試方案的軟件,這樣方案的完備性就存在自身的缺陷和不完備性。
開源軟件對每個人都開放源代碼,每個感興趣的用戶,無論是個人還是企業(yè),都可以下載源代碼,可以說是完全徹底的白盒,當然進行黑盒測試更不是什么問題。這樣就保證了測試的最大化,相比閉源軟件,這樣更容易發(fā)現(xiàn)程序中存在的問題,更容易進行全面的測試。
還有就是現(xiàn)在的一些組織機構委托大學和一些商業(yè)公司做開源軟件的測試,包括安全性測試。美國政府有這樣的專項撥款,澳大利亞政府也有這樣的部門評估,新西蘭政府還安排專人作評估報告。
在南非,開源軟件大踏步的前進,最為大家熟知的就是Ubuntu的發(fā)起人Mark在那里所做出的貢獻,一句“Linux for Human Being”就是很好的注釋。
在歐洲對開源的關注和評估更是如火如荼,用Google Map搜索一下開源軟件公司就會發(fā)現(xiàn)在歐洲這個版圖上有很多的公司,可以說是密度居世界第一,而且有的公司業(yè)務就是做開源軟件安全性評估和測試的,他們提 供專業(yè)的服務,這點也最大程度地保證了開源軟件的安全性。
軟件升級需主動
在軟件的跟蹤維護方面,閉源軟件都是商業(yè)公司的產品,他們有資金和能力成立專門的部門做好這些事情,給客戶很好的保障,而開源軟件卻不能。其實這種觀點是片面的,因為開源軟件與之相比,無論在問題發(fā)現(xiàn)和解決速度上都毫不遜色于閉源軟件。
一個成熟的開源軟件有成千上萬的用戶在使用,而且很大一部分就是商業(yè)用戶和政府組織,他們發(fā)現(xiàn)的問題會及時的發(fā)布出來,而且還會將解決方案和建議一起提交,這對軟件的維護跟蹤、問題解決和信息發(fā)布都是十分有利的。
相對而言,閉源軟件當內部人員發(fā)現(xiàn)問題,但還沒有解決掉問題之時,一般不會發(fā)布公告。當外部用戶發(fā)現(xiàn)問題,由于自己手中沒有源代碼,就算有能力解決,或者計劃想辦法解決都不可以,只能夠等待軟件提供商解決,在補丁發(fā)布之前,除了等待毫無選擇。
軟件的升級一般有兩層意思:一層是功能上的增加和提升;另一層是對原有軟件的安全性,也就是發(fā)現(xiàn)的漏洞和問題的修正。
在這個問題上我們要探討升級的主動性和被動性,對“生產”閉源軟件的商業(yè)軟件提供商而言,對升級的問題不是很主動;而在軟件發(fā)布后的安全問題上,更是以被動為主,都是根據市場反饋和用戶投訴解決問題,不能夠從公司內部積極的查找問題,修正錯誤。
一個例外就是軟件由于發(fā)布時間期限的壓力,一些內部知道的安全問題本身就隨著軟件一起發(fā)布,但是暫時不為人知,商業(yè)公司會繼續(xù)投入人員進行解決,然后以“升級”的名義對其進行修正。
而開源軟件卻是另外一種情況,從開發(fā)團隊核心到外圍的普通用戶,大家都努力將軟件打造的盡可能安全,這種對軟件中問題的一致情緒源于大家的 責任心和對開源軟件精神的認同,當然也有少數(shù)的個人英雄主義人士的存在,但是這一切都是主動的,而不是被動的,這種主動性讓開源軟件的安全性有了可以站立 的基石,使得開源軟件愈發(fā)安全。
開源軟件存在安全問題
在2006年的LinuxWorld大會上,Linux內核維護人考克斯強調,有相當數(shù)量的資金被用來攻擊開放源代碼系統(tǒng)。他警告說,許多 開放源代碼項目遠談不上安全,許多資金都被用來破壞開放源代碼系統(tǒng)的安全。媒體上經常有這樣的字眼:開放源代碼軟件更安全、更可靠,缺陷也更少。這是一種 危險的觀點。
考克斯表示,許多分析都只關注知名度很高的項目。對SourceForge上150個項目的分析顯示,它們在安全方面的表現(xiàn)不如Linux,只有部分項目的“高質量”是名符其實的。
開源安全工具
Nmap是一款開源的網絡探測和安全掃描程序,系統(tǒng)管理者和個人可以使用這個軟件掃描大型的網絡,獲取那臺主機正在運行以及提供什么服務等 信息。Nmap支持很多掃描技術,例如:UDP、TCP connect()、TCP SYN(半開掃描)、ftp代理(bounce攻擊)、反向標志、ICMP、FIN、ACK掃描、圣誕樹(Xmas Tree)、SYN掃描和null掃描等。
在未來也許需要那么一個專門部門來做代碼審計,也許開源才能做到真正的相對開源!而這個部門也許就靠市場來推動了。