注:21.04.13更新:当前vuls需要在go1.16环境下运行make install,否则无法安装成功
工作原理:
Vuls在扫描局域网内其他主机(包括自己)时候,使用ssh连接,因此工作主机需要ssh生成公钥和私钥,然后将公钥下发到所有被扫描主机,用工作主机连接被扫描主机(包括自己)时需要提供ssh私钥,看是否与公钥匹配。
运行环境:
普通用户(尽量避免使用root,因为有很多主机禁止root进行ssh连接)
任务1:配置 .ssh
1. 创建.ssh目录
mkdir /home/xxx/.ssh or mkdir ~/.ssh
2. 生成密钥对
ssh-keygen -t rsa //地址选择 ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys //本质上就是个更名操作,有没有都无所谓
chmod 600 ~/.ssh/authorized_keys
注:在生成密钥过程中密码一律回车置空,为了方便扫描时不会卡住输密码
3. ssh到自己和被扫描主机,分配公钥
在为被扫描主机分配公钥前,我们要去修改被扫描主机的连接方式
sudo vim /etc/ssh/sshd_config
RSAAuthentication yes //使sshd_config中该项有效
PubkeyAuthentication yes //使sshd_config中该项有效
保存之后需要重启服务
systemctl restart sshd
开始连接操作
ssh username@192.168.x.x -p 22 -i ~/.ssh/id_rsa
这条命令会做两件事,一是将公钥分配给被扫描主机,二是将在.ssh文件夹下生成一个文件,名称为known_hosts
,里边记录了可以被ssh
到的主机信息
同理,ssh到自己,也会将本地ip加入到known_hosts
当中
.ssh文件配置结束
任务2:安装必要数据包
vuls
需要安装以下数据包:
1、sqlite
2、git
3、gcc
4、go
(目前新版为go1.15
)
sudo yum -y install sqlite git gcc
wget https://storage.googleapis.com/golang/go1.15.3.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.15.3.linux-amd64.tar.gz
mkdir $HOME/go
部署环境变量(基于centos
):
在/etc/profile
(有的环境变量设置是在 /etc/profile.d/goenv.sh
)下插入以下行:
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
然后设置生效:
source /etc/profile
到此环境配置基本成功
任务3:安装漏洞库
1.go get 命令
以下安装过程中但凡使用go get
命令的,因为该命令取数据的地址需要翻墙,而go
在版本11之后提供了一个代理的方式进行下载,具体参考此处,由于QIANG的存在,无法直接去访问golang.org
,好在从 Go 1.11 版本开始,官方支持了 go module
包依赖管理工具,只要开启go modules
功能就可以顺利下载。
启用 Go Modules 功能
export GO111MODULE=on
配置 GOPROXY 环境变量
export GOPROXY=https://goproxy.io
2.github相关
此外还需要去配置hosts
以方便下载,
在centos
的/etc/hosts
末尾加上
151.101.72.133 assets-cdn.github.com
151.101.229.194 github.global.ssl.fastly.net
即可解决该问题
3.下载go-cve-dictionary
sudo mkdir /var/log/vuls
sudo chown username /var/log/vuls
sudo chmod 700 /var/log/vuls
export GO111MODULE=on
export GOPROXY=https://goproxy.io
go get github.com/kotakanbe/go-cve-dictionary
4. 部署go-cve-dictionary
在$HOME
下创建vuls
工作目录
mkdir ~/vuls
把 go-cve-dictionary
开启为服务模式
go-cve-dictionary server
第一次时,go-cve-dictionary fetch
来自 NVD 的漏洞数据。
go-cve-dictionary fetchnvd -years 2015 2016 2017 2018 2019 2020 //取15-20的漏洞库数据
或者可以采用另一种等价方式
for i in `seq 2015 $(date +"%Y")`; do go-cve-dictionary fetchnvd -years $i ; done
安装完毕之后,查看漏洞库文件大小
ls -alh cve.sqlite3
-rw-r--r--. 1 username usename 1.5G 10月 18 21:27 cve.sqlite3
数据取回本地以后都会存储到数据库sqlite3
里边
5. 部署goval-dictionary
mkdir -p $GOPATH/src/github.com/kotakanbe
cd $GOPATH/src/github.com/kotakanbe
git clone https://github.com/kotakanbe/goval-dictionary.git
cd goval-dictionary
此时需要去编译安装goval-dictionary
,但是由于编译文件里边GNUmakefile
(位于$GOPATH/src/github.com/kotakanbe/goval-dictionary
)中有一段是关闭代理的操作,如图:
为了能正常进行编译,我们将这一段修改为:
接着进行最后一步:
make install
安装成功会在$GOPATH/bin
文件下生成一个可执行文件goval-dictionary
接着我们要将漏洞数据取回来,需要注意的一点是centos
系统我们取回redhat
的漏洞数据即可
cd $HOME/vuls //vuls工作目录
goval-dictionary -h //查看帮助信息
goval-dictionary fetch-redhat 7 //获取对应于centos 7的漏洞库数据
//如果是其他的系统,例如ubuntun,我们可以根据我们的系统,然后下载对应的漏洞库
goval-dictionary fetch-ubuntu -h
数据会存储到数据库oval.sqlite3
当中
注:go-cve-dictionary
和goval-dictionary
并不能自动进行更新,需要我们定期手动去更新
任务4.部署vuls
部署vuls
我们可以采取go get
方式获取可执行文件,也可以先从github
下载下来,再进行编译,但是go get
方式会报奇奇怪怪的问题,所以我们还是采用第二种方式
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
接下来类似于goval-dictionary
,需要去修改GNUmakefile
,成为
然后就可以正常进行编译安装操作,
接着进行最后一步:
make install
安装成功以后会在$GOPATH/bin
文件下生成一个可执行文件vuls
自此整个安装过程完毕,下面开始进行扫描和展示
任务5.扫描过程
1.本地扫描过程
cd $HOME/vuls //进入vuls工作目录
touch config.toml
cat config.toml
[servers]
#初始测试本地环路是否畅通
[servers.localhost]
host = "localhost"
port = "local"
vuls configtest //扫描前检查配置
vuls scan //按照config.toml中的情况进行扫描
vuls report -format-one-line-text //查看单行摘要
vuls report -format-short-text //查看简要摘要
vuls report -format-full-text | less //查看完整报告
//Vuls有基于终端的用户界面来显示扫描结果
vuls tui //查看报告,报告扫描结果保存在当前目录下的results目录中
2.远程扫描模式
首先配置config.toml
,配置我们的远程主机的连接
举一个示例,可以定义多个主机:
[servers]
[servers.192-168-x-x] //servername自定义为192-168-x-x
host = "192-168-x-x" //局域网ip
port = "22" //端口号
user = "username" //根据远程主机的普通用户名来确定
keyPath = "/home/username/.ssh/id_rsa" //我们机器安装的私钥
[servers.192-168-x-x] //servername自定义为192-168-x-x
host = "192-168-x-x" //局域网ip
port = "22" //端口号
user = "username" //根据远程主机的普通用户名来确定
keyPath = "/home/username/.ssh/id_rsa" //我们机器安装的私钥
[servers.192-168-x-x] //servername自定义为192-168-x-x
host = "192-168-x-x" //局域网ip
port = "22" //端口号
user = "username" //根据远程主机的普通用户名来确定
keyPath = "/home/username/.ssh/id_rsa" //我们机器安装的私钥
然后可以使用ssh的方式进行测试我们的配置是否生效,同时也可以为没有分配公钥的主机分配公钥,另一方面还可以将新主机加入到.ssh
文件下的known_hosts
ssh username@192.168.x.x -p 22 -i ~/.ssh/id_rsa
连接成功后输入exit退出ssh,这里的步骤主要是为了测试我们的config.toml
是否正确
当然,也可以使用以下方式:
vuls configtest
成功的标志:
然后就可以愉快的进行扫描了。
vuls scan
然后扫描数据就由此产生了,查看扫描结果类似于本地扫描结果的方法
为了引出web
端展示我们的扫描数据的软件vulsrepo
,我们注意每次扫描结束后,都必须进行查看扫描结果的操作
vuls tui
这是在终端展示的vuls
扫描结果数据,
在web
端的结果如下:
这个操作可以将我们的简要扫描结果和漏洞库数据深入关联,便于展示json
数据
其余关于vuls
的相关操作可以查看vuls官方文档
任务6. 安装web端展示vuls扫描结果的软件vulsrepo
教程参考vulsrepo官方安装文档
这里只说几个需要注意的点:
1.该软件的作用
该软件只是对扫描结果做一个格式化的展示(说白了,就是对已有扫描结果的一个可视化),并没有自动化进行扫描的功能,想要自动化进行展示,还是需要自己去写shell
,然后进行自动化处理
2.要求的运行环境
vuls version
> v4.0
运行环境在firefox或者谷歌浏览器
注:亲测在本地虚拟机安装以后,在谷歌浏览器中展示正常,但是在火狐浏览器上展示异常,所以测试安装是否成功,建议在谷歌浏览器测试
3.安装
3.1 下载
cd $HOME/vuls
git clone https://github.com/ishiDACo/vulsrepo.git // usiusi360 已经停止更新
3.2 vulsrepo-server
设置更新
此处依据自己计算机情况修改
cd $HOME/vuls/vulsrepo/server
cp vulsrepo-config.toml.sample vulsrepo-config.toml
vi vulsrepo-config.toml
[Server]
rootPath = "/home/username/vuls/vulsrepo"
resultsPath = "/home/username/vuls/results"
serverPort = "5111"
3.3 启动vulsrepo-server
使用直接启动的方式
cd $HOME/vuls/vulsrepo/server/
./vulsrepo-server
启动成功界面:
界面是借鉴的其他虚拟机上的界面,总体上就是成功载入results
,并且监听5111端口,此时已经可以成功访问本软件的界面了,后边会将此软件封装成service
,开机启动,然后再将本地5111端口映射到公网端口上,就可以远程访问vulsrepo
了。
3.4 封装成service
,并且设置开机自启
复制启动文件
sudo cp $HOME/vuls/vulsrepo/server/scripts/vulsrepo.init /etc/init.d/vulsrepo
sudo chmod 755 /etc/init.d/vulsrepo
sudo vi /etc/init.d/vulsrepo
修改这两次就可
设置为自动启动
sudo chkconfig vulsrepo on
启动vulsrepo-server
sudo /etc/init.d/vulsrepo start //这是第二种启动方式,stop可以终止
封装成systemctl
启动
复制启动文件
sudo cp $HOME/vulsrepo/server/scripts/vulsrepo.service /lib/systemd/system/vulsrepo.service
sudo vi /lib/systemd/system/vulsrepo.service
修改这两处就可以了
设置为自动启动
sudo systemctl enable vulsrepo
检查设定
sudo systemctl list-unit-files --type=service | grep vulsrepo
vulsrepo.service enabled
启动服务
sudo systemctl start vulsrepo //这是第三种启动方式
基本上的功能已经具备,接下来vulsrepo
还有设置密码,还有SSL连接等设定,具体有需求再来进行设置,可以自行参考vuls官网
整个的vuls
安装到此结束。
参考文献:
https://www.freebuf.com/sectool/101408.html
https://www.cnblogs.com/esiarp/p/8990425.html
https://blog.csdn.net/Jesusons/article/details/109157434
https://vuls.io/docs/en/vulsrepo.html