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

镜像安全扫描建设指南-管理员篇相关推荐

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

    0x01 背景介绍 使用开源软件作为开发过程的一部分有很多好处,其中包括但不限于:避免重复工作.提高研发效率.成熟稳定.成本较低.加快产品上市时间等. 若开源软件存有安全漏洞.恶意代码.病毒等安全问题 ...

  2. 《企业私有云建设指南》-导读

    内容简介 第1章总结性地介绍了云计算的参考架构.典型解决方案架构和涉及的关键技术. 第2章从需求分析入手,详细讲解了私有云的技术选型.资源管理.监控和运维. 第3章从计算.网络.存储资源池等方面讲解了 ...

  3. 76%都存在漏洞?!Docker镜像安全扫描应该这样做

    在之前的文章<从自身漏洞与架构缺陷,谈Docker安全建设>中,我们介绍了Docker存在的安全问题.整套Docker应用架构的安全基线以及安全规则,重头戏是Docker安全规则的各种思路 ...

  4. 新书推荐 |《企业安全建设指南:金融行业安全架构与技术实践》

    新书推荐 <企业安全建设指南:金融行业安全架构与技术实践> 点击上图了解及购买 金融行业资深信安专家十余年实战经验的结晶,安全领域多位专家联袂推荐. 编辑推荐 适读人群 :安全从业人员.金 ...

  5. 数据仓库规范建设指南

    数据仓库规范建设指南 1.数仓公共开发规范 1.1 层次调用规范 稳定业务按照标准的数据流向进行开发,即ODS-> DWD-> DWS-> APP. 非稳定业务或探索性需求,可以遵循 ...

  6. Docker容器镜像安全最佳实践指南

    文章目录: 0x02 Docker 容器安全最佳实践 1.主机安全配置 1.1 更新docker到最新版本 1.2 为容器创建一个单独的分区 1.3 只有受信任的用户才能控制docker守护进程 1. ...

  7. ClearCase指南-基础篇(连载一)

    ClearCase指南-基础篇(连载一) 第1章 前言    . 本文档凡斜体字即代表高级内容.高级概念.或可选内容,仅作粗略了解用,暂不必深入理会.   . 如下如无特别说明,缩写"CC& ...

  8. Harbor集成Clair镜像安全扫描原理探知

    上一篇文章中我们简单了解了Harbor集成Clair的安装方案及内网模式下CVE漏洞数据的手动导入功能.本篇文章,我们再梳理下漏洞扫描的具体原理和实现. 关于clair Clair是CoreOS 20 ...

  9. Harbor集成Clair镜像安全扫描并手动导入漏洞数据

    通过这篇文章,你会了解到: harbor启停方法 clair镜像扫描原理 harbor数据库(MySQL)一览 clair数据库(PostgreSql)一览 harbor手动导入漏洞数据方法 背景 先 ...

最新文章

  1. 网络编程中的缓冲区溢出
  2. 2*2矩阵训练集比例对BP神经网络分类性能影响
  3. php 文件管理系统_如何编写程序实现图书管理系统的个人图书借阅查询功能
  4. flex java 全局拦截_Flex CSS阻止底层内容
  5. python之使用numpy实现从二维数组中找出行(子数组)为特定值的索引
  6. 在虚拟DOM和Diff算法中为什么不建议使用index作为key值?
  7. pandas 之 set_index
  8. 类似地图比例尺钩子下边框实现
  9. c语言版本双人贪吃蛇
  10. 软件优先级优先于硬件优先级_一切都是必须有优先级的
  11. Tensorflow多输入模型构建以及Dataset数据构建
  12. vue不让双击执行单击事件
  13. 路由器WIFI密码忘记了怎么办
  14. EF CORE DELETE
  15. 云计算作为一种新型的IT服务资源,主要分为几种服务类型
  16. 百度搜索升级冰桶算法5.0
  17. 基于Android的班级同学录校友录系统app
  18. GeenMedical:文献查询、筛选、引用排序、相似文献、全文下载、杂志分区、影响因子、结果导出、杂志评述、直接投稿,一站服务
  19. scanf函数的返回值以及在while循环中的应用
  20. 两篇文章都是翻译了一半就翻不下去了,E文水平有待提高啊

热门文章

  1. 用Timeline实现动画特写(下)
  2. 推荐优质大数据学习平台
  3. mysql怎么查出用户连续签到_连续签到奖励 数据库如何设计?
  4. DataGrip使用
  5. 10. POP3收取邮件
  6. 爬取掘金 开发者头条 博客园等我需要的文章
  7. Python编程实现typora软件下Markdown文件图片大小控制
  8. $.get、$.post、$getJSON、$ajax的用法跟区别
  9. 每日一题系列:淘宝网店
  10. 苹果公布iPhone 2.0软件及SDK