您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何實現runc容器逃逸漏洞預警,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
runc是一個根據OCI(Open Container Initiative)標準創建并運行容器的CLI tool。目前docker引擎內部也是基于runc構建的。2019年2月11日,研究人員通過oss-security郵件列表披露了runc容器逃逸漏洞的詳情,根據OpenWall的規定EXP會在7天后也就是2019年2月18日公開。經360CERT研判,該漏洞可能影響廣大云服務廠商,危害嚴重。
該漏洞允許惡意容器(以最少的用戶交互)覆蓋host上的runc文件,從而在host上以root權限執行代碼。在下面兩種情況下,通過用戶交互可以在容器中以root權限執行任意代碼:
1.使用攻擊者控制的鏡像創建新容器。
2.進入到攻擊者之前具有寫入權限的現有容器中(docker exec)。
默認AppArmor策略不會阻止此漏洞。對于Fedora上的moby-engine軟件包,默認SELinux策略也不會阻止此漏洞(因為容器進程似乎作為container_runtime_t運行);對于Fedora上的docker軟件包和podman軟件包不受此漏洞影響(它們將容器進程作為container_t運行)。但是可以通過正確使用用戶命名空間(其中host的root未映射到容器的用戶命名空間)來阻止此漏洞。
目前除了runc之外,Apache Mesos和LXC也確認受到影響。攻擊只可能發生在特權容器中,因為它需要host上的root權限來覆蓋runc文件。LXC認為特權容器是不安全的,所以沒有分配CVE來處理此問題,但是也已經發布了補丁。
攻擊者可以將容器中的目標文件替換成指向runc的自己的文件來欺騙runc執行自己。比如目標文件是/bin/bash,將它替換成指定解釋器路徑為#!/proc/self/exe的可執行腳本,在容器中執行/bin/bash時將執行/proc/self/exe,它指向host上的runc文件。然后攻擊者可以繼續寫入/proc/self/exe試圖覆蓋host上的runc文件。但是一般來說不會成功,因為內核不允許在執行runc時覆蓋它。為了解決這個問題,攻擊者可以使用O_PATH標志打開/proc/self/exe的文件描述符,然后通過/proc/self/fd/<nr>使用O_WRONLY標志重新打開文件,并嘗試在一個循環中從一個單獨的進程寫入該文件。當runc退出時覆蓋會成功,在此之后,runc可以用來攻擊其它容器或host。
lxc使用memfd_create系統調用創建匿名的內存文件,然后將該文件密封以防止修改。執行的是這個密封的內存中的文件而不是磁盤上的文件。同樣,從特權容器到host文件的任何寫操作都將寫入內存中的文件而不是磁盤上的文件從而保證其完整性。由于內存中的文件是密封的,寫入操作也將失敗。
runc中的修補方案類似。
目前漏洞細節已經披露,EXP也即將公開,不排除攻擊者在EXP公開之前就根據漏洞細節自己編寫EXP發動攻擊的可能。360CERT建議使用基于lxc和runc容器技術的相關廠商和開發者及時進行升級,同時關注后續EXP,以對升級結果進行驗證。其它廠商和開發者也需要關注該漏洞進展,未來不排除有更多的容器系統受到該漏洞影響。
上述內容就是如何實現runc容器逃逸漏洞預警,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。