作者:王旭
導(dǎo)語:
在前不久的上海外灘大會上,螞蟻資深技術(shù)專家、Kata Containers創(chuàng)始人王旭向參會者分享了開源、開放協(xié)作與軟件安全可信的話題,本文根據(jù)演講內(nèi)容編輯整理而成。
正文:
今天,我想在這里和大家探討開源與安全的話題。在過去,人們一直有一些疑問:開源是否比閉源更安全?開源項目如何保證自己的安全?如何通過開源社區(qū)促進(jìn)業(yè)界改善安全性?
這里,我將以Kata Containers項目以及螞蟻基礎(chǔ)設(shè)施團(tuán)隊的實(shí)踐為例,對這些問題做一些探討,來看看社區(qū)和業(yè)界是怎么做的。
開源項目如何保證安全性?
首先是開源比閉源更安全嗎?
你可能從哪里聽說過:開源軟件相比閉源軟件的一個優(yōu)越性在于,開源軟件更安全。
開源運(yùn)動的一位頗具話題性的早期領(lǐng)軍人物Eric S·Raymond,在他的著作《大教堂與集市》中寫道:
“在一群足夠多的beta測試者與共同開發(fā)者的情況下,幾乎所有問題都可以被快速定位,并且由某個人迅速解決。”
“有些所謂安全系統(tǒng),只有在其不為人所知時才是安全的,當(dāng)心這些虛假的隱秘性。”
這些論點(diǎn)幾乎是無可辯駁的。然而,爭論就在于——開源是否意味著更多專業(yè)的review,更多的人看到代碼甚至是發(fā)現(xiàn)漏洞了,他們是否會第一時間來幫助開源項目改善質(zhì)量而非第一時間利用漏洞進(jìn)行入侵?開源項目是如何第一時間處理漏洞的?
下面讓我們來看一個例子。
這是Kata Contaienrs 項目的 VMT 流程圖,描述了項目漏洞事件響應(yīng)團(tuán)隊接收到安全報告后是如何處理的。
所謂VMT,是 Vulnerability Management Team,這是一個應(yīng)對安全事件的“特權(quán)”工作組,成熟的、社區(qū)化的開源項目都有這樣一個核心團(tuán)隊。當(dāng)安全研究人員發(fā)現(xiàn)在他們的研究中發(fā)現(xiàn)項目存在安全漏洞的時候,會向VMT工作組發(fā)出報告,而VMT收到之后,會在尋求修復(fù)方案的同時,對問題進(jìn)行評估、去權(quán)威機(jī)構(gòu)分配CVE編號,在patch merge之后,還需要確保主要用戶的安全,然后再對外公開修復(fù)信息。
這里的一個關(guān)鍵點(diǎn)是,開源項目VMT團(tuán)隊和安全人員的配合。只有規(guī)范運(yùn)作的開源項目和白帽子們良好互動,才能真的做到第一時間修復(fù)漏洞、保護(hù)用戶,而不是放出0-day漏洞。這中間的響應(yīng)流程,即使對于“開源”軟件,也是不開放的。
所以,這里我們的結(jié)論是——不是你把代碼放在 GitHub 上開源了,安全就隨之而來了,你要有吸引安全人員的活躍社區(qū)和可以響應(yīng)問題的機(jī)制。這里我們知道,有些個人化的開源項目是沒有這樣的響應(yīng)機(jī)制的,這樣的開源項目并沒有讓用戶得到安全,相反,一旦有大量用戶使用,得到的是很多驚險。
VMT機(jī)制保證了開源項目本身的安全,那么,在一個龐大的開源社區(qū),比如云原生社區(qū),它由數(shù)量繁多的開源項目組成生態(tài),關(guān)于社區(qū)的整體安全性,還會有哪些有趣的互動呢。
如何提升開源社區(qū)的安全水位
開源的一個便利之處就是,如果你覺得哪里不夠好,可以自己去彌補(bǔ)。在云原生 landscape 里,搜一下安全相關(guān)的品類,立刻可以得到一大片的開源安全組件或工具:
需要說明的是,這些項目不是預(yù)先設(shè)計的目標(biāo),而是社區(qū)互動產(chǎn)生的結(jié)果。它們反映了一個自組織生態(tài)里的演化規(guī)律,而不是操作守則。在開源協(xié)作里,這樣的項目會自然的涌現(xiàn)出來。
這里,我想以Kata Containers為例,來介紹下如何開發(fā)一個開源項目并融入社區(qū)。
首先我先來簡單介紹一下 Kata Containers——
Kata Containers 首先是一個容器運(yùn)行時引擎,在生態(tài)中的位置和 runc 是一致的。但是,和 runc 不同的是,Kata 用輕量級虛擬化技術(shù)來做隔離,這個強(qiáng)隔離帶來的不僅是安全隔離,也包括性能隔離和故障隔離。
不過我要強(qiáng)調(diào)的一點(diǎn)是,Kata 仍然是一個容器引擎,在系統(tǒng)中是完全對等替換 runc 的,對云原生應(yīng)用來說,它是完全透明的,即使從性能和開銷角度說,我們也已經(jīng)對它進(jìn)行了很多輕量化的改造。
所以,我們說,它同時兼有虛擬機(jī)和容器兩者的優(yōu)點(diǎn),secure as VM, fast as containers。
三年來,Kata Containers最讓我感到驕傲的,是通過開源社區(qū),我們撬動了社區(qū)里的其他大玩家,提升了整個云原生世界的安全水位,利用開放協(xié)作提升了云原生領(lǐng)域的安全性、改善了社區(qū)的信任。
Kata創(chuàng)立之前的虛擬化容器技術(shù)的發(fā)展并不快。2015年上半年,我們就開源了 hyperContainer 和 runV,Intel 也同時開源了 clear containers。不過,當(dāng)時我們的影響還是非常有限的,想加入CNCF都被拒之門外,但我們還是在 Kubernetes 社區(qū)里制造了一些影響。比如在 2016 年的時候,我們和 kubernetes node 團(tuán)隊一起推動了 CRI 接口,來抽象化容器引擎。
2017年9月份,我在一個會議上遇到當(dāng)時 Intel OTC 的時任 GM,也是 Intel 的 SSP VP, Imad Sousou,我們決定一起合作一個開源項目,在基金會的幫助下,我們一起工作了三個月,最終在2017年12月的 KubeCon 大會前一天,發(fā)布了Kata Containers這個項目。
隨后的故事可以用峰回路轉(zhuǎn)來形容,在2018年上半年,也就是緊接著Kata發(fā)布之后的下一次KubeCon,Google發(fā)布了gVisor安全容器項目,再之后半年,在2018年AWS發(fā)布了輕量虛擬化VMM FireCracker,并引用了 Kata Containers項目來做對比。而在這之間的2018年中,Google 推動 containerd 改進(jìn)了 Shim API,來進(jìn)一步讓安全容器可以和runC一起被支持,隨后這個被稱為 shim-v2 的 API 也得到了 CRI-O 的支持,加上 RuntimeClass 和其他一些改進(jìn),可以說,2018年是安全容器的爆發(fā)年。
今天,Kata 擁有了不小的用戶社區(qū),得到了 RedHat,SuSE 和 Ubuntu 三大主流 distro 的支持,也在很多不同行業(yè)進(jìn)入了生產(chǎn)之中,不僅我們螞蟻、阿里用上了,百度的 Kata 案例也在去年的 OpenInfra Summit 上得到了超級用戶大獎,在今年10月19日的OpenInfra Summit大會上,我在Keynote里會正式宣布Kata Containers 1.x在12個穩(wěn)定發(fā)布之后,正式發(fā)布2.0版本。不僅 Kata,Google GKE 的用戶還可以用上 gVisor,它幫助用戶躲過了前不久的 CVE-2020-14386 漏洞。
可以說,開源的力量就在于此——代碼只是它對世界的影響力的冰山一角,在水面之下的哪些開放協(xié)作和互動,讓社區(qū)的用戶受益,得到了更多的好項目,讓社區(qū)向更好的方向發(fā)展。
基金會如何讓開源世界更安全?
要想促進(jìn)整個開源世界的安全,開源社區(qū)的治理組織不能不提。其中,基金會不僅可以接納安全項目,還可以安全為目的建立基金會,將天南海北的開發(fā)者聚集到一起,攻克共同的安全課題,也是開源安全的重要一環(huán)。
讓我們以Linux旗下的機(jī)密計算聯(lián)盟CCC為例來說明,螞蟻通過將項目捐獻(xiàn)給CCC、參與這樣的組織從而對開源社區(qū)的安全作出貢獻(xiàn)。
在數(shù)據(jù)安全和隱私保護(hù)越來越受到重視的今天,機(jī)密計算(Confidential Computing)是一個具備廣泛應(yīng)用前景的前沿技術(shù)領(lǐng)域,可信執(zhí)行環(huán)境(Trusted Execution Environment)作為其重要分支,受到業(yè)界科技巨頭的重視。
機(jī)密計算聯(lián)盟就是在這樣的背景下誕生的,CNCF中國區(qū)總監(jiān)Keith Chan告訴我們:CCC的任務(wù)和目標(biāo)之一是在公有云上實(shí)現(xiàn)機(jī)密計算,這樣我們可以做到以前無法做到的事情,其中比較典型的就是在云上運(yùn)行敏感數(shù)據(jù)的計算,機(jī)密計算將作為安全體系的核心手段來保護(hù)這些敏感數(shù)據(jù)。
要實(shí)現(xiàn)這一目標(biāo)并不容易,因為機(jī)密計算仍然處于早期,業(yè)界鮮有應(yīng)用,幾家企業(yè)各自推進(jìn)自己的研發(fā)應(yīng)用,但難以對業(yè)界形成示范效應(yīng)。因此需要基金會這樣的組織來推進(jìn)這一過程。
CCC希望通過開源開發(fā)的原則聚集全世界的人一起來共建機(jī)密計算的技術(shù)和平臺,具體的做法包括:
l 定義機(jī)密計算,并通過開源的方法讓全世界的人可以參與,構(gòu)建生態(tài)圈,加快提高市場的接受度和采用率;
l 通過開源的方法簡化企業(yè)對機(jī)密計算應(yīng)用的開發(fā)和管理;
l 定義一些基礎(chǔ)的服務(wù)和框架,并讓開發(fā)者能夠放心的采用這些技術(shù)。
作為CCC關(guān)鍵成員的螞蟻集團(tuán)也將捐贈Occlum LibOS,這是來自中國的第一個機(jī)密計算開源項目,也是目前易用性最好的機(jī)密計算LibOS。
通過將其捐贈給基金會,Occlum將成為社區(qū)主導(dǎo)的開源項目,將吸引更多業(yè)界專家共建,并將和社區(qū)其它開源項目合作,如與HyperLedger的avalon項目的合作,在更廣泛的應(yīng)用場景中落地。
另外,不僅僅是Occlum,螞蟻集團(tuán)還正式開源了KubeTEE,解決機(jī)密計算在集群中的問題,還有正在研發(fā)中的HyperEnclave,解決TEE部署環(huán)境問題。這些機(jī)密計算的組件,也是螞蟻對提升整個社區(qū)和業(yè)界的安全性所做的努力。
正是有開發(fā)者、組織、業(yè)界機(jī)構(gòu)的共同努力,才讓開源項目和社區(qū)更加安全,而更安全的開源社區(qū),也將讓整個世界變得更加安全。