runC 是 Docker,Kubernetes 等依賴容器的應用程序的底層容器運行時。此次爆出的嚴重安全漏洞可使攻擊者以 root 身份在主機上執行任何命令。
容器的安全性一直是容器技術的一個短板。關於容器最大的安全隱患是攻擊者可以使用惡意程序感染容器,更嚴重時可以攻擊主機系統。
2 月 11 日,安全研究員 Adam Iwaniuk 和 BorysPopławski 發現了容器運行時 runC 的一個安全漏洞,這個漏洞可以讓上述情況發生。Aleksa Sarai,SUSE 的容器高級軟件工程師同時也是 runC 的維護者,紕漏了這個漏洞(CVE-2019-5736)。
漏洞詳情
runC 是一個開源命令行工具,用於運行容器,是 Docker,Kubernetes 等依賴容器的應用程序的底層容器運行時。runC 由 Docker 公司開發,現在已作為 OCI 規范被廣泛使用。如果你正在使用容器,那么有很大的可能是在 runC 上運行它們。
此次爆出的漏洞允許惡意容器覆蓋主機上的 RunC 二進制文件,以在主機上獲取 root 級別的代碼執行,讓攻擊者能夠以 root 身份運行任何命令。
攻擊方式是將容器中的目標二進制文件替換為返回的 runC 二進制文件,攻擊者可以通過附加特權容器(將其連接到終端)或使用惡意鏡像啟動並使其自行執行。
但是 Linux 內核通常不允許在 runC 執行過程中主機上的 runC 二進制文件被覆蓋。
這時候攻擊者可以使用 O_PATH 標志打開/ proc / self / exe
的文件描述符,然后繼續通過/ proc / self / fd / <nr>
重新打開二進制文件O_WRONLY
並在一個單獨進程中的繁忙 loop 里嘗試寫入。Sarai 解釋說,最終,當 runC 二進制文件退出時攻擊就成功了。
結果可能會比你想象的還糟。紅帽的容器技術產品經理 Scott McCarty 警告大家:
runC 和 Docker 中安全漏洞(CVE-2019-5736)的披露說明了許多 IT 管理員和 CxO 面臨着糟糕的情況。容器代表向共享系統的轉變,其中來自不同用戶的應用程序都在同一 Linux 主機上運行。利用此漏洞意,惡意代碼可能會肆意蔓延,不僅影響單個容器,還會影響整個容器主機,最終會破壞主機上運行的成百上千個容器。像這種影響各種互連生產系統的級聯漏洞可能會成為企業 IT 的世界末日場景...... 而這正是這個漏洞可能產生的結果。
及時打補丁
除了 runC,Sarai 在報告還說明了這個漏洞還可能會影響到 LXC 和 Apache Mesos。所以,如果你正在運行任何類型的容器,需要盡快打補丁。Sarai 已經 push 了一個 git 提交來修復這個漏洞:
https://github.com/opencontainers/runc/commit/0a8e4117e7f715d5fbeef398405813ce8e88558b
Docker 剛剛發布的 18.09.2 版本(https://github.com/docker/docker-ce/tree/v18.09.2)也修復了該漏洞。
Linux 發行版 Debian 和 Ubuntu 正在修復該漏洞。AWS 和 Google Cloud 已發布安全通知,建議客戶更新各種受影響服務的容器。
大多數(如果不是全部)雲容器系統都容易受到這種潛在攻擊。 例如,AWS 表示,現在已有一個適用於亞馬遜 Linux 的補丁,但仍在為亞馬遜 ECS,EKS 和 AWS Fargate 推出補丁。
McCarty 說這不是第一個主要的容器運行時安全漏洞,也不會是最后一個。
就像去年 Spectre/Meltdown 代表了安全研究從軟件架構向處理器架構轉變一樣,我們應該期待 runC 這樣的低級別容器運行時和 Docker 這樣的容器引擎現在也會受到研究人員和潛在惡意行為者的額外關注。
參考鏈接:
https://www.theregister.co.uk/2019/02/11/docker_container_flaw/
https://www.zdnet.com/article/doomsday-docker-security-hole-uncovered/
下載docker-ce最新版本的二進制文件:
https://download.docker.com/linux/static/stable/x86_64/docker-18.09.2.tgz