镜像安全扫描建设指南-管理员篇

Posted 煜铭2011

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了镜像安全扫描建设指南-管理员篇相关的知识,希望对你有一定的参考价值。

0x00 产品介绍

Trivy是一种适用于CI的简单而全面的容器漏洞扫描程序。软件漏洞是指软件或操作系统中存在的故障、缺陷或弱点。

 

Trivy检测操作系统包(Alpine、RHEL、CentOS等)和应用程序依赖(Bundler、Composer、npm、yarn等)的漏洞

Trivy 扫描器主要有以下几个特点:

  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. 易于安装,支持独立安装或者集成到harbor。

0x02 产品安装

1. 安装harbor 和trivy

建议使用官方安装指南和trivy

https://goharbor.io/docs/2.3.0/install-config/run-installer-script/

重要事项:运维人员在安装的同时,必须添加trivy安装参数

sudo ./install.sh --with-trivy

如果第一次安装没有添加trivy安装参数,建议参考以下文档进行添加:

https://goharbor.io/docs/2.3.0/install-config/reconfigure-manage-lifecycle/

2.配置trivy漏洞库

下载漏洞库文件:https://github.com/aquasecurity/trivy-db/releases

 

解压后,看到trivy.db的文件,大约为200M左右,需要将该文件上传到harbor服务器,然后将该文件移动harbor服务器里面trivy的数据库目录:/data/trivy-adapter/trivy/db(默认安装目录,如harbor安装位置已变动,请注意相应进行调整),如图所示:

 

 同时注意留意是否存在metadata.json文件,如无可以创建如下:"Version":1,"Type":1,"NextUpdate":"2021-09-14T12:05:14.247543642Z","UpdatedAt":"2021-09-14T06:05:14.247544042Z","DownloadedAt":"

2021-09-14T06:49:03.185542748Z"

3.调整trivy的参数

调整trivy的配置参数:SCANNER_TRIVY_SKIP_UPDATE=False

调整为:SCANNER_TRIVY_SKIP_UPDATE=True

SCANNER_LOG_LEVEL=debug

SCANNER_TRIVY_DEBUG_MODE=True

SCANNER_STORE_REDIS_URL=redis://redis:6379/5

SCANNER_STORE_REDIS_NAMESPACE=harbor.scanner.trivy:store

SCANNER_JOB_QUEUE_REDIS_URL=redis://redis:6379/5

SCANNER_JOB_QUEUE_REDIS_NAMESPACE=harbor.scanner.trivy:job-queue

SCANNER_TRIVY_CACHE_DIR=/home/scanner/.cache/trivy

SCANNER_TRIVY_REPORTS_DIR=/home/scanner/.cache/reports

SCANNER_TRIVY_VULN_TYPE=os,library

SCANNER_TRIVY_SEVERITY=UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL

SCANNER_TRIVY_IGNORE_UNFIXED=False

SCANNER_TRIVY_SKIP_UPDATE=False

SCANNER_TRIVY_GITHUB_TOKEN=bd14eb4e2fcaae99284492ca0571ca1ff783e3d5

SCANNER_TRIVY_INSECURE=False

HTTP_PROXY=

HTTPS_PROXY=

NO_PROXY=portal,core,jobservice,postgresql,registry,chartmuseum,localhost,.local,.internal,notary-server,127.0.0.1,nginx,trivy-adapter,notary-signer,redis,clair,db,clair-adapter,registryctl,log

0x03 产品使用

1.实时按需扫描

在此种场景下,用户按照各自的需求,单独对某个项目进行实时安全漏洞扫描,以便检查某个项目实时的安全状态。

1. 选择某个项目

 

  2.上传时自动扫描

在此种场景下,用户根据需求对上传的镜像自动进行安全检查。同时也使用于管理员自动检测用户上传的镜像的安全状态,对于存在明显重大漏洞的镜像通知镜像所属人员进行漏洞修复。此处需要管理员权限或者更高权限才可以看到该配置

 3.定时自动扫描

在此种场景下,管理员或者安全人员可以定时对所有项目进行安全检查,以便了解其安全状态。初步建议在周日进行检测,因为耗时比较久,等到周一上班即可查看到相关的结果。此处需要管理员权限或者更高权限才可以看到该配置

 此处配置为每周周日下午6点进行定时扫描。

4.产品扫描性能

扫描所有项目的镜像共计3240,总耗时为:12个小时左右

 

 

 

0x03 查看漏洞详情

在完成扫描任务后,在【项目】-具体某个项目(此处为public)的某个镜像(此处为zookeeper),在【Artifacts】下,看到具体的镜像版本, 点击该版本,可以进入后,下拉看到【其他】,即可看到漏洞详情。具体可参考下图。

 

 0x04 问题解疑

1.扫描某项目时,出现报错,查看日志发现提示信息

application/vnd.scanner.adapter.vuln.report.harbor+json; version=1.0 is not ready yet, retry after 5 seconds

2021-09-14T07:58:21Z [INFO] [/pkg/scan/job.go:221]: Report with mime type application/vnd.security.vulnerability.report;

2021-09-14T07:58:31Z [INFO] [/pkg/scan/job.go:221]: Report with mime type application/vnd.scanner.adapter.vuln.report.harbor+json; version=1.0 is not ready yet, retry after 5 seconds

2021-09-14T07:58:36Z [ERROR] [/pkg/scan/job.go:266]: check scan report with mime type application/vnd.scanner.adapter.vuln.report.harbor+json; version=1.0: running trivy wrapper: running trivy: exit status 1:

2021-09-14T07:41:17.603Z [34mINFO[0m Need to update DB2021-09-14T07:41:17.603Z [34mINFO[0m Downloading DB..2021-09-14T07:58:33.159Z [33mWARN[0m Increase --timeout valu

2021-09-14T07:58:33.159Z [31mFATAL[0m scan error: image scan failed: failed analysis: analyze error: timeout: context deadline exceeded: general response handler: unexpected status code: 500, expected: 200: check scan report with mime type

解决办法:按照2.产品安装中的(2)配置trivy漏洞库、(3)调整trivy 参数进行解决。

2.扫描失败,出现【查看日志】

如果我们看到类似以下的情况:【漏洞】-> 【查看日志】,该情况表明本次对该镜像的漏洞扫描失败了。

此时,我们可以选择手动扫描,具体如下:

等待扫描结束后,即可查看详细。如结束后,仍出现【查看日志】,表明镜像有问题,可联系安全人员排查处理。

3. 首次安装harbor没有添加trivy安装参数

解决办法:如果第一次安装没有添加trivy安装参数,建议参考以下文档进行添加:

https://goharbor.io/docs/2.3.0/install-config/reconfigure-manage-lifecycle/

4. 是否配置邮件告警

目前docker harbor 没有扫描漏洞告警功能。需要二次开发。

同一个项目下,存在多个镜像,可能每个镜像的项目负责人都不一样。

同一个镜像多个tag,多个tag 同时使用:

 个别项目根本无人下载:

 

5. 邮件告警分析

1.邮件多:同一个镜像存在多个tag,多个tag同时使用。

安全分析:因为同一个镜像,存在数个或者数十个tag,漏洞报告内容相近但以一定相同, 也就意味数十封,更常见的是一下子几百封邮件告警,造成项目负责人直接忽略。

2.人员涉及多:同一个项目下多个镜像,不同的镜像负责人都不一样。

分析:此处需要逐一核对每个镜像的负责人,此处工作量也大,因为账号使用者不一定都是每个镜像负责人,如果指定部门负责人,部门负责人也难以逐一确认每个镜像的每个tag的漏洞报告,最后看到如此多的告警邮件,也会选择忽略。

3.哪些漏洞优先修复:对于漏洞报告,涉及到组件漏洞和操作系统漏洞,并且有高中低危之分,漏洞数量一般也有数百个。

分析:这么多的漏洞,开发人员是无法全部修复,确实可行的是选择性修复,但我们缺乏规范标准,需要修复哪些漏洞。

最后建议:

1.目前镜像安全扫描会根据项目的内容和大小,扫描耗时会在2分钟到20分钟左右,考虑到发布流水线效率,暂不采用上传时自动扫描的功能,采用定时扫描功能,定时时间为周五凌晨0点。
2.因为考虑到邮件告警的方式只是粗暴的告警并且还额外增加工作量,也更好地无法完成漏洞修复工作,故暂目前不采用邮件告警的方式。
3.当前的推荐的方式:

4.若后续有足够人力和时间,则建议可以在充分研讨需求后,进行排期二次开发进行邮箱告警。

 

以上是关于镜像安全扫描建设指南-管理员篇的主要内容,如果未能解决你的问题,请参考以下文章

镜像安全扫描建设指南-用户篇

镜像安全扫描建设指南-用户篇

7.企业安全建设指南(金融行业安全架构与技术实践) --- 外包安全管理

11.企业安全建设指南(金融行业安全架构与技术实践) --- 互联网应用安全

8.企业安全建设指南(金融行业安全架构与技术实践) --- 安全考核

MaxCompute安全管理指南-案例篇