開源軟體是否真的如我們想象中的那樣安全?

edithfang發表於2014-08-23



開源軟體安全現狀

上上月的心臟出血,給了我們當頭一捧!

在目前的個人和商業領域,開源軟體得到了更為廣泛的應用,隨之其安全問題也得到了更為廣泛的關注,有關開源與閉源軟體誰更安全的問題也爭論不休。其實安全都是相對的,沒有絕對的安全,閉源如此,開源也如此。

從軟體產業的誕生到現在,時間並不是很長,與其他在我們眼中被視作“傳統行業”的產業比較起來更是顯得年輕,但它卻發展得非常迅速,對我們的工作和生活的影響也越來越大。

總體而言,現在的軟體可以按照原始碼是否公開分為“開源”(Open Source)和“閉源”(Closed Source)兩大類,而前者對目前整個軟體業的影響正在以“星火燎原”的態式發展。開源軟體正在從我們計算機愛好者手中的摯愛變成企業應用中不可忽視、 舉足輕重的一個考慮物件。

有關開源軟體的一些問題也成為討論話題中的熱點,“開源軟體安全”這個問題的爭論也由來已久,在開源運動比較成熟的國家對其認識的更加深刻,大家已經用行動證明其“安全可靠”,而在國內,似乎我們的開源運動還沒有真正的到來,還需要“討論、討論”。

在討論“開源軟體安全”這個話題之前,有必要仔細地考慮一下在使用軟體時所關心的一些問題,這些問題是在成本允許的條件下:
  • 軟體是否能夠滿足自己的功能需要;
  • 軟體的功能特點是否安全;
  • 軟體的後期維護和支援是否到位。
雖然上面三點不是全部都應當考慮的問題,但是已經算抽象意義上比較突出的幾個問題。可以看出,在這三點中,第二點就是安全問題,似乎很多企業沒有意識到這個問題,或者說對這個問題認識不夠深刻。

產生這種現象的原因很多,一方面是安全意識淡薄,很多公司和企業使用的軟體授權還沒有徹底解決,而且總覺得夠用就行,忽視了軟體安全方面的 問題;另一方面把安全交給所謂的防毒軟體和防火牆,這並沒有從根本上解決安全問題,要知道所謂的病毒和木馬,之所以存在或者說危害著軟體使用者,本身就是 所使用的軟體自身存在安全漏洞和Bug。

那麼如何才能最大程度上保證軟體的安全性呢,或者如何才能儘快地發現軟體中的問題,並把問題解決掉呢?在軟體開發中有一些共識:
  • 設計要儘可能完善;
  • 測試要儘量全面;
  • 維護和跟蹤及時持續;
  • 問題解決要快速;
  • 資訊釋出要及時透明。
在這幾個方面,開源軟體做得都非常不錯,下面就分別說一下以上這幾個問題。

開源軟體文件缺乏

很多人詬病開源軟體缺少文件,更沒有什麼設計資料,特別是國內的一些人士,由此就覺得開源軟體多麼不可靠。這個問題看上去似乎成立,但如果 我們深入的瞭解一下就不會有這種片面的看法,事實上這些問題也許是開源軟體早期存在的一些問題,因為畢竟這時候開源軟體的目的和影響很小,而現在卻在發生 著根本的改變。一方面是開源軟體開發模式的日漸成熟,開發人員也越來越專業化,另一方面伴隨著整個軟體業的成熟,開源軟體也在不斷的成熟。

現在成熟的開源軟體基本上都有自己的網站和線上(離線)文件,也有不斷完善的Wiki系統,方便了大家的學習和反饋,可以說是一種構建型應用和推廣的典範,當然現在還是以英文材料為主。

嚴格意義而言,我們的政府應當撥款併成立相關部門解決這個問題,國內不同於國外,社群的推動模式在國內還存在很多問題,需要尋找不同的解決方案。盡 管一些大專案的漢化工作有了一定的進展,比如說Linux作業系統的幾個不同發行版,還有就是知名開源軟體的漢化,但是我們會發現做出貢獻的人未必是這個 領域的專家,所以從專業性上還未達到專業的要求。

我們從計算機圖書的出版也可以看到開源運動的影響和進展,從某種意義上而言,這些書籍成為開源軟體的設計說明和開發參考手冊,而且開源書籍 的出版劃分越來越詳細,甚至有的公司專門以開源書籍做為自己的主要經營業務。當然,國內在這一方面做的還不夠,所以我們應當學習國外成功的經驗和模式,在 開源運動中爭取雙贏或多贏。

安全從測試開始

測試作為軟體釋出前重要的一步工作,肩負著軟體的可用性和安全性等諸多工,所以也決定著軟體的質量,這是一個非常關鍵的指標。我們很熟悉閉源軟體的測試過程,正規的軟體都有正式的測試文件,可以說對軟體的測試已經非常到位。

測試可分為白盒測試和黑盒測試,這是一個人們比較熟知的分類方法,在軟體公司內部可以進行這些測試,另一個模式就是把測試工作外包給專業的 測試公司,但是這些工作還是無法保障軟體的安全性。很重要的一點是由於我們自身的侷限,我們很難寫出一個毫無遺漏的完整的測試用例,畢竟我們每個人的大腦 是有限的,而且有些問題也很難被考慮全面。

從程式本身而言,至今也沒有一套完整的理論和工具證明程式本身的正確性,這是安全性本質上的硬傷,但是如果不考慮這個因素,那麼軟體的安全 性就要通過測試保證。由於閉源軟體存在開發週期、成本和程式碼保密等缺點,使得測試的完整性不能得到很好的保證,也就是說閉源軟體最終得到的軟體是通過他們 自己設計的測試方案的軟體,這樣方案的完備性就存在自身的缺陷和不完備性。

開源軟體對每個人都開放原始碼,每個感興趣的使用者,無論是個人還是企業,都可以下載原始碼,可以說是完全徹底的白盒,當然進行黑盒測試更不是什麼問題。這樣就保證了測試的最大化,相比閉源軟體,這樣更容易發現程式中存在的問題,更容易進行全面的測試。

還有就是現在的一些組織機構委託大學和一些商業公司做開源軟體的測試,包括安全性測試。美國政府有這樣的專項撥款,澳大利亞政府也有這樣的部門評估,紐西蘭政府還安排專人作評估報告。

在南非,開源軟體大踏步的前進,最為大家熟知的就是Ubuntu的發起人Mark在那裡所做出的貢獻,一句“Linux for Human Being”就是很好的註釋。

在歐洲對開源的關注和評估更是如火如荼,用Google Map搜尋一下開源軟體公司就會發現在歐洲這個版圖上有很多的公司,可以說是密度居世界第一,而且有的公司業務就是做開源軟體安全性評估和測試的,他們提 供專業的服務,這點也最大程度地保證了開源軟體的安全性。

軟體升級需主動

在軟體的跟蹤維護方面,閉源軟體都是商業公司的產品,他們有資金和能力成立專門的部門做好這些事情,給客戶很好的保障,而開源軟體卻不能。其實這種觀點是片面的,因為開源軟體與之相比,無論在問題發現和解決速度上都毫不遜色於閉源軟體。

一個成熟的開源軟體有成千上萬的使用者在使用,而且很大一部分就是商業使用者和政府組織,他們發現的問題會及時的釋出出來,而且還會將解決方案和建議一起提交,這對軟體的維護跟蹤、問題解決和資訊釋出都是十分有利的。

相對而言,閉源軟體當內部人員發現問題,但還沒有解決掉問題之時,一般不會發布公告。當外部使用者發現問題,由於自己手中沒有原始碼,就算有能力解決,或者計劃想辦法解決都不可以,只能夠等待軟體提供商解決,在補丁釋出之前,除了等待毫無選擇。

軟體的升級一般有兩層意思:一層是功能上的增加和提升;另一層是對原有軟體的安全性,也就是發現的漏洞和問題的修正。

在這個問題上我們要探討升級的主動性和被動性,對“生產”閉源軟體的商業軟體提供商而言,對升級的問題不是很主動;而在軟體釋出後的安全問題上,更是以被動為主,都是根據市場反饋和使用者投訴解決問題,不能夠從公司內部積極的查詢問題,修正錯誤。

一個例外就是軟體由於釋出時間期限的壓力,一些內部知道的安全問題本身就隨著軟體一起釋出,但是暫時不為人知,商業公司會繼續投入人員進行解決,然後以“升級”的名義對其進行修正。

而開源軟體卻是另外一種情況,從開發團隊核心到外圍的普通使用者,大家都努力將軟體打造的儘可能安全,這種對軟體中問題的一致情緒源於大家的 責任心和對開源軟體精神的認同,當然也有少數的個人英雄主義人士的存在,但是這一切都是主動的,而不是被動的,這種主動性讓開源軟體的安全性有了可以站立 的基石,使得開源軟體愈發安全。

開源軟體存在安全問題

在2006年的LinuxWorld大會上,Linux核心維護人考克斯強調,有相當數量的資金被用來攻擊開放原始碼系統。他警告說,許多 開放原始碼專案遠談不上安全,許多資金都被用來破壞開放原始碼系統的安全。媒體上經常有這樣的字眼:開放原始碼軟體更安全、更可靠,缺陷也更少。這是一種 危險的觀點。

考克斯表示,許多分析都只關注知名度很高的專案。對SourceForge上150個專案的分析顯示,它們在安全方面的表現不如Linux,只有部分專案的“高質量”是名符其實的。

開源安全工具

Nmap是一款開源的網路探測和安全掃描程式,系統管理者和個人可以使用這個軟體掃描大型的網路,獲取那臺主機正在執行以及提供什麼服務等 資訊。Nmap支援很多掃描技術,例如:UDP、TCP connect()、TCP SYN(半開掃描)、ftp代理(bounce攻擊)、反向標誌、ICMP、FIN、ACK掃描、聖誕樹(Xmas Tree)、SYN掃描和null掃描等。

在未來也許需要那麼一個專門部門來做程式碼審計,也許開源才能做到真正的相對開源!而這個部門也許就靠市場來推動了。
相關閱讀
評論(2)

相關文章