一、前言
在之前的文章《Docker安全学习之——Docker 安全总结》中介绍了docker搭建后使用工具进行漏洞扫描,本篇则是介绍的在K8S搭建后需要开展的扫描工作,包括K8S自身的组件以及docker镜像等,这里介绍的是trivy这一款工具。
二、工具简要介绍
Trivy工具的GITHUB地址为:https://github.com/aquasecurity/trivy,讨论社区地址为:https://github.com/aquasecurity/trivy/discussions,可以在这里提一些问题讨论。Trivy工具可以扫描容器镜像、文件系统、K8S等,安装方式包括容器安装、二进制等方式。Trivy由trivy工具以及漏洞数据库组成,trivy数据库又包括db、javadb两个部分,在默认情况下,工具首次安装时并不会安装漏洞库,在首次运行工具时会自动进行下载,不过由于国内的限制可能下载不成功,可以用国内的下载地址。
三、安装Trivy工具
采用二进制的方式安装比较简单,直接下载release版本,然后解压得到trivy可执行文件即可。
[root@k8s-master1 trivy]# cp trivy /usr/local/bin/
运行trivy测试一下:
[root@k8s-worker1 trivy]# ./trivy image nginx:1.8
可以看到首次运行的时候在从ghcr.io/aquasecurity/下载db数据库,由于因为下载很慢,现在先解决漏洞库更新的问题。
四、安装漏洞库
关于数据库的介绍可以看https://github.com/aquasecurity/trivy-db以及https://github.com/aquasecurity/trivy-java-db/ 这两个链接,这里介绍两种方式进行更新,一是离线更新,二是在线更新。使用国内的地址ghcr.nju.edu.cn/aquasecurity/trivy-db:2、ghcr.nju.edu.cn/aquasecurity/trivy-java-db:1
(一) 离线更新
使用oras工具进行离线更新,oras也是一个二进制文件,下载后拷贝到/usr/local/bin目录下,全局皆可以使用。
[root@k8s-worker1 trivy]# oras pull ghcr.nju.edu.cn/aquasecurity/trivy-db:2
Downloading 91177f748f90 db.tar.gz
Downloaded 91177f748f90 db.tar.gz
Pulled [registry] ghcr.nju.edu.cn/aquasecurity/trivy-db:2
Digest: sha256:e568fa3f29ff83f6d6a2564f862ce27b8b9010ab338e26421917ce5f9d6e2184
[root@k8s-worker1 trivy]# oras pull ghcr.nju.edu.cn/aquasecurity/trivy-java-db:1
Downloading c92eadafdf3b javadb.tar.gz
Downloaded c92eadafdf3b javadb.tar.gz
Pulled [registry] ghcr.nju.edu.cn/aquasecurity/trivy-java-db:1
Digest: sha256:e6ee14304a8d2651b7f37fecf4fe80be16edcad86dd419503e50431f6531d44b
这样就将漏洞库下载下来了,我们将漏洞库放到/home/trivy/trivy-db/目录下,然后解压,目录结构如下:
执行扫描命令:trivy --cache-dir /home/trivy/trivy-db image nginx:1.8,仍然会从默认的地址去下载漏洞库,通过--skip-db-update跳过db检查,报错:
trivy --cache-dir /home/trivy/trivy-db image nginx:1.8 --skip-db-update
提示:--skip-update cannot be specified on the first run,那就只好在首次运行时进行一次更新。
(二) 在线更新
通过--db-repository、--java-db-repository指定更新地址,完成首次更新:
[root@k8s-worker1 trivy]# ./trivy image nginx:1.8 --db-repository ghcr.nju.edu.cn/aquasecurity/trivy-db:2
[root@k8s-worker1 trivy]# ./trivy image nginx:1.8 --java-db-repository ghcr.nju.edu.cn/aquasecurity/trivy-java-db:1
五、使用trivy进行扫描
(一) 使用Trivy对image进行扫描
Trivy的命令比较多,扫描的结果可以以多种格式输出,默认是table,由于输出内容较多,我将结果存放到1.txt中,如下:
trivy image nginx:1.8 > output/1.txt,查看一下结果:
Trivy还可以过滤漏洞的安全级别,指定json格式输出:
[root@k8s-worker1 ~]# trivy image nginx:1.8 -f json -s HIGH,CRITICAL -o trivy/output/2.txt
查看文件:less trivy/output/2.txt
(二)使用Trivy对k8s进行扫描
使用report summary命令只输入简要信息,使用下面的命令发现报错:
[root@k8s-master1 trivy]# trivy k8s --report summary --disable-node-collector -d
2024-09-18T00:12:50-04:00 DEBUG No plugins loaded
2024-09-18T00:12:50-04:00 DEBUG Default config file "file_path=trivy.yaml" not found, using built in values
2024-09-18T00:12:50-04:00 DEBUG Cache dir dir="/root/.cache/trivy"
2024-09-18T00:12:50-04:00 DEBUG Cache dir dir="/root/.cache/trivy"
2024-09-18T00:12:50-04:00 DEBUG Parsed severities severities=[UNKNOWN LOW MEDIUM HIGH CRITICAL]
2024-09-18T00:12:50-04:00 DEBUG Ignore statuses statuses=[]
2024-09-18T00:12:53-04:00 DEBUG DB update was skipped because the local DB is the latest
2024-09-18T00:12:53-04:00 DEBUG DB info schema=2 updated_at=2024-09-20T18:12:42.781188704Z next_update=2024-09-21T00:12:42.781188404Z downloaded_at=2024-09-18T03:42:23.697619193Z
6 / 143 [------>_____________________________________________________________________________________________________________________________________________________] 4.20% 0 p/s
2024-09-18T00:25:38-04:00 FATAL Fatal error
- k8s scan error:
github.com/aquasecurity/trivy/pkg/k8s/commands.(*runner).run
/home/runner/work/trivy/trivy/pkg/k8s/commands/run.go:91
- context deadline exceeded
这一步非常耗时时间,可以增加timeout,默认是5分钟,我们设置为2小时:
[root@k8s-master1 trivy]# trivy k8s --report summary --disable-node-collector -d --timeout 2h
可以看到本次扫描成功了,但是因为我是在K8S的master上面扫描的,在Master上没有安装docker,因此对Image扫描失败,后面是简要信息的输出:
--report 默认的参数是all,也即输出所有的详细信息,由于信息比较多,可以输出到特定的文件中:
[root@k8s-master1 trivy]# trivy k8s --report all --disable-node-collector -d --timeout 2h > output/k8s.txt
查看文本中输出的信息:
六、总结
Trivy还有很多的功能,可以通过--help查看具体的内容,同时trivy还有一部分功能还在测试中,在使用的时候可以结合其他的工具进行总体安全评估。
标签:网络安全,trivy,k8s,--,09,db,aquasecurity,安全漏洞,K8S From: https://blog.51cto.com/u_9652359/12074958