gVisor具有虛擬機器的安全隔離特色。

圖片來源: 

Google

為解決容器的安全性問題,Google開源了用Go開發的沙盒容器Runtime gVisor,提供類似虛擬機器般的隔離安全性,但是更為輕巧,不過gVisor只實作Linux系統部分API,因此並非所有應用程式都能夠在gVisor執行,不過常用的Node.js、Java 8、MySQL以及Jenkins等應用程式都不是問題。

Google表示,容器的發明徹底改變了開發、封裝以及部署應用程式的方法,但是其曝露廣泛的系統表面,對於執行一些不受信任或是潛在惡意應用程式存在疑慮。而傳統的Linux容器並非沙盒環境,因為應用程式存取系統資源與非容器化的系統相同,都是直接呼叫主機核心,並以特殊權限執行,與硬體交互執行後將結果回傳給應用程式。

雖然在容器環境中,核心對應用程式資源的存取會以Linux cgroups和命名空間加以限制,但也並非所有資源都可以透過這個機制控制,另外,即使有這些限制,核心仍然曝露出許多惡意程式可以攻擊的表面。Google提到,像是Seccomp過濾器這樣的核心功能,雖能對應用程式以及主機核心做出隔離,但是這個動作需要使用者預先建立白名單,事實上,使用者很難預先知道應用程式需要那些系統呼叫,而且在系統呼叫中發現漏洞,這樣的篩選器功能也同樣無用武之地。

而對每個容器提供單獨的虛擬機器則是一個好方法,Google表示,每個容器擁有自己獨立的執行環境,把核心以及虛擬化裝置從主機分離,即使Guest虛擬機器存在漏洞,管理程序仍然會隔離主機以及在主機執行的其他應用程式或是容器。雖然在個別虛擬機器執行容器,能取得更好的隔離性、相容性以及執行效能,但也占用了更多的資源與空間。

因此Google開發了gVisor,更輕量但是能提供類似虛擬機器的隔離效果。gVisor的核心以Go語言撰寫而成,藉以獲得記憶體安全的特性,核心以非特殊權限執行,並支援約200種的系統呼叫,部分系統呼叫與參數目前還未實作,不過使用者不需要擔心,常用的應用程式包括Node.js、Java 8、MySQL、Jenkins、Apache、Redis以及MongoDB等全都有支援。

執行在gVisor沙盒中的應用程式,能像是執行在虛擬機器中一樣,取得獨有的核心以及系統資源,gVisor為應用程式設下強健的隔離邊界,所有應用程式都被包在使用者空間中。

Google表示,可以將gVisor看作是超虛擬化的作業系統,比起虛擬機器來說更靈活,且固定成本更低。gVisor還與Docker和Kubernetes整合,支援符合OCI Runtime的API。在Kubernetes中,由於大多數資源在Pod中被隔離,Pod與gVisor沙箱邊界會自然的相符,而目前Kubernetes社群已正式提供沙盒Pod API,這實驗性功能也已釋出。


Advertisement

更多 iThome相關內容