容器化應用日益普及,映像檔安全性成為關注焦點。確保映像檔不含已知漏洞至關重要,本文將介紹如何使用 Trivy 和 Anchore 等工具掃描並修復容器映像檔中的 CVE。透過這些工具,開發者可以及早發現潛在風險,並採取相應措施提升應用程式安全性。同時,本文也說明如何升級映像檔以修復已知的 CVE,以及如何使用 Anchore 設定安全策略,進一步強化容器環境的防護能力。以下將逐步說明如何使用這些工具進行 CVE 掃描和修復,並提供一些實務上的建議。

容器映像檔CVE掃描與修復

在容器化技術的應用中,確保容器映像檔的安全性是至關重要的。隨著容器技術的普及,容器映像檔中存在的安全漏洞(CVE)成為了一個重要的關注點。本章節將探討如何使用工具如Trivy和Anchore來掃描和修復容器映像檔中的CVE。

使用Trivy掃描容器映像檔

Trivy是一款流行的開源工具,用於掃描容器映像檔中的CVE。它能夠在容器映像檔建立過程中進行掃描,有效地識別出潛在的安全漏洞。在下面的範例中,我們使用docker build命令從Dockerfile構建映像檔,並使用Trivy進行掃描。

$ docker build -t myimage .
$ trivy image myimage

內容解密:

  • docker build命令用於從Dockerfile構建容器映像檔。
  • trivy image命令用於掃描指定的容器映像檔,識別其中的CVE。
  • Trivy的掃描結果將顯示出映像檔中存在的安全漏洞的數量和等級。

透過掃描結果,我們可以識別出映像檔中存在的高風險漏洞,如CVE-2019–14697。進一步查詢該CVE的詳細資訊,可以瞭解到具體的問題和修復建議。

升級映像檔以修復CVE

根據Trivy的掃描結果,我們可以透過升級映像檔中的軟體包來修復已知的CVE。例如,將Alpine Linux的版本升級到包含修復後的軟體包版本。

FROM alpine:3.12
#升級軟體包
RUN apk update && apk upgrade

內容解密:

  • FROM alpine:3.12指定了基礎映像檔。
  • RUN apk update && apk upgrade命令用於更新和升級Alpine Linux中的軟體包,以修復已知的安全漏洞。

使用Trivy掃描程式碼倉函式庫

Trivy還支援直接掃描公開的程式碼倉函式庫,識別其中依賴項的CVE。

$ trivy repo https://github.com/knqyf263/trivy-ci-test

內容解密:

  • trivy repo命令用於掃描指定的程式碼倉函式庫。
  • Trivy會查詢倉函式庫中的.lock檔案,檢查其中列出的軟體版本是否存在CVE。

探索Anchore

Anchore是另一款用於深入檢查容器映像檔和識別CVE的開源工具。它提供了豐富的功能,包括自定義策略檢查和阻止不安全的映像檔被推播到映像檔倉函式庫。

安裝Anchore

Anchore推薦使用Docker Compose進行安裝。首先,下載docker-compose.yaml檔案:

$ curl https://engine.anchore.io/docs/quickstart/docker-compose.yaml > docker-compose.yaml

然後,使用Docker Compose啟動Anchore服務:

$ docker-compose up -d

內容解密:

  • docker-compose up -d命令在後台啟動Anchore服務。
  • Anchore使用多個容器提供服務,包括PostgreSQL資料函式庫和Anchore Engine。

啟動後,可以使用以下命令檢查Anchore服務的狀態:

$ docker-compose exec api anchore-cli system status

內容解密:

  • anchore-cli system status命令用於檢查Anchore Engine服務的狀態。
  • 輸出結果顯示各個服務的執行狀態和版本資訊,有助於故障排除。

使用 Anchore Engine 進行容器映像檔掃描

安裝與設定 Anchore Engine

首先,我們需要安裝並執行 Anchore Engine。透過 docker-compose 可以輕鬆完成這項任務:

$ docker-compose up -d

執行後,可以使用以下指令檢查服務狀態:

$ docker-compose ps

成功的輸出應該顯示所有服務都在執行中,例如:

           Name                          Command               State                            Ports
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
anchore-engine-db             docker-entrypoint.sh postgres    Up      5432/tcp
anchore-policy-engine         /docker-entrypoint.sh anchore   Up      0.0.0.0:8228->8228/tcp
anchore-simpleq               /docker-entrypoint.sh anchore   Up      
api                           /docker-entrypoint.sh anchore   Up      0.0.0.0:8228->8228/tcp

更新漏洞資料函式庫

為了確保 Anchore Engine 的漏洞掃描功能正常運作,我們需要檢查最新的漏洞資料是否已同步到本地機器。可以使用以下指令進行檢查:

$ docker-compose exec api anchore-cli system feeds list

輸出結果將顯示各個漏洞來源的同步狀態,包括最後同步時間和記錄數量。例如:

Feed Group        LastSync                  RecordCount
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
vulnerabilities   alpine:3.10               2020-08-16T13:19:58.223993  23334

在繼續下一步之前,請等待所有漏洞來源的同步完成。

檢查引擎狀態

使用以下指令確認 Anchore Engine 是否已準備好進行掃描:

$ docker-compose exec api anchore-cli system wait

當漏洞資料函式庫同步完成後,該指令將輸出:

Feed sync: Checking sync completion for feed set (vulnerabilities)..
Feed sync: Success.

掃描容器映像檔

現在,我們可以開始掃描容器映像檔。首先,將映像檔新增到 Anchore Engine:

$ docker-compose exec api anchore-cli image add docker.io/library/nginx:latest

然後,檢查掃描狀態:

$ docker-compose exec api anchore-cli image get docker.io/library/nginx:latest | grep 'Analysis Status'

當分析狀態顯示為 analyzed 時,表示掃描已完成。接下來,可以列出映像檔中的漏洞:

$ docker-compose exec api anchore-cli image vuln docker.io/library/nginx:latest all

內容解密:

  1. docker-compose exec api anchore-cli image add docker.io/library/nginx:latest:將指定的 Nginx 映像檔新增到 Anchore Engine 以進行掃描。
  2. docker-compose exec api anchore-cli image get docker.io/library/nginx:latest | grep 'Analysis Status':檢查映像檔的分析狀態,確認掃描是否完成。
  3. docker-compose exec api anchore-cli image vuln docker.io/library/nginx:latest all:列出映像檔中的所有漏洞。

結果分析與比較

Anchore Engine 掃描結果顯示,Nginx 映像檔存在 61 個 CVE 漏洞,其中包括 2 個中等嚴重性的漏洞。與 Trivy 的掃描結果相比,兩者的結果存在差異。Trivy 發現了更多的漏洞,包括低、中、高和嚴重級別的漏洞。

內容解密:

  1. 不同掃描工具的結果比較:不同工具對同一映像檔的掃描結果可能不同,因此選擇一個可靠的掃描工具非常重要。
  2. 使用多種掃描工具:初期使用多種工具進行掃描有助於瞭解其輸出結果,從而制定更有效的映像檔掃描策略。
此圖示說明瞭 Anchore Engine 的掃描結果與 Trivy 的比較:
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title 容器映像檔CVE掃描與修復實務

package "Docker 架構" {
    actor "開發者" as dev

    package "Docker Engine" {
        component [Docker Daemon] as daemon
        component [Docker CLI] as cli
        component [REST API] as api
    }

    package "容器運行時" {
        component [containerd] as containerd
        component [runc] as runc
    }

    package "儲存" {
        database [Images] as images
        database [Volumes] as volumes
        database [Networks] as networks
    }

    cloud "Registry" as registry
}

dev --> cli : 命令操作
cli --> api : API 呼叫
api --> daemon : 處理請求
daemon --> containerd : 容器管理
containerd --> runc : 執行容器
daemon --> images : 映像檔管理
daemon --> registry : 拉取/推送
daemon --> volumes : 資料持久化
daemon --> networks : 網路配置

@enduml

內容解密:

  1. 流程圖說明:此圖示呈現了使用 Anchore Engine 和 Trivy 進行容器映像檔掃描的流程,並比較了兩者的結果。
  2. 比較與決策:根據比較結果,可以選擇最合適的掃描工具並制定有效的掃描策略,以確保容器化應用程式的安全。

容器映像檔 CVE 分析與 Anchore 掃描工具

容器技術的快速發展使得容器映像檔的安全性成為一大關注點。CVE(Common Vulnerabilities and Exposures)是記錄已知漏洞的公開資料函式庫,容器映像檔的 CVE 分析對於確保容器安全至關重要。Anchore 是一款開源的容器映像檔掃描工具,能夠對容器映像檔進行深入的安全性檢查。

Anchore 的功能與優勢

Anchore 提供兩種主要功能:自動化的容器映像檔掃描和手動掃描。自動化掃描可以持續監控映像檔倉函式庫,而手動掃描則可以整合到 CI/CD 管道中。這使得開發者和維運團隊能夠在容器映像檔進入生產環境之前發現並修復安全性問題。

命令列介面與掃描結果

Anchore 的開源版本主要透過命令列介面(CLI)進行操作。使用者可以透過 CLI 提取以下資訊:

  • 映像檔的後設資料
  • 映像檔內的檔案
  • 漏洞資料
  • 歷史掃描結果
  • 映像檔是否符合設定的策略

策略檢查與合規性

Anchore 的策略檢查機制允許使用者定義一系列規則來檢查容器映像檔。例如,可以檢查映像檔的 Dockerfile、檔案內容、軟體套件版本、已知漏洞等。策略檢查的結果可以是 PASS 或 FAIL,並提供詳細的報告。

策略比對條件

Anchore 的策略可以比對多種條件,如下表所示:

條件目的
Dockerfile 檢查檢查 Dockerfile 中的指令,如 FROM 和 EXPOSE
檔案檢查在映像檔內搜尋特設定檔案或內容
密碼檔案檢查檢查 /etc/passwd 檔案中的使用者和群組設定
軟體套件檢查檢查映像檔中是否包含特定的軟體套件
漏洞檢查根據 CVE 資料函式庫檢查已知漏洞
授權檢查檢查映像檔中的軟體授權是否符合規定
Ruby Gem 檢查檢查 Ruby Gem 的版本和來源
Node 和 npm 檢查檢查 Node.js 和 npm 的版本和依賴

使用範例與 CLI 命令

使用 Anchore CLI 可以進行各種操作,如新增映像檔、執行掃描、檢視掃描結果等。以下是一些範例命令:

# 執行 anchore-cli policy --help 命令以取得策略相關的幫助資訊
$ docker-compose exec api anchore-cli policy --help

# 列出所有可用的策略
$ docker-compose exec api anchore-cli policy list

# 從 Policy Hub 安裝 CIS Benchmark 策略
$ docker-compose exec api anchore-cli policy hub install anchore_cis_1.13.0_base

# 新增映像檔到 Anchore 進行掃描
$ docker-compose exec api anchore-cli image add docker.io/library/redis:latest

策略檢查結果與輸出

當執行策略檢查後,Anchore 會輸出檢查結果,包括是否透過(PASS)或失敗(FAIL),以及相關的警告或錯誤資訊。

容器映像檔 CVE 掃描工具:Anchore 與 Clair

在容器化技術的應用中,安全是不可或缺的一環。其中,容器映像檔的安全掃描更是重中之重。本篇文章將介紹兩款流行的開源掃描工具:Anchore 與 Clair,並探討它們在容器映像檔 CVE(Common Vulnerabilities and Exposures)掃描中的應用。

Anchore:容器映像檔掃描利器

Anchore 是一款功能強大的開源工具,用於掃描容器映像檔中的安全漏洞。它支援多種掃描模式,包括對 Docker 映像檔的掃描。Anchore 的一大特點是其支援自定義策略(Policy),允許使用者根據自身需求定義掃描規則。

使用 Anchore 掃描 Redis 映像檔

以下是一個使用 Anchore 掃描 Redis 映像檔的例子。首先,使用 docker-compose 啟動 Anchore 服務:

$ docker-compose up -d

接著,使用 anchore-cli 命令列工具等待映像檔分析完成:

$ docker-compose exec api anchore-cli image wait docker.io/library/redis:latest

分析完成後,執行掃描:

$ docker-compose exec api anchore-cli evaluate check docker.io/library/redis:latest --policy anchore_cis_1.13.0_base --detail

掃描結果顯示,該 Redis 映像檔存在多個安全漏洞,最終評估狀態為 fail

內容解密:

  1. docker-compose up -d:在背景啟動 docker-compose 服務。
  2. anchore-cli image wait:等待指定的映像檔分析完成。
  3. anchore-cli evaluate check:對指定的映像檔執行安全掃描,並根據指定的策略進行評估。

Clair:靜態分析工具

Clair 是另一款流行的開源靜態分析工具,專門用於掃描容器映像檔中的安全漏洞。Clair 由三個元件組成:PostgreSQL 資料函式庫、Clair 伺服器和 Clairctl 掃描器。

使用 Clair 進行 CVE 掃描

Clair 可以使用 Docker 和 Docker Compose 佈署。掃描器會將結果輸出為 HTML 報告。雖然 Clair 目前正在進行重構,但它仍然是一款值得關注的工具。

Harbor:安全的容器映像檔倉函式庫

Harbor 是一款功能豐富的開源容器映像檔倉函式庫,提供細粒度的存取控制、映像檔簽署和 CVE 掃描等功能。Harbor 的安裝過程相對簡單,支援 Ubuntu 等多種作業系統。

使用 Harbor 進行 CVE 掃描

Harbor 提供內建的 CVE 掃描功能,可以手動或自動觸發。使用者可以輕鬆地將 Harbor 佈署為本地的容器映像檔倉函式庫,提高映像檔提取速度和安全性。