今年疫情影響,直到現在終於有了一場公開的對外演講。感謝 iThome 舉辦這麼盛大的資安大會,讓台灣能凝聚這些資安能量。

而上半年,我在台大提供了一學期的資安課程,雖然目前只公開 Lab 題目,不過我也還在持續整理內容,希望能讓這些資安技術可以提供給更多人。

這場議程是以概覽的方式,介紹使用 Kubernetes 時需要顧及的資安問題。

我在議程結束後,也跟其他資安專家交流了一下,討論了不少優化 Kubernetes 資安的方法,有機會再來跟大家分享。

至於更深入的技術,則會在九月份的 HITCON Training 跟大家分享(8/17 截止報名),課程上也比較有時間分享駭客攻擊的手法、以及防禦的項目。

CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞 from Secview

議程重點

假設企業內有一個共用的 Kubernetes Cluster 由 SRE 團隊維運,提供給多個內部開發團隊使用。我們可以將 Kubernetes 拆成兩個面向來看:

  • Kubernetes 基礎上的資安問題
  • Kubernetes 應用上的資安問題

在基礎上,可以想像是 SRE 團隊維運 Kubernetes 要注意的事項、Kubernetes 的基礎建設(Infrastructure)的強化。而應用上,則是開發團隊使用 Kubernetes 需注意的資安問題,包含將程式封裝成映像檔、部署 Kubernetes 時的注意事項。

每個企業使用 Kubernetes 的情境都不盡相同,不一定要照這樣的方式檢視資安問題,根據自己遇到的情境做調整即可。

Kubernetes 基礎上的資安問題

基礎上我們列了三個常見問題:金鑰管理、權限管理、以及網路管理問題。

k8s-ops

  • 金鑰上:將金鑰部署到容器看似簡單,但大部分時候會忽略了要規劃「金鑰的生命週期」。且 Kubernetes 並不是專門管理金鑰的工具,在儲存我們放到 Kubernetes Secrets 的機密時,預設是沒有加密的。
  • 權限上:常見問題除了需要注意最小化權限原則(Principle of least privilege),還要注意憑證共用、憑證管理不當的問題。如果沒有中心化管理每個員工權限,導致員工這邊註冊一組密碼、那邊獲取一組憑證,最後在員工離職後,往往會忘了撤銷憑證,讓離職員工依舊可以登入。
  • 網路管理:Kubernetes 預設 Pod 都是可以互聯的,這個「大內網」是功能而不是漏洞。實際使用時會因為「大內網」的管理過度鬆散,導致駭客容易在 Kubernetes 內任意存取許多敏感資訊。

Kubernetes 應用上的資安問題

至於在應用上,我們簡單列了三個問題:設定檔檢查、映像檔安全、以及服務運行時的資安問題。

k8s-dev

  • 設定檔:以投影片的例子來說,範例設定檔如果只是複製貼上來使用,很容易會忽略其他的配置,包含像「限制 CPU 和 Memory」、「服務存活檢查」等優化服務的設定。持續檢查設定檔可以在 CI 階段自動化進行,減少配置錯誤的問題。
  • 映像檔:這其實就是供應鏈安全的一部分,也就是軟體組成分析可以檢測的地方。Kubernetes 用來管理容器化應用程式,一但容器映像檔本身有漏洞,就會被駭客破壞甚至拿下整個 Kubernetes。
  • 運行時的資安(Runtime Security):容器執行時,我們要怎麼知道駭客已經在攻擊?或是該怎麼知道駭客已經打下了我們的容器?在運行時監控和限制程式執行,就能及時發現和反應。

總覽 Kubernetes 資安

上述的問題,可以在不同階段解決:

k8s-sec

這並不是 Kubernetes 資安全部的樣貌,而是從一些滲透測試的經驗、攻擊的視角來看防禦,推薦可以先做且有不錯效果的項目。

投影片裡介紹了一些工具來解決這些問題。雖然每個工具看似簡單好用,但實際上規劃工具的整合,是需要花不少時間去設計和調整的。

而且「並不是所有情境都需要這些工具」、或是一定要解決這些資安問題。工具只是輔助,我們不必因為別人推薦了哪些工具,就跟著去使用。

先分析我們發生的問題和資安風險,在判斷決定去解決之後,再來找適合的工具與規劃解決方案。