掃描 Docker 強化映象
Docker 強化映象 (DHI) 預設情況下是安全的,但與任何容器映象一樣,定期掃描它們作為漏洞管理過程的一部分非常重要。
您可以使用與掃描標準映象相同的工具(例如 Docker Scout、Grype 和 Trivy)來掃描 DHI。DHI 遵循相同的格式和標準,以確保您的安全工具的相容性。在掃描映象之前,必須將映象映象到您在 Docker Hub 上的組織中。
注意Docker Scout 已為 Docker Hub 上所有映象的 Docker 強化映象倉庫自動啟用,無需額外費用。您可以在 Docker Hub UI 中您組織的倉庫下直接檢視掃描結果。
Docker Scout
Docker Scout 已整合到 Docker Desktop 和 Docker CLI 中。它提供漏洞洞察、CVE 摘要和指向修復指南的直接連結。
使用 Docker Scout 掃描 DHI
要使用 Docker Scout 掃描 Docker 強化映象,請執行以下命令
$ docker scout cves <your-namespace>/dhi-<image>:<tag> --platform <platform>
示例輸出
v SBOM obtained from attestation, 101 packages found
v Provenance obtained from attestation
v VEX statements obtained from attestation
v No vulnerable package detected
...
有關更詳細的過濾和 JSON 輸出,請參閱Docker Scout CLI 參考。
使用 Docker Scout 在 CI/CD 中自動化 DHI 掃描
將 Docker Scout 整合到您的 CI/CD 管道中,可以自動驗證從 Docker 強化映象構建的映象在構建過程中是否仍然沒有已知漏洞。這種主動方法可確保您的映象在整個開發生命週期中持續保持安全完整性。
GitHub Actions 工作流程示例
以下是使用 Docker Scout 構建和掃描映象的 GitHub Actions 工作流程示例
name: DHI Vulnerability Scan
on:
push:
branches: [ main ]
pull_request:
branches: [ "**" ]
env:
REGISTRY: docker.io
IMAGE_NAME: ${{ github.repository }}
SHA: ${{ github.event.pull_request.head.sha || github.event.after }}
jobs:
scan:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
pull-requests: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build Docker image
run: |
docker build -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.SHA }} .
- name: Run Docker Scout CVE scan
uses: docker/scout-action@v1
with:
command: cves
image: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.SHA }}
only-severities: critical,high
exit-code: true
exit-code: true
引數確保如果檢測到任何關鍵或高嚴重性漏洞,工作流程將失敗,從而防止部署不安全的映象。
有關在 CI 中使用 Docker Scout 的更多詳細資訊,請參閱將 Docker Scout 與其他系統整合。
Grype
Grype 是一個開源掃描器,用於根據 NVD 和發行版諮詢等漏洞資料庫檢查容器映象。
使用 Grype 掃描 DHI
安裝 Grype 後,您可以透過拉取映象並執行掃描命令來掃描 Docker 強化映象
$ docker pull <your-namespace>/dhi-<image>:<tag>
$ grype <your-namespace>/dhi-<image>:<tag>
示例輸出
NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY EPSS% RISK
libperl5.36 5.36.0-7+deb12u2 (won't fix) deb CVE-2023-31484 High 79.45 1.1
perl 5.36.0-7+deb12u2 (won't fix) deb CVE-2023-31484 High 79.45 1.1
perl-base 5.36.0-7+deb12u2 (won't fix) deb CVE-2023-31484 High 79.45 1.1
...
您應該包含 --vex
標誌以在掃描期間應用 VEX 宣告,這將過濾掉已知不可利用的 CVE。有關更多資訊,請參閱VEX 部分。
Trivy
Trivy 是一個用於容器和其他工件的開源漏洞掃描器。它檢測作業系統包和應用程式依賴項中的漏洞。
使用 Trivy 掃描 DHI
安裝 Trivy 後,您可以透過拉取映象並執行掃描命令來掃描 Docker 強化映象
$ docker pull <your-namespace>/dhi-<image>:<tag>
$ trivy image <your-namespace>/dhi-<image>:<tag>
示例輸出
Report Summary
┌──────────────────────────────────────────────────────────────────────────────┬────────────┬─────────────────┬─────────┐
│ Target │ Type │ Vulnerabilities │ Secrets │
├──────────────────────────────────────────────────────────────────────────────┼────────────┼─────────────────┼─────────┤
│ <namespace>/dhi-<image>:<tag> (debian 12.11) │ debian │ 66 │ - │
├──────────────────────────────────────────────────────────────────────────────┼────────────┼─────────────────┼─────────┤
│ opt/python-3.13.4/lib/python3.13/site-packages/pip-25.1.1.dist-info/METADATA │ python-pkg │ 0 │ - │
└──────────────────────────────────────────────────────────────────────────────┴────────────┴─────────────────┴─────────┘
您應該包含 --vex
標誌以在掃描期間應用 VEX 宣告,這將過濾掉已知不可利用的 CVE。有關更多資訊,請參閱VEX 部分。
使用 VEX 過濾已知不可利用的 CVE
Docker 強化映象包含簽名的 VEX(漏洞可利用性交換)宣告,用於識別與映象執行時行為不相關的漏洞。
使用 Docker Scout 時,這些 VEX 宣告會自動應用,無需手動配置。
要為支援 VEX 的工具手動建立 JSON 檔案 VEX 宣告
$ docker scout attest get \
--predicate-type https://openvex.dev/ns/v0.2.0 \
--predicate \
<your-namespace>/dhi-<image>:<tag> --platform <platform> > vex.json
例如:
$ docker scout attest get \
--predicate-type https://openvex.dev/ns/v0.2.0 \
--predicate \
docs/dhi-python:3.13 --platform linux/amd64 > vex.json
這將建立一個包含指定映象的 VEX 宣告的 vex.json
檔案。然後,您可以將此檔案與支援 VEX 的工具一起使用,以過濾掉已知不可利用的 CVE。
例如,對於 Grype 和 Trivy,您可以使用 --vex
標誌在掃描期間應用 VEX 宣告
$ grype <your-namespace>/dhi-<image>:<tag> --vex vex.json