為什麼開源很重要?

什麼是開源?

開源軟件是指其源代碼已由其版權所有者公開的軟件。在真正的開源許可下,軟件是協作開發的,其他程序員可以根據自己的目的查看、修改或使用代碼。這種“純粹”的開源模型通常被稱為 FOSS(自由開源軟件)。

開源的一個變體是“源可用”,這意味著沒有授予修改或以其他方式使用代碼的權限,但它可供檢查。出於安全目的,這與真正的開源一樣好,因此當我在本文中提到“開源”時,我包括“源可用”的代碼。

什麼是閉源?

大多數軟件是由商業公司編寫和開發的。可以理解的是,這些公司不想讓其他人竊取他們的辛勤工作或商業秘密,因此他們使用加密技術隱藏自己的代碼,以免被窺探,任何未經許可使用或修改代碼的嘗試都會導致訴訟或更糟的結果。

那麼問題出在哪裡呢?

正如我所說,這都是可以理解的,但當涉及到安全性時,這就帶來了一個重大問題。如果沒有人可以看到程序的行為細節,我們怎麼知道它沒有做惡意的事情呢?基本上我們不能,所以我們只需要相信所涉及的公司,這是我們偏執的安全類型不願意做的事情(與充分的理由)。

為什麼開源是最好的解決方案?

如果代碼是開源的,那麼任何有資格的人都可以對其進行獨立檢查和審計,以檢查是否存在後門、漏洞或其他安全問題。開源並不是一個完美的解決方案(見下文),但它是驗證軟件是否只做它應該做的事情的唯一方法。

即使代碼沒有經過審核,事實上它是免費提供的進行審核提供了一個強有力的跡象表明它是可以信任的,因為開發人員不太可能包含惡意代碼,然後將其開放以供任何願意查看的人發現。

不是一個完美的解決方案...

不幸的是,具有審計開源軟件(通常是免費的)技能和時間的個人數量有限,這意味著絕大多數開源程序都沒有經過審計。

由於許多開源程序極其複雜,包含成千上萬行代碼,因此即使經過審計,審計人員也完全有可能漏掉一個問題(特別是在惡意代碼被故意隱藏的情況下),這一事實使這個問題變得更加複雜。

但…

因此,開源並不能保證程序是“乾淨的”,但它仍然是我們擁有(或可以擁有)這一點的最佳保證。另一種選擇是閉源,它不提供任何保證。

始終驗證開源程序

所以開源對於安全來說非常重要。耶!但是您如何確定您剛剛下載的開源程序沒有被以某種方式篡改呢?

這聽起來可能像是偏執的陰謀幻想思維,但在 2016 年 2 月,Linux 開源操作系統最受歡迎的版本之一的網站上,Linux薄荷, 曾是被黑客入侵,並向下載者提供了操作系統的受損版本,

黑客製作了一個修改後的 Linux Mint ISO,其中有後門,並成功侵入我們的網站以指向它。

受感染的 Linux ISO 映像安裝了帶有 Internet Relay Chat (IRC) 後門的完整操作系統海嘯,這使得攻擊者可以通過 IRC 服務器訪問用戶的系統。所以威脅是非常真實的。

在這種情況下,費心檢查文件 MD5 哈希值的下載者可能會發現欺騙行為,但這種哈希檢查並不是可靠的保護,因為如果網站一開始就可能被黑客攻擊,那麼用驗證所包含文件的虛假校驗和替換已發布的校驗和是微不足道的。

很多更好的是開發人員對他們的軟件進行數字簽名,以便用戶可以驗證文件的來源(Mint 開發人員在這方面非常鬆懈,因為他們的軟件沒有進行數字簽名,甚至所使用的 MD5 哈希函數也被認為是破碎的! )

請參閱我的文章數字簽名 – 為什麼以及如何使用它們了解更多信息。不幸的是,驗證數字簽名是一件很痛苦的事情,但如果您關心安全性,那麼驗證數字簽名是必要的。

我還應該注意到,理想情況下,所有軟件都應該經過數字簽名和驗證,但由於開源代碼可以被任何人自由修改,因此比封閉源代碼更容易被篡改。因此,對開源程序進行驗證就顯得尤為重要。

開源:結論

開源並不是一個完美的解決方案,但它提供了軟件可信的最佳(也是唯一!)保證。另一種選擇是閉源,它不提供任何保證(除了對公司的盲目信仰,這是科技公司不值得的信仰)。