一、映象掃描
docker scan
Trivy(推薦使用)
clair
- harbor-scanner 支援中文漏洞庫
針對上述解決方案,我們調查了 Trivy
、Claire
、Anchore Engine
、Quay
、Docker hub
和 GCR
等幾種掃描工具,從不同維度進行對比。(來源於網路)
本文主要介紹下 docker scan
和 Trivy
二、映象掃描可以存在的場景
-
構建映象的整個流水線
Jenkins 或者 gitlab Runner整合
docker scan
Trivy
-
映象倉庫定期掃描
-
執行時,在映象拉取到主機節點,啟動時掃描映象漏洞,禁止映象執行。
ImagePolicyWebhook
三、 docker scan
docker scan
是 docker
官方推出來的外掛。
使用之前需要安裝此外掛
3.1、Centos 安裝外掛
yum install docker-scan-plugin
獲取當前安裝的版本
docker scan --accept-license --version
Version: v0.12.0
Git commit: 1074dd0
Provider: Snyk (1.790.0 (standalone))
3.2、登入 dockerhub 使用者
在使用 docker scan
之前,我們需要登入我們的 dockerhub
使用者,否則掃描不了。
[root@ops-111-111 ~]# docker scan hello-world
Docker Scan relies upon access to Snyk, a third party provider, do you consent to proceed using Snyk? (y/N)
y
failed to get DockerScanID: You need to be logged in to Docker Hub to use the scan feature.
If you are not using Docker Desktop, either
- use the "docker login" CLI command with a username and password. Note this will not work if
2FA is required or if SSO enforcement is enabled on Docker Hub; or
- use the "docker login" CLI command with a username and Personal Access Token. This requires
a token to be generated in advance.
If you are using Docker Desktop: login via the UI or whale menu
登入
[root@ops-111-111 ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: djxslp
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
3.3、掃描
[root@ops-111-111 ~]# docker scan hello-world
Testing hello-world...
Package manager: linux
Project name: docker-image|hello-world
Docker image: hello-world
Platform: linux/amd64
✔ Tested hello-world for known vulnerabilities, no vulnerable paths found.
Note that we do not currently have vulnerability data for your image.
For more free scans that keep your images secure, sign up to Snyk at https://dockr.ly/3ePqVcp
3.4、使用限制
免費掃描限制為10/月。
四、Trivy(推薦使用)
Trivy
是 漏洞、配置錯誤、Secret
等 全面且多功能的安全掃描器。
阿里雲映象倉庫,映象雲安全掃描引擎也預設提供
Trivy
掃描引擎
支援掃描
- Container Image
- Filesystem
- Git Repository (remote)
- Virtual Machine Image
- Kubernetes
- AWS
4.1、 安裝
wget https://github.com/aquasecurity/trivy/releases/download/v0.38.1/trivy_0.38.1_Linux-64bit.deb
apt install trivy_0.38.1_Linux-64bit.deb
示例命令
trivy image python:3.4-alpine
trivy image -s HIGH python:3.4-alpine # 指定漏洞等級
trivy k8s --report summary cluster # 掃描叢集
4.2、下載DB
注意下載 DB
是比較慢的,如果我們有對應的梯子,可以用的話最好使用梯子。 我這邊是透過我電腦的 Clash
監聽的埠,然後我伺服器配置 http 和 https 代理。
2023-03-29T10:10:09.318+0800 INFO Need to update DB
2023-03-29T10:10:09.318+0800 INFO DB Repository: ghcr.io/aquasecurity/trivy-db
2023-03-29T10:10:09.318+0800 INFO Downloading DB...
臨時使用代理
export http_proxy="http://http_proxy:7890"
export https_proxy="http://http_proxy:7890"
4.3、使用
trivy image -s MEDIUM,HIGH,CRITICAL test-demo --timeout 30m
結果
Total: 752 (MEDIUM: 688, HIGH: 61, CRITICAL: 3)
┌──────────────────────────┬──────────────────┬──────────┬───────────────────────┬──────────────────────────┬──────────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
├──────────────────────────┼──────────────────┼──────────┼───────────────────────┼──────────────────────────┼──────────────────────────────────────────────────────────────┤
│ audit-libs │ CVE-2015-5186 │ MEDIUM │ 2.8.1-3.el7 │ │ Audit: log terminal emulator escape sequences handling │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2015-5186 │
├──────────────────────────┼──────────────────┤ ├───────────────────────┼──────────────────────────┼──────────────────────────────────────────────────────────────┤
│ bash │ CVE-2012-6711 │ │ 4.2.46-30.el7 │ │ bash: heap-based buffer overflow during echo of unsupported │
│ │ │ │ │ │ characters │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2012-6711 │
│ ├──────────────────┤ │ ├──────────────────────────┼──────────────────────────────────────────────────────────────┤
│ │ CVE-2019-9924 │ │ │ 4.2.46-34.el7 │ bash: BASH_CMD is writable in restricted bash shells │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-9924 │
Java (jar)
==========
Total: 14 (MEDIUM: 2, HIGH: 10, CRITICAL: 2)
┌─────────────────────────────────────────────────┬────────────────┬──────────┬───────────────────┬──────────────────────────────────────────────────────┬─────────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
├─────────────────────────────────────────────────┼────────────────┼──────────┼───────────────────┼──────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────┤
│ │ CVE-2019-10247 │ MEDIUM │ │ 9.2.28.v20190418, 9.3.27.v20190418, 9.4.17.v20190418 │ jetty: error path information disclosure │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-10247 │
├─────────────────────────────────────────────────┼────────────────┼──────────┤
五、映象掃描到部署階段
5.1、ImagePolicyWebhook 容器映象掃描
具體的操作可以檢視 k8s
官方文件: ImagePolicyWebhook。
其中我們可以看到需要呼叫到第三方的webhook
, 是存在一個kainlite/kube-image-bouncer:ImagePolicyWebhook 和 GenericAdmissionWebhook Kubernetes 入場控制器的簡單端點 (github.com) 元件。 這個元件實現的內容就是判斷我們當前的映象是否為 latest
的映象。 是返回 "allowed": false
我們其實是可以對於這個元件進行改造,增加一些定製化的內容, 比如去呼叫一些介面獲取對應的映象的安全掃描結果,如果掃描結果是pass 的話,就可以部署,否則的話,就不允許部署。