一.系統(tǒng)環(huán)境
本文主要基于Docker version 20.10.14和Linux操作系統(tǒng)Ubuntu 18.04。
| 服務(wù)器版本 | docker軟件版本 | CPU架構(gòu) |
|---|---|---|
| Ubuntu 18.04.5 LTS | Docker version 20.10.14 | x86_64 |
二.前言
隨著容器技術(shù)的普及,容器鏡像的安全性問題日益凸顯。容器鏡像中可能存在的漏洞會被攻擊者利用,從而導(dǎo)致整個應(yīng)用的安全風(fēng)險。因此,對容器鏡像進行安全漏洞掃描成為了必要的需求。Trivy是一款由aquasecurity團隊開發(fā)的容器鏡像安全漏洞掃描工具,支持Docker、Kubernetes等多種容器技術(shù),具有易于使用、支持多種漏洞數(shù)據(jù)庫等特點。
三.Trivy簡介
Trivy是一款全面且多功能的安全掃描程序。Trivy 具有查找安全問題的掃描器。Trivy官網(wǎng)為:https://github.com/aquasecurity/trivy ,Trivy軟件包下載地址為:https://github.com/aquasecurity/trivy/releases/。
Trivy 可以掃描的對象為:
容器鏡像;
文件系統(tǒng);
Git Repository (遠程);
虛擬機映像;
Kubernetes;
AWS系統(tǒng)。
Trivy能夠發(fā)現(xiàn)的問題有:
正在使用的操作系統(tǒng)包和軟件依賴項 (SBOM);
已知漏洞 (CVE);
IaC 問題和錯誤配置;
敏感信息和機密;
軟件許可證。
四.Trivy漏洞掃描原理
Trivy通過分析容器鏡像的文件系統(tǒng),識別出其中的軟件包及其版本號,然后與漏洞數(shù)據(jù)庫進行匹配,找出存在安全漏洞的軟件包。Trivy采用了以下技術(shù)實現(xiàn)漏洞掃描:
Dockerfile解析:Trivy可以根據(jù)Dockerfile自動解析出容器鏡像的構(gòu)建過程,獲取鏡像中包含的軟件包及其版本號。
漏洞數(shù)據(jù)庫匹配:Trivy將容器鏡像中的軟件包及其版本號與漏洞數(shù)據(jù)庫進行匹配,找出存在安全漏洞的軟件包。
漏洞詳情展示:Trivy提供了詳細的漏洞信息,包括漏洞描述、影響版本、修復(fù)建議等,幫助用戶了解漏洞風(fēng)險。
CVE全稱是Common Vulnerabilities and Exposures,即通用漏洞披露,它是MITRE公司維護和更新的安全漏洞列表,列表中的每個條目都會有一個唯一的CVE編號,即CVE ID,供安全研究員和受攻擊的軟件供應(yīng)商使用,以便確定和回應(yīng)安全漏洞。CVE條目包含了與CVE ID相關(guān)的漏洞的描述性數(shù)據(jù)(即簡要描述和至少一個參考)。當前CVE累計收錄了19萬+個安全漏洞。
Trivy漏洞掃描原理簡單來說就是:Trivy下載漏洞數(shù)據(jù)庫CVE到本地,Trivy本地數(shù)據(jù)庫記錄了常見的漏洞信息,Trivy讀取鏡像里的程序和本地數(shù)據(jù)庫進行比對,確定鏡像是否存在漏洞。
五.利用trivy檢測容器鏡像的安全性
首先需要安裝docker。
[root@etcd2~]#yum-yinstalldocker-ce
查看docker版本。
[root@etcd2 ~]# docker -v Docker version 20.10.12, build e91ed57
配置docker鏡像加速器。
[root@etcd2 ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://frz7i079.mirror.aliyuncs.com"
]
}
提前下載好鏡像做準備,我們下載了redis,busybox,nginx鏡像。
[root@etcd2 ~]# docker pull redis [root@etcd2 ~]# docker pull busybox [root@etcd2 ~]# docker pull nginx [root@etcd2 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest ec3f0931a6e6 4 months ago 1.24MB nginx latest 605c77e624dd 5 months ago 141MB redis latest 7614ae9453d1 5 months ago 113MB
下載好trivy安裝包。
[root@etcd2 ~]# ls trivy_0.28.1_Linux-64bit.rpm trivy_0.28.1_Linux-64bit.rpm
安裝trivy。
[root@etcd2~]#yum-yinstalltrivy_0.28.1_Linux-64bit.rpm
現(xiàn)在trivy就安裝好了。
[root@etcd2 ~]# which trivy /usr/local/bin/trivy
查看幫助:trivy --help。
[root@etcd2 ~]# trivy --help
查看trivy掃描鏡像的語法:
[root@etcd2 ~]# trivy image --help
trivy image nginx 表示檢測nginx鏡像的漏洞,第一次檢測漏洞會下載漏洞數(shù)據(jù)庫,漏洞數(shù)據(jù)庫目錄默認是~/.cache/trivy 。
[root@etcd2 ~]# trivy image nginx 2022-06-16T1701.035+0800 INFO Need to update DB 2022-06-16T17:06:01.036+0800 INFO DB Repository: ghcr.io/aquasecurity/trivy-db 2022-06-16T17:06:01.036+0800 INFO Downloading DB... 32.56 MiB / 32.56 MiB [------------------------------------------------------------------------------------------------------------------------------------------------------------] 100.00% 42.01 KiB p/s 13m14ss 2022-06-16T17:19:28.400+0800 WARN Increase --timeout value 2022-06-16T17:19:28.400+0800 FATAL image scan error: scan error: image scan failed: failed analysis: analyze error: timeout: context deadline exceeded
漏洞數(shù)據(jù)庫下載好之后,就可以檢測鏡像漏洞了,顯示了5個級別的漏洞:
UNKNOWN: 1, LOW: 93, MEDIUM: 43, HIGH: 41, CRITICAL: 24。 [root@etcd2 ~]# trivy image nginx 2022-06-16T1711.533+0800 INFO Detected OS: debian 2022-06-16T1711.533+0800 INFO Detecting Debian vulnerabilities... 2022-06-16T1711.585+0800 INFO Number of language-specific files: 0 nginx (debian 11.2) Total: 202 (UNKNOWN: 1, LOW: 93, MEDIUM: 43, HIGH: 41, CRITICAL: 24) ┌─────────────────────┬──────────────────┬──────────┬────────────────────┬─────────────────────────┬──────────────────────────────────────────────────────────────┐ │ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │ ├─────────────────────┼──────────────────┼──────────┼────────────────────┼─────────────────────────┼──────────────────────────────────────────────────────────────┤ │ apt │ CVE-2011-3374 │ LOW │ 2.2.4 │ │ It was found that apt-key in apt, all versions, do not │ │ │ │ │ │ │ correctly... │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2011-3374 │ ├─────────────────────┼──────────────────┼──────────┼────────────────────┼─────────────────────────┼──────────────────────────────────────────────────────────────┤ │ bsdutils │ CVE-2021-3995 │ MEDIUM │ 2.36.1-8 │ 2.36.1-8+deb11u1 │ util-linux: Unauthorized unmount of FUSE filesystems │ │ │ │ │ │ │ belonging to users with similar uid... │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-3995 │ ├─────────────────────┼──────────────────┼──────────┼────────────────────┼─────────────────────────┼──────────────────────────────────────────────────────────────┤ ...... ├─────────────────────┼──────────────────┼──────────┼────────────────────┼─────────────────────────┼──────────────────────────────────────────────────────────────┤ │ zlib1g │ CVE-2018-25032 │ HIGH │ 1:1.2.11.dfsg-2 │ 1:1.2.11.dfsg-2+deb11u1 │ zlib: A flaw found in zlib when compressing (not │ │ │ │ │ │ │ decompressing) certain inputs... │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2018-25032 │ └─────────────────────┴──────────────────┴──────────┴────────────────────┴─────────────────────────┴──────────────────────────────────────────────────────────────┘
trivy緩存漏洞數(shù)據(jù)庫目錄如下:
[root@etcd2 ~]# ls .cache/trivy/ -lh 總用量 0 drwxr-xr-x 2 root root 43 6月 16 17:19 db drwx------ 2 root root 22 6月 16 17:06 fanal
trivy會下載漏洞數(shù)據(jù)庫到本地,有時候下載會很慢,可以直接把已經(jīng)安裝好的~/.cache/trivy文件夾直接打包,放到新安裝的機器上,就可以直接使用trivy了。
Trivy開始運行時每 12 小時下載一次漏洞數(shù)據(jù)庫。這通常很快,因為數(shù)據(jù)庫的大小只有 10~30MB。但是,如果您甚至想跳過它,請使用該--skip-db-update選項:trivy image --skip-db-update nginx:1.16。
trivy只下載漏洞數(shù)據(jù)庫語法為:
[root@etcd2 ~]# trivy image --download-db-only
檢測redis鏡像漏洞。
[root@etcd2 ~]# trivy image redis | head 2022-06-16T1718.504+0800 INFO Detected OS: debian 2022-06-16T1718.505+0800 INFO Detecting Debian vulnerabilities... 2022-06-16T1718.520+0800 INFO Number of language-specific files: 0 redis (debian 11.2) =================== Total: 108 (UNKNOWN: 0, LOW: 63, MEDIUM: 18, HIGH: 16, CRITICAL: 11) ┌──────────────────┬──────────────────┬──────────┬───────────────────┬─────────────────────────┬──────────────────────────────────────────────────────────────┐ │ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
檢測nginx鏡像漏洞。
[root@etcd2 ~]# trivy image nginx | head 2022-06-16T1735.172+0800 INFO Detected OS: debian 2022-06-16T1735.172+0800 INFO Detecting Debian vulnerabilities... 2022-06-16T1735.189+0800 INFO Number of language-specific files: 0 nginx (debian 11.2) =================== Total: 202 (UNKNOWN: 1, LOW: 93, MEDIUM: 43, HIGH: 41, CRITICAL: 24) ┌─────────────────────┬──────────────────┬──────────┬────────────────────┬─────────────────────────┬──────────────────────────────────────────────────────────────┐ │ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
注意Trivy 漏洞報告格式默認是表格。
[root@etcd2~]#trivyimage-ftablenginx:1.16
Trivy 漏洞報告格式也可以設(shè)置為JSON格式(-f), -o指定輸出打印到文件里。
[root@etcd2~]#trivyimage-fjson-oresults.jsonnginx:1.16
六.總結(jié)
Trivy是一款功能強大、易于使用的容器鏡像安全漏洞掃描工具。通過在docker環(huán)境下的實踐,我們了解到Trivy可以有效地檢測容器鏡像中的安全漏洞,幫助我們保障應(yīng)用的安全性。
致力于一條龍式的為您解決問題
鏈接:https://www.cnblogs.com/renshengdezheli/p/18261192
-
Linux
+關(guān)注
關(guān)注
88文章
11758瀏覽量
219009 -
服務(wù)器
+關(guān)注
關(guān)注
14文章
10251瀏覽量
91480 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7401瀏覽量
129284
原文標題:五.利用trivy檢測容器鏡像的安全性
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
開發(fā)人員和嵌入式系統(tǒng)設(shè)計人員如何使用JWT關(guān)閉物聯(lián)網(wǎng)設(shè)備的安全漏洞?
軟件安全漏洞的靜態(tài)檢測技術(shù)
Linux發(fā)現(xiàn)更多安全漏洞LHA 與imlib受到波及
Intel發(fā)布補丁 修復(fù)vPro安全漏洞
基于區(qū)塊鏈的網(wǎng)絡(luò)安全漏洞檢測系統(tǒng)
基于循環(huán)神經(jīng)網(wǎng)絡(luò)的Modbus/TCP安全漏洞測試
分解漏洞掃描,什么是漏洞掃描?
Acunetix Web Vulnerability Scanner(AWVS)工具簡介
常見的漏洞掃描工具
如何消除內(nèi)存安全漏洞
Trivy容器鏡像安全漏洞掃描工具簡介
評論