一 概述
1.1 Trivy簡介
Trivy是一種适用于CI的簡單而全面的容器漏洞掃描程式。軟體漏洞是指軟體或作業系統中存在的故障、缺陷或弱點。Trivy檢測作業系統包(Alpine、RHEL、CentOS等)和應用程式依賴(Bundler、Composer、npm、yarn等)的漏洞。Trivy很容易使用,隻要安裝二進制檔案,就可以掃描了。掃描隻需指定容器的鏡像名稱。與其他鏡像掃描工具相比,例如Clair,Anchore Engine,Quay相比,Trivy在準确性、友善性和對CI的支援等方面都有着明顯的優勢。
1.2 特性
- 檢測面很全,能檢測全面的漏洞,作業系統軟體包(Alpine、Red Hat Universal Base Image、Red Hat Enterprise Linux、CentOS、Oracle Linux、Debian、Ubuntu、Amazon Linux、openSUSE Leap、SUSE Enterprise Linux、Photon OS 和Distrioless)、應用程式依賴項(Bundler、Composer、Pipenv、Poetry、npm、yarn和Cargo);
- 使用簡單,僅僅隻需要指定鏡像名稱;
- 掃描快且無狀态,第一次掃描将在10秒内完成(取決于您的網絡)。随後的掃描将在一秒鐘内完成。與其他掃描器在第一次運作時需要很長時間(大約10分鐘)來擷取漏洞資訊,并鼓勵您維護持久的漏洞資料庫不同,Trivy是無狀态的,不需要維護或準備;
- 易于安裝,安裝方式:
1. apt-get install
2. yum install
3. brew install
無需安裝資料庫、庫等先決條件(例外情況是需要安裝rpm以掃描基于RHEL/CentOS的圖像)。
二 安裝部署
2.1 Linux安裝
$ sudo vim /etc/yum.repos.d/trivy.repo
[trivy]
name=Trivy repository
baseurl=https://knqyf263.github.io/trivy-repo/rpm/releases/$releasever/$basearch/
gpgcheck=0
enabled=1
$ sudo yum -y update
$ sudo yum -y install trivy
2.2 Mac OS安裝
$ brew install knqyf263/trivy/trivy
2.3 使用方式
當然,trivy也支援docker快速啟動
docker run --rm -v [YOUR_CACHE_DIR]:/root/.cache/ knqyf263/trivy [YOUR_IMAGE_NAME]
需要将YOUR_CACHE_DIR替換成你的緩存目錄,将之前緩存的漏洞庫映射到容器中,不然啟動會很慢
如果想通過這種方式掃描本機的容器鏡像,需要将docker.sock檔案映射到容器内,比如
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
-v $HOME/.cache/:/root/.cache/ knqyf263/trivy python:3.4-alpine
trivy使用簡單示例如下:
掃描鏡像:
trivy [image_name]
掃描通過save方式打包的鏡像:
trivy --input [image_name.tar]
将掃描結果存為json檔案:
trivy -f json -o results.json [image_name]
通過設定漏洞級别過濾漏洞:
trivy --severity HIGH,CRITICAL [image_name]
通過設定漏洞類型過濾漏洞:
trivy --vuln-type os [image_name]
漏洞類型分為os和library
隻更新某個系統類型的漏洞庫:
trivy --only-update alpine,debia [image_name]
指定退出代碼:
trivy --exit-code 1 [image_name]
指定退出代碼,主要是為後續判斷提供可操作性,主要是在CI中
由于trivy有緩存,是以在掃描鏡像的latest版本的時候,會出現異常,需要清楚緩存操作:
trivy --clear-cache [image_name]
如果需要重建本地漏洞資料庫,或清除所有緩存,可以通過trivy --reset
三 內建到CI
Trivy有對CI友好的特點,并且官方也以這種方式使用它,想要內建CI隻需要一段簡單的Yml配置檔案即可,如果發現漏洞,測試将失敗。如果不希望測試失敗,請指定--exit code 0。由于在自動化場景(如CI/CD)中,您隻對最終結果感興趣,而不是對完整的報告感興趣,是以請使用--light标志對此場景進行優化,以獲得快速的結果。
內建GitLab CI的Yml配置可以參考:
https://github.com/aquasecurity/trivy#gitlab-ci四 注意事項
- 國内拉取漏洞資料庫慢。
- 同一台伺服器,多個鏡像掃描的時候不可并行執行。
- 可以使用--light使用輕量級資料庫來優化執行掃描的效率。
五 反思
trivy不僅可以內建在CI過程中,及時發現鏡像漏洞,而且可以于自建harbor進行內建,定時對已經上傳的鏡像進行掃描。