afumu
afumu
发布于 2022-05-01 / 0 阅读
0
0

开源漏洞扫描器Vuls与Trivy的深度对比及国产化适配改造

摘要:在DevSecOps体系中,自动化漏洞扫描是保障软件供应链安全不可或缺的一环。Vuls与Trivy作为两款业界领先的Go语言开源漏洞扫描器,各自凭借独特的设计哲学占据了重要地位。本文旨在对这两款工具进行深度对比,剖析其在扫描原理、漏洞库机制及应用场景上的核心差异,并重点分享在信息技术应用创新(信创)背景下,为适配银河麒麟、中科方德等国产操作系统,对扫描器进行二次开发的实践经验与思考。

一、 背景:自动化漏洞扫描的必要性

现代软件开发高度依赖开源组件和容器化技术,这在提升开发效率的同时,也引入了复杂的安全风险。一个应用可能包含成百上千个第三方依赖,任何一个依赖的已知漏洞(CVE)都可能成为攻击者入侵系统的突破口。因此,将自动化漏洞扫描集成到CI/CD流程中,实现对操作系统软件包、应用依赖库的持续性安全检测,已成为业界的标准实践。

Vuls和Trivy正是这一领域的佼佼者,它们都使用Go语言开发,性能优异,但设计理念和适用场景却大相径庭。

二、 核心原理对比:Vuls的“深度审计” vs. Trivy的“快速检测”

1. Vuls:面向服务器的Agentless深度扫描

Vuls的设计哲学是非侵入式的服务器深度安全审计

  • 扫描模式:采用**Agentless(无代理)**模式,通过SSH连接到目标服务器(Linux/FreeBSD),在远程主机上执行命令来收集已安装的软件包信息。

  • 扫描对象:专注于运行中的服务器,能够检测操作系统层面的软件包漏洞(如rpm,dpkg包)、中间件配置,甚至能通过CPE(通用平台枚举)来识别软件版本。

  • 漏洞库:Vuls不维护自己的中心化漏洞库,而是实时从多个权威来源拉取数据进行比对,包括NVD(美国国家漏洞数据库)、OVAL(开放漏洞与评估语言)以及各大Linux发行版的安全公告。

  • 特点:扫描过程更为详尽和深入,适合进行定期的、全面的服务器安全基线检查和审计。但由于需要建立SSH连接并在远程执行命令,其扫描速度相对较慢,配置也更为复杂(需在config.toml中定义主机信息和认证方式)。

2. Trivy:面向CI/CD的快速、多目标扫描

Trivy的设计哲学是快速、易用,为CI/CD而生

  • 扫描模式:采用本地分析模式,直接对静态目标进行扫描,无需与运行中的服务交互。

  • 扫描对象:范围极其广泛,包括:

    • 容器镜像:这是其最核心和最知名的功能。

    • 文件系统:可以直接扫描本地文件系统或解压后的目录。

    • Git仓库:扫描远程Git仓库中的配置文件和依赖清单。

    • 应用依赖:支持扫描多种编程语言的依赖文件(如pom.xml,go.mod,package-lock.json等)。

  • 漏洞库:Trivy维护着一个自己构建的、经过优化的漏洞数据库trivy.db。该数据库整合了来自NVD、Red Hat、Debian、GitHub Advisory Database等多个来源的数据,并以BoltDB(一个嵌入式KV数据库)的格式存储,以实现极高的查询效率。

  • 特点:扫描速度极快,通常在几十秒内就能完成一个复杂容器镜像的扫描。命令行接口简单直观,非常易于集成到Jenkins、GitLab CI等自动化流水线中。

三、 国产化适配改造:让扫描器“认识”中国芯

在信创项目中,我们面临一个核心挑战:Vuls和Trivy默认配置下,无法识别银河麒麟(Kylin)、中科方德(NFS)等国产操作系统。其根本原因在于,这些工具的操作系统分析器(OS Analyzer)依赖于标准的发行版标识文件(如/etc/redhat-release,/etc/lsb-release),而国产操作系统的标识文件格式和内容均不相同。

为了解决这个问题,我们对Trivy的源码进行了二次开发,为其增加了识别国产操作系统的能力。

核心改造步骤:

  1. 新增OS分析器:我们为Trivy的analyzer/os包添加了新的分析器,例如kylinV10ServerAnalyzernfsAnalyzer

  2. 识别特征文件

    • 对于银河麒麟服务器版V10,我们让分析器读取/etc/kylin-release文件,并检查其内容是否包含Kylin Linux Advanced ServerV10等关键字符串。

    • 对于中科方德服务器操作系统,我们让分析器读取/etc/nfs-release文件,并检查其内容是否包含NFS Server4等特征。

  3. 版本映射:最关键的一步是版本映射。由于这些国产操作系统通常基于某个上游的开源Linux发行版,我们可以将其映射过去,以便复用已有的漏洞数据。

    • 经过分析,我们将银河麒麟V10服务器版映射为CentOS 7(aos.CentOS, "7.9.2009")。

    • 中科方德映射为CentOS 8(aos.CentOS, "8.3.1")。

改造代码示例(简化逻辑):

// in trivy/pkg/fanal/analyzer/os/kylin/kylin.go
func (a kylinV10ServerAnalyzer) Analyze(input analyzer.AnalysisInput) (*analyzer.AnalysisResult, error) {
    scanner := bufio.NewScanner(input.Content)
    for scanner.Scan() {
        line := scanner.Text()
        // 通过特征字符串识别操作系统
        if strings.Contains(line, "Kylin Linux Advanced Server") && strings.Contains(line, "V10") {
            return &analyzer.AnalysisResult{
                OS: &types.OS{
                    Family:   aos.CentOS, // 映射到CentOS家族
                    Name:     "7.9.2009", // 映射到具体的版本
                    SourceOs: line,     // 保留原始的OS信息
                },
            }, nil
        }
    }
    return nil, xerrors.Errorf("kylin: %w", aos.AnalyzeOSError)
}

通过这样的改造,Trivy就具备了“认识”国产操作系统的能力,能够正确地为其加载CentOS的漏洞库,并进行精准的漏洞匹配。

四、 总结与选型建议

维度

Vuls

Trivy

核心场景

运行中服务器的深度安全审计

CI/CD流水线中的快速、自动化扫描

扫描对象

Linux/FreeBSD服务器

容器镜像、文件系统、Git仓库、应用依赖

扫描模式

Agentless (SSH)

本地文件分析

性能

较慢,但深入

极快

漏洞库

多源实时拉取

自建优化数据库(trivy.db)

易用性

配置较复杂

极其简单

信创支持

需二次开发

需二次开发

最终选型建议:

  • 如果您的核心需求是对生产环境中的服务器进行定期的、深入的安全审计和合规检查,并且可以接受较长的扫描时间,Vuls是一个非常专业的选择。

  • 如果您的核心需求是在开发和部署的每个环节(如代码提交、镜像构建)进行快速、自动化的安全左移,那么Trivy无疑是当前业界的最佳实践。它的速度、易用性和广泛的扫描对象支持,使其能无缝融入任何现代DevSecOps工作流。

需要强调的是,无论选择哪款工具,当面对国产化信创环境时,都必须具备对其进行二次开发和适配的能力。将开源工具与特定业务场景深度结合,解决标准产品无法覆盖的“最后一公里”问题,这本身就是一项宝贵且核心的技术竞争力。


评论