侵權投訴
訂閱
糾錯
加入自媒體

美創(chuàng)安全實驗室 | Docker逃逸原理

Docker是時下使用范圍最廣的開源容器技術之一,具有高效易用等優(yōu)點。由于設計的原因,Docker天生就帶有強大的安全性,甚至比虛擬機都要更安全,但你可曾想過“堅不可摧”的Docker也會被人攻破,Docker逃逸所造成的影響之大幾乎席卷了全球的Docker容器。本期美創(chuàng)安全實驗室將會帶大家研究造成Docker逃逸的根本原理以及相應的防御方法。

Docker簡介

Docker是一種容器,容器的官方定義是:將軟件打包成標準化單元、以用于開發(fā)、交付和部署。容器的特點在于格式統(tǒng)一,運行速度快,所需資源小,并且可以層層重疊。

與虛擬機的架構進行一下對比就可以看出,Docker整體的架構更加輕巧,靈活。而且由于Docker是直接利用宿主機的系統(tǒng)內核,所以可以做到幾秒鐘之內創(chuàng)建大量的容器,他們的啟動速度是在數(shù)量級上的差距。


image.png

圖1:虛擬機與Docker的架構對比圖

(左為虛擬機架構、右為Docker架構)

Docker逃逸原理

因為Docker所使用的是隔離技術,就導致了容器內的進程無法看到外面的進程,但外面的進程可以看到里面,所以如果一個容器可以訪問到外面的資源,甚至是獲得了宿主主機的權限,這就叫做“Docker逃逸”。

目前產生Docker逃逸的原因總共有三種:

一、由內核漏洞引起。

二、由Docker軟件設計引起。

三、由特權模式與配置不當引起。

接下來依次對這三種逃逸方法做簡單說明。

01由于內核漏洞引起的逃逸

因為Docker是直接共享的宿主主機內核,所以當宿主主機的內核存在安全漏洞時會一并影響Docker的安全,導致可能會造成Docker逃逸。具體流程如下:

①使用內核漏洞進入內核上下文

②獲取當前進程的task struct

③回溯task list 獲取pid = 1的task struct,復制其相關數(shù)據(jù)

④切換當前namespace

⑤打開root shell,完成逃逸

02由于Doker軟件設計引起的逃逸

比較典型的例子是Docker的標準化容器執(zhí)行引擎----runc。Runc曾在2019年2月被爆出來過一個Docker逃逸漏洞CVE-2019-5736。其漏洞原理是,Docker、Containerd或其他基于runc的容易在運行時存在安全漏洞,攻擊者可以通過特定的容器鏡像或者exec操作獲取到宿主機runc執(zhí)行文件時的文件句柄并修改掉runc的二進制文件,從而獲取到宿主機的root執(zhí)行權限,造成Docker逃逸。

03由于特權模式+目錄掛載引起的逃逸

這一種逃逸方法較其他兩種來說用的更多。特權模式在6.0版本的時候被引入Docker,其核心作用是允許容器內的root擁有外部物理機的root權限,而此前在容器內的root用戶只有外部物理機普通用戶的權限。

使用特權模式啟動容器后(docker run --privileged),Docker容器被允許可以訪問主機上的所有設備、可以獲取大量設備文件的訪問權限、并可以執(zhí)行mount命令進行掛載。

當控制使用特權模式的容器時,Docker管理員可通過mount命令將外部宿主機磁盤設備掛載進容器內部,獲取對整個宿主機的文件讀寫權限,此外還可以通過寫入計劃任務等方式在宿主機執(zhí)行命令。

除了使用特權模式啟動Docker會引起Docker逃逸外,使用功能機制也會造成Docker逃逸。Linux內核自版本2.2引入了功能機制(Capabilities),打破了UNIX/LINUX操作系統(tǒng)中超級用戶與普通用戶的概念,允許普通用戶執(zhí)行超級用戶權限方能運行的命令。例如當容器以--cap-add=SYSADMIN啟動,Container進程就被允許執(zhí)行mount、umount等一系列系統(tǒng)管理命令,如果攻擊者此時再將外部設備目錄掛載在容器中就會發(fā)生Docker逃逸。

1  2  3  下一頁>  
聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯(lián)系舉報。

發(fā)表評論

0條評論,0人參與

請輸入評論內容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

暫無評論

暫無評論

安防 獵頭職位 更多
文章糾錯
x
*文字標題:
*糾錯內容:
聯(lián)系郵箱:
*驗 證 碼:

粵公網安備 44030502002758號