Kubernetes 叢集的安全性日益重要,本文著重於執行階段的威脅防禦與入侵偵測。從網路安全殺傷鏈模型出發,分析攻擊者的入侵步驟,並介紹 Microsoft 調整後的 Kubernetes 威脅矩陣,涵蓋初始存取、執行、持久化、許可權提升、防禦逃避等階段。接著探討入侵偵測系統(IDS)的建置與功能,包括日誌監控、網路對映、安全策略實施等。文章也深入介紹威脅情報饋送、深度封包檢測(DPI)和蜜罐技術,提供 Kubernetes 叢集安全防護的實務參考。

Kubernetes 威脅防禦與入侵偵測

本章節將探討如何在 Kubernetes 叢集實作威脅防禦。我們在前面的章節中已經涵蓋了 Kubernetes 佈署的各個階段(建置、佈署、執行階段)。本章節主要關注威脅防禦,即執行階段的安全性。我們將涵蓋以下概念,以幫助您瞭解 Kubernetes 叢集中的威脅防禦及其必要性。

  • Kubernetes 叢集的威脅防禦,包括為什麼需要它以及它與傳統安全性的區別
  • Kubernetes 的入侵偵測
  • 先進的威脅防禦技術

讓我們探討每個主題。首先,我們來瞭解威脅防禦及其重要性。

Kubernetes 的威脅防禦(攻擊階段)

要了解威脅防禦,首先要檢視網路安全殺傷鏈(cybersecurity kill chain),它將攻擊分解為幾個階段。然後,利用此框架來建立防禦策略。網路安全殺傷鏈包含以下階段:

  • 偵察:攻擊者探測目標並收集資訊。
  • 武器化:攻擊者建立攻擊方法,可能是一個新的漏洞、現有漏洞的變體或簡單地利用不安全的組態。
  • 交付:攻擊者建立方法將漏洞或攻擊工具交付給目標或可用於攻擊目標的位置。
  • 利用:攻擊者實施方法觸發攻擊。
  • 安裝:攻擊者安裝惡意軟體,通常是軟體,以建立後門與惡意軟體進行通訊。
  • 命令與控制:攻擊者建立與惡意軟體的通訊通道,以控制軟體。
  • 達成目標:攻擊者實作攻擊的預期結果(例如,竊取資料、加密資料等)。

多個組織已調整此框架,以納入現實世界的攻擊和更多使用案例。Microsoft 已將其調整為適用於 Kubernetes,如其部落格文章“使用更新的 Kubernetes 威脅矩陣保護容器化環境”中所述。讓我們檢視適用於 Kubernetes 的殺傷鏈階段(威脅矩陣):

  • 初始存取:攻擊者利用 Kubernetes 佈署中的各種暴露介面(例如,Kubeflow),透過竊取憑證、受損映像或其他應用程式漏洞。
  • 執行:攻擊者在叢集中執行惡意命令或軟體。有幾種已知的方法可以實作這一點,例如在叢集中建立新的容器、在任何 pod 中執行額外的容器作為 sidecar,或利用已知的應用程式漏洞執行惡意命令。

內容解密:

此段落描述了 Kubernetes 威脅防禦的重要性以及攻擊者可能利用的各種攻擊階段。殺傷鏈模型將攻擊過程分解為多個階段,包括偵察、武器化、交付、利用、安裝、命令與控制以及達成目標。Microsoft 已將此模型調整為適用於 Kubernetes 的威脅矩陣,涵蓋初始存取、執行、持久化、許可權提升、防禦逃避、憑證存取、發現和橫向移動等階段。

持久化

攻擊者將嘗試在 Kubernetes 叢集中持久化惡意軟體,以便稍後存取。這通常透過在主機上建立可寫入的儲存路徑,利用 Kubernetes 排程作業(稱為 cron jobs)定期執行惡意軟體,或在某些情況下,破壞 Kubernetes 准入控制器,以便篡改對 API 伺服器的請求以執行攻擊。在此階段,攻擊者還將嘗試建立後門通訊通道到其控制伺服器,以便控制惡意軟體。這被稱為命令與控制伺服器(C&C 伺服器)。

內容解密:

此段落描述了攻擊者在 Kubernetes 叢集中持久化惡意軟體的方法,包括建立可寫入的儲存路徑、利用 Kubernetes cron jobs 以及破壞 Kubernetes 准入控制器。同時,攻擊者還會嘗試建立後門通訊通道到其控制伺服器。

許可權提升

攻擊者透過利用叢集中的資源獲得特權存取。例如,他們可能在具有特權存取的容器中執行惡意軟體,透過利用特權容器中的漏洞。

內容解密:

此段落描述了攻擊者如何透過利用叢集中的資源獲得特權存取,例如在具有特權存取的容器中執行惡意軟體。

防禦逃避

攻擊者透過使用清除日誌或刪除事件等技術來保持攻擊不被檢測,以便使用日誌和事件的檢測系統無法檢測到惡意活動的存在。另一種使用的技術是僅在由多個 pod 支援的 Kubernetes 佈署的一個 pod 中利用漏洞,並利用該漏洞進一步推進攻擊。

內容解密:

此段落描述了攻擊者如何透過清除日誌或刪除事件等技術來逃避檢測,以及如何利用單個 pod 中的漏洞進一步推進攻擊。

入侵偵測

Kubernetes 的入侵偵測涉及檢測和回應叢集中的潛在安全威脅。可以使用各種工具和技術來實作這一點,例如監控日誌和事件、使用網路對映工具以及實施安全策略。

內容解密:

此段落描述了 Kubernetes 入侵偵測的重要性以及實作入侵偵測的方法,包括監控日誌和事件、使用網路對映工具以及實施安全策略。

此圖示展示了 Kubernetes 威脅矩陣中的各個階段之間的關係,從初始存取到橫向移動。

內容解密:

此圖示使用 Plantuml 圖表語言繪製了 Kubernetes 威脅矩陣中的各個階段之間的關係,展示了攻擊者如何從初始存取逐步推進到橫向移動。

威脅防禦與入侵偵測

在前面的章節中,我們已經介紹了 Kubernetes 叢集的基礎設施安全、佈署安全以及執行時安全。在本章中,我們將重點關注威脅防禦和入侵偵測。

網路殺傷鏈

網路殺傷鏈是一個用於描述攻擊者攻擊過程的模型。它包括多個階段,例如初始存取、許可權提升、憑證存取、持久化、執行、發現、橫向移動、命令和控制以及資料竊取。瞭解這些階段對於構建有效的防禦機制至關重要。

攻擊階段與防禦

攻擊者需要在大多數階段都成功才能完成攻擊,但我們只需要阻止其中一個階段就可以挫敗攻擊。因此,瞭解這些階段並使用相關的工具和技術來防禦是至關重要的。

在 Kubernetes 叢集中,網路安全是至關重要的。即使攻擊者成功提升了許可權或利用了應用程式漏洞,如果他們無法使用叢集網路進行發現、命令和控制、橫向移動或資料竊取,那麼攻擊就會被阻止。

入侵偵測

入侵偵測系統(IDS)是一種監控網路活動、檢測異常模式並報告可疑行為的系統。它還可以監控對現有控制措施的違規行為,例如網路策略、主機強化等,並報告這些違規行為。

入侵偵測系統的功能

入侵偵測系統可以執行以下功能:

  • 警示:生成警示並將其傳送到 SIEM(安全資訊和事件管理)系統進行進一步分析和處理。
  • 入侵防禦:利用現有的控制措施(例如網路策略、Kubernetes Pod 安全策略、主機強化策略)來防止入侵,並將攻擊重定向到特意設定的 canary 資源以分析這些型別的攻擊。

一個好的入侵偵測系統應該能夠透過跟蹤系統的行為來關聯一組相關的異常。我們建議您審閱使用者和實體行為分析(UEBA)及其在安全方面的應用。

入侵偵測方法

在本文中,我們將介紹入侵偵測方法及其在 Kubernetes 叢集中的應用。

IP 位址和網域名稱威脅情報

正如網路殺傷鏈中所解釋的那樣,攻擊者通常會使用惡意軟體來聯絡由他們控制的伺服器。這些伺服器用於遠端控制惡意軟體、取得系統資訊、下載更多軟體並進一步推進攻擊。安全研究團隊會審查攻擊並識別已知的命令和控制(C&C)伺服器,並將其發布為威脅情報。

以下是使用 Plantuml 圖表來說明網路殺傷鏈的流程:

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Kubernetes叢集威脅防禦與入侵偵測

package "Kubernetes Cluster" {
    package "Control Plane" {
        component [API Server] as api
        component [Controller Manager] as cm
        component [Scheduler] as sched
        database [etcd] as etcd
    }

    package "Worker Nodes" {
        component [Kubelet] as kubelet
        component [Kube-proxy] as proxy
        package "Pods" {
            component [Container 1] as c1
            component [Container 2] as c2
        }
    }
}

api --> etcd : 儲存狀態
api --> cm : 控制迴圈
api --> sched : 調度決策
api --> kubelet : 指令下達
kubelet --> c1
kubelet --> c2
proxy --> c1 : 網路代理
proxy --> c2

note right of api
  核心 API 入口
  所有操作經由此處
end note

@enduml

內容解密:

此圖示展示了網路殺傷鏈的不同階段,從初始存取到資料竊取。每個階段代表攻擊者進行攻擊的一個步驟,瞭解這些階段有助於我們更好地防禦攻擊。

我們可以使用 IP 位址和網域名稱威脅情報來檢測與已知 C&C 伺服器的通訊,從而識別潛在的惡意活動。

在Kubernetes叢集中實作IDS/IPS:利用威脅情報饋送

在網路安全領域,STIX(結構化威脅情報表達)是用於描述威脅情報的標準,而TAXII(可信自動交換智慧情報)則是用於傳遞這些情報的標準。許多開源引擎可以解析STIX和TAXII饋送並提供威脅情報,例如AlienVault。此外,Feodo追蹤器和Snort等開源饋送提供了IP地址封鎖清單。當攻擊者使用虛擬私人網路(VPN)或Tor等疊加網路來隱藏其位置時,相關的威脅饋送也可以用於識別和阻止這些網路的IP地址。

威脅情報饋送在Kubernetes叢集中的實作

圖11-1展示瞭如何在Kubernetes叢集中應用可疑IP地址和網域以實作IDS/IPS。

圖11-1:使用威脅情報饋送實作IDS/IPS

此圖展示了在叢集中實作對威脅情報饋送的支援所需元件,以及實作IDS/IPS功能的高階工作流程。主要元件包括:

威脅情報饋送控制器(Threat Feed Controller)

負責從組態的來源(通常是一個URL)檢索威脅情報饋送。以下是一個組態範例:

apiVersion: projectcalico.org/v3
kind: GlobalThreatFeed
metadata:
  name: sample-global-threat-feed
spec:
  content: IPSet
  pull:
    http:
      url: https://an.example.threat.feed/blacklist
  globalNetworkSet:
    labels:
      security-action: block

內容解密:

此範例組態威脅情報饋送控制器從指定的URL提取威脅情報,並將IP地址清單儲存為名為globalnetworkset的自定義Kubernetes資源,供網路策略實施使用。

網路策略引擎(Network Policy Engine)

用於實施叢集中的網路策略,定義策略以阻止來自或去往威脅情報中IP地址的流量。以下是一個網路策略範例:

apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: default.blockthreats
spec:
  tier: default
  selector: all()
  types:
  - Ingress
  ingress:
  - action: Deny
    source:
      selector: security-action == 'block'

內容解密:

此網路策略範例定義了一個預設策略,用於阻止所有具有security-action: block標籤的來源流量,即來自威脅情報饋送中的IP地址。

日誌處理引擎(Log Processing Engine)

負責報告叢集中的流量日誌,並對匹配威脅情報中IP地址的流量生成警示。為了提高效率,可以在資料平面檢測到匹配時,直接在流量日誌中新增註解以標記相關的威脅情報來源。

IDS/IPS工作流程

  1. 威脅情報饋送控制器定期輪詢威脅情報饋送。
  2. 威脅情報饋送控制器處理饋送並在Kubernetes資料儲存中建立globalnetworkset資源。
  3. 網路策略引擎和日誌處理引擎讀取威脅情報。
  4. 如果定義了網路策略,網路策略引擎實施相關策略。
  5. 日誌引擎處理流量日誌並對匹配威脅情報中IP地址的流量生成警示。

網域名稱饋送的特殊考慮

對於包含網域名稱的威脅情報饋送,網路策略引擎必須支援根據網域名稱的策略,日誌處理引擎也需要能夠捕捉流量日誌中的網域名稱並與饋送中的網域名稱進行匹配。

深度包檢測(Deep Packet Inspection, DPI)

DPI是一種透過檢查網路流量並將其與已知的惡意網路流量模式進行匹配來檢測入侵的技術。這需要對應用層協定(如HTTP、MySQL等)進行深入分析。與IP地址和網域名稱的威脅情報類別似,根據簽名的DPI饋送也可用於檢測惡意流量。OWASP Top 10和SANs Top 25等提供了針對已知應用軟體風險和軟體漏洞的簽名,可用於檢測網路和應用層中的惡意流量。

Kubernetes 叢集中的深度封包檢測(DPI)與入侵偵測

在 Kubernetes 叢集中實施深度封包檢測(DPI)時,需要考慮多個因素。首先,DPI 的實施位置至關重要。可以在叢集的入口處(ingress)實施 DPI,ingress 是 Kubernetes 中的一個資源,允許使用者向叢集外部的客戶端暴露服務。然而,這種方法的侷限性在於,只能檢測到惡意的網路流量,但無法得知該流量最終到達了哪個 pod,因此需要進一步分析和關聯每個 pod 的活動,以瞭解攻擊的詳細情況。

在叢集內部實施 DPI 的優勢

在叢集內部為每個服務實施 DPI 是一個更好的選擇。這樣可以獲得更完整的資訊,包括惡意流量最終到達的 pod。然而,這種方法面臨著挑戰,因為 Kubernetes 的分散式特性導致叢集內部的流量非常龐大。DPI 涉及封包解析,可能會影回應用程式的延遲和資源利用率。

內容解密:

  • 在叢集入口實施 DPI:優點是可以檢測惡意流量,但缺點是無法確定流量最終到達的 pod。
  • 在叢集內部實施 DPI:優點是可以獲得完整的資訊,但挑戰是需要處理龐大的內部流量。

解決方案

為了減少對應用程式延遲的影響,建議將 DPI 用作檢測惡意活動的機制,而不是用來阻止攻擊。這意味著 DPI 引擎不需要 inline,可以處理流量副本,而不會影響原始流量,從而避免對延遲敏感的應用程式造成影響。

為了減少資源利用率,建議使用 Kubernetes 叢集中的上下文來選擇需要 DPI 的服務流量。例如,可以使用標籤選擇器來啟用 DPI,或者將 DPI 用作對異常流量進行回應的動作。

DPI 引擎的實作

DPI 引擎需要未加密的流量,因此如果叢集內部使用加密技術(如 HTTPS),則需要實施解密,或者選擇一種允許在加密前後進行 DPI 的加密技術(如 WireGuard)。可以使用 Envoy 這樣的代理來實作流量的重定向、解密、檢查、加密和傳輸。

參考架構

圖 11-2 展示了一個 DPI 實作的參考架構。該架構中,Envoy 被佈署為每個節點上的 daemonset,用於代理流量進行分析和控制。對於第二個微服務,DPI 引擎被整合到 Envoy 中,Envoy 被組態為將發往該服務後端 pod 的流量重定向到自身,然後進行 DPI。

內容解密:

  • Envoy 的角色:作為透明代理,終止發往服務後端 pod 的連線,並在分析後將流量傳送到 pod。
  • DPI 引擎的整合:與 Envoy 整合,對特定服務的流量進行 DPI。

日誌記錄和可視性

日誌記錄和可視性是安全性的重要組成部分。需要啟用叢集中的日誌記錄,以獲得對叢集活動(例如 pod 建立、Kubernetes 資源存取/變更、應用程式活動、網路活動)的可視性。需要收集包含 Kubernetes 上下文資訊的日誌,例如網路流、日誌記錄和 Kubernetes 稽核日誌。

內容解密:

  • 日誌記錄需求:需要包含 Kubernetes 上下文資訊的日誌,例如網路流、DNS 活動日誌、應用程式協定層的日誌和 Kubernetes 稽核日誌。
  • 日誌收集的重要性:有助於檢測異常活動和惡意使用者的行為。

Kubernetes 叢集中的威脅防禦與入侵偵測

在 Kubernetes 叢集中實施日誌收集與分析對於入侵偵測系統(IDS)至關重要。雲端供應商提供了日誌記錄功能,如 Google 的 Stackdriver 和 AWS 的 CloudWatch。此外,還有多種工具如 Sysdig、Datadog 和 Calico Enterprise 可用於 Kubernetes 環境中的日誌收集與分析。選擇合適的工具時,需確保其具備以下關鍵功能:

日誌收集工具的關鍵功能

  • 支援警示功能,可查詢日誌並根據規則設定警示,例如異常的 NXDOMAIN 請求、特定協定(如 HTTP 或 DNS)的網路流量不平衡、來自特定名稱空間的意外連線,或是過多的網路策略被拒絕的日誌。
  • 支援根據機器學習技術的基準測試,例如服務的連線數、HTTP 請求中的罕見 User-Agent 等,並報告異常警示。
  • 支援將日誌和警示轉發至外部的安全資訊和事件管理系統(SIEM),如 Splunk、QRadar 或 Sumo Logic,或是雲端供應商的安全中心。

先進威脅防禦技術

本章節將探討可在 Kubernetes 叢集中使用的先進威脅防禦技術。這些技術旨在檢測攻擊生命週期中的橫向移動和資料外洩階段。

蜜罐 Pod/資源

在 Kubernetes 環境中使用蜜罐是一種檢測惡意行為者並瞭解其行為的有效技術。透過佈署模擬或故意設為易受攻擊的應用程式,並監控對這些應用程式的存取,可以及時通知藍隊進行入侵檢測並遏制攻擊者的進展。

在 Kubernetes 環境中應用此技術非常有效,因為它利用了宣告式佈署工作負載的特性。透過在生產工作負載周圍引入假工作負載和服務,當工作負載被洩露時,攻擊者無法區分真實和假工作負載,從而輕易檢測到橫向移動。

Calico Enterprise 提供了一項蜜罐功能,作為嚴格網路策略或監控不可行的補充檢測方法。該功能透過在敏感名稱空間中佈署蜜罐工作負載和服務,並監控存取。一旦偵測到與這些蜜罐工作負載的連線,便會產生警示並追溯到來源。

DNS 基礎攻擊與防禦

DNS 是 Kubernetes 叢集中應用程式運作的關鍵基礎設施。CoreDNS 是 Kubernetes 叢集推薦的 DNS 伺服器。由於 DNS 對叢集運作至關重要,因此 DNS 流量需要在叢集內部和外部查詢中被允許,這使得 DNS 成為攻擊者瞄準的目標。

本章節將探討用於建立與命令控制中心連線以及資料外洩的網域名稱生成演算法(DGA)攻擊。DGA 攻擊透過演算法生成隨機網域名稱,並進行合法的 DNS 查詢,使得傳統的根據 DNS 威脅情報或周邊 DPI 的檢測方法難以奏效。

為了檢測這類別攻擊,需要採用機器學習技術來分析網域名稱並預測惡意網域。此外,基線測試 DNS 回應數量也是一種有效機制,可以報告解析失敗的 DNS 查詢異常增加。