容器的安全性一直是容器技術的一個短板。關於容器最大的安全隱患是攻擊者可以使用惡意程序感染容器,更嚴重時可以攻擊主機系統。
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版本也修復了該漏洞。
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/