返回文章列表

Kubernetes 叢集漏洞掃描工具 kube-hunter 實踐

本文探討 kube-hunter 的應用與實踐,kube-hunter 是一款開源的 Kubernetes 叢集漏洞掃描工具,它能夠有效地識別叢集中存在的安全風險,並提供詳細的漏洞資訊和修復建議。文章涵蓋了 kube-hunter 的基本使用方法、漏洞知識函式庫的查詢方式,以及在不同 Kubernetes 環境(如

資安 容器技術

隨著 Kubernetes 的普及,叢集安全日益受到重視。kube-hunter 作為一款專門的 Kubernetes 漏洞掃描工具,能有效協助管理員找出潛在風險。本文將介紹 kube-hunter 的使用方法,並分析其在不同環境下的掃描結果,同時也探討容器映像檔漏洞掃描的重要性與工具應用。透過實際案例與操作示範,讓讀者瞭解如何運用 kube-hunter 和 Trivy 等工具強化 Kubernetes 叢集的安全性,並建立完善的容器映像檔安全策略。理解漏洞評分機制與修復建議,才能有效降低風險,確保系統穩定執行。

Kubernetes 漏洞掃描工具:kube-hunter 的應用與實踐

前言

Kubernetes 作為現代化的容器協調工具,其安全性備受關注。為了保障叢集的安全,Aqua Security 推出了 kube-hunter,一款用於掃描 Kubernetes 叢集漏洞的開源工具。本文將探討 kube-hunter 的使用方法、功能特點及其在不同 Kubernetes 環境下的表現。

kube-hunter 的基本使用方法

kube-hunter 提供了多種執行方式,包括使用 Docker 容器、Python 的 pip 套件管理器直接安裝等。以下展示如何使用 Docker 執行 kube-hunter:

$ docker run -it --rm --network host aquasec/kube-hunter

執行後,kube-hunter 將掃描 Kubernetes 叢集並報告發現的漏洞和安全問題。

內容解密:

  • docker run:啟動 Docker 容器的命令。
  • -it:允許與容器互動。
  • --rm:容器停止後自動刪除。
  • --network host:使容器分享主機網路名稱空間,以便掃描主機上的 Kubernetes 服務。
  • aquasec/kube-hunter:kube-hunter 的 Docker 映像檔名稱。

漏洞知識函式庫(Knowledge Base)

kube-hunter 為每個發現的問題提供了一個 Knowledge Base ID(例如 KHV002),可以透過 Aqua Security 提供的 Knowledge Base 網站查詢更詳細的資訊和修復建議。


### 圖示:查詢 KHV002 在 Knowledge Base 中的詳細資訊
此圖示展示瞭如何在 Knowledge Base 中查詢特定漏洞的詳細資訊和修復建議。

內容解密:

  • Knowledge Base 提供詳細的漏洞資訊和修復建議。
  • 即使 Knowledge Base 網站無法存取,Aqua Security 也在 GitHub 儲存函式庫中提供了所有 KB 程式碼和相關建議。

在不同 Kubernetes 環境下的測試

本文測試了 kube-hunter 在 k3s 和 Minikube 環境下的表現。透過執行以下命令,可以銷毀 k3s 環境並啟動 Minikube:

$ /usr/local/bin/k3s-uninstall.sh
$ minikube start --driver=none

然後,使用 kube-hunter 的 Job 組態檔在 Minikube 中執行掃描任務:

$ kubectl create -f job.yaml
$ kubectl describe job kube-hunter

內容解密:

  • k3s-uninstall.sh:用於解除安裝 k3s 的指令碼。
  • minikube start --driver=none:以無驅動模式啟動 Minikube。
  • kubectl create -f job.yaml:根據 job.yaml 組態檔建立 Kubernetes Job。
  • kubectl describe job kube-hunter:檢視 kube-hunter Job 的詳細資訊。

結果分析

測試結果顯示,kube-hunter 能夠有效地掃描出不同 Kubernetes 環境下的安全問題。例如,在 Minikube 環境下,kube-hunter 發現了與 etcd 相關的組態資訊。


### 圖示:kube-hunter 在 Minishift 環境下的掃描結果
此圖示展示了 kube-hunter 在 Minishift 環境下的掃描結果,包括發現的漏洞和安全問題。

內容解密:

  • kube-hunter 能夠掃描出 Kubernetes 叢集中的各種安全問題,包括開放的服務、組態資訊等。
  • 在不同環境下,kube-hunter 表現出良好的適應性。

第 6 章:容器映像檔中的已知漏洞(CVEs)

系統無論型別為何,都會受到常見漏洞和攻擊(CVEs)的影響——這些已知的軟體漏洞為攻擊者提供了可乘之機。容器映像檔也不例外,需要對其進行 CVEs 監控,但同時也需要制定修補策略,無論是由開發人員自行處理還是由集中團隊負責,以確保容器在生產環境中執行時符合內部規範。每個 CVE 都會根據標準化評級被分配風險類別。通常,內部標準可能會規定,只有當容器映像檔不存在「嚴重」漏洞時,才允許生成容器。或者,例如,不允許同時存在「高」和「嚴重」漏洞的容器映像檔。

識別問題只是容器映像檔包含 CVEs 時所涉及過程的一小部分。需要制定並執行成熟且完善的策略。僅在開發團隊中傳達計劃是不夠的,因為團隊可能會採取簡單的方式忽略問題;策略需要強制執行,才能在大型容器化環境中產生影響。除了使用專有和開源產品檢查 CVEs 外,策略還必須檢查容器映像檔的合規性,例如,是否被建立為以不安全的 root 使用者身份執行,如前幾章所述。CVEs 無疑也會大量潛伏在容器映像檔倉函式庫中。

瞭解 CVEs

瞭解 CVEs 的評分機制至關重要,這樣才能判斷是否遵循標準化方法或在內部建立自己的評分系統。應該始終檢查 CVE 掃描結果以及容器映像檔的實際使用情況,以進行全面評估。

每個環境都是獨特的,重要的是要記住,軟體供應商只根據自己的標準建議補丁的關鍵性,而無法瞭解公司如何使用其軟體。一個例子是,您的組織在特定的技術堆積疊中執行微服務。在只有員工能夠存取的隔離網路段中,流行的網頁伺服器作為容器執行。當這些網頁伺服器的 CVEs 被公佈,並且發現了一個關鍵 CVE 時,由於伺服器的公開性,會出現恐慌。然而,在這種情況下,由於 CVE 不直接影響客戶所面對的生產服務,而且問題隻影響後端員工,因此維護視窗可以推遲到方便的時候。對此類別安全問題的內部評分將專門針對您自己的獨特攻擊向量。

常見漏洞評分系統(CVSS)

漏洞評分標準被稱為 Common Vulnerability Scoring System(CVSS),由於其清晰、周密且由 CVSS Special Interest Group 更新,因此被廣泛採用。您可以透過存取 www.first.org/cvss/specification-document 瞭解當前版本 v3.1 的更多資訊。該檔案解釋說,其範圍不僅限於軟體,還包括硬體和韌體。該標準定義了三個關鍵的指標群組。第一個是基礎分數,與漏洞的關鍵特徵及其嚴重性相關。時間指標則關注漏洞的嚴重性如何隨時間變化,例如是否有可用的攻擊程式碼,以及是否已經發生了成功的入侵。最後,環境指標可以根據特定的計算環境調整其他指標。最後需要注意的是,CVSS 評分範圍從 0.0 到 10.0。

CVE 語言

需要注意的一個方面是整個 CVE 檔案中使用的一致語言。例如,如果一個 CVE 允許透過網路進行遠端入侵,那麼攻擊向量將被列為「網路」,並且基礎分數可能會因此而增加。其他常見的語言包括描述攻擊的複雜性、所需的許可權級別以及對完整性、保密性和可用性的影響。

掃描容器映像檔以查詢 CVEs

本章將探討三種流行的工具,它們可以掃描容器映像檔以識別其中存在的漏洞。此外,您還將學習如何根據 CIS Benchmarks 掃描映像檔。在介紹第三種工具時,我們將瞭解如何安裝和設定一個優秀的開源映像檔倉函式庫,該倉函式庫會自動掃描映像檔以查詢 CVEs。

# 使用 Trivy 掃描容器映像檔
$ docker run -it --rm aquasec/trivy image python:3.4-alpine

內容解密:

此範例展示瞭如何使用 Trivy 掃描 python:3.4-alpine 映像檔。首先,從 Docker Hub 提取 Trivy 的官方映像檔,然後執行它對指定的容器映像檔進行掃描。這種掃描可以幫助識別映像檔中存在的已知漏洞,從而提高容器的安全性。

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Kubernetes 叢集漏洞掃描工具 kube-hunter 實踐

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

此圖示展示了使用 Trivy 掃描容器映像檔的基本流程:從開始掃描到提取 Trivy 映像檔,接著執行掃描,最後顯示掃描結果。

結語

在本章中,我們探討了 CVEs 的概念及其對容器安全性的重要性,並介紹了幾種用於掃描容器映像檔以查詢已知漏洞的工具。透過瞭解 CVSS 評分系統和使用適當的工具,您可以更好地評估和管理容器環境中的安全風險。這不僅有助於保護您的應用程式和資料,而且也是維護整體 IT 環境安全性的重要一步。

容器映像檔 CVE 漏洞掃描

容器技術的普及使得應用程式的佈署變得更加便捷,但同時也帶來了安全風險。容器映像檔中可能包含各種漏洞,這些漏洞可能會被惡意攻擊者利用,從而對系統造成危害。因此,對容器映像檔進行漏洞掃描是非常重要的。

CVE 漏洞評分系統

CVE(Common Vulnerabilities and Exposures)是一個用於記錄和描述已知漏洞的資料函式庫。每個 CVE 都有一個唯一的編號和詳細的描述,包括漏洞的型別、影響範圍和修復方法等。CVE 漏洞評分系統使用 CVSS(Common Vulnerability Scoring System)來評估漏洞的嚴重程度。

CVSS 評分組成

CVSS 評分由三個主要部分組成:

  1. 基本指標群組(Base Metric Group):用於評估漏洞的基本特徵,包括攻擊向量、攻擊複雜度、所需許可權等。

    • 攻擊向量(Attack Vector)
    • 攻擊複雜度(Attack Complexity)
    • 所需許可權(Privileges Required)
    • 使用者互動(User Interaction)
    • 影響範圍(Scope)
    • 保密性影響(Confidentiality Impact)
    • 完整性影響(Integrity Impact)
    • 可用性影響(Availability Impact)
  2. 時間指標群組(Temporal Metric Group):用於評估漏洞隨時間變化的嚴重程度,包括漏洞的公開時間、修復狀態等。

    • 漏洞公開時間(Exploit Code Maturity)
    • 修復狀態(Remediation Level)
    • 回報可信度(Report Confidence)
  3. 環境指標群組(Environmental Metric Group):用於評估漏洞在特定環境下的嚴重程度,包括對保密性、完整性和可用性的需求。

    • 保密性需求(Confidentiality Requirement)
    • 完整性需求(Integrity Requirement)
    • 可用性需求(Availability Requirement)
    • 修改的基本指標(Modified Base Metrics)

容器映像檔漏洞掃描工具

有多種工具可用於掃描容器映像檔中的 CVE 漏洞,包括 Trivy、Anchore 和 Clair 等。這些工具可以幫助開發者和安全團隊識別和修復容器映像檔中的漏洞,從而提高系統的安全性。

Trivy

Trivy 是由 Aqua Security 開發的一款開源漏洞掃描工具,支援對容器映像檔進行快速掃描。它可以檢測映像檔中的作業系統套件和應用程式依賴項中的漏洞。

安裝 Trivy

Trivy 可以透過多種方式安裝,包括使用套件管理器和 Docker 容器。

  • 使用 apt 安裝(Debian 系統)

    $ apt-get install wget apt-transport-https gnupg lsb-release
    $ wget -qO- https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
    $ echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
    $ apt-get update
    $ apt-get install trivy
    
  • 使用 yum 安裝(Red Hat 系統) 首先,建立 /etc/yum.repos.d/trivy.repo 檔案,內容如下:

    [trivy]
    name=Trivy repository
    baseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/$releasever/$basearch/
    gpgcheck=0
    enabled=1
    

    然後執行:

    $ yum update
    $ yum -y install trivy
    
使用 Trivy 掃描容器映像檔

Trivy 可以直接掃描 Docker Hub 上的映像檔,也可以掃描本地映像檔。

  • 掃描 Docker Hub 上的映像檔
    $ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy nginx:latest
    

程式碼解析

FROM alpine:3.12
RUN apk --no-cache add ca-certificates git rpm
COPY trivy /usr/local/bin/trivy
COPY contrib/gitlab.tpl contrib/junit.tpl contrib/sarif.tpl /contrib/
ENTRYPOINT ["trivy"]

詳細解析

  1. 基礎映像檔選擇:使用 alpine:3.12 作為基礎映像檔,Alpine Linux 以其小巧和安全著稱,非常適合用於構建精簡的 Docker 映像檔。

  2. 安裝必要套件:透過 apk 命令安裝了 ca-certificatesgitrpm。這些套件對於後續的操作可能是必要的,例如 ca-certificates 用於確保 SSL/TLS 連線的安全性。

  3. 複製 Trivy 可執行檔:將預先編譯好的 Trivy 可執行檔複製到映像檔中的 /usr/local/bin/trivy。這使得 Trivy 成為容器中可執行的命令。

  4. 複製範本檔案:將一些範本檔案(如 gitlab.tpljunit.tplsarif.tpl)複製到 /contrib/ 目錄下。這些範本可能用於生成報告或與其他工具整合。

  5. 設定入口點:將 trivy 設定為容器的入口點(ENTRYPOINT),這意味著當容器啟動時,預設會執行 trivy 命令。

使用 Trivy 的優點
  • 快速掃描:Trivy 可以快速掃描容器映像檔中的漏洞。
  • 多平台支援:Trivy 支援多種作業系統和架構。
  • 易於整合:Trivy 可以輕鬆地整合到 CI/CD 管道中。

使用Trivy掃描容器映像的安全漏洞

Trivy是一款強大的開源工具,用於掃描容器映像中的安全漏洞。它支援多種掃描模式,包括對本地檔案系統、容器映像以及遠端映像倉函式庫的掃描。Trivy的使用非常簡單,並且能夠提供詳細的漏洞報告。

為什麼需要掃描容器映像?

容器映像可能包含多個軟體包和依賴項,這些都可能存在已知的安全漏洞。掃描容器映像可以幫助開發者和安全團隊識別和修復這些漏洞,從而提高整個應用程式的安全性。

Trivy的基本使用方法

首先,您需要安裝Trivy。Trivy提供了多種安裝方式,包括直接下載二進位制檔案、使用包管理器安裝以及在容器中執行。

在容器中執行Trivy

您可以使用以下命令在容器中執行Trivy來掃描本地的Docker映像:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
-v $HOME/Library/Caches:/root/.cache/ aquasec/trivy image <image-name>

這個命令會掛載Docker守護程式的通訊端檔案和Trivy的快取目錄,以便Trivy能夠存取本地的Docker映像並快取掃描結果。

Trivy的高階用法

在容器內部掃描檔案系統

Trivy不僅可以掃描容器映像,還可以直接掃描執行中容器的檔案系統。這對於檢查根據特定基礎映像的容器非常有用。

首先,您需要在容器內安裝Trivy。以下是在Alpine Linux容器中安裝Trivy的範例:

apk add curl
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s -- -b /usr/local/bin

安裝完成後,您可以執行以下命令來掃描容器的檔案系統:

trivy fs /

將Trivy嵌入Dockerfile

為了在CI/CDPipeline中自動化安全掃描,您可以直接在Dockerfile中嵌入Trivy的安裝和掃描命令。以下是一個範例:

FROM alpine:3.7
RUN apk add curl \
    && curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s -- -b /usr/local/bin \
    && trivy filesystem --exit-code 1 --no-progress /

內容解密:

此Dockerfile首先根據alpine:3.7映像,接著安裝curl,然後下載並執行Trivy的安裝指令碼,將Trivy安裝到/usr/local/bin目錄下。最後,它使用Trivy掃描檔案系統,若發現漏洞則以離開碼1終止。

  • apk add curl:在Alpine Linux中安裝curl工具,用於下載檔案。
  • curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s -- -b /usr/local/bin:下載Trivy的安裝指令碼並執行,將Trivy安裝到指定目錄。
  • trivy filesystem --exit-code 1 --no-progress /:對根目錄下的檔案系統進行掃描,若發現漏洞則離開碼設為1,並禁止進度顯示。

掃描結果解讀

Trivy的掃描結果會列出發現的安全漏洞,包括漏洞的嚴重程度(未知、低、中、高、嚴重)和總數。根據這些資訊,您可以優先處理最嚴重的漏洞,以提高容器的安全性。

範例結果:

對於Alpine Linux容器,結果可能是:

Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)

而對於根據Debian的Redis容器,結果可能是:

Total: 128 (UNKNOWN: 0, LOW: 90, MEDIUM: 6, HIGH: 30, CRITICAL: 2)

內容解密:

  • 結果顯示了掃描發現的總漏洞數,以及按照嚴重程度分類別的漏洞數量。
  • Total: 0表示未發現任何漏洞,這是理想的情況。
  • Total: 128表示總共發現了128個漏洞,其中包括低、中、高和嚴重等不同級別的漏洞,需要根據嚴重程度進行處理。