Runc和CVE-2019-5736
2月11日早上有宣佈關於runc中的容器逃逸漏洞 。我們希望為Kubernetes使用者提供一些指導,以確保每個人都安全。
Runc是什麼?
簡單來說,runc是一個低層工具,它負責大量生成Linux容器。Docker、Containerd和CRI-O等其他工具位於runc之上,用於處理資料格式化和序列化等問題,但runc是所有這些系統的核心。
Kubernetes位於這些工具之上,因此雖然Kubernetes本身的任何部分都不容易受到攻擊,大多數Kubernetes安裝都使用了runc。
這個漏洞是關於?
雖然完整的細節仍然被禁止以提供人們時間補丁,但粗略的版本是:當在容器內以root(UID 0)執行程序時,該程序可以利用runc中的錯誤來獲取執行容器的主機的root許可權。然後,這允許他們無限制地訪問伺服器以及該伺服器上的任何其他容器。
如果容器內的程序是可信任的(是你知道的東西而不是敵對的)或者沒有以UID 0執行,則不受該漏洞影響。如果已應用適當的政策,SELinux也可以阻止它。RedHat Enterprise Linux和CentOS都在其軟體包中包含適當的SELinux許可權,因此如果啟用SELinux,則應該不受影響。
最常見的風險來源是攻擊者-控制器(attacker-controller)容器映象,例如來自公共儲存庫的未經審查的映象。
我該怎麼辦?
與所有安全問題一樣,兩個主要選項是緩解漏洞,或將runc版本升級到包含此修補程式的版本。
由於漏洞需要容器內的UID 0,因此直接緩解是確保所有容器都以非0使用者身份執行。這可以在容器映象中設定,也可以通過pod規範設定:
apiVersion: v1 kind: Pod metadata: name: run-as-uid-1000 spec: securityContext: runAsUser: 1000 # ...
這也可以使用PodSecurityPolicy全域性實施:
apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: name: non-root spec: privileged: false allowPrivilegeEscalation: false runAsUser: # Require the container to run without root privileges. rule: 'MustRunAsNonRoot'
考慮到在容器內作為UID 0執行的整體風險,強烈建議設定這樣的政策。
另一個潛緩解措施是確保所有容器映象都經過審查和可信任。這可以通過自己構建所有映象,或者通過審查映象的內容然後固定到映象版本雜湊來實現(image:external/someimage@sha256:7832659873hacdef)。
升級runc通常可以通過升級你的發行版的軟體包runc,或通過升級你的作業系統映象(如果使用不可變映象)來完成。這是各種發行版和平臺的已知安全版本列表:
- Ubuntu - runc 1.0.0~rc4+dfsg1-6ubuntu0.18.10.1
- Debian - runc 0.1.1+dfsg1-2
- RedHat Enterprise Linux - docker 1.13.1-91.git07f3374.el7 (if SELinux is disabled)
- Amazon Linux - docker 18.06.1ce-7.25.amzn1.x86_64
- CoreOS - 2051.0.0
- Kops Debian - in progress
- Docker - 18.09.2
一些平臺還發布了更具體的說明:
Google Container Engine (GKE)
Google釋出了一份包含更多詳細資訊的安全公告 ,但簡而言之,如果你使用預設的GKE節點映象,那麼你就是安全的。如果你使用的是Ubuntu節點映象,則需要緩解或使用已知安全版本的runc來升級映象。
Amazon Elastic Container Service for Kubernetes (EKS)
亞馬遜還發布了一份包含更詳細資訊的安全公告 。所有EKS使用者都應該緩解問題或升級到新節點映象。
Docker
我們沒有具體確認Docker for Mac和Docker for Windows是易受攻擊的,但似乎很可能。Docker釋出了18.09.2版本 的修復程式,建議你升級到它。這也適用於使用Docker的其他部署系統。
如果您無法升級Docker,Rancher團隊已在github.com/rancher/runc-cve 上為許多舊版本提供了修復的後端。
獲取更多資訊
如果你對此漏洞如何影響Kubernetes有任何疑問,請通過discuss.kubernetes.io 加入我們的討論。
如果你想與runc團隊 取得聯絡,你可以通過Google網上論壇 或Freenode IRC上的#opencontainers與他們聯絡。
KubeCon + CloudNativeCon中國論壇提案徵集(CFP)2月22日截止
KubeCon + CloudNativeCon 論壇讓使用者、開發人員、從業人員匯聚一堂,面對面進行交流合作。與會人員有 Kubernetes、Prometheus 及其他雲原生計算基金會 (CNCF) 主辦專案的領導,和我們一同探討雲原生生態系統發展方向。
在中國開源峰會上,與會者將共同合作及共享資訊,瞭解最新和最有趣的開源技術,包括Linux、IoT、區塊鏈、AI、網路等;並獲得如何在開源社群中導向和引領的資訊。
大會日期:
- 提案徵集截止日期:太平洋標準時間 2 月 22 日,星期五,晚上 11:59
- 提案徵集通知日期:2019 年 4 月 8 日
- 會議日程通告日期:2019 年 4 月 10 日
- 會議活動舉辦日期:2019 年 6 月 24 至 26 日
提醒:這是一場社群會議。因此,讓我們儘量避開公然推銷產品和/或供應商銷售宣傳。
KubeCon + CloudNativeCon + Open Source Summit贊助方案出爐