Docker 映像檔的 CVE 修復與預防

最後更新: 2023-03-03 14:00:22 +0800 +0800
原文以英文撰寫。您正在閱讀AI翻譯版本。

經驗法則:

  1. 確保映像檔已設定適當的安全性軟體升級來源,避免 apt-get upgrade(或等效命令)未執行任何動作。
  2. 在 Dockerfile 中加入 RUN apt-get update && apt-get upgrade -y(或等效命令)。
  3. 在涉及靜態連結 Go 程式的少數情況下,請刪除該程式,或在 docker build 過程中從原始碼重新建置。
  4. 排定每週或每月自行重新建置。

背景 #

  1. Docker 官方映像檔(Docker official images,DOI)的唯一真實來源,是 https://github.com/docker-library/official-images 的 master 分支。該專案使用名為「Library definition files」的格式,定義哪些儲存庫中的哪些標籤應主動重新建置,以及其 Dockerfile 的位置(Git 儲存庫 URL 與 commit ID)。這些 repo:tag 稱為目前仍維護的映像檔。
    • 這些被參照的 Dockerfile Git 儲存庫中,大多數但非全部由 Docker Inc. 本身維護。此處提供一個例子。
  2. https://doi-janky.infosiftr.net/ 上的 Jenkins 工作會分析所有 DOI 的 Dockerfile、產生最新的 DOI 相依關係,並將其保存至 https://github.com/docker-library/meta。
  3. 透過這些中繼資料,每個合併至 DOI Dockerfile 的 PR 都會在 https://doi-janky.infosiftr.net/ 觸發其所有下游 DOI(即 FROM 該映像檔者)重新建置並推送至 Docker Hub。
    • 系統不保證會進行排程的無條件重新建置。

觀察 #

  1. Docker Inc. 的 DOI 不會在 Dockerfile 中執行 RUN apt upgrade(或等效命令),其他 DOI 供應商也無須如此做。
  2. 即使 DOI 供應商在 Dockerfile 中加入作業系統升級步驟,若沒有排程的無條件重新建置,安全性修補程式(若有)仍不會安裝。
  3. 部分 DOI 使用的發行版預設停用上游安全性更新。範例請參閱 docker run --rm mysql:9.6.0 tail /etc/yum.repos.d/oracle-linux-ol9.repo。

因此,目前仍維護的 DOI 無法保證在建置時不含 CVE。所以,無操作的重新建置(未執行 RUN apt upgrade 或等效命令)不會修復任何問題。

參考資料:

評論

在 GitHub 上閱讀或評論(發表評論需要登入)