天天看點

容器鏡像安全掃描之Trivy一 概述二 安裝部署三 內建到CI四 注意事項五 反思參考連結

一 概述

1.1 Trivy簡介

Trivy是一種适用于CI的簡單而全面的容器漏洞掃描程式。軟體漏洞是指軟體或作業系統中存在的故障、缺陷或弱點。Trivy檢測作業系統包(Alpine、RHEL、CentOS等)和應用程式依賴(Bundler、Composer、npm、yarn等)的漏洞。Trivy很容易使用,隻要安裝二進制檔案,就可以掃描了。掃描隻需指定容器的鏡像名稱。與其他鏡像掃描工具相比,例如Clair,Anchore Engine,Quay相比,Trivy在準确性、友善性和對CI的支援等方面都有着明顯的優勢。

1.2 特性

  1. 檢測面很全,能檢測全面的漏洞,作業系統軟體包(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);
  2. 使用簡單,僅僅隻需要指定鏡像名稱;
  3. 掃描快且無狀态,第一次掃描将在10秒内完成(取決于您的網絡)。随後的掃描将在一秒鐘内完成。與其他掃描器在第一次運作時需要很長時間(大約10分鐘)來擷取漏洞資訊,并鼓勵您維護持久的漏洞資料庫不同,Trivy是無狀态的,不需要維護或準備;
  4. 易于安裝,安裝方式:
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進行內建,定時對已經上傳的鏡像進行掃描。

參考連結