Kubernetes審計:使日誌審計再次成為可行的實踐

  • 2019 年 12 月 10 日
  • 筆記

之前由Nitzan Niv在Alcide部落格上發表

在安全領域,識別系統被破壞、濫用或錯誤配置的最成熟方法之一,是收集系統用戶和自動化服務執行的所有活動的日誌,並分析這些日誌。

作為安全最佳實踐的審計日誌

一般來說,審計日誌有兩種用途:

  1. 主動地識別不合規行為。根據一組已配置的規則,它應該忠實地過濾對組織策略的任何違反,調查人員在審計日誌條目中發現,證明發生了不符合的活動。使用自動過濾器,此類警報的集合將定期報告給遵從性調查人員。
  2. 被動地對特定的操作或安全問題進行調查。通過事後調查,將已知的問題追溯到責任方、根本原因或促成因素,從而推斷出狀態與引起行為和先前狀態之間的關聯。

Kubernetes審計日誌

讓我們研究一下如何在Kubernetes世界中配置和使用審計日誌,它們包含哪些有價值的資訊,以及如何利用它們來增強基於Kubernetes的數據中心的安全性。

Kubernetes審計日誌的目的,是使集群管理員能夠以取證的方式恢復伺服器的狀態和導致Kubernetes API中數據的當前狀態的一系列客戶機交互。

在技術術語中,Kubernetes審計日誌是對Kubernetes API-Server的每個調用的詳細描述。Kubernetes組件向外界暴露Kubernetes API。它是Kubernetes集群中所有用戶、自動化和組件訪問的中心接觸點。API伺服器通過HTTP實現RESTful API並執行所有API操作。

當接收到一個請求時,API伺服器通過以下幾個步驟來處理它:

  1. 身份驗證:建立與請求(又稱主體)相關聯的身份。有幾種身份驗證機制。
  2. RBAC/授權:API伺服器確定與請求關聯的標識是否可以訪問請求中的謂詞和HTTP路徑的組合。如果請求的標識具有適當的角色,則允許繼續處理。
  3. 准入控制:確定請求是否格式良好,並可能在處理請求之前對其進行修改。
  4. 驗證:確保請求中包含的特定資源是有效的。
  5. 執行請求的操作。支援的操作類型包括:
    1. 創建資源(例如pod、命名空間、用戶角色)
    2. 刪除資源或資源集合
    3. 列出特定類型的資源(例如,pod、命名空間),或者獲得特定資源的詳細描述
    4. 打開到API伺服器的長時間運行的連接,並通過它連接到特定的資源。然後使用這樣的連接在用戶和資源之間傳輸數據。例如,這使用戶能夠在運行的pod中打開遠程shell,或連續查看在pod中運行的應用程式的日誌。
    5. 監視集群資源的更改。

請求及其處理步驟可以存儲在Kubernetes審計日誌中。可以將API伺服器配置為存儲所有或部分請求,並提供不同程度的詳細資訊。此審計策略配置還可以指定審計日誌存儲在何處。分析工具可以通過這個鉤子請求接收這些日誌。

審計Kubernetes集群的挑戰

雖然審計日誌收集和分析的原則自然適用於雲,特別是構建在Kubernetes上的數據中心,但在實踐中,這種環境的規模、動態特性和隱含的上下文使得分析審計日誌變得困難、耗時和昂貴。

集群中活動的規模意味著,任何僅依賴手工檢查成千上萬個每日日誌條目的分析都是不切實際的。「安靜」集群沒有人類觸發行動,沒有重大變化應用活動,仍然是每小時處理成千上萬的API調用,由內部Kubernetes機制生成,確保集群是活的,根據指定的部署,利用其資源和失敗會自動識別並恢復。即使使用日誌過濾工具,審核員也需要大量的經驗、直覺和時間來放大一些有趣的條目。

Kubernetes集群這樣的系統的動態特性,意味著工作負載正在快速地添加、刪除或修改。這不是審核員專註於訪問包含資料庫的幾個特定工作負載的問題,而是確定在審核時間段的每個特定時刻哪些工作負載包含敏感資料庫的問題,以及哪些用戶和角色有合理的理由訪問每個資料庫 這些資料庫工作負載在什麼時間等等。

此外,雖然找到一些有趣的結果只是在日誌中查找預先已知的與不良活動相關的特定條目,但是在日誌中查找可疑但先前未知的活動需要一套不同的工具和技能,尤其是在這種可疑行為只能在很長一段時間內從更廣泛的上下文中理解,而不僅僅是一個或兩個相關的日誌條目。例如,檢測用戶未能向系統進行身份驗證非常簡單,因為每次登錄嘗試都顯示為單個日誌條目。然而,識別潛在的盜竊用戶憑證只能檢測到,如果審計員連接看似不同的條目到一個整體的模式,例如訪問系統使用特定用戶的憑證從一個組織以外的未知的互聯網地址,而使用了相同的用戶的憑證並發從內部組織的網路訪問系統。

使日誌審計再次成為可行的實踐

為了使大型、複雜的Kubernetes集群的審計成為一種可行的實踐,我們需要使審計員的工具適應這種環境。這些工具將自動和主動地識別異常和有問題的行為,特別是在Kubernetes控制安全的情況下,以便:

  1. 檢測與安全相關的Kubernetes集群濫用,特別是那些只能通過觀察多個活動的擴展上下文來檢測的行為。
  2. 將遵從性調查集中在Kubernetes的誤用上,這些誤用超出了簡單日誌過濾規則的檢測範圍。

當然,為了實現這些目標,這樣的工具必須能夠:

  1. 自動分析Kubernetes審計日誌,檢測用戶和自動服務帳戶的異常行為和對敏感資源的異常訪問。
  2. 總結檢測到的異常以及審計資訊的重要趨勢和統計數據,以方便用戶理解。在一天結束時,審核員應該有足夠的資訊,使她能夠理解、限定或忽略自動分析的結果。

讓我們描述一些更複雜的威脅場景,我們希望預想的審計日誌分析儀自動檢測:

  • 對手可能會竊取特定用戶或服務帳戶(在集群之外)的憑據,或者通過社會工程在偵察過程中更早地捕獲憑據,從而獲得對集群資源的初始訪問權。
  • 對手可以使用令牌盜竊(在集群內,從被破壞的或合法訪問的資源)或令牌模擬不同的用戶或服務帳戶(即安全上下文)執行橫向移動、許可權升級、數據訪問和數據操作的操作,同時避免檢測。
  • 對手可能使用不充分或配置錯誤的RBAC在自己的安全上下文中獲得對特權和敏感資源(集群的秘密、配置映射、授權策略等)的訪問許可權,用於橫向移動、特權升級、數據訪問和數據操作。
  • 對手可能會利用Kubernetes API伺服器中的漏洞(身份驗證、授權、准入控制或驗證請求處理階段)來獲得對特權和敏感資源(集群的秘密、配置映射、授權策略等)的訪問,以便進行初始訪問、橫向移動、特權升級、數據訪問和數據操作。

顯然,這種場景的檢測遠遠不止使用預先確定的規則對審計日誌進行簡單的過濾。必須使用複雜的機器學習演算法來自動地、大規模地和在實際威脅活動之後的合理時間內實現這一點。

分析工具應該收集日誌中顯示的集群的操作和安全活動的特徵,並將它們提供給機器學習演算法進行測量、加權和鏈接。在這個過程的最後,可疑行為的可能模式可以提交給審核員進行驗證和進一步的調查。

總結

對系統日誌的審計是一種成熟的實踐,用於識別對系統的安全威脅,無論這些威脅在實現之後是否會產生有害影響。事實上,某些形式的定期審計是法律和規章規定的。

然而,在複雜、大規模、動態系統(如現代的Kubernetes集群)的審計日誌中識別可疑模式是一項艱巨的任務。雖然使用某種類型的自動化對於這樣的分析是強制性的,但是大多數現有的審計工具只是一些不需要動腦筋的過濾器,很難幫助審計員應對其任務的更深層的挑戰。

在本文中,我們提出了一個自動化Kubernetes審計日誌分析工具的設想,它遠遠超出了這個範圍。使用機器學習,這樣的工具可以自動檢測審計員可以關注的日誌中的潛在威脅模式,甚至是實時的。此外,以用戶可理解的方式匯總審計日誌中的資訊可以讓審計員快速驗證已識別的模式,並幫助她調查其他隱藏的可疑活動。