近期Linux被爆出,存在可能造成容器跳脫(Container Escapes)的嚴重核心漏洞,許多Linux發布版皆被影響,因此容器應用也受到波及,但Google提到,他們在GKE以及無伺服器服務中,使用了開源的沙盒容器Runtime gVisor,因此相關服務不受CVE-2020-14386影響。

在5.9-rc4之前的Linux核心存在漏洞CVE-2020-14386,讓駭客能夠使用Linux核心的CAP_NET_RAW功能,造成記憶體毀損(Memory Corruption),使得非特權程序取得根權限,而這個漏洞最大的威脅,是影響資料的機密性以及完整性。

由於在Docker中,CAP_NET_RAW功能預設啟用,因此大部分Kubernetes部署,或許原本就存在該核心漏洞,而且即便安全團隊禁用了部分預設功能,但在使用ping和tcpdump等網路工具進行除錯的過程,可能無意間又啟用了CAP_NET_RAW功能。

禁用CAP_NET_RAW功能可以保護系統免受該核心漏洞影響,但Google提到,即便CAP_NET_RAW啟用,在GKE、Cloud Run、Cloud Functions或App Engine標準環境,也不會受到漏洞影響,因為GKE以及無伺服器服務皆使用gVisor,gVisor網路堆疊沒有使用Linux中有問題C程式碼,因此不存在該漏洞。

gVisor是Google以程式語言Go開發的沙盒容器Runtime,Google提到,容器仰賴命名空間以及cgroup作為主要的隔離層,而gVisor則引入了第2隔離層,以Go編寫的核心Sentry來處理系統呼叫,在使用者空間中模擬Linux。這樣的方式大幅減少對主機核心的系統呼叫數量,因此能夠縮減攻擊面,而且除了Sentry提供的隔離之外,gVisor還使用特殊的TCP/IP堆疊、網路堆疊以及其他保護層,提供額外的隔離。

既使GKE沙盒上的Pod不受漏洞影響,但基於最佳實踐,使用者仍應該更新系統,而未使用GKE沙盒的使用者,應該立刻更新控制平面以及節點,並且根據建議從Policy Controller、Gatekeeper或PodSecurityPolicy中移除CAP_NET_RAW功能。

容器的發明,改變了應用程式開發、封裝以及部署的方法,Google表示,容器方式暴露了廣泛的系統表面,對於執行不受信任,或是潛在惡意程式碼存在安全風險,而gVisor能以沙盒執行應用程式,提供像是虛擬機器一樣的隔離性,應用程式設下強健的隔離邊界,把應用程式包在使用者空間中,但是更加輕量,且也能存取核心與系統資源。

gVisor直接以Go實作Linux系統呼叫,因此Google提到,由於Go具有類型和記憶體安全性,因此不少Linux問題,像是緩衝區溢位以及陣列逾越邊界的問題也就消失了,gVisor可以說是較安全的Linux輕量版。不過,雖然gVisor是一個更安全的方案,但是目前仍有兩個主要問題,首先,雖然gVisor與Linux很像,能夠執行大部分應用程式,但終究與Linux不同,仍有許多限制,第2個問題則是,攔截系統呼叫,會影響I/O密集工作負載的效能。

熱門新聞

Advertisement