隨着雲計算的發展,容器變得越來越流行,同時也產生了實現容器的新方案,其中之一就是無根容器。無根容器是不需要root即可創建得容器,儘管無根容器在安全方面具有優勢,但它們仍在測試開發中。本文介紹了無根容器的內部結構,並分析了無根容器網絡組件中的漏洞。

無根容器

無根容器與常規容器相同,區別在於它們不需要root即可形成。無根容器仍處於早期階段,無根容器出現的原因有很多。

1、添加新的安全層。 如果容器運行時受到攻擊,攻擊者將無法獲得主機的root特權。
2、允許多個非特權用戶在同一臺計算機上運行容器。
3、允許隔離嵌套容器。

Linux內核的一項新開發使此方案成爲可能,允許無特權的用戶創建新的用戶空間。 當用戶創建並輸入新的用戶空間時,他將成爲該空間的root用戶,並獲得生成容器所需的大多數特權。

網絡連接

爲了允許容器聯網,通常創建虛擬以太網設備(VETH)負責聯網。 但只有root纔有權創建此類設備,主要的解決方案是Slirp和LXC-user-nic。

Slirp

Slirp最初被設計爲面向非特權用戶的Internet連接。 隨着時間的流逝,它成爲虛擬機和仿真器(包括著名的QEMU)的網絡堆棧,可對其修改調整以啓用無根容器中網絡連接。它把容器用戶和網絡名稱空間分開並創默認路由設備。 然後,它將設備的文件傳遞給默認網絡名稱空間的父級,使其可以與容器和Internet進行通信。

LXC-User-Nic

另一種方法是運行setuid創建VETH設備。 儘管它可以啓用容器內的聯網功能,但是它會要求容器文件以root權限運行。

存儲管理

容器的複雜元素之一是存儲管理。 默認情況下,容器使用Overlay2(或Overlay)創建文件系統,但是無根容器不能做到這一點,大多數Linux不允許在用戶名稱空間中安裝overlay文件系統。解決方案是使用其他驅動程序,例如VFS存儲驅動程序。雖然有效但效率低。更好的解決方案是創建新的存儲驅動程序,適應無根容器的需求。

兼容狀態

以下容器引擎支持以下組件無根容器:

安全分析

從安全角度來看,無根容器中的漏洞還是配置錯誤都會導致容器中軟件受到破壞,應該始終以有限特權運行軟件,當漏洞產生時,影響將降至最低。LXE-user-nic具有多個漏洞,攻擊者可利用漏洞提權,例如CVE-2017-5985和CVE-2018-6556。Slirp近年來也披露了多個漏洞。

Slirp – CVE-2020-1983

在對該軟件進行模糊測試時,發現了一個可能導致Slirp崩潰的漏洞。該漏洞分配編號爲CVE-2020-1983。

這個問題與Slirp如何管理IP碎片有關。 IP數據包的最大大小爲65,535字節,錯誤是Slirp無法驗證分段IP數據包的大小,當它對大於65,535的數據包進行分段時就會會崩潰。

libslirp中的其他漏洞可在容器上執行代碼,甚至可從容器逃逸到主機以及其他容器。2020年發現了兩個此類漏洞:CVE-2020-8608和CVE-2020-7039,受影響的Slirp版本是4.0.0至4.2.0。

總結

無根容器提供了一種新的容器解決方案,該方法增加了安全層。 它會成爲雲容器中的下一個演變方向。雖然無根容器仍然存在許多侷限性,其功能仍處於試驗開發中,隨着時間和技術的發展,無根容器可以完全發揮作用並代替傳統容器。

參考來源

trendmicro

相關文章