大多數人可能都會認為虛擬機器(VM)要比容器更安全。但是IBM Research[1]發現容器的安全水平其實可以等同,甚至超越虛擬機器。
IBM Research的傑出工程師,頂級的Linux核心程式員James Bottomley表示:
“當前關於容器與hypervisor安全性的爭論,最大的一個問題是沒有人開發出一個明確的安全測量方法。爭論都是基於定性的(hypervisor“覺得”從介面廣度上比較,比容器更安全),卻沒人進行過明確的量化比較。”
對應這個問題,Bottomley 設計了個叫水平攻擊概要(HAP)[2]的方法,它透過客觀測量的方式來描述系統的安全。透過這個方法,Bottomley發現,在載入合適的seccomp配置檔案的情況下,Docker容器提供的安全性基本等同於hypervisor。在這個環境內,seccomp配置檔案提供了攔截非法系統呼叫的作用。
Bottomley一開始定義了垂直攻擊概要,這個檔案包含了全部的程式碼,透過遍歷程式碼可以提供完整的服務,包括從資料輸入,更新到輸出等。像所有程式碼一樣,這段程式碼也存在漏洞,而且漏洞的密度差異性隨機,但遍歷的程式碼越多,發現安全漏洞的機率就越大。堆積起來的安全漏洞的集合——應用可能從容器內跳出到物理主機或虛擬化主機層面——就是HAP集。
HAP集是最嚴重等級的安全漏洞。Bottomley稱之為“潛在的業務毀滅事件”。那麼,如何量化一個系統的HAP數呢?Bottomle解釋如下:
定量方法測量HAP=Linux核心程式碼的缺陷密度*程式碼遍歷產生的程式碼數量。
備註:這個遍曆數是唯一,不重覆的;是系統執行達到穩定狀態後,遍歷不會出現任何新的核心路徑時的資料。
為了闡述這個方法,我們假定bug的密度是統一的,這樣HAP差不多就等於系統穩態下,遍歷過的程式碼數。而實際測量一個執行中的系統是另外一回事。值得慶幸的是,內核有一個稱為ftrace的機制,它可以用於在給定的使用者空間內,跟蹤所有的函式呼叫,從而可得到所遍歷的程式碼行數的合理近似數。需要強調一下,這個數不是精確數,主要是因為ftrace無法提供更細的資訊,這個方法只是測量了所獲取函式的程式碼行數,而未考慮內部程式碼流。除此之外,這個方法論特別適合測量容器環境,因為容器內所有的控制流,都是由已知的行程透過系統呼叫資訊發出的。而在hypervisor環境裡,測量除了直接的hypercall介面外,還必須新增後端守護行程的跟蹤(如kvm vhost核心執行緒或Xen的dom0),所以這個方法在hypervisor內的應用效果要稍微差一些。
簡而言之,先測出一個VM或容器裸系統的程式碼有多少行數,然後用這系統去執行一個指定的應用。系統的程式碼行數越多,就越有可能存在HAP級別安全漏洞。
如何去量化一個定義好的HAP集呢?Bottomley分別在如下的環境內做了測試:Docker,谷歌的gVisor,沙盒容器,gVisor-KVM,KVM的沙盒容器,Linux內建的VM hypervisor,Kata容器,開源的輕量級VM以及IBM最新釋出的專應用於強應用隔離的Nabla容器。
測試內容是標準的基線測試,包括redis-bench-set,redis-bench-get[3],python-tornado[4]和node-express[5]。其中最後的2個測試需要執行Web伺服器和簡單外部事務客戶端。
透過測試,Bottomley發現Nabla執行時的HAP要優於帶有Kata技術的hypervisor。這也就意味著,我們可以構建一個容器系統,它的HAP比hypervisor更好,也意味著更安全。
除了Nabla之外,Bottomley還表示:“在精心調優過的seccomp檔案的搭配下,容器提供的安全性也與hypervisor大致相當。”
比較特別的是gVisor,最好的結果與Docker相當,但在某一個用例測試中,結果明顯很差。Bottomley推測:“這主要是因為gVisor嘗試將Linux介面重寫成Go來最佳化容器。但卻沒有人會關心繫統執行時呼叫Go的介面數量。這可以對應上測試的結果表現。”若真是如此,Bottomley認為gVisor的後續版本必須重寫才可能更加安全。
然而,真正的關鍵並不是那種技術本身更安全。對於最嚴重的安全問題,容器和VM所具備的安全等級是相當的。實際上,Bottomley認為:“比hypervisor更安全的容器,這個可能性完全存在。最終,關於哪個是更安全的技術的爭論也將停止。”
他表示,“接下來,需要建立對惡意應用程式的完全暴露模型,要做到這一點,需要使用一些模糊測試。”
Bottomley的這個工作僅僅是一個開始。他證明瞭客觀地度量應用程式的安全性是可能的。正如他所言,“我不認為這是辯論中的結束,透過描述我們所做的事情,希望其他人也能開發出好的量化測量方法。”
-
http://www.research.ibm.com/
-
https://blog.hansenpartnership.com/containers-and-cloud-security/
-
https://redis.io/topics/benchmarks
-
http://www.tornadoweb.org/en/stable/
-
https://expressjs.com/
原文連結:https://www.zdnet.com/article/which-is-more-secure-containers-or-virtual-machines-the-answer-will-surprise-you/
Kubernetes專案實戰訓練將於2018年8月17日在深圳開課,3天時間帶你係統掌握Kubernetes。本次培訓包括:Docker介紹、Docker映象、網路、儲存、容器安全;Kubernetes架構、設計理念、常用物件、網路、儲存、網路隔離、服務發現與負載均衡;Kubernetes核心元件、Pod、外掛、微服務、雲原生、Kubernetes Operator、叢集災備、Helm等,點選下方圖片檢視詳情。
長按二維碼向我轉賬
受蘋果公司新規定影響,微信 iOS 版的贊賞功能被關閉,可透過二維碼轉賬支援公眾號。
微信掃一掃
使用小程式