當前狀態:2019 年 Kubernetes 第三方安全審計
我們預計最新的 Kubernetes 第三方安全審計報告將於本月晚些時候(2022 年 10 月)釋出。
為此,讓我們回顧一下上次 2019 年第三方安全審計中公開的發現,該審計基於 Kubernetes v1.13.4。
動機
Craig Ingram 多年來一直在努力跟進上次審計報告中發現的問題狀態,具體見此 issue:kubernetes/kubernetes#81146。本部落格文章將嘗試更深入地探討這一點,解決跟蹤中的任何差距,併成為對 2019 年報告的發現狀態的一個時間點總結。
本文還應透過透明的溝通,幫助讀者建立信心,瞭解社群為解決這些發現所做的工作,並提出任何需要社群貢獻者幫助的發現。
當前狀態
此處每個問題/發現的狀態均以盡力而為的方式呈現。作者不聲稱狀態 100% 準確,如果當前狀態未能準確反映,歡迎透過直接在相關問題上發表評論的方式提出任何更正或反饋。
# | 標題 | 問題 | 狀態 |
---|---|---|---|
1 | hostPath PersistentVolumes 導致 PodSecurityPolicy 可被繞過 | #81110 | 已關閉,由 kubernetes/website#15756 和 kubernetes/kubernetes#109798 解決 |
2 | Kubernetes 不支援證書吊銷 | #81111 | #18982 的重複項,需要 KEP |
3 | HTTPS 連線未經身份驗證 | #81112 | 很大程度上留給終端使用者自行配置 |
4 | 透過 kubelet 將 PID 移動到 manager 的 cgroup 時存在 TOCTOU | #81113 | 成功利用需要節點訪問許可權。需要修復 |
5 | kubectl cp 中未正確修補的目錄遍歷問題 | #76788 | 已關閉,分配了 CVE-2019-11249,在 #80436 中修復 |
6 | Bearer 令牌在日誌中洩露 | #81114 | 已關閉,分配了 CVE-2019-11250,在 #81330 中修復 |
7 | Seccomp 預設停用 | #81115 | 已關閉,由 #101943 解決 |
8 | 普遍存在的可被全域性訪問的檔案許可權 | #81116 | #112384 (進行中) |
9 | 環境變數暴露敏感資料 | #81117 | 已關閉,由 #84992 和 #84677 解決 |
10 | SSH 連線中使用 InsecureIgnoreHostKey | #81118 | 此功能已在 v1.22 中移除:#102297 |
11 | 使用 InsecureSkipVerify 和其他 TLS 弱點 | #81119 | 需要 KEP |
12 | kubeadm 執行了可能危險的重置操作 | #81120 | 已關閉,由 #81495、#81494 和 kubernetes/website#15881 修復 |
13 | 使用 strconv.Atoi 並向下轉型結果時發生溢位 | #81121 | 已關閉,由 #89120 修復 |
14 | kubelet 可能因惡意清單導致記憶體不足錯誤 | #81122 | 已關閉,由 #76518 修復 |
15 | kubectl 可能因惡意的 Pod 規約導致記憶體不足錯誤 | #81123 | 需要修復 |
16 | 不正確的 PID 獲取導致錯誤的 cgroup 移動 | #81124 | 需要修復 |
17 | 執行 kube-apiserver 和 kubelet 的主機日誌存在目錄遍歷問題 | #81125 | 已關閉,由 #87273 修復 |
18 | 非恆定時間的密碼比較 | #81126 | 已關閉,由 #81152 修復 |
19 | 加密建議不符合最佳實踐 | #81127 | 進行中 |
20 | 預設向容器新增憑據不安全 | #81128 | 已關閉,由 #89193 修復 |
21 | kubelet 存活探針可用於列舉主機網路 | #81129 | 需要 KEP |
22 | iSCSI 卷儲存在日誌中以明文形式儲存 Secret | #81130 | 已關閉,由 #81215 修復 |
23 | 硬編碼的憑據路徑 | #81131 | 已關閉,等待更多證據 |
24 | 日誌輪轉非原子操作 | #81132 | 需要修復 |
25 | 無邊界的任意檔案路徑 | #81133 | 需要修復。 |
26 | 不安全的 JSON 構造 | #81134 | 部分修復 |
27 | 因錯誤處理不當導致 kubelet 崩潰 | #81135 | 已關閉。由 #81135 修復 |
28 | 舊版令牌永不過期 | #81136 | 已關閉,作為 #70679 的一部分修復 |
29 | CoreDNS 在名稱空間之間洩露內部叢集資訊 | #81137 | 已關閉,隨 CoreDNS v1.6.2 解決。#81137 (評論) |
30 | 服務使用有問題的預設函式 | #81138 | 需要修復 |
31 | 容器管理器中 docker 守護程序名稱不正確 | #81139 | 已關閉,由 #81083 修復 |
32 | 在所有地方使用標準格式 | #81140 | 需要 KEP |
33 | 膚淺的健康檢查提供了虛假的安全感 | #81141 | 已關閉,由 #81319 修復 |
34 | 硬編碼使用不安全的 gRPC 傳輸 | #81142 | 需要 KEP |
35 | Retry-After 處理不正確 | #81143 | 已關閉,由 #91048 修復 |
36 | 不正確的 isKernelPid 檢查 | #81144 | 已關閉,由 #81086 修復 |
37 | Kubelet 支援不安全的 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 個問題中的許多。但是,我們仍有一些工作要做。以下是剩餘工作的分解,包括對修復這些待處理問題的時間投入、複雜性和對生態系統益處的粗略估計。
說明
任何需要 KEP(Kubernetes 增強提案)的都被認為是*高*時間投入和*高*複雜性。對生態系統的益處大致相當於不修復該問題的風險,這由嚴重性級別 + 漏洞成功利用的可能性決定。下表中的這些估計和值是作者的個人觀點。個人或終端使用者的威脅模型可能會將修復特定問題的益處評定得更高或更低。標題 | 問題 | 時間投入 | 複雜性 | 對生態系統的益處 |
---|---|---|---|---|
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。