當前狀態:2019 年 Kubernetes 第三方安全審計

我們預計最新的 Kubernetes 第三方安全審計報告將於本月晚些時候(2022 年 10 月)釋出。

為此,讓我們回顧一下上次 2019 年第三方安全審計中公開的發現,該審計基於 Kubernetes v1.13.4

動機

Craig Ingram 多年來一直在努力跟進上次審計報告中發現的問題狀態,具體見此 issue:kubernetes/kubernetes#81146。本部落格文章將嘗試更深入地探討這一點,解決跟蹤中的任何差距,併成為對 2019 年報告的發現狀態的一個時間點總結。

本文還應透過透明的溝通,幫助讀者建立信心,瞭解社群為解決這些發現所做的工作,並提出任何需要社群貢獻者幫助的發現。

當前狀態

此處每個問題/發現的狀態均以盡力而為的方式呈現。作者不聲稱狀態 100% 準確,如果當前狀態未能準確反映,歡迎透過直接在相關問題上發表評論的方式提出任何更正或反饋。

#標題問題狀態
1hostPath PersistentVolumes 導致 PodSecurityPolicy 可被繞過#81110已關閉,由 kubernetes/website#15756kubernetes/kubernetes#109798 解決
2Kubernetes 不支援證書吊銷#81111#18982 的重複項,需要 KEP
3HTTPS 連線未經身份驗證#81112很大程度上留給終端使用者自行配置
4透過 kubelet 將 PID 移動到 manager 的 cgroup 時存在 TOCTOU#81113成功利用需要節點訪問許可權。需要修復
5kubectl cp 中未正確修補的目錄遍歷問題#76788已關閉,分配了 CVE-2019-11249,在 #80436 中修復
6Bearer 令牌在日誌中洩露#81114已關閉,分配了 CVE-2019-11250,在 #81330 中修復
7Seccomp 預設停用#81115已關閉,由 #101943 解決
8普遍存在的可被全域性訪問的檔案許可權#81116#112384 (進行中)
9環境變數暴露敏感資料#81117已關閉,由 #84992#84677 解決
10SSH 連線中使用 InsecureIgnoreHostKey#81118此功能已在 v1.22 中移除:#102297
11使用 InsecureSkipVerify 和其他 TLS 弱點#81119需要 KEP
12kubeadm 執行了可能危險的重置操作#81120已關閉,由 #81495#81494kubernetes/website#15881 修復
13使用 strconv.Atoi 並向下轉型結果時發生溢位#81121已關閉,由 #89120 修復
14kubelet 可能因惡意清單導致記憶體不足錯誤#81122已關閉,由 #76518 修復
15kubectl 可能因惡意的 Pod 規約導致記憶體不足錯誤#81123需要修復
16不正確的 PID 獲取導致錯誤的 cgroup 移動#81124需要修復
17執行 kube-apiserver 和 kubelet 的主機日誌存在目錄遍歷問題#81125已關閉,由 #87273 修復
18非恆定時間的密碼比較#81126已關閉,由 #81152 修復
19加密建議不符合最佳實踐#81127進行中
20預設向容器新增憑據不安全#81128已關閉,由 #89193 修復
21kubelet 存活探針可用於列舉主機網路#81129需要 KEP
22iSCSI 卷儲存在日誌中以明文形式儲存 Secret#81130已關閉,由 #81215 修復
23硬編碼的憑據路徑#81131已關閉,等待更多證據
24日誌輪轉非原子操作#81132需要修復
25無邊界的任意檔案路徑#81133需要修復。
26不安全的 JSON 構造#81134部分修復
27因錯誤處理不當導致 kubelet 崩潰#81135已關閉。由 #81135 修復
28舊版令牌永不過期#81136已關閉,作為 #70679 的一部分修復
29CoreDNS 在名稱空間之間洩露內部叢集資訊#81137已關閉,隨 CoreDNS v1.6.2 解決。#81137 (評論)
30服務使用有問題的預設函式#81138需要修復
31容器管理器中 docker 守護程序名稱不正確#81139已關閉,由 #81083 修復
32在所有地方使用標準格式#81140需要 KEP
33膚淺的健康檢查提供了虛假的安全感#81141已關閉,由 #81319 修復
34硬編碼使用不安全的 gRPC 傳輸#81142需要 KEP
35Retry-After 處理不正確#81143已關閉,由 #91048 修復
36不正確的 isKernelPid 檢查#81144已關閉,由 #81086 修復
37Kubelet 支援不安全的 TLS 密碼套件#81145已關閉但 #91444 需要修復 (見此評論)

啟發的成果

除了修復具體問題外,2019 年的第三方安全審計還推動了 Kubernetes 接下來幾個版本中以安全為重點的增強。其中一個例子是 Kubernetes 增強提案(KEP)1933 透過靜態分析防止日誌記錄 Secret,以防止透過日誌洩露 Secret,由 Patrick Rhomberg 推動實現。由於此 KEP,go-flow-levee,一個配置用於檢測 Secret 日誌記錄的汙點傳播分析工具,在一個 指令碼中作為 Prow 的預提交作業執行。此 KEP 在 v1.20.0 中作為 Alpha 功能引入,然後在 v1.21.0 中升級為 Beta,並在 v1.23.0 中升級為穩定版。作為穩定版,該分析作為阻塞性的預提交測試執行。此 KEP 還幫助解決了 2019 年第三方安全審計中的以下問題:

剩餘工作

過去 3 年來,我們社群成員的工作修復了已發現的 37 個問題中的許多。但是,我們仍有一些工作要做。以下是剩餘工作的分解,包括對修復這些待處理問題的時間投入、複雜性和對生態系統益處的粗略估計。

標題問題時間投入複雜性對生態系統的益處
Kubernetes 不支援證書吊銷#81111
使用 InsecureSkipVerify 和其他 TLS 弱點#81119
kubectl 可能因惡意的 Pod 規約導致本地記憶體不足錯誤#81123
不正確的 PID 獲取導致錯誤的 cgroup 移動#81124
kubelet 存活探針可用於列舉主機網路#81129
API Server 支援不安全的 TLS 密碼套件#81145
透過 kubelet 將 PID 移動到 manager 的 cgroup 時存在 TOCTOU#81113
日誌輪轉非原子操作#81132
無邊界的任意檔案路徑#81133
服務使用有問題的預設函式#81138
在所有地方使用標準格式#81140非常低
硬編碼使用不安全的 gRPC 傳輸#81142非常低

要開始修復這些需要幫助的任何問題,請考慮加入我們的雙週會議或在我們的 Slack 頻道與我們交流,參與 Kubernetes SIG Security