iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0
DevOps

連DevSecOps都不知道怎麼發音怎麼開始學習?系列 第 18

Day.18 容器不是黑盒子:用 Trivy 掃描 Docker 鏡像漏洞

  • 分享至 

  • xImage
  •  

前言

前面我們已經守住了程式碼、依賴、基礎架構 (IaC)、還有金鑰 Secrets。
但還有一個大家常忽略的角落:容器鏡像 (Docker image)

很多人覺得「程式打包成 Docker 就安全了」,甚至覺得 image 是一個密不透風的黑盒子。
事實上,容器就像是一個透明玻璃罐,你丟什麼進去都會被完整保存──包含老舊的系統函式庫、過期的套件、甚至已知的漏洞

這時候,我們需要一雙能透視的眼睛,看看裡面藏了什麼。
這就是 Trivy 的用途:一個開源的容器安全掃描工具,能幫你快速掃出 image 裡的漏洞與風險

1. 為什麼要檢查容器鏡像?

容器的好處是「一次打包,到處運行」,但壞處是:你打包什麼,漏洞就會跟著什麼。

常見的三種風險

  1. OS 層漏洞
  • 許多官方 base image (例如 python:3.9, node:14) 裡,往往帶著舊版 Debian/Ubuntu。
  • 這些作業系統層的套件可能存在已知 CVE,卻隨著 image 一起被部署到生產環境。
  1. 套件層漏洞
  • 除了作業系統,容器裡還會安裝大量應用套件(pip、npm、apt)。
  • 如果你沒更新,等於把已知弱點「密封」在鏡像裡。
  1. 供應鏈風險
  • 很多人直接用 Docker Hub 上的 public image。
  • 問題是,你無法保證這些 image 裡的內容是否安全,甚至可能混入惡意程式。

比喻來說,容器就像二手零食大禮包,看起來方便又便宜,但裡面可能混著過期食品或不明來源的東西。
你總不會不檢查就直接吃吧?

2. 基本用法

Trivy 是目前最常用的容器安全掃描工具之一,由 Aqua Security 開源維護。它的特點是:

  • 輕量:單一二進位檔即可使用,不需要額外伺服器。
  • 全方位掃描:不只 image,還能掃檔案系統、Git repo、Kubernetes YAML。
  • 即時更新:漏洞資料庫每天同步更新,覆蓋 CVE 與供應鏈風險。

典型的工作流程很簡單:

  1. 選擇一個容器 image(例如 python:3.9 或 node:14)。
  2. Trivy 掃描並輸出漏洞清單,分級為 LOW / MEDIUM / HIGH / CRITICAL。
  3. 若有修補版本,會同時列出「目前版本」與「可更新版本」。

最重要的是,Trivy 能讓開發者直觀看到「基底 image 本身就不乾淨」。
這提醒我們:安全不能光看應用程式,還要檢查應用承載的基礎環境

3. 自製 Dockerfile 的潛在風險

容器鏡像通常是從一個 base image(如 python:3.9、node:14)開始,再疊加安裝需求,例如:

  • apt-get install ... 安裝系統套件
  • pip install -r requirements.txt 安裝 Python 套件
  • npm install 安裝前端套件

這些步驟每一層都可能引入漏洞:

  1. Base image 本身
  • 官方提供的 image 不是「乾淨」的代名詞,裡面常有舊版 libc、OpenSSL、bash 等系統函式庫。
  • 這些漏洞會直接跟著 Dockerfile 打包進去。
  1. 應用層套件
  • 透過 pip、npm 安裝的依賴,若不鎖定版本或未更新,漏洞會在鏡像裡永久存在。
  • 特別是 requirements.txt / package-lock.json 沒更新時。
  1. 開發者自加的指令
  • 有時候工程師圖快,會在 Dockerfile 裡安裝 debug 工具或多餘服務(例如 curl、vim、甚至 openssh-server)。
  • 這些「方便工具」可能成為潛在攻擊面。

因此,掃描 Dockerfile 所生成的 image,不只是檢查應用程式,而是審視整個供應鏈。
你寫下的每一行指令,最後都會轉化成「能被攻擊的表面積 (attack surface)」。

4. 在 CI/CD 裡自動化

容器掃描如果只靠「開發者本地偶爾跑一下」,最後一定會被遺忘。
真正能發揮價值的地方,是把它納入 CI/CD pipeline。

在流程裡加上 Trivy,有幾個關鍵意義:

  1. 強制性檢查
  • 每一次 Pull Request 都要經過掃描。
  • 如果 image 裡有高風險漏洞,PR 直接掛紅燈,不允許合併。
  • 安全變成規則,而不是「記性」。
  1. 即時回饋
  • 開發者能在提交程式碼時立刻收到結果,而不是到上線後才發現。
  • 修復成本越早越低,這就是「Shift Left」的實踐。
  1. 透明性與審計
  • CI/CD 平台會自動紀錄掃描結果,能回顧每一次部署時的風險狀態
  • 在合規要求(金融、醫療)裡尤其重要。

比喻來說,把 Trivy 放進 CI/CD,就像遊戲副本入口的安檢門:
玩家能不能進去,不是看他想不想,而是系統會掃裝備,紅色警告就直接擋住。

結論

容器不是黑盒子,而是把作業系統、套件、工具全都打包在一起的透明罐子。
你放什麼進去,它就完整保存什麼──包括漏洞。

Trivy 的價值,就是在部署之前幫你照一張 X 光片,讓隱藏的風險無所遁形。
當這個流程被納入 CI/CD,它就不再仰賴開發者的記性,而成為規則的一部分。

就像討伐巨人前一定要檢查立體機動裝置,
上線前沒掃過容器鏡像,就等於背著壞掉的裝備衝向巨人──結果可想而知。

這不是額外的保險,而是最基本的生存條件
因為少掃一次,就可能讓一個老舊 OpenSSL,變成打穿整個世界線的破口。


上一篇
Day.17 別把鑰匙 commit 上 GitHub:Secrets Management 入門
下一篇
Day.19 從 CI 到 CD:自動部署到自己的伺服器
系列文
連DevSecOps都不知道怎麼發音怎麼開始學習?20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言