1. 程式人生 > >開源與閉源軟體的安全性比較

開源與閉源軟體的安全性比較

 最近由於學習需要,接觸了一陣子的Linux,作為長期與Windows為伍的大多數中的一位,剛接觸Linux那個悲催的經歷是一定的,不習慣用終端,不習慣用vim,不習慣沒有碟符,不習慣去找軟體......諸多不習慣之後自然得硬著頭皮求助於搜尋引擎, 經歷一段適應期後,所有的都習慣了,反而倒覺得更加方便(我也相信如果花同樣的精力去學習windows,操作windows也會更加方便,不過若windows加入好用的指令會更贊),確實相對於Windows,Linux的學習成本更高,即便你之前從沒接觸過Windows也是如此,這對大多數人來說尤其是接觸過Windows後,就更是個巨大的障礙。然而,相比於開始對系統的不習慣,讓我更加詫異的是網路上對開源和閉源軟體的爭議,本來這不關我什麼事情,但是在接觸Linux平臺後感受到的無比富饒的創造力,才明白為毛這麼多技術宅人喜歡泡在Linux下,才明白Java、python、Ruby...等等會最先出現在開源社群(不要跟我說這些windows下也可以...)確實開源的環境鑄就了Linux下無比繁華的創造力市場,但是對於絕大多數人而言,轉向開源是否是必須的?它們所面臨的安全風險是否會更高?尤其是在國內系統正在謀求借助新的機遇崛起,國外閉源系統遭到反壟斷和資訊保安的稽核時,這種辯別已經不單單是網路上的口水仗了。
網路上眾說紛雲,個體之間要麼相互掐架要麼打群架,他們大多憑藉一兩點說事,所以有說服力的觀點基本沒有,至於媒體那些所謂的機構漏洞資料、測試資料,呵呵,得了吧,我又不是傻瓜。為了探討開源與閉源的潛在風險,我會選擇Linux和Windows兩個平臺分別進行一些對比,選擇這兩個平臺完全是因為它們目前都有不錯的使用者基礎,但所得出的結論則不限於這兩個平臺。首先,說明一下這種比較是中立的,我個人目前這兩個平臺都會使用,可預見的未來也會兩者都用。此次比較是一種整體性的,不侷限於特定領域(比如伺服器端),此次比較基於開源軟體和閉源軟體,不針對自由軟體平臺(事實上一切沒有前置語的free我都沒有興趣),但由於開源軟體與自由軟體有千絲萬屢的聯絡,所以一些指標多少涉及到自由軟體的一些特性,此次比較主要是對使用者使用這兩個平臺後,潛在資訊保安風險的比較,主體並不會涉及到其他方面。
對比指標:

圖片


使用者基數:這個很好理解,一個平臺到底有多大的利益可以挖掘和其具備的使用者規模往往是成正比的, 小眾平臺惡性行為顯然會少很多。
稽核基數:這裡的稽核基數特指那些可以接觸到系統原始碼甚至核心原始碼並且會去挖掘漏洞以維護系統的人數,對於Linux而言,由於開源 ,理論上每個人都可以很大限度的接觸到系統核心原始碼,但是真正會去稽核原始碼和挖掘漏洞的人則是鳳毛麟角,我們假設人群中這樣的一部分人的比率是P,則對於Linux而言就是使用者基數t*P,對於Windows而言,能接觸到這些原始碼的人則少之又少,負責稽核原始碼和漏洞的人基本上數量是一定的,故設為常數Z.
機制缺陷:這裡是指安全機制,需要注意的是安全機制與系統本身原始碼質量沒關係,它是一種安全邏輯,Windows由於更多的考慮易於使用以面向更大的人群以及相容更多的應用程式,在安全機制上相對來說更鬆,雖然windows已經逐步在加強這點,但是整體而言這點確實弱於Linux。
原始碼缺陷
:這點是指系統本身可能直接或者間接的造成漏洞的原始碼比率。這裡假設完美原始碼是1,則相對於完美原始碼的比率的反值則為原始碼缺陷,比如假設Windows達到了完美原始碼的97%,則其原始碼缺陷則為3%,所有的漏洞都是直接或者間接的通過這3%造成的。事實上對於系統而言完美原始碼是不存在的,因為我們畢竟是人。但由於Windows的開發和測試不僅基於統一的標準、規範和流程還要商業責任的鉗制,潛在的具有極低的原始碼缺陷,而Linux由於是開源,雖然有相應組織和社群負責開發系統本身,但總體來說在資金、流程管理機制、潛在的商業風險上均要弱一些。故認為Windows系統本身的原始碼缺陷要低於Linux,但這並不是說Linux系統的原始碼就很糟糕,實際上它也是很高質量的。
應用缺陷
:特指應用的原始碼缺陷,指可以直接或者間接造成漏洞產生的原始碼比率,此處的應用不單單是指第三方基於系統開發的應用,也包括系統本身自帶的應用,比如資源管理系統、UI等。由於在Windows上執行的大多為商業閉源程式,大多都會收集使用者的使用回饋以便於發現錯誤和改進功能,而Linux上也有很多商業軟體,這些自然可以做到windows應用軟體那樣的維護,但還有更多的個人或者小團體軟體,而這些軟體常常沒有長期的使用跟蹤和回饋,所以我認為應用缺陷的比率,Linux平臺要大於Windows平臺。但這並不代表Windows上就沒有缺少維護的軟體,事實上由於使用者規模向來巨大,老的軟體在Windows上也非常多,只不過由於windows上很多軟體都會持續更新,所以可以通過更新避免潛在風險(至於你自己不願更新沒有繼續維護的軟體則另當別論,成本問題不屬於此次討論的範圍)。
應用規模:一個平臺的軟體越多,那麼潛在的風險則會越大,這就像一個水管連線的房間越多,漏水的機率則會越大。這裡的水管是系統,房間則是應用。顯然,Windows平臺的應用數量由於使用者規模的原因,會高於Linux。
漏洞規模:用於衡量整個平臺的漏洞總數,這裡不是指發現的漏洞總數之和,而是真實的漏洞總數之和,絕大多數漏洞都是在應用與系統之間產生的。我們這裡僅考慮單一應用與系統+若干應用之間與系統這兩種形式產生的漏洞。雖然Linux可能具有更高的系統和應用的原始碼缺陷,但由於安全機制更優,所以未必就會比Windows出現更大概率的威脅性漏洞,而且由於應用規模上Windows要大的多,故漏洞本身存在的數量應當大於Linux。但是漏洞規模並不能說明平臺本身的優劣,實際上若Linux的使用者規模和應用規模達到Windows這個程度,其漏洞規模也必將擴大很多。所以單純比較兩個平臺間的漏洞數量是不公平的。
殭屍漏洞:是指那些長期不被維護方發現或者長期未得到修補的漏洞。這點在Linux平臺上尤為明顯,前不久聲名遠播的“心血”和此次的Shellshock均是這種情況。可以說這可能是Linux上最急迫的問題,因為自由是需要付出代價的,並不是每個人都會去稽核和測試程式碼,尤其在沒有利益和法律責任(而且個人往往也很難承擔這一點)的前提下。Linux上有很多未被稽核的應用,這些應用可能被大規模的使用,甚至如Shellshock這樣非常接近底層,因為很少有人去想到這種古董級的但卻非常有用的應用會存在漏洞,更少有人去審查這些古董,事實上還有很多新的應用未經稽核的產生,而且隨著時間推移新的殭屍還會越來越多。雖然說開源軟體允許商業模式,甚至Linux還有RedHat這樣的商業公司,但開源至今的整體環境還沒有形成一個完善的覆蓋面極廣的軟體商業機制,我期望這一種能夠承擔起軟體釋出和安全評估的獨立商業機構能夠在開源環境下遍地成長,以改善這種狀況。相比較而言,Windows平臺這種情況要好於Linux。
發現能力:是指一個使用週期內(可以認為一年)發現漏洞的數量與總漏洞數量的比率,這裡來源之一為普通使用者的行為幫助維護方發現的漏洞,這一比率在兩個平臺可以認為是一致的,另一個來源為專門稽核原始碼和挖掘漏洞的行為帶來的比率,後者來說Linux佔有,因為理論上他們具有更廣泛的具備稽核原始碼和挖掘漏洞的人員基數。
修補能力:指漏洞被發現後,修補漏洞所需的時間,同上,Linux佔有人員優勢。雖然商業化的Linux也需要特定的人員來製作和釋出補丁,但是社群或者個人若有能力有的時候也可以提前釋出非官方的補丁。
入侵能力:指某個平臺發起具有威脅性的惡意入侵行為的人數,這點由於開源的原因,Linux具有更高比率具備入侵能力的人數比率,但是由於Linux使用者整體規模較小,這個比率乘上基數,也無法與Windows平臺相比(當然這點在伺服器端可能相反)。
破壞潛力:是指入侵者所造成的破壞的程度和範圍,這裡並不衡量絕對範圍,只衡量相對範圍,指在相應平臺內的破壞範圍比率。同樣由於是開源的原因,Linux的漏洞往往可造成更深層次更加廣泛的破壞。
追責機制:指由於漏洞造成的非使用方責任的損失,是否可以有一套有效的機制進行追責;顯然Windows平臺下由於商業軟體比率很大,所以這點要優於Linux。
後門數量:指政府、商業公司等惡意植入後門程式,用於監控和收集使用者行為。這點閉源軟體的一大軟肋,如果警察做了賊,確實很難查,但是開源目前來說這點就會好很多。

通過以上比較,其實不難發現:
對於Windows而言,它的漏洞從數量上來說必定更多,但事實上從廣泛的破壞性來看,漏洞造成的破壞潛力相較於Linux來說要小,它的安全機制要弱於Linux則是因為它需要面對歷來龐大的使用者群體和軟體群體必須做出的妥協,這算不上缺陷,因為這是歷史原因和現實地位所造成的,何況實際上Windows還有很多安全廠商為其服務。而且由於作為商業軟體,系統本身和應用本身的原始碼缺陷整體上應當低於開源環境。
Windows的實質性缺點,不在於漏洞數量,因為對於個體使用者自己所需要裝的軟體數量是一定的,不管在Linux下還是Windows下,所以對個體而言並不會造成實質性的漏洞數量差距,頂多就是多花點硬碟空間多裝幾個補丁防患未然。真正的安全威脅來自於漏洞的發現相比Linux下更遲,修復所需要的時間更長。這樣給入侵者的機會更多,損害的時效更長,同時,讓人完全信賴Windows沒有植入後門,可能只有鬼才信。
相比較而言,Linux則具有更快的發現漏洞和修復漏洞的能力,這意味著相比Windows而言在經過若干使用週期後,Linux可以率先達到比較安全的程度。同時Linux的開源也可以讓後門面臨較高的被發現的風險。但是否意味著Linux真的比Windows更加安全?
顯然不是,最起碼現在不是。Linux上存在很多殭屍漏洞,而且還在不斷的產生。Linux的入侵者可以更早的發現漏洞並且可以進行更深入的入侵,相比於Windows而言這簡直有點失控,從某種程度來說,個人認為其造成的安全威脅要遠高於Windows。開源軟體極大的繼承了自由軟體的思想給自己的平臺帶來了迸發式的創造力,但同時必須要面對過度自由所造成的混亂,在一個碎片化的平臺上組織一個有效的監控機構將是一個非常具有挑戰的任務,但Linux若想要進入尋常百姓家,這一步是必須要走的,一個專門負責測試、監控、釋出軟體的商業機構可能是最佳的選擇。

那麼對於想要學習Linux,或者正在糾結是學習Windows平臺的開發還是Linux平臺的開發的童鞋,該如何做出選擇呢?
首先,必須明確不管是Windows或者Linux平臺,真正進入商業化執行的平臺,必定是商業平臺,沒有哪個像樣的公司會願意使用盜版或者使用非商業化的開源軟體,因為微軟會打擊盜版,可能賺的沒陪得多,而沒有商業化的開源軟體則沒有法律責任保障軟體功能的完整、執行的穩定與安全,更不用談維護和升級了。所以天下是沒有免費的午餐的。
其次,必須明確不管是基於封閉的還是開放的平臺做開發,比如.net(不要聽微軟吹多平臺,那純粹是忽悠小孩子)和Rails。人有封閉和開放,技術本質上沒有這些的。做一個優秀的C#程式設計師同做一個優秀的Ruby程式設計師之間的差別不在於哪個平臺,而在於技術侷限上。比如Ruby程式設計師可以在更短的時間內完成同等需求的開發,但C#程式設計師則可以開發出更高效的程式。這是由於語言本身特性和開發框架特性共同決定的,並不是由開放和封閉決定的。Linux上同樣可以有和C#差不多的JAVA,.NET未來也會有如同Ruby甚至優於Ruby的全新開發語言。
最後,平臺對你確實是有影響的,它的影響存在於思維和行為方式上。Linux上你需要更多的學習成本,這是毫無疑問的,沒有人會像微軟一樣考慮到方便你的方方面面,這是代價,但是同樣付出就會有收穫,你會從中瞭解更多知識,當然高手都是差不多的,只不過Linux讓你從一開始就掌握很多。除此之外,你的認知比如對於技術的跟進和選擇都會充滿自己獨特看法和決定,因為開放的環境下你會接觸很多,而如果你跟隨微軟,則下一步要學習什麼基本上不由你定,這其實本質上也沒什麼優劣,因為不管是開源還是閉源,技術的總體發展趨勢是一樣的,所以你跟進技術本質上是同質的,只是以不同形式運用於不同環境而已。
真要說實質性的差異是:Linux下你不用花錢買學習軟體或者使用盜版軟體學習。

寫在最後:
國產的系統,大多都是基於開源的Linux核心開發的,整合統一的應用商店以彌補開源軟體現今的問題是一個很好的思路,同時為了應對使用者使用門檻,一個優秀的UI則是必須的。至於培養一個生態系統,則是國家意志、網際網路機遇、相應的國內聯盟共同所決定的。
文中必定許多不妥和疏漏,能力有限沒有辦法,還請多多指教。

相關推薦

開源軟體安全性比較

 最近由於學習需要,接觸了一陣子的Linux,作為長期與Windows為伍的大多數中的一位,剛接觸Linux那個悲催的經歷是一定的,不習慣用終端,不習慣用vim,不習慣沒有碟符,不習慣去找軟體......諸多不習慣之後自然得硬著頭皮求助於搜尋引擎, 經歷一段適應期後,所

Android的開源

早上看新聞,得知谷歌宣佈Android將由開源變為閉源.Android 3.0只給授權使用者,協議條款包括OEM放棄修改API, 放棄建設軟體商店等. 據悉,國內的樂phone等並沒有被授權.果真如此,這對樂phone絕對是個不小的打擊.類似的htc等智慧手機都要不可避免的

Java開源還是

今天在《Java核心技術·卷I》看到常見誤解 Java is proprietary, and it should therefore be avoided.(英文版P14) 表示很好奇為什麼會產生這種誤解於是去查了一下java的開源歷程。 先羅列一下查到的資料:

SDS“硬幣”的兩面:開源or

一個硬幣有兩面, 正面或反面。 SDS如硬幣一樣, 也有兩面,開源或閉源。    開源的視野與格局  只要一提到開源,相信許多人都會想到OpenStack,它以生態的日益完善、社群的日趨活躍、功能的愈發強大,鼓舞了所有關注、專注在OpenS

亞馬遜人開放軟體慶祝月活動

在本部落格推出之前,“開放源軟體慶祝月活動”Hacktoberfest 已於去年 10 月舉行。Amazon 的多位員工參與其中,藉此機會為工作相關專案、激情專案或兩者兼而有之的專案貢獻一份力量。他們的開放源經驗起點高低不同,有新兵也有老手。得益於 Hacktoberfes

開源的故事

JAVA老祖要收了2個徒弟,一個叫開源,一個叫閉源。 JAVA老祖為了檢查2個人的人品,吩咐2人“把你們的心挖出來給我看看!!!”。 開源毫不保留的挖出自己的心臟,新鮮無比,熱騰騰的還在跳!JAVA老祖把它吃了,又複製了一個給開源裝上。開源活蹦亂跳的走了。 閉源拿出藏在兜裡

Java開源生鮮電商平臺-搜索模塊的設計架構(碼可下載)

failure 快速 模糊搜索 .info 相關數 分離 default 增加 自動 Java開源生鮮電商平臺-搜索模塊的設計與架構(源碼可下載) 說明:搜索模塊針對的是買家用戶,在找菜品找的很費勁下的一種查詢方面。目前也是快速的檢索商品。 對於移動端

Java開源生鮮電商平臺-安全設計架構(碼可下載)

安全機制 設計原則 light 目前 false html true TP 相關 Java開源生鮮電商平臺-安全設計與架構(源碼可下載) 說明:Java開源生鮮電商平臺是一個B2B的生鮮電商平臺,由於是APP的一種模式,所以安全方面一般會思考以下幾個維度:

Java開源生鮮電商平臺-通知模塊設計架構(碼可下載)

bsp 數據庫設計 turn 指定 希望 except 就是 mobile apn Java開源生鮮電商平臺-通知模塊設計與架構(源碼可下載) 說明:對於一個生鮮的B2B平臺而言,通知對於我們實際的運營而言來講分為三種方式: 1. 消息推送:(采用極光推

Java開源生鮮電商平臺-銷售管理設計架構(碼可下載)

svti ont new 更新 short cto lan 加工 dai Java開源生鮮電商平臺-銷售管理設計與架構(源碼可下載) 說明:在Java開源生鮮電商平臺中,銷售人員我們稱為跟餐飲店老板溝通與下載APP的一類地推人員。(所謂地推指的就是一個一個上門拜訪。)

軟體測試 -- 比較一下黑盒測試、白盒測試、單元測試、整合測試、系統測試、驗收測試的區別聯絡

黑盒測試:已知產品的功能設計規格,可以進行測試證明每個實現了的功能是否符合要求。 白盒測試:已知產品的內部工作過程,可以通過測試證明每種內部操作是否符合設計規格要求,所有內部成分是否以經過檢查。 軟體的黑盒測試意味著測試要在軟體的介面處進行。這種方法是把測試物件看做一個黑盒子,測試人員完全不考慮程式內部的邏

FOSDEM:歐洲最大的自由和開放軟體盛會開始全新的2018

FOSDEM (自由及開源軟體開發者歐洲會議) 是自由和開源軟體開發者的年度盛會,它採用志願者和開放源社群成員評分的方式進行管理,參加完全免費。每年,全世界數以千計的開發人員紛紛來到比利時布魯塞爾,只為了加深情誼,分享理念,攜手合作。今年也不例外。FOSDEM 在布魯塞爾自

開源雲、雲,企業到底該選哪一個?

作為全球公認的成功開源專案之一,OpenStack已經在2018年釋出了最新的“Queens”版本,這是第17個版本,引發了業界的熱烈討論。 不僅如此,基於OpenStack構建的公有云平臺、私有云平臺的供應商,也贏得了越來越多的使用者。 歷經7年左右的風風雨雨,Op

禁不了的開源——駁“開源’論”

很遺憾,“中興通訊事件”仍然在持續發酵,但是一件事情總有正反兩面性,從積極的一面看,通過此事件,

例項操作:10個步驟教你將專案轉換為開源

【編者按】Difio是一個基於Django的應用程式,它可以跟蹤你的程式包並在其發生改變時通知你。它提供多種變化分析,因此你可以及時判斷你何時以及如何升級。之前,Difio是一個閉源專案,但是作者決定把它開源,以便能夠內部部署以及吸引更多的社群開發者參與進來。以下是作者    Alexander Todor

Codeblocks使用問題彙總常用商業軟體開源代替品

平常經常用C語言寫工作用的小工具或者做數學運算,基本不涉及GUI、網路程式設計,因此選擇編譯器時輕快好用才行。最早是VC6,XP下安裝簡易快速,但是到win7後存在相容性問題,畢竟是一個很老的軟體了。繼續使用微軟的VS

Android中熱修復框架Robust原理解析+並將框架程式碼從""變成"開源"(上篇)

一、前言Android中熱修復框架比較多,每家公司都有對應的方案和框架,比如阿里的AndFix框架,關於這個框架在之前的文章已經詳細講解了,不瞭解的同學可以點選這裡:AndFix熱修復框架原理分析 。本

Linux開源系統對比Windows系統的優勢解析

當我們聽到linux的時候是不是覺得高大上的感覺呢?在我剛上大學的時候,聽著學長們給我講他們的大學的學習經歷,先學習C語言、微控制器、然後做一些專案,現在正學習linux作業系統,當我聽到linux作業系統的時候,我就呆了一下,只是聽過windows作業系統,還用的不好,

LinuxWindows的安全性比較

  開放原始碼、共享原始碼    Linux和Windows對於程式碼透明度這一哲學問題上是完全不同的。Linux符合GNU通用公用許可證,使用者可以拷貝、複製並分發原始碼。Windows使用的是封閉原始碼,因此微軟的安全方法被稱為"通過隱藏來保證安全"。2001年,微軟為了響應客戶與共享原始碼計劃的要求,提

幾個Git倉庫開源軟體比較

開發十年,就只剩下這套架構體系了! >>>