当前位置: 首页 > 科技观察

超实用的容器镜像漏洞检测工具Trivy入门指南

时间:2023-03-18 22:41:41 科技观察

Trivy特点Trivy是一个简单而全面的CI容器漏洞扫描器。软件漏洞是软件或操作系统中的故障、缺陷或弱点。Trivy检测操作系统包(Alpine、RHEL、CentOS等)和应用程序依赖项(Bundler、Composer、npm、yarn等)中的漏洞。Trivy非常易于使用,只需安装二进制文件并开始扫描。扫描只是指定容器的镜像名称。与Clair、AnchoreEngine、Quay等其他图片扫描工具相比,Trivy在准确性、便捷性、对CI的支持等方面具有明显优势。推荐在CI中使用。在推送到ContainerRegistry之前,您可以轻松扫描本地容器镜像。Trivy具有以下特点:1.检测面全面,可以检测全面的漏洞。操作系统软件包(Alpine、RedHatUniversalBaseImage、RedHatEnterpriseLinux、CentOS、OracleLinux、Debian、Ubuntu、AmazonLinux、openSUSELeap、SUSEEnterpriseLinux、PhotonOS、Distrioless)、应用依赖(Bundler、Composer、Pipenv、Poetry、npm、yarn和Cargo);2.使用简单,指定图片名称即可;3.快速无状态扫描,第一次扫描将在10秒内完成(取决于您的网络)。随后的扫描将在一秒钟内完成。与其他扫描器在第一次运行时需要很长时间(大约10分钟)获取漏洞信息并鼓励您维护一个持久的漏洞数据库不同,Trivy是无状态的,不需要维护或准备;4.安装方便,安装方式:$apt-getinstalltrivy$yuminstalltrivy$brewinstalltrivy不需要安装数据库、库等先决条件(例外是需要安装rpm扫描基于RHEL/CentOS的镜像).Trivy安装这里安装Trivy的环境是Centos7,安装的版本是0.16.0,安装命令如下:$wgethttps://github.com/aquasecurity/trivy/releases/download/v0.16.0/trivy_0。16.0_Linux-64bit.rpm$rpm-ivhtrivy_0.16.0_Linux-64bit.rpm准备中...##################################[100%]升级/安装...1:trivy-0:0.16.0-1###################################[100%]$trivy-vVersion:0.16.0Trivy的简单使用下面介绍一些简单使用Trivy的命令和一些测试结果。Trivy的性能指标主要从几个方面进行测试:图像大小对Trivy扫描速度的影响;扫描图像大小与网络流量使用之间的关系;扫描结果是否易于解析;图片大小对Trivy扫描速度的影响本地扫描90MB左右:执行命令:$trivyregistry.cn-hangzhou.aliyuncs.com/choerodon-tools/javabase:0.5.0扫描结果:时间:第一次扫描会DownLoadDB,大约需要十分钟以内(14M,视网速而定),外来主机10s以内,第二次扫描10秒以内完成。镜像位于本地且大小约为408MB时扫描:执行命令:$trivyregistry.cn-hangzhou.aliyuncs.com/choerodon-tools/mysql:5.7.17执行结果:时间:约10秒。扫描图片在线时扫描,大小约为316M:执行结果:时间:约20s结论:本地扫描图片大小对扫描速度影响不大,在线扫描和本地扫描方式对扫描速度有影响扫描速度不大。扫描图片大小与网络流量使用关系在线扫描前网络流量使用:扫描图片大小:约316M扫描后服务器磁盘和网络流量使用:结论:接收到的网络流量等于大小在线镜像,镜像被下载并放置在服务器磁盘上的某个地方(目前,此服务器上未安装Docker)。注意:同一张图片再次全量扫描不会增加接收流量和磁盘占用比例。扫描结果是否易于解析?使用JSON输出扫描结果:scanimage,openjdk:15-ea-jdk-buster大小:约316M时间:约10s返回结果:标准josn格式文件其他更多可以使用命令1.扫描镜像文件$dockersaveruby:2.3。0-alpine3.9-oruby-2.3.0.tar$trivy--inputruby-2.3.0.tar2.按严重性过滤漏洞:$trivy--–severityHIGH,CRITICALruby:2.3。03.按类型过滤漏洞:$trivy--vuln-typeosruby:2.3.04.跳过漏洞数据库的更新Trivy在开始运行时总是更新其漏洞数据库。这通常很快,因为这是差异更新。但是,如果您甚至想跳过此步骤,请使用--skipupdate选项。$trivy--skip-updatepython:3.4-alpine3.95.只下载漏洞数据库你也可以让Trivy简单地检索漏洞数据库。这对于在持续集成系统中初始化工作人员很有用。第一次运行时,--onlyupdate选项将被忽略。$trivy--download-db-only$trivy--download-db-only--only-updatealpine6.忽略未修补的漏洞默认情况下,Trivy还会检测未修补/未修补的漏洞。这意味着即使更新了所有软件包也无法修复这些漏洞。如果你想忽略它们,使用--ignoreunfixed选项。$trivy--ignore-unfixedruby:2.3.07.指定退出代码默认情况下,即使检测到漏洞,Trivy也会以代码0退出。如果要以非零退出代码退出,请使用-–exitcode选项。此选项对CI/CD很有用。在下面的示例中,只有在发现严重漏洞时测试才会失败。$trivy-–exit-code1python:3.4-alpine3.9$trivy-–exit-code0–severityMEDIUM,HIGHruby:2.3.0$trivy-–exit-code1–severityCRITICALruby:2.3.08.忽略指定的漏洞$cat。trivyignoreCVE-2018-14618CVE-2019-1543$trivypython:3.4-alpine3.99.指定缓存目录:$trivy--cache-dir/tmp/trivy/python:3.4-alpine3.910.清除镜像缓存––clear缓存选项删除图像缓存。如果更新具有相同标签的图像(例如,使用最新标签时),此选项很有用。$trivy---clear-cache--reset选项删除所有缓存和数据库。在此之后,需要很长时间才能在本地重建漏洞数据库。$trivy--reset11.使用轻量级数据库:$trivy--lightalpine:3.10轻量级数据库不包含描述和引用等漏洞详细信息。因此,数据库的体积更小,下载速度更快。当您不需要漏洞详细信息并且适用于CI/CD时,此选项很有用。要查找更多信息,您可以在NVD网站上搜索漏洞详细信息。网址:https://nvd.nist.gov/vuln/search将Trivy集成到CITrivy中是CI友好的,官方就是这样使用的。集成CI只需要一个简单的yml配置文件,即发现漏洞就会测试失败。如果您不希望测试失败,请指定--exitcode0。由于在自动化场景(如CI/CD)中,您只对最终结果而不是完整报告感兴趣,因此使用--light标志优化此场景以获得快速结果。GitLabCI集成的yml配置请参考:https://github.com/aquasecurity/trivy#gitlab-ci使用时的注意事项。国内拉取漏洞库速度慢。在同一台服务器上,不能并行执行多个镜像扫描。轻量级数据库可以与--light一起使用,以优化执行扫描的效率。