tnblog
首页
视频
资源
登录

Kubernetes 镜像安全Trivy

4520人阅读 2022/3/30 15:27 总访问:3475842 评论:0 收藏:0 手机
分类: 容器编排

Kubernetes 镜像安全Trivy

Trivy的特征与简介


rivy是一种适用于CI的简单而全面的容器漏洞扫描程序。软件漏洞是指软件或操作系统中存在的故障、缺陷或弱点。Trivy检测操作系统包(Alpine、RHEL、CentOS等)和应用程序依赖(Bundler、Composer、npm、yarn等)的漏洞。Trivy很容易使用,只要安装二进制文件,就可以扫描了。扫描只需指定容器的镜像名称。与其他镜像扫描工具相比,例如Clair,Anchore Engine,Quay相比,Trivy在准确性、方便性和对CI的支持等方面都有着明显的优势。

推荐在CI中使用它,在推送到container registry之前,您可以轻松地扫描本地容器镜像,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是无状态的,不需要维护或准备;
易于安装,安装方式:
apt-get install
yum install
brew install
4.无需安装数据库、库等先决条件(例外情况是需要安装rpm以扫描基于RHEL/CentOS的图像)。

安装

CentOS安装

  1. sudo vim /etc/yum.repos.d/trivy.repo
  2. [trivy]
  3. name=Trivy repository
  4. baseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/$releasever/$basearch/
  5. gpgcheck=0
  6. enabled=1
  7. sudo yum -y update
  8. sudo yum -y install trivy


RPM的方式

  1. rpm -ivh https://github.com/aquasecurity/trivy/releases/download/v0.24.4/trivy_0.24.4_Linux-64bit.rpm

Debian/Ubuntu安装


Ubuntu

  1. sudo apt-get install wget apt-transport-https gnupg lsb-release
  2. wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
  3. echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
  4. sudo apt-get update
  5. sudo apt-get install trivy


Debian

  1. wget https://github.com/aquasecurity/trivy/releases/download/v0.24.4/trivy_0.24.4_Linux-64bit.deb
  2. sudo dpkg -i trivy_0.24.4_Linux-64bit.deb

容器安装


脚本格式:

  1. docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v [YOUR_CACHE_DIR]:/root/.cache/ aquasec/trivy:0.24.4 image [YOUR_IMAGE_NAME]


举例:检测python:3.4-alpine镜像

  1. # 0.20.2
  2. docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
  3. -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy:0.20.2 python:3.4-alpine
  4. # 0.24.4
  5. docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
  6. -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy:0.24.4 image python:3.4-alpine

Helm安装

  1. helm repo add aquasecurity https://aquasecurity.github.io/helm-charts/
  2. helm repo update
  3. helm search repo trivy
  4. helm install my-trivy aquasecurity/trivy


使用发布名称安装图表my-release:

  1. helm install my-release .

快速开始


扫描指定镜像与漏洞只需要如下命令即可实现

  1. trivy image [你的镜像名称]


扫描IAC文件目录,例如TerraformDockerfile

  1. trivy config [你的IAC目录]
  1. # 举例
  2. $ ls build/
  3. Dockerfile
  4. $ trivy config ./build

故障排查

扫描超时(Timeout)


当扫描一个镜像过长,我们可以设置扫描超时的异常错误。

  1. # 设置超时时间为15分钟
  2. trivy image [你的镜像] --timeout 15m
  3. # 错误信息
  4. analyze error: timeout: context deadline exceeded.

证书问题(Certification)


当扫描时报错:Error: x509: certificate signed by unknown authority
TRIVY_INSECURE参数可以允许容器注册表的不安全连接,来解决这个问题。

  1. TRIVY_INSECURE=true trivy image [你的镜像]

GitHub限速


GitHub如果限速,需要传入Github的Token。不然就会报以下错误:

  1. API rate limit exceeded for xxx.xxx.xxx.xxx.


添加GitHub的Token

  1. GITHUB_TOKEN=XXXXXXXXXX trivy alpine:3.10

Maven速率限制


Trivy 调用 Maven API 以更好地检测 JAR 文件,但许多请求可能会超出速率限制。

  1. status 403 Forbidden from http://search.maven.org/solrsearch/select


--offline-scan阻止 Trivy 发出 API 请求的选项。此选项仅影响漏洞扫描。漏洞数据库和内置策略照常下载。
--skip-update--skip-policy-update可以跳过它们。

下载漏洞数据库时出错


如果 trivy 在公司防火墙后面运行,您必须将以下 url 添加到您的允许列表中。

  1. ghcr.io
  2. pkg-containers.githubusercontent.com

重试

  1. # 未知错误
  2. trivy image --reset

按严重程度过滤漏洞

  1. trivy image --severity HIGH,CRITICAL ruby:2.3.0

跳过数据库漏洞更新


Trivy总是在开始运行时更新其漏洞数据库。这通常很快,因为这是一个差异更新。但是如果你想跳过这一步,可以使用--skip update选项。

  1. trivy image --skip-update python:3.4-alpine3.9

仅更新指定的发行版


默认情况下,Trivy总是为所有发行版更新其漏洞数据库。如果要命名要更新的指定发行版,请使用--only-update选项。

  1. trivy image --only-update alpine,debian python:3.4-alpine3.9
  2. trivy image --only-update alpine python:3.4-alpine3.9

仅下载漏洞数据库


您还可以让Trivy简单地检索漏洞数据库。这对于在连续集成系统中初始化工作人员很有用。在第一次运行中,--only-update选项被默默忽略。

  1. trivy image --download-db-only
  2. trivy image --download-db-only --only-update alpine

忽略未修复的漏洞


默认情况下,Trivy还检测未修补/未修复的漏洞。这意味着即使更新了所有软件包,也无法修复这些漏洞。如果要忽略它们,请使用--ignore-unfixed选项。

  1. trivy image --ignore-unfixed ruby:2.3.0

指定退出代码


默认情况下,即使检测到漏洞,Trivy也会以代码0退出。如果要使用非零退出代码退出,请使用--exit-code选项。

  1. trivy image --exit-code 1 python:3.4-alpine3.9


此选项对CI/CD很有用。在以下示例中,只有在发现关键漏洞时,测试才会失败。

  1. trivy image --exit-code 0 --severity MEDIUM,HIGH ruby:2.3.0
  2. trivy image --exit-code 1 --severity CRITICAL ruby:2.3.0

忽略指定的漏洞,定义.trivyignore文件

  1. $ cat .trivyignore
  2. # Accept the risk
  3. CVE-2018-14618
  4. # No impact in our settings
  5. CVE-2019-1543
  6. $ trivy image python:3.4-alpine3.9

指定缓存目录

  1. trivy image --cache-dir /tmp/trivy/ python:3.4-alpine3.9

清除图像缓存


--clear-cache选项删除图像缓存。如果更新了具有相同标记的图像(例如使用最新标记时),此选项将非常有用。

  1. trivy image --clear-cache python:3.7

常见检测问题


使用Trivy开源容器扫瞄器检测命名空间yavin中POD使用的具有严重漏洞的镜像。
查找具有High或Critical漏洞的镜像,并删除使用这些镜像的POD。
Trivy仅预装在集群的主节点上;它在基本系统或工作节点上不可用。必须连接到集群的主节点才能使用Trivy。

  1. ssh xxx@xxx
  2. kubectl get po -n yavin -o yaml | grep 'image'
  3. trivy image | grep -i "High|Critical"
  4. #或者
  5. trivy image --severity HIGH,CRITICAL [那些包名]
  6. #删除Pod....(控制器删除等)


参考:
https://aquasecurity.github.io/trivy/v0.24.4/
https://0x1.gitlab.io/security/Trivy/


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

阿里云 Kubernetes

https://help.aliyun.com/document_detail/86759.html 可以有三种计费方式https://ecs-buy.aliyun.com/wizard?spm=5176.13...

Kubernetes Job讲解

kubernetes Job讲解[TOC] 需求来源Job 背景问题我们可以通过Pod来直接运行任务进程吗?这样做将会产生以下几种问题:1. 我...

Kubernetes DaemonSet讲解

Kubernetes DaemonSet讲解[TOC] 需求来源背景问题我们可以让每个集群内的节点都运行一个相同的Pod吗?如果这样做,以下的...

Kubernetes Pod中断预算【PDB】

Kubernetes Pod中断预算【PDB】[TOC] 尽管Deployment或ReplicaSet一类的控制器能够确保相应Pod对象的副本数量不断逼近期...

Kubernetes Velero 备份的运用

Velero 的运用[TOC] Velero简介Velero是一个开源工具,可以安全地备份,恢复和迁移Kubernetes集群和持久卷。它既可以在本...

Kubernetes 应用配置管理

Kubernetes 应用配置管理[TOC] 需求来源背景问题除了依托容器镜像来定义运行的Container,Pod还需要解决如下问题:1. 不可...

Kubernetes 应用存储和持久化数据卷

Kubernetes 应用配置管理[TOC] Volumes介绍Pod Volumes1. 如果一个Pod中某一个容器异常退出,被kubelet拉起如何保证之前的...

Kubernetes 应用存储和持久化数据卷:存储快照与拓扑调度

Kubernetes 应用存储和持久化数据卷:存储快照与拓扑调度[TOC] 基本知识存储快照产生背景1. 如何保证重要数据在误操作之后...

Kubernetes网络(IPVLAN与MACVLAN)

Kubernetes网络模型[TOC] 三种网络模型 在k8s中一般常见的网络模型支持三种,虚拟网桥、多路复用和硬件交换。 虚拟网...

Kubernetes IP Address

Kubernetes IP Address[TOC] IP AddressIP地址是在计算机网络中被用来唯一标识设备的一组数字。IPv4地址由32位二进制数值...

Dapr 官方教程第二章(Hello World Kubernetes)

Dapr 官方教程第二章(Hello World Kubernetes)[TOC] 本教程将帮助您在 Kubernetes 集群中使用 Dapr。您将从Hello World部...

Kubernetes 搭建RabbitMq集群环境

Kubernetes 搭建RabbitMq集群环境[TOC] 由于Kubectl RabbitMQ 插件在官方是基于krew进行安装的所以我们首先需要安装krew插...

Kubernetes 删除命名空间

Kubernetes 删除命名空间[TOC] 可以直接通过如下命令删除k8s中命名空间下的所有资源。kubectl delete ns [namespace] ...

Kubernetes top之安装metrics-server

Kubernetes top之安装metrics-server[TOC] 一般我们需要知道kubernetes的pod与node的cpu与内存使用情况时,我们可以通过ku...

Kubernetes ExternalName Service

Kubernetes ExternalName Service[TOC] ExternalName 的服务与普通服务的区别在于:将服务映射到 DNS 名称。如下图所示: ...

Kubernetes 自定义Endpoint资源

Kubernetes 自定义Endpoint资源[TOC] 当pod需要服务发布出去的时候中间所关联的还有一个Endpoint这个资源,它能确定服务关...
这一世以无限游戏为使命!
排名
2
文章
636
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术