美創(chuàng)安全實驗室 | Docker逃逸原理
Docker是時下使用范圍最廣的開源容器技術(shù)之一,具有高效易用等優(yōu)點。由于設計的原因,Docker天生就帶有強大的安全性,甚至比虛擬機都要更安全,但你可曾想過“堅不可摧”的Docker也會被人攻破,Docker逃逸所造成的影響之大幾乎席卷了全球的Docker容器。本期美創(chuàng)安全實驗室將會帶大家研究造成Docker逃逸的根本原理以及相應的防御方法。
Docker簡介
Docker是一種容器,容器的官方定義是:將軟件打包成標準化單元、以用于開發(fā)、交付和部署。容器的特點在于格式統(tǒng)一,運行速度快,所需資源小,并且可以層層重疊。
與虛擬機的架構(gòu)進行一下對比就可以看出,Docker整體的架構(gòu)更加輕巧,靈活。而且由于Docker是直接利用宿主機的系統(tǒng)內(nèi)核,所以可以做到幾秒鐘之內(nèi)創(chuàng)建大量的容器,他們的啟動速度是在數(shù)量級上的差距。
圖1:虛擬機與Docker的架構(gòu)對比圖
(左為虛擬機架構(gòu)、右為Docker架構(gòu))
Docker逃逸原理
因為Docker所使用的是隔離技術(shù),就導致了容器內(nèi)的進程無法看到外面的進程,但外面的進程可以看到里面,所以如果一個容器可以訪問到外面的資源,甚至是獲得了宿主主機的權(quán)限,這就叫做“Docker逃逸”。
目前產(chǎn)生Docker逃逸的原因總共有三種:
一、由內(nèi)核漏洞引起。
二、由Docker軟件設計引起。
三、由特權(quán)模式與配置不當引起。
接下來依次對這三種逃逸方法做簡單說明。
01由于內(nèi)核漏洞引起的逃逸
因為Docker是直接共享的宿主主機內(nèi)核,所以當宿主主機的內(nèi)核存在安全漏洞時會一并影響Docker的安全,導致可能會造成Docker逃逸。具體流程如下:
①使用內(nèi)核漏洞進入內(nèi)核上下文
②獲取當前進程的task struct
③回溯task list 獲取pid = 1的task struct,復制其相關(guān)數(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í)行權(quán)限,造成Docker逃逸。
03由于特權(quán)模式+目錄掛載引起的逃逸
這一種逃逸方法較其他兩種來說用的更多。特權(quán)模式在6.0版本的時候被引入Docker,其核心作用是允許容器內(nèi)的root擁有外部物理機的root權(quán)限,而此前在容器內(nèi)的root用戶只有外部物理機普通用戶的權(quán)限。
使用特權(quán)模式啟動容器后(docker run --privileged),Docker容器被允許可以訪問主機上的所有設備、可以獲取大量設備文件的訪問權(quán)限、并可以執(zhí)行mount命令進行掛載。
當控制使用特權(quán)模式的容器時,Docker管理員可通過mount命令將外部宿主機磁盤設備掛載進容器內(nèi)部,獲取對整個宿主機的文件讀寫權(quán)限,此外還可以通過寫入計劃任務等方式在宿主機執(zhí)行命令。
除了使用特權(quán)模式啟動Docker會引起Docker逃逸外,使用功能機制也會造成Docker逃逸。Linux內(nèi)核自版本2.2引入了功能機制(Capabilities),打破了UNIX/LINUX操作系統(tǒng)中超級用戶與普通用戶的概念,允許普通用戶執(zhí)行超級用戶權(quán)限方能運行的命令。例如當容器以--cap-add=SYSADMIN啟動,Container進程就被允許執(zhí)行mount、umount等一系列系統(tǒng)管理命令,如果攻擊者此時再將外部設備目錄掛載在容器中就會發(fā)生Docker逃逸。
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
圖片新聞
最新活動更多
- 高級軟件工程師 廣東省/深圳市
- 自動化高級工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市