自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

四款免費(fèi)、易用的Docker漏洞掃描工具

譯文 精選
安全 漏洞
本文向您介紹四種既可以掃描Docker鏡像中的漏洞,又能夠被輕松地集成到CI/CD中的實(shí)用工具。

譯者 | 陳峻

審校 | 重樓

最近,我找到了一些既可以掃描Docker鏡像中的漏洞,又能夠被輕松地集成到CI/CD中的工具。除去那些較為老舊且不太直觀的,本文我將向您介紹四種免費(fèi)、最新且易用的掃描工具。

基本原理

所有這些工具的工作原理都比較類(lèi)似。它們使用的是如下兩步流程:

  1. 生成軟件物料清單(Software Bill of MaterialsSBOM)。
  2. SBOM與不同的漏洞數(shù)據(jù)庫(kù)進(jìn)行比較。

此處的SBOM是針對(duì)那些Docker鏡像中運(yùn)行的系統(tǒng)和應(yīng)用而安裝的、所有軟件依賴包列表。由于系統(tǒng)級(jí)軟件包經(jīng)常被忽略,因此在管道中進(jìn)行Docker掃描是非常重要的。這就引出了第二步,即:根據(jù)多個(gè)漏洞數(shù)據(jù)庫(kù),對(duì)SBOM中的每個(gè)軟件包進(jìn)行檢查,以發(fā)現(xiàn)其中是否存在漏洞。而且在搜尋和匹配時(shí),軟件包的版本也應(yīng)被考慮在內(nèi)。

1. Docker Scout

該工具由Docker公司開(kāi)發(fā)并已內(nèi)置到了Docker Desktop應(yīng)用中。遺憾的是,它并沒(méi)有與DockerCLI捆綁,所以您需要手動(dòng)進(jìn)行安裝。即,在Docker的CLI環(huán)境中,您需要使用如下單行命令來(lái)完成安裝:

curl -sSfL https://raw.githubusercontent.com/docker/scout-cli/main/install.sh | sh -s --

當(dāng)然,您也可以從其官方的GitHub庫(kù)處進(jìn)行復(fù)制。一旦您具備了運(yùn)行docker scout的條件,便可以運(yùn)行docker scout quickview了。顧名思義,它主要適合于只想獲悉Docker中存在著多少漏洞及其嚴(yán)重程度,而無(wú)需深究具體漏洞的需求。

~? docker scout quickview ubuntu:20.04
 ? Image stored for indexing
 ? Indexed 127 packages

 Target │ ubuntu:20.04 │ 0C 0H 3M 10L 
digest │ bf40b7bc7a11 │

如上所示,該Ubuntu 20.04鏡像并不存在嚴(yán)重或高危的漏洞,不過(guò)有著幾個(gè)中等嚴(yán)重程度的漏洞。若要獲取每個(gè)漏洞的詳細(xì)信息,請(qǐng)運(yùn)行docker scout cves。它將顯示與漏洞相關(guān)的CVE列表,并提供相應(yīng)的鏈接,以便您了解更多信息。此外,Docker Scout還會(huì)告訴你是否有更新版本的受影響軟件包修復(fù)了該漏洞。例如:

~? docker scout cves ubuntu:20.04
...
pkg:deb/ubuntu/gnutls28@3.6.13-2ubuntu1.8?os_distro=focal&os_name=ubuntu&os_version=20.04

 ? MEDIUM CVE-2023-5981
 https://scout.docker.com/v/CVE-2023-5981
 Affected range : <3.6.13-2ubuntu1.9 
 Fixed version : 3.6.13-2ubuntu1.9 
 CVSS Score : 5.9 
 CVSS Vector : CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N
...

在上述例子中,其中的一個(gè)中型漏洞來(lái)自版本為3.6.13-2ubuntu1.8gnutls軟件包。該漏洞已在3.6.13-2ubuntu1.9版本中被修復(fù),但該Ubuntu Docker鏡像的維護(hù)者顯然還沒(méi)有及時(shí)更新鏡像。

同時(shí),Docker Scout還被內(nèi)置在了DockerHub中,DockerHub是由Docker公司托管的鏡像注冊(cè)中心。它可以免費(fèi)為您的3個(gè)鏡像執(zhí)行掃描。若要掃描更多的鏡像,則需升級(jí)到付費(fèi)計(jì)劃版本。DockerHub會(huì)在每次推送新標(biāo)簽時(shí),都執(zhí)行一次漏洞掃描。要啟用該服務(wù),請(qǐng)打開(kāi)鏡像的repo(存儲(chǔ)庫(kù)),進(jìn)入“設(shè)置”,然后啟用Docker Scout鏡像分析。

DockerHub上的Docker Scout掃描報(bào)告DockerHub上的Docker Scout掃描報(bào)告

Docker Scout對(duì)于CI/CD服務(wù)的支持相當(dāng)不錯(cuò)。他們?yōu)?/span>GitHub Actions、GitLab CI/CD、CircleCI、Azure DevOpsJenkins甚至是BitBucket Pipelines都提供了各種模板。請(qǐng)參見(jiàn)鏈接--https://github.com/docker/scout-cli?tab=readme-ov-file#ci-integration

2. Trivy

Trivy是由Aqua Security開(kāi)發(fā)的一款開(kāi)源工具。相比Docker Scout,它除了能夠掃Docker鏡像外,也提供隱蔽檢測(cè)和對(duì)IaC(基礎(chǔ)設(shè)施即代碼)配置錯(cuò)誤的掃描。您既可以用多種軟件包管理器(如:aptyum、brew、pacman、port、以及nix)來(lái)安裝Trivy,也可以通過(guò)鏈接--https://aquasecurity.github.io/trivy/v0.48/getting-started/installation/,直接下載其二進(jìn)制文件。在首次運(yùn)行時(shí),它會(huì)將所有漏洞數(shù)據(jù)庫(kù)都下載到本地環(huán)境中。您可以通過(guò)運(yùn)行trivy image來(lái)掃描目標(biāo)鏡像。下面,我們將從Dockerfile中創(chuàng)建一個(gè)自定義的鏡像:

FROM alpine:3.18

RUN mkdir /app
COPY <<EOF /app/aws-creds
[default]
aws_access_key_id = AKIA5432112345XXXXPP
aws_secret_access_key = P9YXdfASASDfdsfdldFdfdfs4sldkfksfsdle3vg
EOF

Dockerfile會(huì)使用alpine作為基礎(chǔ)鏡像,以創(chuàng)建帶有硬編碼AWS密鑰的aws-creds文件。我們可以通過(guò)如下命令來(lái)構(gòu)建鏡像并運(yùn)行掃描。

~? docker build -t test-image -f Dockerfile .
~? trivy image test-image
test-image (alpine 3.18.5)

Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)

/app/aws-creds (secrets)

Total: 2 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 2)

CRITICAL: AWS (aws-access-key-id)
═══════════════════════════════════════════════════════════════════════
AWS Access Key ID
───────────────────────────────────────────────────────────────────────
 /app/aws-creds:2 (added by 'COPY <<EOF /app/aws-creds # buildkit')
───────────────────────────────────────────────────────────────────────
 2 [ aws_access_key_id = ********************
 3 aws_secret_access_key = ****************************************
───────────────────────────────────────────────────────────────────────

在此,Trivy運(yùn)行了兩種類(lèi)型的掃描:針對(duì)已安裝軟件包的漏洞掃描、以及用于查找文件中密鑰的密鑰檢測(cè)。在本例中,漏洞掃描并沒(méi)有發(fā)現(xiàn)任何問(wèn)題。這是在意料之中的,畢竟我們使用的是alpine鏡像,其中只有非?;镜牟僮飨到y(tǒng)軟件包,沒(méi)有其他,甚至連Bash都沒(méi)有。不過(guò),密鑰檢測(cè)發(fā)現(xiàn)了aws-creds中的硬編碼密鑰。同時(shí),Trivy還能捕捉到環(huán)境變量中的密鑰。例如,使用如下由Dockerfile構(gòu)建的鏡像,其生成的報(bào)告也會(huì)體現(xiàn)出發(fā)現(xiàn)了關(guān)鍵性問(wèn)題。

FROM alpine:3.18
ENV AWS_ACCESS_KEY_ID=AKIA5432112345XXXXPP
ENV AWS_SECRET_ACCESS_KEY=P9YXdfASDfdsfdldFdfdfs4sldkfksfsdle3vg

此外,您還可以為密鑰掃描自定義匹配器,以掃描Dockerfile本身,而不是鏡像。為此,您可以導(dǎo)航到包含了Dockerfile的目錄,然后按照如下方式運(yùn)行trivy config。

~? trivy config .
Dockerfile (dockerfile)

Tests: 26 (SUCCESSES: 24, FAILURES: 2, EXCEPTIONS: 0)
Failures: 2 (UNKNOWN: 0, LOW: 1, MEDIUM: 0, HIGH: 1, CRITICAL: 0)

HIGH: Specify at least 1 USER command in Dockerfile with non-root user
════════════════════════════════════════════════════════════════════════════=
Running containers with 'root' user can lead to a container escape situation.
It is a best practice to run containers as non-root users,
which can be done by adding a 'USER' statement to the Dockerfile.

See https://avd.aquasec.com/misconfig/ds002
─────────────────────────────────────────────────────────────────────────────

當(dāng)然,trivy config也會(huì)掃描Kubernetes、Terraform和CloudFormation清單,以檢查它們是否遵循了最佳實(shí)踐。您可以參照由鏈接--https://aquasecurity.github.io/trivy/latest/ecosystem/cicd/提供的多種選擇,將Trivy集成到自己的CI/CD中。

3. Grype

Anchore開(kāi)發(fā)的Grype雖然不如Trivy那樣成熟,但是它仍在不斷改進(jìn)中。盡管Grype不具備配置掃描和密鑰檢測(cè)等功能,但是它能夠很好地完成掃描Docker鏡像包的主要功能。從原理上說(shuō),Grype實(shí)際上使用了同樣由Anchore開(kāi)發(fā)的Syft,來(lái)生成SBOM。據(jù)此,它將軟件包與漏洞數(shù)據(jù)庫(kù)進(jìn)行了比較。您可以使用如下命令來(lái)安裝它。

curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sudo sh -s -- -b /usr/local/bin

要掃描鏡像,您只需運(yùn)行如下命令:

~? grype aquasec/trivy
 ? Scanned for vulnerabilities [14 vulnerability matches] 
 ├── by severity: 0 critical, 0 high, 14 medium, 0 low, 0 negligible
 └── by status: 2 fixed, 12 not-fixed, 0 ignored 
NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY 
busybox 1.36.1-r5 apk CVE-2023-42366 Medium 
busybox 1.36.1-r5 apk CVE-2023-42365 Medium 
busybox 1.36.1-r5 apk CVE-2023-42364 Medium 
busybox 1.36.1-r5 apk CVE-2023-42363 Medium
...

在上例中,Grype測(cè)試了Trivy的鏡像。類(lèi)似Docker Scout,Grype也會(huì)告訴你是否有更新版本的受影響軟件包修復(fù)了該漏洞。而且,Grype的優(yōu)點(diǎn)在于它的漏洞列表并不雜亂,其每個(gè)漏洞在屏幕上都只占一行。如果您想進(jìn)一步了解某個(gè)漏洞的話,則可以使用grype explain

grype -o json aquasec/trivy | grype explain --id CVE-2023-42366

不過(guò),由于Grype不會(huì)緩存鏡像的SBOM,因此即便您剛剛完成了一次掃描,每次任務(wù)都必須從零開(kāi)始加載和掃描鏡像。對(duì)于CI/CD而言,由于它只有一個(gè)適用于GitHub Actions的模板,因此您必須手動(dòng)創(chuàng)建針對(duì)其他CI/CD服務(wù)的掃描任務(wù)。

4. Snyk Container

Snyk可以通過(guò)各種功能來(lái)簡(jiǎn)化應(yīng)用程序的安全加固過(guò)程。不過(guò),Snyk僅供個(gè)人免費(fèi)使用,而且并不開(kāi)源(當(dāng)然它也有付費(fèi)計(jì)劃)。其Snyk Container則是一款可以被免費(fèi)提供的,用于掃描Docker鏡像的工具。在使用之前,您需要在snyk.io處注冊(cè)一個(gè)賬戶,接著可以通過(guò)鏈接--https://docs.snyk.io/snyk-cli/install-or-update-the-snyk-cli安裝Snyk CLI,或運(yùn)行如下命令:

curl --compressed https://static.snyk.io/cli/latest/snyk-linux -o snyk
chmod +x ./snyk
sudo mv ./snyk /usr/local/bin/

在運(yùn)行任何命令之前,您都需要通過(guò)如下命令在頁(yè)面上完成身份驗(yàn)證。

Snyk auth

至此,我們便可以使用snyk container test來(lái)掃描鏡像了。注意,請(qǐng)不要被該命令的名稱(chēng)所誤導(dǎo)。它掃描的是鏡像,而不是正在運(yùn)行的容器。

~? synk container test anchore/grype
Testing anchore/grype...

? Medium severity vulnerability found in google.golang.org/protobuf/encoding/protojson
 Description: Stack-based Buffer Overflow
 Info: https://security.snyk.io/vuln/SNYK-GOLANG-GOOGLEGOLANGORGPROTOBUFENCODINGPROTOJSON-6137908
 Introduced through: google.golang.org/protobuf/encoding/protojson@v1.31.0
 From: google.golang.org/protobuf/encoding/protojson@v1.31.0

? Medium severity vulnerability found in golang.org/x/crypto/ssh
 Description: Authentication Bypass by Capture-replay
 Info: https://security.snyk.io/vuln/SNYK-GOLANG-GOLANGORGXCRYPTOSSH-6130669
 Introduced through: golang.org/x/crypto/ssh@v0.16.0
 From: golang.org/x/crypto/ssh@v0.16.0
 Fixed in: 0.17.0

Tested 827 dependencies for known issues, found 2 issues.

上例便是我們使用Snyk來(lái)測(cè)試Grype的鏡像。可見(jiàn),Snyk發(fā)現(xiàn)了2個(gè)中等嚴(yán)重程度的問(wèn)題。不同于TrivyGrype把摘要放在報(bào)告最上面,Snyk則在漏洞列表的末尾處才給出小結(jié)摘要。這就意味著,當(dāng)漏洞列表過(guò)長(zhǎng)時(shí),查閱小結(jié)就不太方便了。同時(shí),Snyk也能夠掃描各種IaC文件,即:使用snyk iac test命令來(lái)掃描Terraform、CloudFormationKubernetes、Kustomize、Helm、ARMServerless等文件。此外,Snyk還有一個(gè)Web應(yīng)用版的GUI(如下圖),可以連接到Git存儲(chǔ)庫(kù)處掃描漏洞。

來(lái)自docs.snyk.io的Snyk項(xiàng)目的漏洞信息來(lái)自docs.snyk.io的Snyk項(xiàng)目的漏洞信息

當(dāng)然,Snyk也集成了大量的CI/CD功能,具體請(qǐng)參考鏈接--
https://docs.snyk.io/integrate-with-snyk/snyk-ci-cd-integrations。

小結(jié)

綜上所述,Snyk無(wú)疑是四種工具中功能最強(qiáng)大的。但是它需要一個(gè)賬戶,而且只能免費(fèi)供個(gè)人使用。如果您正在尋找一款開(kāi)源工具的話,Trivy會(huì)是您的不二之選。它比Docker ScoutGrype具有更多的功能,且速度相當(dāng)快??偟膩?lái)說(shuō),我強(qiáng)烈建議您在CI/CD管道中至少實(shí)施這些工具中的一種,以實(shí)現(xiàn)對(duì)應(yīng)用程序的安全加固。

譯者介紹

陳峻(Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項(xiàng)目實(shí)施經(jīng)驗(yàn),善于對(duì)內(nèi)外部資源與風(fēng)險(xiǎn)實(shí)施管控,專(zhuān)注傳播網(wǎng)絡(luò)與信息安全知識(shí)與經(jīng)驗(yàn)。

原文標(biāo)題:4 Free, Easy-To-Use Tools For Docker Vulnerability Scanning,作者:Tin Plavec


責(zé)任編輯:華軒 來(lái)源: 51CTO
相關(guān)推薦

2022-07-10 00:01:43

漏洞工具安全

2011-12-26 13:09:19

掃描儀推薦

2021-03-18 08:00:00

漏洞安全掃描器

2019-11-08 09:12:35

Linux掃描儀軟件

2021-11-17 10:01:59

工具KubernetesLinux

2021-04-08 11:35:02

網(wǎng)絡(luò)漏洞掃描器漏洞黑客

2020-10-14 17:46:59

Docker容器GUI工具

2017-07-24 07:29:47

2024-04-09 12:49:35

2014-07-30 09:12:48

2020-10-05 22:17:39

GitHub代碼開(kāi)發(fā)者

2010-12-01 11:36:44

2023-11-17 12:09:54

2010-09-25 10:34:20

2013-05-20 11:54:55

2017-05-12 14:25:09

2010-09-17 16:16:28

2017-08-25 16:00:15

2010-09-25 10:25:23

2021-06-18 06:12:37

docker scan鏡像漏洞Docker
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)