背景信息
基于RunC運行時的容器存在安全漏洞,攻擊者可以通過惡意容器鏡像等方式獲取宿主機root執(zhí)行權限。
漏洞原理分析
本次漏洞典型的攻擊方式是通過惡意鏡像:在惡意鏡像中,將攻擊函數(shù)隱藏在惡意動態(tài)庫如(libseccomp.so.2)中,并使執(zhí)行命令指向/proc/self/exe。當RunC動態(tài)編譯時,會從容器鏡像中載入動態(tài)鏈接庫,導致加載惡意動態(tài)庫;當打開/proc/self/exe即RunC時,會執(zhí)行惡意動態(tài)鏈接庫中的惡意程序,由于惡意程序繼承RunC打開的文件句柄,可以通過該文件句柄替換host上的RunC。此后,再次執(zhí)行RunC相關的命令,則會產(chǎn)生逃逸。
影響范圍
本次漏洞對所有采用RunC的容器引擎均生效,RunC是Docker容器的核心組件,因此對絕大部分容器均會產(chǎn)生影響。其中主要影響的是多用戶共享節(jié)點的場景,可導致某用戶通過滲透進而控制節(jié)點并攻擊整集群。
華為云CCE容器服務:CCE容器服務創(chuàng)建的Kubernetes集群屬于單租戶專屬,不存在跨租戶共享,影響范圍較小,對于多用戶場景需要關注。
CCE采用的是華為自研的iSula Docker容器,其中RunC采用靜態(tài)編譯方式載入依賴庫,因此目前公開披露的攻擊方式無法入侵。
但為確保容器服務運行更安全,CCE容器服務仍將在近日完成現(xiàn)網(wǎng)Docker容器的自動熱升級,用戶無需任何手動操作,且升級過程對運行中的容器業(yè)務無影響。
華為云CCI容器實例服務:CCI引擎采用華為iSula Kata容器引擎,提供單節(jié)點上多容器高安hypervisor級別的隔離能力,并沒有采用RunC容器,因此本次漏洞將不會對CCI產(chǎn)生影響。
修復方法
華為云CCE容器服務:
近日CCE容器服務會對運行的Docker進行無損熱升級,包含正在運行的1.11.2, 17.06等歷史版本均會提供對應補丁版本,無需更新到18.09版本,已運行容器將不受影響,請各位關注升級公告。
自建Kubernetes或使用開源容器引擎:
升級Docker到18.09.2版本, 由于開源Docker在17.06之后的版本做了較大變更,涉及架構解耦重構,該辦法可能會導致用戶容器業(yè)務中斷,建議做好充分驗證,并按節(jié)點逐步滾動升級。
僅升級RunC,對于17.06等Docker版本,可以不中斷已運行業(yè)務,當前RunC官方尚未發(fā)布包含漏洞修復補丁的新版本,如果要單獨升級RunC,用戶可自行編譯。
另特別提醒,本次Docker官方補丁使用了高版本Linux內核的系統(tǒng)調用,在低版本內核部分版本上可能會失效,若補丁失效時,建議升級至3.17以上內核。華為云CCE容器服務提供的補丁針對官方補丁進行了優(yōu)化適配,已驗證在多版本內核上均可生效。