Vuls 评测:无代理的漏洞扫描器,但你需要先理解它的架构取舍
适用于 Linux、FreeBSD、Container、WordPress、编程语言库、网络设备的无代理漏洞扫描器。 Vuls:VULnerability Scanner 适用于 Linux/FreeBSD 的漏洞扫描器,无代理,用 Go 编写。
秒懂
- 它是什么?
- Vuls 是一个用 Go 编写的无代理漏洞扫描器,支持 Linux、FreeBSD、容器、WordPress 和网络设备。它通过 SSH 或本地命令收集软件清单,再与多个漏洞数据库比对。本文分析它的扫描模式、数据源、运行方式,并指出它的局限。
- 适合谁用?
- Vuls 适合那些已经有多台 Linux 服务器、希望用一台中央机器通过 SSH 定期扫描漏洞的系统管理员。它不需要在每台目标机上安装代理,这降低了部署成本。
- 能商用吗?
- 可以,但有条件。GPL-3.0 是 copyleft 许可证:如果你分发包含它的软件,就必须以同一许可证公开该软件的源代码。只在内部运行、不对外分发,则不会触发这项义务。
- 还在维护吗?
- 在维护。仓库最近一次提交在 2 天前。
- 用什么语言写的?
- 主要是 Go(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。
开源项目深度解析
它解决的是手动补丁管理的痛点
Vuls 的出发点很具体:系统管理员为了避免生产环境停机,常常放弃包管理器的自动更新,改为手动打补丁。这带来三个问题:要持续盯 NVD 等漏洞库、软件多时难以全部监控、分析哪些服务器受影响容易遗漏。Vuls 把这三个问题拆开,用自动化扫描和定期报告来应对。它不是一个实时监控工具,而是一个定期生成报告的扫描器。适合那些已经有补丁流程、但缺少自动化漏洞清点的人。
无代理架构:SSH 连接与本地模式
Vuls 的核心设计是无代理。它不需要在目标服务器上安装常驻程序,而是通过 SSH 连接远程执行命令来收集软件清单。文档把它分为三种模式。远程扫描模式:你只需要一台中央机器,通过 SSH 连接所有目标服务器。本地扫描模式:在每台目标机上直接运行 Vuls,适合不想开放 SSH 连接的环境。服务器模式:先在中央机器上启动 Vuls 作为 HTTP 服务,然后在目标机上执行命令收集软件信息,通过 HTTP 发送给 Vuls 服务器,结果以 JSON 返回。这个模式不需要 SSH,也不需要扫描器,只需要在目标机上执行几条命令。
Fast Scan 与 Fast Root Scan 的取舍
Vuls 提供两种扫描模式,区别在于权限和检测深度。Fast Scan 不需要 root 权限,无依赖,对目标服务器几乎无负载,支持离线模式。Fast Root Scan 需要 root 权限,但能检测受更新影响的进程,比如用 yum-ps 检测 Amazon Linux、CentOS 等发行版上哪些进程需要重启,或用 checkrestart 检测 Debian 和 Ubuntu 上更新后未重启的服务。这个取舍很明显:要更准确的进程级信息,就得给 root 权限。如果你只需要知道哪些 CVE 影响系统,Fast Scan 足够。但如果要判断重启时机,Fast Root Scan 才有价值。
数据源:不只是 NVD,还有 OVAL 和 PoC
Vuls 的扫描质量依赖它整合的漏洞数据库。除了 NVD 和 JVN,它还使用各发行版的 OVAL 数据,比如 Red Hat、Debian、Ubuntu、SUSE、Oracle Linux。这意味着它能更精确地匹配发行版特有的安全公告,而不是只靠通用 CVE 列表。此外,它整合了 Exploit Database、Metasploit 模块、PoC 仓库(如 awesome-cve-poc、PoC-in-GitHub)以及 CISA KEV 目录。这让你能区分哪些漏洞有公开利用代码,哪些只是理论风险。它还整合了 MITRE ATT&CK 和 CAPEC,提供威胁情报背景。但要注意,数据源覆盖面广不代表每个源都更新及时,依赖外部 API 的源(如 wpscan)可能有速率限制。
非 OS 包扫描:Lockfile、CPE 与 GitHub 集成
Vuls 不止扫描系统包,还能处理编程语言库、自编译软件和网络设备。它提供几种方式。Lockfile 扫描:基于项目的依赖锁定文件来检测库漏洞,适合应用代码。CPE 扫描:通过 Common Platform Enumeration 标识软件,适合自编译或非标准安装。GitHub 集成:可以接入 GitHub Security Alerts,自动获取仓库的安全警告。OWASP Dependency Check 集成:实验性功能,用于在库更新时自动更新。这个设计让 Vuls 能覆盖从操作系统到应用层的漏洞,但每种方式都有配置成本。Lockfile 扫描需要知道文件路径,CPE 扫描需要手动指定 CPE 标识,不是开箱即用。
获取与运行:从安装到第一次扫描
Vuls 用 Go 编写,源码在 GitHub 上,最新版本是 v0.40.1。安装方式文档没有详细列出,但通常可以用 go install 或下载二进制。运行的基本流程是:先配置 config.toml 文件,指定目标服务器和 SSH 连接信息,然后运行 vuls scan 命令。扫描完成后,用 vuls report 生成报告。具体命令和配置键在 README 中没有完整给出,但文档网站 vuls.io 有详细说明。一个关键点是,Vuls 需要访问多个外部数据库,所以首次扫描前要确保网络能连上 NVD、OVAL 等源。离线模式支持部分发行版,但需要提前下载数据。
局限与失败模式:不是实时工具,也不是全平台万能
Vuls 的文档明确说它是定期报告工具,不是实时监控。这意味着它依赖 CRON 定期运行,漏洞发现会有延迟。另一个局限是扫描模式的选择直接影响结果。Fast Scan 不检测进程重启状态,Fast Root Scan 需要 root 权限,服务器模式需要手动在目标机执行命令,这增加了自动化复杂度。对于 Windows 和 macOS,README 提到支持,但数据源和扫描机制描述较少,实际可用性需要验证。网络设备扫描依赖 CPE,可能无法覆盖所有品牌。此外,GPL-3.0 许可证意味着如果你修改并分发 Vuls,必须开源你的修改。
替代方案:Trivy 与 OpenSCAP 的差异
提到容器漏洞扫描,Trivy 是常见的替代品。Trivy 也支持多种 OS 包和语言库,但它更专注于容器镜像和文件系统扫描,可以直接在 CI 中集成。Vuls 的优势在于无代理和远程扫描多台服务器,Trivy 通常需要你提供镜像或文件系统路径。另一个方向是 OpenSCAP,它做合规性扫描和漏洞评估,但需要安装代理或使用离线数据流,配置更重。Vuls 的设计哲学是轻量、无代理,适合已有 SSH 基础设施的环境。如果你已经有配置管理工具(如 Ansible)能批量执行命令,Vuls 的本地模式可以无缝嵌入。
编辑结论
Vuls 适合那些已经有多台 Linux 服务器、希望用一台中央机器通过 SSH 定期扫描漏洞的系统管理员。它不需要在每台目标机上安装代理,这降低了部署成本。但如果你需要实时监控或对 Windows 有强需求,Vuls 不是首选,它的 Windows 支持较新且文档有限。如果你追求更细粒度的容器镜像扫描,Trivy 可能更直接。采用前,先验证你的目标发行版是否在支持列表中,特别是 SUSE 和 Oracle Linux 的 OVAL 数据源是否可用。还要确认离线模式是否覆盖你的发行版,因为 CentOS、Debian、Ubuntu 等支持离线,但 FreeBSD 和 Alpine 未必。最后,检查 GPL-3.0 许可是否与你的使用场景兼容,尤其是如果你打算修改并分发代码。
社区笔记