侵權(quán)投訴
訂閱
糾錯(cuò)
加入自媒體

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

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

Docker簡(jiǎn)介

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

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


image.png

圖1:虛擬機(jī)與Docker的架構(gòu)對(duì)比圖

(左為虛擬機(jī)架構(gòu)、右為Docker架構(gòu))

Docker逃逸原理

因?yàn)镈ocker所使用的是隔離技術(shù),就導(dǎo)致了容器內(nèi)的進(jìn)程無(wú)法看到外面的進(jìn)程,但外面的進(jìn)程可以看到里面,所以如果一個(gè)容器可以訪問(wèn)到外面的資源,甚至是獲得了宿主主機(jī)的權(quán)限,這就叫做“Docker逃逸”。

目前產(chǎn)生Docker逃逸的原因總共有三種:

一、由內(nèi)核漏洞引起。

二、由Docker軟件設(shè)計(jì)引起。

三、由特權(quán)模式與配置不當(dāng)引起。

接下來(lái)依次對(duì)這三種逃逸方法做簡(jiǎn)單說(shuō)明。

01由于內(nèi)核漏洞引起的逃逸

因?yàn)镈ocker是直接共享的宿主主機(jī)內(nèi)核,所以當(dāng)宿主主機(jī)的內(nèi)核存在安全漏洞時(shí)會(huì)一并影響Docker的安全,導(dǎo)致可能會(huì)造成Docker逃逸。具體流程如下:

①使用內(nèi)核漏洞進(jìn)入內(nèi)核上下文

②獲取當(dāng)前進(jìn)程的task struct

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

④切換當(dāng)前namespace

⑤打開(kāi)root shell,完成逃逸

02由于Doker軟件設(shè)計(jì)引起的逃逸

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

03由于特權(quán)模式+目錄掛載引起的逃逸

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

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

當(dāng)控制使用特權(quán)模式的容器時(shí),Docker管理員可通過(guò)mount命令將外部宿主機(jī)磁盤設(shè)備掛載進(jìn)容器內(nèi)部,獲取對(duì)整個(gè)宿主機(jī)的文件讀寫權(quán)限,此外還可以通過(guò)寫入計(jì)劃任務(wù)等方式在宿主機(jī)執(zhí)行命令。

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

1  2  3  下一頁(yè)>  
聲明: 本文由入駐維科號(hào)的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場(chǎng)。如有侵權(quán)或其他問(wèn)題,請(qǐng)聯(lián)系舉報(bào)。

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無(wú)評(píng)論

暫無(wú)評(píng)論

安防 獵頭職位 更多
文章糾錯(cuò)
x
*文字標(biāo)題:
*糾錯(cuò)內(nèi)容:
聯(lián)系郵箱:
*驗(yàn) 證 碼:

粵公網(wǎng)安備 44030502002758號(hào)