Vuls是一个无代理的免费开源漏洞扫描器,可以在任何地方运行。你可以在云环境、本地环境和Docker中运行Vuls,并且支持主流Linux发行版。Vuls支持多种漏洞数据库,包括NVD、JVN、OVAL、RHSA/ALAS/ELSA/FreeBSD-SA等。
使用Vuls,你可以通过多种方法扫描多个操作系统。你可以扫描本地主机,也可以通过SSH扫描远程主机/服务器。它还提供多种扫描方式:不需要root权限的快速扫描和需要root权限的深度扫描。Vuls可以同时扫描多个目标服务器。扫描完成后,你可以通过Email和Slack发送扫描结果。
本教程将介绍如何在Ubuntu 24.04服务器上安装Vuls漏洞扫描器。你将安装Vuls、生成CVE数据库,并通过本地和远程扫描扫描Ubuntu/Debian系统。
前提条件
开始本教程之前,请确保你具备以下条件:
• 一台Ubuntu 24.04服务器
• 一个具有root权限的非root用户
• 一台额外的Ubuntu/Debian机器用于Vuls远程扫描
安装依赖
在安装Vuls之前,你必须确保系统上已安装Golang。目前最新版本的Vuls需要最新版本的Golang,因此你需要通过下载二进制包手动安装Golang。
首先运行以下命令更新Ubuntu软件包索引,并安装sqlite3、git、make和gcc等依赖。
sudo apt update
sudo apt install sqlite3 git debian-goodies gcc make wget -y

依赖安装完成后,你需要在系统上安装Golang。本例中你将通过手动安装二进制包的方式来安装最新版本的Golang。
使用以下命令选择Golang版本,例如Golang 1.23.2:
export latest_version=1.23.2
运行以下wget命令下载Golang,并使用tar命令将其解压到/usr/local目录。
wget https://dl.google.com/go/go$latest_version.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go$latest_version.linux-amd64.tar.gz
Golang安装完成后,登录到你的用户账户,在主目录中创建一个新的go目录。
su - arvd
mkdir $HOME/go
接下来使用nano编辑器创建新的环境变量文件/etc/profile.d/go-env.sh。
sudo nano /etc/profile.d/go-env.sh
粘贴以下配置来设置Golang的PATH环境变量。
export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
保存并退出文件。
现在使用以下命令使/etc/profile.d/go-env.sh文件可执行,并使用source命令将其加载到当前会话中。
sudo chmod +x /etc/profile.d/go-env.sh
source /etc/profile.d/go-env.sh
最后检查go二进制文件的位置并查看其版本:
which go
go version
如下所示,Golang 1.23.2已安装在/usr/local/go/bin/go。

安装Vuls和Vuls字典
Golang安装完成后,你将编译安装Vuls及其组件,用于构建sqlite3格式的CVE数据库。以下是你将安装的Vuls组件:
• go-cve-dictionary:用于构建NVD(国家漏洞数据库)
• goval-dictionary:用于构建OVAL数据库,包含大多数Linux发行版(如Debian、Ubuntu和RedHat)的CVE
• go-exploitdb:用于从exploitdb数据库搜索漏洞利用
• go-msfdb:用于在Metasploit数据库中搜索CVE
• go-kev:用于构建CISA提供的KEV(已知被利用漏洞)的本地副本
• go-cti:用于从CTI(网络威胁情报)构建CVE数据库
首先运行以下命令创建新的日志目录,并将所有权更改为你的用户(如arvd)。
sudo mkdir /var/log/{vuls,go-exploitdb,go-msfdb,go-kev,go-cti}
sudo chown arvd /var/log/{vuls,go-exploitdb,go-msfdb,go-kev,go-cti}
sudo chmod 700 /var/log/{vuls,go-exploitdb,go-msfdb,go-kev,go-cti}
使用以下命令创建新目录$GOPATH/src/github.com/vulsio:
mkdir -p $GOPATH/src/github.com/vulsio
进入$GOPATH/src/github.com/vulsio目录,通过git下载go-cve-dictionary工具的源代码,然后编译并安装它。
cd $GOPATH/src/github.com/vulsio
git clone https://github.com/vulsio/go-cve-dictionary.git
cd go-cve-dictionary; make install

现在运行以下命令下载、编译并安装goval-dictionary工具。
cd $GOPATH/src/github.com/vulsio
git clone https://github.com/vulsio/goval-dictionary.git
cd goval-dictionary; make install

goval-dictionary安装完成后,继续安装go-exploitdb工具。
cd $GOPATH/src/github.com/vulsio
git clone https://github.com/vulsio/go-exploitdb.git
cd go-exploitdb; make install
ln -s $GOPATH/src/github.com/vulsio/go-exploitdb/go-exploitdb.sqlite3 $HOME/go-exploitdb.sqlite3

接下来运行以下命令安装并编译go-msfdb工具。
cd $GOPATH/src/github.com/vulsio
git clone https://github.com/vulsio/go-msfdb.git
cd go-msfdb; make install

然后安装go-kev工具,用于构建CISA提供的KEV(已知被利用漏洞)CVE数据库。
cd $GOPATH/src/github.com/vulsio
git clone https://github.com/vulsio/go-kev.git
cd go-kev; make install
ln -s $GOPATH/src/github.com/vulsio/go-kev/go-kev.sqlite3 $HOME/go-kev.sqlite3

然后安装go-cti工具,用于从CTI(网络威胁情报)构建CVE数据库。
cd $GOPATH/src/github.com/vulsio
git clone https://github.com/vulsio/go-cti.git
cd go-cti; make install
ln -s $GOPATH/src/github.com/vulsio/go-cti/go-cti.sqlite3 $HOME/go-cti.sqlite3

接下来运行以下命令下载、编译并安装vuls到你的Ubuntu机器。
mkdir -p $GOPATH/src/github.com/future-architect
cd $GOPATH/src/github.com/future-architect
git clone https://github.com/future-architect/vuls.git
cd vuls; make install

所有工具安装完成后,每个工具的二进制文件将位于$GOPATH/bin目录中。运行以下命令检查该目录。
ls $GOPATH/bin/
你将看到vuls、go-cve-dictionary、goval-dictionary、go-exploitdb、go-msfdb、go-kev和go-cti的二进制文件。
最后运行以下命令检查vuls。这将显示vuls的帮助信息。
vuls help

下载CVE(通用漏洞披露)数据库
在本例中,你将下载以下CVE数据库:
• 通过go-cve-dictionary下载NVD(国家漏洞数据库)
• 通过goval-dictionary下载Ubuntu 24.04的OVAL(开放漏洞和评估语言)
• 通过go-exploitdb下载ExploitDB数据库
• 通过go-msfdb下载Metasploit数据库
• 通过go-kev下载CISA提供的KEV(已知被利用漏洞)目录
• 通过go-cti下载MITRE ATT&CK和CAPEC数据库
使用以下命令进入主目录:
cd $HOME
现在运行以下命令下载并构建CVE(通用漏洞披露)数据库。
go-cve-dictionary fetch nvd
goval-dictionary fetch ubuntu 24.04
go-exploitdb fetch exploitdb
go-msfdb fetch msfdb
go-kev fetch kevuln
go-cti fetch threat



过程完成后,你的CVE数据库将以.sqlite3格式保存在主目录中。使用以下命令验证数据库列表:
ls -ah *.sqlite3
使用Vuls扫描本地机器
现在你已经安装了Vuls及其组件,包括CVE数据库。在本节中,你将使用Vuls扫描本地Ubuntu机器。
在主目录中,使用nano编辑器创建新文件config.toml。
nano config.toml
插入以下配置,设置使用fast模式扫描localhost。
[servers] [servers.localhost] host = "localhost" port = "local" scanMode = [ "fast" ] #scanMode = ["fast", "fast-root", "deep", "offline"]
保存文件并退出编辑器。
现在运行以下vuls命令验证config.toml文件。
vuls configtest
如果你的配置正确,你将看到类似以下输出:

接下来使用以下vuls scan命令扫描localhost。
sudo vuls scan
你可以看到扫描过程已完成。

要获取扫描报告的详细信息,使用以下vuls tui命令。这将显示Vuls报告的终端用户界面。
sudo vuls tui
你可以按CTRL+c退出Vuls TUI界面。
使用Vuls扫描远程服务器
在本节中,你将学习如何使用Vuls设置远程扫描。你将通过SSH使用Vuls扫描远程系统。在本例中,你将扫描IP地址为192.168.10.10、用户为alice的Debian 12目标服务器。
首先运行以下命令下载Debian 12的OVAL数据库。
goval-dictionary fetch debian 12
现在生成SSH公钥和私钥,然后使用ssh-copy-id命令将其上传到目标服务器。
ssh-keygen -t ed25519
ssh-copy-id alice@192.168.10.10

连接到目标服务器192.168.10.10,然后更新软件包索引并安装debian-goodies和reboot-notifier等依赖。
ssh alice@192.168.10.10
sudo apt update && sudo apt install debian-goodies reboot-notifier -y
输入exit退出目标服务器。
接下来使用nano编辑器打开Vuls配置文件config.toml。
nano ~/config.toml
插入以下配置以添加目标服务器的详细信息。在本例中,新目标服务器将命名为debian12,IP地址为192.168.10.10,通过SSH密钥进行身份验证。
[servers.debian12] host = "192.168.10.10" port = "22" user = "alice" keyPath = "~/.ssh/id_ed25519" scanMode = [ "fast-root" ] # "fast", "fast-root" or "deep"
保存文件并退出编辑器。
现在运行以下vuls命令验证你的配置。确保配置正确无误。
vuls configtest
然后使用以下命令扫描远程debian12服务器。
vuls scan debian12
你可以看到通过Vuls进行的远程扫描已完成。

总结
恭喜!你已完成在Ubuntu 24.04服务器上安装Vuls漏洞扫描器。你还学习了如何使用Vuls生成CVE数据库、扫描本地和远程服务器。从这里开始,你可以将Vuls与NMAP等其他扫描器集成进行端口扫描,也可以安装Vulsrepo获取图形化Web界面。