1. 程式人生 > 實用技巧 >開源專案是如何讓這個世界更安全的?

開源專案是如何讓這個世界更安全的?

在前不久的上海外灘大會上,螞蟻資深技術專家、Kata Containers 創始人王旭向參會者分享了開源、開放協作與軟體安全可信的話題,本文根據演講內容編輯整理而成。

今天,我想在這裡和大家探討開源與安全的話題。在過去,人們一直有一些疑問:開源是否比閉源更安全?開源專案如何保證自己的安全?如何通過開源社群促進業界改善安全性?

這裡,我將以 Kata Containers 專案以及螞蟻基礎設施團隊的實踐為例,對這些問題做一些探討,來看看社群和業界是怎麼做的。


開源專案如何保證安全性?

首先是開源比閉源更安全嗎?

你可能從哪裡聽說過:開源軟體相比閉源軟體的一個優越性在於,開源軟體更安全。

開源運動的一位頗具話題性的早期領軍人物 Eric S·Raymond,在他的著作《大教堂與集市》中寫道:

“在一群足夠多的 beta 測試者與共同開發者的情況下,幾乎所有問題都可以被快速定位,並且由某個人迅速解決。”

“有些所謂安全系統,只有在其不為人所知時才是安全的,當心這些虛假的隱祕性。”

這些論點幾乎是無可辯駁的。然而,爭論就在於——開源是否意味著更多專業的 review,更多的人看到程式碼甚至是發現漏洞了,他們是否會第一時間來幫助開源專案改善質量而非第一時間利用漏洞進行入侵?開源專案是如何第一時間處理漏洞的?

下面讓我們來看一個例子。

這是 Kata Contaienrs 專案的 VMT 流程圖,描述了專案漏洞事件響應團隊接收到安全報告後是如何處理的。

所謂 VMT,是 Vulnerability Management Team,這是一個應對安全事件的“特權”工作組,成熟的、社群化的開源專案都有這樣一個核心團隊。當安全研究人員發現在他們的研究中發現專案存在安全漏洞的時候,會向 VMT 工作組發出報告,而 VMT 收到之後,會在尋求修復方案的同時,對問題進行評估、去權威機構分配 CVE 編號,在 patch merge 之後,還需要確保主要使用者的安全,然後再對外公開修復資訊。

這裡的一個關鍵點是,開源專案 VMT 團隊和安全人員的配合。只有規範運作的開源專案和白帽子們良好互動,才能真的做到第一時間修復漏洞、保護使用者,而不是放出 0-day 漏洞。這中間的響應流程,即使對於“開源”軟體,也是不開放的。

所以,這裡我們的結論是——不是你把程式碼放在 GitHub 上開源了,安全就隨之而來了,你要有吸引安全人員的活躍社群和可以響應問題的機制。這裡我們知道,有些個人化的開源專案是沒有這樣的響應機制的,這樣的開源專案並沒有讓使用者得到安全,相反,一旦有大量使用者使用,得到的是很多驚險。

VMT 機制保證了開源專案本身的安全,那麼,在一個龐大的開源社群,比如雲原生社群,它由數量繁多的開源專案組成生態,關於社群的整體安全性,還會有哪些有趣的互動呢。


如何提升開源社群的安全水位

開源的一個便利之處就是,如果你覺得哪裡不夠好,可以自己去彌補。在雲原生 landscape 裡,搜一下安全相關的品類,立刻可以得到一大片的開源安全元件或工具:

需要說明的是,這些專案不是預先設計的目標,而是社群互動產生的結果。它們反映了一個自組織生態裡的演化規律,而不是操作守則。在開源協作裡,這樣的專案會自然的湧現出來。

這裡,我想以 Kata Containers 為例,來介紹下如何開發一個開源專案並融入社群。

首先我先來簡單介紹一下 Kata Containers——

Kata Containers 首先是一個容器執行時引擎,在生態中的位置和 runc 是一致的。但是,和 runc 不同的是,Kata 用輕量級虛擬化技術來做隔離,這個強隔離帶來的不僅是安全隔離,也包括效能隔離和故障隔離。

不過我要強調的一點是,Kata 仍然是一個容器引擎,在系統中是完全對等替換 runc 的,對雲原生應用來說,它是完全透明的,即使從效能和開銷角度說,我們也已經對它進行了很多輕量化的改造。

所以,我們說,它同時兼有虛擬機器和容器兩者的優點,secure as VM, fast as containers。

三年來,Kata Containers 最讓我感到驕傲的,是通過開源社群,我們撬動了社群裡的其他大玩家,提升了整個雲原生世界的安全水位,利用開放協作提升了雲原生領域的安全性、改善了社群的信任。

Kata 創立之前的虛擬化容器技術的發展並不快。2015年上半年,我們就開源了 hyperContainer 和 runV,Intel 也同時開源了clear containers。不過,當時我們的影響還是非常有限的,想加入 CNCF 都被拒之門外,但我們還是在 Kubernetes 社群裡製造了一些影響。比如在 2016 年的時候,我們和 Kubernetes node 團隊一起推動了 CRI 介面,來抽象化容器引擎。

2017年9月份,我在一個會議上遇到當時 Intel OTC 的時任 GM,也是Intel 的 SSP VP, Imad Sousou,我們決定一起合作一個開源專案,在基金會的幫助下,我們一起工作了三個月,最終在2017年12月的 KubeCon 大會前一天,釋出了 Kata Containers 這個專案。

隨後的故事可以用峰迴路轉來形容,在2018年上半年,也就是緊接著 Kata 釋出之後的下一次 KubeCon,Google 釋出了 gVisor 安全容器專案,再之後半年,在2018年 AWS 釋出了輕量虛擬化 VMMFireCracker,並引用了 Kata Containers 專案來做對比。而在這之間的2018年中,Google 推動 containerd 改進了 Shim API,來進一步讓安全容器可以和 runC 一起被支援,隨後這個被稱為 shim-v2 的 API 也得到了 CRI-O 的支援,加上 RuntimeClass 和其他一些改進,可以說,2018年是安全容器的爆發年。

今天,Kata 擁有了不小的使用者社群,得到了 RedHat,SuSE 和 Ubuntu 三大主流 distro 的支援,也在很多不同行業進入了生產之中,不僅我們螞蟻、阿里用上了,百度的 Kata 案例也在去年的 OpenInfra Summit 上得到了超級使用者大獎,在今年10月19日的 OpenInfraSummit 大會上,我在 Keynote 里正式宣佈 Kata Containers 1.x在12個穩定釋出之後,正式釋出2.0版本。不僅 Kata,Google GKE 的使用者還可以用上 gVisor,它幫助使用者躲過了前不久的 CVE-2020-14386 漏洞。

可以說,開源的力量就在於此——程式碼只是它對世界的影響力的冰山一角,在水面之下的那些開放協作和互動,讓社群的使用者受益,得到了更多的好專案,讓社群向更好的方向發展。

基金會如何讓開源世界更安全?

要想促進整個開源世界的安全,開源社群的治理組織不能不提。其中,基金會不僅可以接納安全專案,還可以安全為目的建立基金會,將天南海北的開發者聚集到一起,攻克共同的安全課題,也是開源安全的重要一環。

讓我們以 Linux 旗下的機密計算聯盟 CCC 為例來說明,螞蟻通過將專案捐獻給 CCC、參與這樣的組織從而對開源社群的安全作出貢獻。

在資料安全和隱私保護越來越受到重視的今天,機密計算(Confidential Computing)是一個具備廣泛應用前景的前沿技術領域,可信執行環境(Trusted Execution Environment)作為其重要分支,受到業界科技巨頭的重視。

機密計算聯盟就是在這樣的背景下誕生的,CNCF 中國區總監 Keith Chan 告訴我們:CCC 的任務和目標之一是在公有云上實現機密計算,這樣我們可以做到以前無法做到的事情,其中比較典型的就是在雲上執行敏感資料的計算,機密計算將作為安全體系的核心手段來保護這些敏感資料。

要實現這一目標並不容易,因為機密計算仍然處於早期,業界鮮有應用,幾家企業各自推進自己的研發應用,但難以對業界形成示範效應。因此需要基金會這樣的組織來推進這一過程。

CCC 希望通過開源開發的原則聚集全世界的人一起來共建機密計算的技術和平臺,具體的做法包括:

  • 定義機密計算,並通過開源的方法讓全世界的人可以參與,構建生態圈,加快提高市場的接受度和採用率;

  • 通過開源的方法簡化企業對機密計算應用的開發和管理;

  • 定義一些基礎的服務和框架,並讓開發者能夠放心地採用這些技術。

作為 CCC 關鍵成員的螞蟻集團也將捐贈 Occlum LibOS,這是來自中國的第一個機密計算開源專案,也是目前易用性最好的機密計算 LibOS。

通過將其捐贈給基金會,Occlum 將成為社群主導的開源專案,將吸引更多業界專家共建,並將和社群其它開源專案合作,如與 HyperLedger 的 avalon 專案的合作,在更廣泛的應用場景中落地。

另外,不僅僅是 Occlum,螞蟻集團還正式開源了 KubeTEE,解決機密計算在叢集中的問題,還有正在研發中的 HyperEnclave,解決TEE部署環境問題。這些機密計算的元件,也是螞蟻對提升整個社群和業界的安全性所做的努力。

正是有開發者、組織、業界機構的共同努力,才讓開源專案和社群更加安全,而更安全的開源社群,也將讓整個世界變得更加安全。

KataContainer 延伸閱讀