Linux中國

理解開源安全中的林納斯定律

這篇文章討論 Linux 對開源軟體安全的影響。

開源軟體的一個常被讚揚的優點是它的代碼能夠被任何人審查(安全專家通常稱之為「代碼審計」)。然而,如果你真的去問很多開源軟體用戶他們上一次檢查代碼是什麼時候。你大概只能收穫他們茫然的眼神或者是喃喃的低語。此外,對於一些相當大型的開源應用,有效地審查每一行代碼也是困難的。

根據上述這些稍顯不安的事實,我們不得不思考:如果沒有人察看這些代碼,它是開源還是閉源真的有關係嗎?

你應該相信開源嗎?

計算機愛好者傾向於作出認為開源軟體比其他軟體更加安全的傳統假設。我們通常不會討論這意味者什麼:比較的基礎是什麼(比什麼「更」安全?),或者上述結論是如何得到的。這是一個危險的陳述,因為它表明只要你將一些東西稱之為「開源」,它就自動如魔法般地繼承了更高的安全性。這不是開源,事實上,這正是開源安全非常反對的。

除非你已經親自審計並理解了軟體代碼,否則就不應該假定一個應用程序是安全的。一但你做到了這一點,就可以給予它 終極信任 ultimate trust 終極信任 不是對計算機而言的,而是對你本人而言的,至少在這一應用程序被滲透攻擊之前,你信任它是因為你選擇了相信它是安全的。

使用者本人是唯一可以對軟體代碼給予終極信任的人,因此任何人想要獲得這樣的享受都必須親自審查代碼。相信其他人的話是不管用的。

在你已經親自審計並理解了軟體代碼之前,你對一個應用程序給予的最大信任度是一個範圍,可以是從 根本不信任相當信任 之間。然而我們並沒有一個關於信任程度的標準對照表,這是一個你必須親自做出的個人選擇。如果你已經從非常信任的人那裡聽說了一款應用程序是安全的,那麼你可能會更信任這個軟體,而不是信任那些你沒有得到信任建議的東西。

然而,因為無法審計專有(閉源)軟體代碼,你不可能給予它 終極信任

林納斯定律

現實很骨感,並不是每個人都是程序員,同時也不是每個程序員都有時間檢查數以萬計的代碼行。因此如果你沒有親自審查代碼,你就只能選擇(一定程度上)相信那些 親自 審查了代碼的人。

那麼,有哪些人會審查代碼呢?

林納斯定律聲稱 只要有足夠的眼睛關注,任何漏洞都無處隱藏,然而我們並不知道多少雙眼睛是「足夠」的。請不要低估這一數量,應用程序往往經過了遠超你想像數量的人員審查。原始開發人員以及後續開發人員顯然清楚他們自己寫下的代碼,不過開源軟體往往都是團隊成果,開源時間越長,閱讀了代碼的開發人員越多。新加入的開發人員也必須回顧項目代碼的核心部分,因為他們必須學習基礎代碼以加入新的功能。

同時,為了使開源軟體能夠在 Linux 發行版上可用,負責開源軟體打包分發的開發人員會加入多個項目。有時一個應用程序可能會在不熟悉項目代碼的情況下打包,但是大多數時候,開源軟體打包人員都是熟悉所打包的項目代碼的。這不僅僅是因為他們不想在他們不信任的軟體上簽名,還由於他們可能不得不修改代碼來使得程序能夠正確編譯。漏洞報告人員和漏洞修復人員一般也是熟悉代碼庫的,因為他們需要嘗試解決小到運行異常,大到程序崩潰的問題。當然,一些漏洞報告人員不是通過親自審查項目代碼,而是通過關註明顯未按預期工作的現象,無意中揭示了代碼漏洞。系統管理員通常都是通曉用戶依賴的重要應用軟體的代碼的。最後,還有一些安全研究人員,他們專門深入代碼內部以揭露潛在的漏洞。

信任與透明

很多人先入為主的認為大型軟體的審計是基本不可能的,因為它由數以萬計的代碼行組成。不要被軟體運行所需的代碼量欺騙了。我們不需要真的閱讀數以萬計的代碼行。代碼是高度結構化的,可被利用的代碼漏洞僅僅只是其中的一行,不過它通常影響軟體的全部功能。

當然,也有例外。有時僅僅一個系統調用或者鏈接一個有缺陷的庫文件就可能引入一系列漏洞。幸運的是,多虧安全研究人員以及漏洞資料庫所扮演的積極角色,這些錯誤相對而言是容易發現的。

一些人指著錯誤追蹤系統,比如 通用漏洞披露 Common Vulnerabilities and Exposures (CVE)網站,並推斷開源軟體顯而易見是不安全的。畢竟已經向公眾公開了大量的安全風險,涉及許多開源項目。但是不要被數據欺騙了。只是因為我們看不到現閉源軟體的漏洞,並不意味著閉源軟體中不存在漏洞。事實上,已經有很多針對閉源軟體的漏洞攻擊提出了,閉源軟體也是存在漏洞的。區別在於開發者(以及用戶)可以查看開源軟體的 所有的漏洞 從而降低漏洞的影響。這是擴大對開源軟體信任的系統機制的一部分,卻正是閉源軟體軟體所缺少的。

對於任何代碼而言,可能永遠沒有「足夠的眼睛」來發現漏洞,但是開發社區越壯大、越多樣化,越有機會發現和修復代碼中的缺陷。

信任與人

在開源社區中,參與同一項目的眾多開發者已經發現「不安全」的漏洞,卻保持沉默的的可能性是微乎其微的,因為人們很少同意以這樣的方式合謀。我們已經看到了在應對 COVID-19 的過程中,人類的行為是如何不一致了,在這裡也一樣:

  • 我們都發現了漏洞(病毒)。
  • 我們知曉如何避免它傳播(待在家裡)。
  • 然而病毒還是在持續傳播,因為總是有一個或者多個人偏離了消減疫情的計劃。

開源軟體中的漏洞也一樣,如果有人發現了漏洞總會公之於眾(當然,我們說的是「假如」能夠發現)。

然而就專有軟體而言,有很大可能參與項目的眾多開發者即使注意到不安全的漏洞卻仍然保持沉默,因為專有模式依賴於薪水。如果一個開發者將漏洞泄漏出來,他可能只是傷害了該專有軟體的聲譽,進而降低軟體的銷售額;或者,在更糟糕的情況下,他可能因此而丟了工作。開發人員拿著薪水秘密地研究軟體,往往不會談論其缺陷。如果你曾經是一名開發者,你可能曾經簽署過 NDA (LCTT 譯註: 保密協議 Non-Disclosure Agreement ),也被培訓過商業秘密的重要性,等等不一而足。專有軟體鼓勵在面對嚴重的秘密缺陷時保持沉默,更多時候甚至是強制要求沉默。

信任與軟體

不要信任未經你審計的軟體。

如果你必須相信未經你審計的軟體,那麼選擇相信已經面向那些更有可能將軟體缺陷公之於眾的開發者公開代碼的軟體。

開源軟體並沒有比專有軟體繼承更高的安全性,但是修復它的系統得到了更好的規劃、實施和人員配置。

via: https://opensource.com/article/21/2/open-source-security

作者:Seth Kenlon 選題:lujun9972 譯者:CanYellow 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國