歡迎光臨
每天分享高質量文章

出乎意料的結果:容器與虛擬機到底誰更安全?

大多數人可能都會認為虛擬機(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的這個工作僅僅是一個開始。他證明瞭客觀地度量應用程式的安全性是可能的。正如他所言,“我不認為這是辯論中的結束,通過描述我們所做的事情,希望其他人也能開發出好的量化測量方法。”
相關鏈接:
  1. http://www.research.ibm.com/

  2. https://blog.hansenpartnership.com/containers-and-cloud-security/

  3. https://redis.io/topics/benchmarks

  4. http://www.tornadoweb.org/en/stable/

  5. https://expressjs.com/

原文鏈接:https://www.zdnet.com/article/which-is-more-secure-containers-or-virtual-machines-the-answer-will-surprise-you/


Kubernetes專案實戰訓練營

Kubernetes專案實戰訓練將於2018年8月17日在深圳開課,3天時間帶你系統掌握Kubernetes本次培訓包括:Docker介紹、Docker鏡像、網絡、儲存、容器安全;Kubernetes架構、設計理念、常用物件、網絡、儲存、網絡隔離、服務發現與負載均衡;Kubernetes核心組件、Pod、插件、微服務、雲原生、Kubernetes Operator、集群災備、Helm等,點擊下方圖片查看詳情。

赞(0)

分享創造快樂