镜像漏洞扫描
Harbor 默认通过开源项目 Trivy (Harbor 2.0.0 及之后版本)或 Clair (Habor v2.2.0 版本之后从默认中删除)提供镜像漏洞的静态分析 。
在harbor中可以对特定镜像或 Harbor 中的所有镜像手动启动扫描。也可以设置策略,使系统定期自动扫描所有镜像。
说明:
本文中harbor使用的截图以 Harbor v2.11.0 为例,具体操作以实际环境版本为准。
1. 启用默认扫描器–trivy
本文使用的2.11.0版本,harbor支持的扫描器为Trivy。Trivy是一款全面且多功能的安全扫描器,专为云原生应用程序设计。它能够扫描容器镜像、文件系统、Kubernetes集群、Git存储库等,检测漏洞、配置错误和恶意软件等安全问题。
官方仓库地址:https://github.com/aquasecurity/trivy
harbor安装时启用trivy扫描工具: ./install.sh --with-trivy
。如果安装时未启用,可以后续执行参数更新后重启环境:
[root@e2etest harbor]# ls
common common.sh docker-compose.yml harbor.v2.11.0.tar.gz harbor.yml harbor.yml.tmpl install.sh LICENSE prepare
# 使用prepare脚本启用trivy,然后更新docker-compose.yaml配置文件
[root@e2etest harbor]# ./prepare --with-trivy
# 重新启动harbor环境
[root@e2etest harbor]# docker-compose down
[root@e2etest harbor]# docker-compose up -d
界面查看配置扫描器:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UbPkWBd0-1722176258857)(https://i-blog.csdnimg.cn/direct/bc57e9b0404140bfa9ff5f02f473fc34.png#pic_center)]
在审查服务中,harbor还提供了安全中心,展示镜像漏洞的概览。在漏洞菜单可以配置漏洞扫描的策略,可以手动触发或者配置定时扫描。
上述漏扫执行的是全部的参控股镜像扫描任务。除次之外,在harbor的项目中,针对镜像提供了单独的扫描入口。
2. 设置trivy离线扫描
默认的情况下trivy会联网下载漏扫数据库,并执行数据库更新,如果环境无法联网执行扫描的时候就会有报错。内网环境中我们可以离线导入漏洞库并执行离线扫描,漏洞库采取定时手动更新的策略。
2.1 设置trivy离线扫描
[root@e2etest harbor]# ls
common common.sh docker-compose.yml harbor.v2.11.0.tar.gz harbor.yml harbor.yml.tmpl install.sh LICENSE prepare
# 修改下面的配置
[root@e2etest harbor]# vi harbor.yml
trivy:
# 跳过更新
skip_update: true
#离线扫描
offline_scan: true
# 重新启动harbor环境
[root@e2etest harbor]# docker-compose down
[root@e2etest harbor]# docker-compose up -d
2.2 离线导入漏洞库
trivy使用git下载漏洞库,所以要保证git能够联网。内网部署可以配置代理或离线导入的方式进行。本文采用离线导入的方式:
找一台可以联网的机器,安装trivy,运行镜像扫描任务下载漏洞库。trivy扫描使用的数据默认位于当前用户的.cache/
目录下。也可以通过下面的命令下载漏洞数据库:trivy image --download-db-only
。
[root@e2etest ~]# ls .cache/trivy/
db fanal policy
[root@e2etest ~]# ls .cache/trivy/db/
metadata.json trivy.db
将数据库拷贝到harbor机器的环境中:
# /data/harbor是我安装harbor时配置的数据目录
[root@e2etest ~]# ls /data/harbor/trivy-adapter/trivy/db/
metadata.json trivy.db
# 添加权限
chown 10000:10000 -R /data/harbor/trivy-adapter/trivy
3. 执行扫描任务
完成上述配置后,我们就可以执行harbor镜像的扫描了。
3.1 扫描特定镜像
- 进入harbor任意一个有镜像仓库的项目,可以看到项目默认配置了Trivy扫描器,如果有多个扫描器,可以针对该项目镜像修改。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AP37ydTz-1722176258859)(https://i-blog.csdnimg.cn/direct/bc0a80a81f8b4b78b6a210b8c5f4c671.png#pic_center)]
-
点击镜像仓库页签,选择一个仓库源,进入该仓库的 Artifacts 页面。
-
勾选一个或多个需要扫描的 Artifacts ,单击扫描。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v4NkfX2M-1722176258860)(https://i-blog.csdnimg.cn/direct/2b74d530e7464ef5831c5075a969678b.png#pic_center)]
在配置管理中,也可以配置自动扫描镜像,当项目中有镜像上传后自动执行。
这里除了扫描漏洞之外,也可以借助trivy生成镜像的SBOM(软件物料清单):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iChTAe3N-1722176258860)(https://i-blog.csdnimg.cn/direct/110fdfc3e1c54f02a93ee69097bac3d0.png#pic_center)]
从sbom中可以清晰的看出镜像使用了哪些软件包、版本及license等信息。
3.2 扫描所有镜像
-
使用具有 Harbor 系统管理员权限的帐户登录 Harbor 界面。
-
选择系统管理 – 审查服务,点击漏洞页签,可以进行全部扫描。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZhHbhH2a-1722176258861)(https://i-blog.csdnimg.cn/direct/6e45c5b1c5cc456a85c96f44a6e75393.png#pic_center)]
这里也可以设置扫描策略,可以设置每小时、每天、每周扫描。也可以自定义时间,通过cron格式指定。
3.3 查看扫描的整体情况
在安全中心可以看到当前漏洞的总览信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QupYhOBE-1722176258861)(https://i-blog.csdnimg.cn/direct/7c52b93f20374d1eaeefbecbf385bb87.png#pic_center)]