- 云原生安全:攻防實踐與體系構建
- 劉文懋 江國龍 浦明 阮博男 葉曉虎
- 437字
- 2021-11-04 18:12:35
4.2.3 Kubelet未授權訪問
在一個Kubernetes集群中,Kubelet是主要的“節點代理”,運行在集群的每個節點上。它負責向API Server注冊所在節點。
與Kubernetes API Server類似,Kubelet同樣運行著API服務(默認在10250端口),集群中其他組件可以通過調用API來改變集群狀態,比如啟動和停止Pod。既然同樣有API服務,那么也就會存在未授權訪問的問題。如果未授權用戶能夠訪問甚至向某個節點上的Kubelet下發命令,那么他就很可能控制整個集群。
Kubelet的配置文件是/var/lib/kubelet/config.yaml。一般來說,我們在安裝Kubernetes時會將--anonymous-auth設置為false,并在authorization中選擇mode為Webhook。前一選項禁止匿名用戶訪問,后一選項則使Kubelet通過API Server進行授權(即使匿名用戶能夠訪問,也幾乎不具備任何權限)。
然而,假如--anonymous-auth被設置為true,且authorization.mode被設置為AlwaysAllow,這就十分危險了。
在這種情況下,攻擊者能夠做非常多的事情,例如可列出正在運行的Pod,如圖4-5所示。

圖4-5 列出正在運行的Pod
攻擊者還可以對任意Pod執行命令,從而提升權限。一種思路是:對Kubernetes API Server的Pod執行讀取敏感憑證的命令,進而讀取憑證并獲得高權限身份,然后利用該身份與Kubernetes API Server交互并創建新的Pod,從而逃逸出容器。具體過程見4.3節。