如何在 Ubuntu 22.04 上使用 Vuls 作为漏洞扫描器如何在 Ubuntu 22.04 上使用 Vuls 作为漏洞扫描器如何在 Ubuntu 22.04 上使用 Vuls 作为漏洞扫描器如何在 Ubuntu 22.04 上使用 Vuls 作为漏洞扫描器
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 22.04 上使用 Vuls 作为漏洞扫描器

作者选择了 Write for DOnations 计划。

介绍

国家漏洞数据库 (NVD)。借助资源,Vuls 可以一次扫描多个系统并通过电子邮件或 Slack 发送报告。它具有三种扫描模式(快速、快速根和深度),您可以根据情况进行选择。

Vuls 不是一个广泛的 IT 安全扫描器;例如,它不监控网络流量或防止暴力登录攻击。但是,Vuls 提供了一种自动报告 Linux 软件包漏洞的方法。当 Vuls 使用的数据库收到某些漏洞的修复通知时,Vuls 也会将此修复信息提取到其报告中。生成报告时,Vuls 使用数据库中已建立的排名系统对最紧迫的漏洞进行优先排序。

在本教程中,您会将 Vuls 部署到 Ubuntu 22.04 服务器。此过程包括从源代码构建 Vuls 及其依赖项,配置扫描并向 Slack 报告,并可选择将其连接到目标机器以启用远程扫描。最后,您将拥有一个自动漏洞报告系统,该系统会提醒您漏洞并消除手动检查的需要。

先决条件

要完成本教程,您需要:

  • 一台至少有 2 GB RAM 的服务器,运行 Ubuntu 22.04,具有 root 访问权限,以及一个辅助的非 root 帐户。您可以按照此初始服务器设置指南进行设置。对于本教程,非根用户是 sammy。
  • 您所属的 Slack 工作区。要了解如何创建工作区,请访问官方文档。
  • (可选)运行(最好)Ubuntu 22.04 的多台服务器,如果您想设置 Vuls 以远程扫描它们,则具有 root 访问权限和辅助的非 root 帐户。在本教程中,辅助帐户是 sammy-shark。辅助帐户必须配置用于身份验证的 SSH 密钥,您可以按照 Vuls 产品文档进行配置。< /li>

第 1 步 — 安装依赖项

在本节中,您将创建一个文件夹来存储 Vuls 数据,安装最新版本的 Go 编程语言,并安装 Vuls 及其依赖项所需的其他包。

对于本教程,您会将所有与 Vuls 相关的数据存储在 /usr/share/vuls-data 目录中。通过运行以下命令创建它:

  1. sudo mkdir /usr/share/vuls-data

要使其可供 sammy 访问,请运行以下命令:

  1. sudo chown -R sammy /usr/share/vuls-data

您现在已经创建了 vuls-data 文件夹,这将是您的工作区。在继续安装所需的包之前,首先更新包管理器缓存:

  1. sudo apt update

要下载和编译依赖项,您将安装 git、gcc、make、sqlite、 debian-goodies 和 wget。 sqlite 是一个数据库系统,您将在此处使用它来存储漏洞信息。 debian-goodies 包含 checkrestart 实用程序,它提供有关哪些软件包可以并且应该在任何给定时刻重新启动的信息。

您可以在一个命令中安装它们:

  1. sudo apt install sqlite git debian-goodies gcc make wget -y

您现在已经安装了所需的软件包,可以继续安装 Go 和 Vuls 将使用的相关程序。

安装围棋

通过运行以下命令使用 snap 包管理器安装 Go:

  1. sudo snap install go --classic

您使用 snap 来安装 Go,因为它会安装该语言的最新版本,这与可能安装旧版本的 apt 不同。不建议使用旧版本,这可能会阻止您完成本教程。

为了工作,Go 需要您设置一些环境变量:GOPATH 和 PATH。 GOPATH 指定 Go 的工作目录。 PATH,其中包含放置程序的目录,必须扩展以告诉系统在哪里可以找到 Go 本身。

每次用户登录时都需要设置这些环境变量。要自动执行此操作,您将在 /etc/profile.d 下创建一个名为 go-env.sh 的新可执行文件。这将导致目录在每次用户登录时执行。

使用文本编辑器创建 go-env.sh:

  1. sudo nano /etc/profile.d/go-env.sh

将以下命令添加到文件中:

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin:/snap/bin

export 命令将给定的环境变量设置为所需的值。在这里,您使用它来为 GOPATH 和 PATH 填充适当的值。

保存并关闭文件。

目前,go-env.sh 不可执行。要解决此问题,请通过运行以下命令将其标记为可执行文件:

  1. sudo chmod +x /etc/profile.d/go-env.sh

为避免需要再次登录,您可以通过运行以下命令重新加载 go-env.sh:

  1. source /etc/profile.d/go-env.sh

source 命令将给定文件重新加载到当前 shell 中,同时保留其状态。

您现在已经安装了 Go 语言,设置了它的环境变量,并安装了稍后需要的包。接下来,您将下载并编译 Vuls 所需的 Go 程序。这些程序是 go-cve-dictionary 和 goval-dictionary,Vuls 使用它们来查询漏洞数据库。

安装和运行 go-cve-dictionary

在本节中,您将下载并编译 go-cve-dictionary,这是一个提供对国家漏洞数据库的访问的 Go 包。然后,您将运行它来获取 Vuls 可以使用的漏洞数据。 NVD 是美国政府公开报告的网络安全漏洞的存储库,包含漏洞 ID(CVE — 常见漏洞和披露)、摘要和影响分析,并以机器可读格式提供。

Go 将包存储在 $GOPATH/src/ 下。您可以使用子目录来进一步扩展它来记录来源。例如,用户 example-user 从 GitHub 创建的包将存储在 $GOPATH/src/github.com/example-user 下。

您首先要安装 go-cve-dictionary,方法是从 GitHub 克隆 Go 包,然后进行编译。

根据示例路径,首先创建一个目录来存储它:

  1. mkdir -p $GOPATH/src/github.com/vulsio

通过运行导航到它:

  1. cd $GOPATH/src/github.com/vulsio

现在你将通过运行以下命令从 GitHub 克隆 go-cve-dictionary 到你的服务器:

  1. git clone https://github.com/vulsio/go-cve-dictionary.git

然后,导航到包根目录:

  1. cd go-cve-dictionary

最后,通过运行以下命令编译并安装它:

  1. make install

请记住,此命令可能需要一些时间才能完成。

要使其在系统范围内可用,请将其复制到 /usr/local/bin:

  1. sudo cp $GOPATH/bin/go-cve-dictionary /usr/local/bin

go-cve-dictionary 需要访问日志输出目录;默认情况下,它是 /var/log/vuls。通过运行创建它:

  1. sudo mkdir /var/log/vuls

现在,每个人都可以读取日志目录。使用以下命令限制对当前用户的访问:

  1. sudo chmod 700 /var/log/vuls

将权限标志设置为 700 将访问权限限制为仅所有者。

要使其可供 sammy 或其他用户访问,请运行以下命令:

  1. sudo chown -R sammy /var/log/vuls

接下来,您将从 NVD 获取漏洞数据并将其存储在您的 Vuls 工作区 (/usr/share/vuls-data):

  1. go-cve-dictionary fetch nvd --dbpath /usr/share/vuls-data/cve.sqlite3

此命令将获取从 2002 年到当年的 NVD 漏洞数据,并将其存储在 /usr/share/vuls-data 下的数据库中。

注意:此命令需要很长时间才能完成,如果您的服务器内存小于 2 GB,则可能会失败。

在本节中,您下载并安装了 go-cve-dictionary,然后获取了 NVD 数据供 Vuls 使用。您现在将下载并安装 goval-dictionary 并为 Ubuntu 获取 OVAL 数据。

安装和运行 goval-dictionary

在本节中,您将下载并编译 goval-dictionary,这是一个为 Ubuntu 提供 OVAL 数据库访问的 Go 包。然后您将运行它并获取漏洞数据以供 Vuls 使用。 OVAL 代表Open Vulnerability and Assessment Language,这是一种开放语言,用于表达检查以确定给定系统上是否存在软件漏洞。

导航到 $GOPATH/src/github.com/vulsio 文件夹:

  1. cd $GOPATH/src/github.com/vulsio

通过运行以下命令从 GitHub 克隆包:

  1. git clone https://github.com/vulsio/goval-dictionary.git

进入包文件夹:

  1. cd goval-dictionary

使用 make 编译并安装它:

  1. make install

将其复制到 /usr/local/bin 以使其可全局访问:

  1. sudo cp $GOPATH/bin/goval-dictionary /usr/local/bin

然后,通过运行以下命令获取 Ubuntu 22 的 OVAL 数据:

  1. sudo goval-dictionary fetch ubuntu --dbpath=/usr/share/vuls-data/oval.sqlite3 22

在这里,您下载并安装了 goval-dictionary,然后获取了 Ubuntu 的 OVAL 数据。接下来,您将下载并安装 gost 并获取 Debian 安全跟踪器数据。

安装和运行 gost

在本节中,您将下载并编译 gost,这是一个提供对 Debian 安全错误跟踪器的访问的 Go 包。然后您将运行它并获取漏洞数据以供 Vuls 使用。 Ubuntu 安全跟踪器收集有关随 Ubuntu 分发的软件包的漏洞状态的所有信息。

您将把这个包存储在与以前相同的目录中。通过运行以下命令导航到它:

  1. cd $GOPATH/src/github.com/vulsio

通过运行以下命令从 GitHub 克隆包:

  1. git clone https://github.com/vulsio/gost.git

完成后,进入包文件夹:

  1. cd gost

使用 make 编译并安装它:

  1. make install

将其复制到 /usr/local/bin 以使其可全局访问:

  1. sudo cp $GOPATH/bin/gost /usr/local/bin

然后,为 gost 创建一个日志文件目录:

  1. sudo mkdir /var/log/gost

使用以下命令限制对当前用户的访问:

  1. sudo chmod 700 /var/log/gost

将权限标志设置为 700 将访问权限限制为仅所有者。要使其可供 sammy 或其他用户访问,请运行以下命令:

  1. sudo chown -R sammy /var/log/gost

然后,通过运行获取 Ubuntu 安全跟踪器数据:

  1. gost fetch ubuntu --dbpath=/usr/share/vuls-data/gost.sqlite3

输出可能很长。它可能不会在终端中清除,在这种情况下,您可以运行 clear 命令。

您刚刚下载并安装了 gost,然后获取了 Debian 的数据。在下一步中,您将下载并安装 Vuls。

第 2 步 — 下载和配置 Vuls

安装所有依赖项后,您现在可以从源代码下载并编译 Vuls。您还将配置它以扫描本地计算机。

使用以下命令创建一个包含 Vuls 存储库路径的新目录:

  1. mkdir -p $GOPATH/src/github.com/future-architect

导航到它:

  1. cd $GOPATH/src/github.com/future-architect

通过运行以下命令从 GitHub 克隆 Vuls:

  1. git clone https://github.com/future-architect/vuls.git

进入包文件夹:

  1. cd vuls

通过运行以下命令同时编译和安装它:

  1. make install

请记住,完成此命令可能需要一些时间。

将其复制到 /usr/local/bin 以使其可全局访问:

  1. sudo cp $GOPATH/bin/vuls /usr/local/bin

现在,您将为 Vuls 创建一个配置文件。导航回 /usr/share/vuls-data:

  1. cd /usr/share/vuls-data

Vuls 将其配置存储在一个 TOML 文件中,您将称之为 config.toml。使用您的文本编辑器创建它:

  1. sudo nano config.toml

输入以下配置:

[cveDict]
type = "sqlite3"
SQLite3Path = "/usr/share/vuls-data/cve.sqlite3"

[ovalDict]
type = "sqlite3"
SQLite3Path = "/usr/share/vuls-data/oval.sqlite3"

[gost]
type = "sqlite3"
SQLite3Path = "/usr/share/vuls-data/gost.sqlite3"

[servers]

[servers.localhost]
host = "localhost"
port = "local"
scanMode = [ "fast" ]
#scanMode = ["fast", "fast-root", "deep", "offline"]

此配置的前两部分(cveDict、ovalDict 和 gost)将 Vuls 指向您刚刚添加的漏洞数据库。 servers 部分标志着服务器相关信息的开始。单独的部分将对有关每个服务器的信息进行分组。 Vuls 将使用此概述的配置扫描的唯一服务器是本地服务器:localhost。

Vuls提供四种扫描模式:

  • 快速模式(默认)在没有 root 权限的情况下进行扫描,没有依赖性,并且对目标服务器的影响很小。
  • 快速根模式使用根权限进行扫描,可以检测已升级但尚未重新启动的进程。
  • 深度扫描模式与快速根模式相同,但会检查更改日志,这会导致目标服务器上的负载过高。
  • 离线模式在没有互联网访问的情况下扫描机器,可以与其他模式结合使用。

保存并关闭文件。

要测试配置文件的有效性,请运行以下命令:

  1. vuls configtest

您将收到类似于此的输出:

Output
[Jan 5 20:24:29] INFO [localhost] vuls-v0.22.0-build-20230105_201926_554ecc4 [Jan 5 20:24:29] INFO [localhost] Validating config... [Jan 5 20:24:29] INFO [localhost] Detecting Server/Container OS... [Jan 5 20:24:29] INFO [localhost] Detecting OS of servers... [Jan 5 20:24:29] INFO [localhost] (1/1) Detected: localhost: ubuntu 22.10 [Jan 5 20:24:29] INFO [localhost] Detecting OS of containers... [Jan 5 20:24:29] INFO [localhost] Checking Scan Modes... [Jan 5 20:24:29] INFO [localhost] Checking dependencies... [Jan 5 20:24:29] INFO [localhost] Dependencies... Pass [Jan 5 20:24:29] INFO [localhost] Checking sudo settings... [Jan 5 20:24:29] INFO [localhost] sudo ... No need [Jan 5 20:24:29] INFO [localhost] It can be scanned with fast scan mode even if warn or err messages are displayed due to lack of dependent packages or sudo settings in fast-root or deep scan mode [Jan 5 20:24:29] INFO [localhost] Scannable servers are below... localhost

您已正确输入配置,Vuls 已检测到它可以扫描本地服务器。

您已经安装并配置了 Vuls 来扫描本地服务器。在下一步中,您将运行本地扫描并查看生成的报告。

第 3 步 — 运行本地扫描

在此步骤中,您将运行本地扫描,然后查看生成的漏洞报告。到目前为止,您只配置了 Vuls 在最后一步中正确检测到的本地服务器。默认扫描模式(如果未明确指定)为 fast。

要运行扫描,请执行以下命令:

  1. vuls scan

输出将与此类似:

[Jan  5 20:26:14]  INFO [localhost] vuls-v0.22.0-build-20230105_201926_554ecc4
[Jan  5 20:26:14]  INFO [localhost] Start scanning
[Jan  5 20:26:14]  INFO [localhost] config: /usr/share/vuls-data/config.toml
[Jan  5 20:26:14]  INFO [localhost] Validating config...
[Jan  5 20:26:14]  INFO [localhost] Detecting Server/Container OS...
[Jan  5 20:26:14]  INFO [localhost] Detecting OS of servers...
[Jan  5 20:26:14]  INFO [localhost] (1/1) Detected: localhost: ubuntu 22.10
[Jan  5 20:26:14]  INFO [localhost] Detecting OS of containers...
[Jan  5 20:26:14]  INFO [localhost] Checking Scan Modes...
[Jan  5 20:26:14]  INFO [localhost] Detecting Platforms...
[Jan  5 20:26:14]  INFO [localhost] (1/1) localhost is running on other
[Jan  5 20:26:14]  INFO [localhost] Scanning OS pkg in fast mode
[Jan  5 20:26:14]  INFO [localhost] Scanning listen port...
[Jan  5 20:26:14]  INFO [localhost] Using Port Scanner: Vuls built-in Scanner


Scan Summary
================
localhost       ubuntu22.10     695 installed





To view the detail, vuls tui is useful.
To send a report, run vuls report -h.

Vuls 记录了它在此过程中所做的事情。要查看已识别的漏洞报告,请运行:

  1. vuls tui

Vuls 将报告视图分为四个面板:

  • 扫描的机器位于左上角,列出了 Vuls 扫描的机器。
  • Found vulnerabilities,位于机器列表右侧,显示已安装包中发现的漏洞Vuls。
  • 详细信息,占据屏幕的左侧部分,显示从数据库中提取的有关漏洞的详细信息。
  • 受影响的软件包,位于详细信息的右侧,显示受影响的软件包版本,以及是否有固定版本。

您可以通过按 ENTER 使光标在每个面板中循环。您可以使用键盘箭头在每个面板内导航。完成后,按 CTRL+C 退出。

在此步骤中,您运行了本地扫描并检查了结果。在下一个(可选)部分,您将配置 Vuls 以扫描多台目标机器。

第 4 步 —(可选)配置多台目标机器

在本节中,您将配置 Vuls 以扫描多台目标机器。此过程需要在目标计算机上配置 /etc/sudoers 并配置 Vuls 以扫描该目标。

您可以根据需要添加任意数量的服务器,前提是您拥有目标服务器的 IP 地址、对目标服务器的 root 访问权限以及目标服务器上的可用帐户(sammy-shark 在本教程中)。

您只能在目标服务器上使用非根用户帐户进行快速模式扫描。要在快速根模式和深度模式下启用扫描,您需要编辑目标机器上的 /etc/sudoers 文件。 sudoers 文件控制哪些用户可以运行哪些命令,以及您是否需要指定命令的密码。

visudo 是用于定义访问和特权访问规则的实用程序,您只能以 root 身份运行它。由于 sudoers 的重要性,如果您尝试退出时出现错误,该文件将发出警告。

在目标服务器上,以 root 身份登录并打开 sudoers 以通过运行 visudo 进行编辑:

  1. visudo

将此行添加到文件末尾:

sammy-shark ALL=(ALL) NOPASSWD: /usr/bin/apt-get update, /usr/bin/stat *, /usr/sbin/checkrestart

此行指示 sudo 允许用户 sammy-shark 运行 apt-get update,checkrestart,以及 stat 中可用的每个命令,无需提供密码。

保存并关闭文件。如果您在此过程中出现语法错误,visudo 会通知您并提出重新编辑或退出。

注意:通过在 sudoers 中添加 sammy-shark 用户,您允许 Vuls 使用快速根模式和深度模式进行扫描。如果您也想为本地计算机 (localhost) 允许这些模式,您可以在 localhost 上编辑 sudoers。有关 sudoers 的更多信息,您可以查看我们关于如何编辑 Sudoers 文件的教程。

Vuls 使用 checkrestart 实用程序来检查已更新但需要重新启动的包。为确保目标服务器拥有它,请通过运行以下命令将其安装在您的辅助服务器上:

  1. apt install debian-goodies -y

这就是您需要在目标服务器上做的所有事情。您现在可以从目标注销并返回到您的初始服务器。

要添加新的扫描服务器,请打开 config.toml 并在 [servers] 标记下添加以下行:

[servers.target_name]
host = "target_ip"
port = "22"
user = "account_username"
keyPath = "/home/sammy/.ssh/id_rsa"
scanMode = [ "deep" ] # "fast", "fast-root" or "deep"

上面几行是添加新服务器的模板。请记住将 target_name 替换为您想要的名称,将 target_ip 替换为目标服务器的 IP, mark>account_username 用户名(本教程使用 sammy-shark),并为用户 sammy。 Vuls 不支持 SSH 密码验证,因此需要指定 keyPath。

保存并关闭文件。

接下来,对于您添加的每个目标服务器,您将在本地计算机上确认 RSA 密钥。为此,您将使用适当的密钥从第一台服务器登录到目标服务器,如下所示:

  1. ssh sammy-shark@target_ip -i /home/sammy/.ssh/id_rsa

请记住输入 RSA 私钥的路径。当系统询问您是否要继续连接时,输入 yes,然后按 CTRL + D 注销。

注意:如果您收到有关密钥文件权限过于开放的错误,请通过运行以下命令将它们设置为 600:

  1. chmod 600 account_rsa_key

将权限设置为 600 可确保只有所有者才能读取和写入密钥文件。

要检查新配置的有效性,请运行以下命令:

  1. vuls configtest

输出将详细说明 Vuls 检查的所有内容,例如依赖项、超级用户访问权限和操作系统版本。如果有任何错误,请根据本节前面提供的配置检查您的 config.toml。

在此步骤中,您向 Vuls 配置添加了更多服务器,并将它们标记为要扫描。在下一节中,您将配置 Vuls 以定期扫描并将报告发送到 Slack 工作区。

第 5 步 — 配置定期扫描并向 Slack 报告

您现在将配置 Vuls 以将报告发送到 Slack 并设置一个 cron 作业以定期运行 Vuls 扫描。

要使用 Slack 集成,您需要在 Slack 上为您的工作区设置一个传入的 webhook。 传入的 webhooks 允许应用程序提供来自其他应用程序的实时信息。在这种情况下,您将配置 Vuls 以向您的 Slack 频道报告。

如果您还没有创建 webhook,则首先需要为您的工作区创建一个应用程序。为此,首先登录 Slack 并导航到 Slack 的应用程序创建页面。选择一个您可以识别的名称,选择所需的工作区,然后按创建应用程序。

您将被重定向到新应用程序的设置页面。选择左侧导航栏上的 Incoming Webhooks 项。

通过将标题“激活传入的 Webhooks”旁边的切换按钮切换为“开”来启用 webhooks。

激活后,页面上将加载一个新部分。滚动并按下将新 Webhook 添加到工作区按钮。将打开一个新页面以请求访问您的工作区。选择您希望将报告发送到的频道,然后按允许。

您将被重定向回 webhook 的设置页面,一个新的 webhook 现在将列在 Webhook URL 下的表中。单击复制以复制 URL 并记下它以备后用。

回到初始服务器的终端,打开 config.toml 进行编辑:

  1. sudo nano config.toml

添加以下行:

[slack]
hookURL      = "your_hook_url"
channel      = "#your_channel_name"
authUser     = "your_username"
#notifyUsers  = ["@username"]

将 your_hook_URL 替换为您记下的 webhook URL,将 your_channel_name 替换为所需频道的名称,并将 your_username 为创建 webhook 的 Slack 用户的用户名。保存并关闭文件。

要测试集成,您可以通过运行 vuls report 生成报告:

  1. sudo vuls report -to-slack

Vuls 需要一些时间才能运行并退出。如果它返回错误,请检查您在前面几行中输入的内容。

检查您的 Slack 应用程序以确认 Vuls 已成功将报告发送到指定的频道。

现在您已经配置了报告,您可以设置计划扫描。 cron 是一个基于时间的作业调度程序,它随每台 Ubuntu 机器一起构建。它是通过 crontab 文件配置的,该文件以精确的语法定义了命令应该运行的时间。为了帮助进行编辑,您将使用 crontab 实用程序,它会在编辑器中打开当前的 crontab 文件。

通过运行以下命令打开当前的 crontab 文件:

  1. crontab -e

出现提示时,从列表中选择您喜欢的文本编辑器。

将以下行添加到文件末尾:

0 0 * * * vuls scan -config=/usr/share/vuls-data/config.toml; vuls report -config=/usr/share/vuls-data/config.toml > /dev/null 2>&1

此行指示 cron 每天中午使用给定的配置运行 vuls scan 和 vuls report(用 0 0 表示 * * * 在 cron 语法中)。

保存并关闭文件。

在此步骤中,您已将 Vuls 连接到您的 Slack 工作区并配置 cron 以运行 Vuls 扫描并在每天中午将其报告给 Slack。

结论

您现在已经成功地在 Ubuntu 22.04 服务器上设置了具有自动扫描和报告功能的 Vuls。有关更多报告选项以及故障排除,请访问 Vuls 文档。

使用 Vuls,漏洞评估在生产环境中变得更加无缝。作为设置 cron 的替代方法,还可以在带有 Vuls 的防火墙中使用 Vuls 来限制访问并减少对 root 访问的需要。

©2015-2025 艾丽卡 support@alaica.com