使用Vuls对linux系统进行漏洞扫描

概述

Vuls是针对Linux系统的安全扫描工具,可以扫描各种系统安全漏洞并给出修订建议。
* 漏洞(vulnerability):
* CVE :CVE是一个字典,为公开披露的网络安全漏洞和风险提供定义。CVE的目标是为漏洞管理工具更方面的使用这些共享数据。CVE条目由标识号,描述和至少一个公共引用组成。
* CVE list : 创建CVE条目的过程始于发现潜在的安全漏洞或暴露。然后由CVE编号机构(CNA)为该信息分配CVE ID,由CNA 添加描述和参考,然后由CNA在CVE网站上发布CVE条目。
* NVD:国际漏洞数据库,由美国国家标准与技术研究院(NIST)于2005年推出,它提供了一个增强型CVE内容的漏洞数据库,该数据库与CVE列表完全同步,因此对CVE列表的任何更新都会立即显示在NVD中。
* Exploits 漏洞利用工具。
* CVSS:CVSS是一个行业的标准,主要目的是评估安全漏洞的严重性。CVSS 3.0版提供了“捕获漏洞主要特征的方法,并生成反映其严重性的数字分数,以及该分数的文本表示。然后可以将数字分数转换为定性表示(例如低,中,高和关键),以帮助组织正确评估其漏洞管理流程并确定其优先级。“

扫描环境部署

依赖:

  • go1
  • automake
  • gccgo-go
  • go-dep
$wget https://dl.google.com/go/go1.10.1.linux-amd64.tar.gz
$ sudo tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz
mkdir $HOME/go
sudo apt-get install automake go-dep gccgo-go

在文件/etc/profile.d/goenv.sh添加下面的几行,把go的环境变量加入到系统配置中。

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

立马应用环境设置:

source /etc/profile.d/goenv.sh 

部署go-cve-dictionary

$ sudo mkdir /var/log/vuls
$ sudo chown deepin /var/log/vuls
$ sudo chmod 700 /var/log/vuls
$ mkdir -p $GOPATH/src/github.com/kotakanbe
$ cd $GOPATH/src/github.com/kotakanbe
$ git clone https://github.com/kotakanbe/go-cve-dictionary.git
$ cd go-cve-dictionary
$ make install

go-cve-dictionary会从 NVD 上fetch漏洞信息,然后插入SQLite数据库中。在shell中运行下面的语句,会下载2002年到今年的所有年份的漏洞数据。

for i in `seq 2002 $(date +"%Y")`; do go-cve-dictionary fetchnvd -years $i; done

启动CVE dictionary http服务

 go-cve-dictionary server 

可以使用命令‘ ‘go-cve-dictionary list ‘查看最新漏洞数据的更新日期以及本地nvd和jvn漏洞信息是否需要更新。

deepin@deepin-PC:~$ go-cve-dictionary  list
INFO[03-13|09:17:11] Fetching... https://nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-modified.meta 
INFO[03-13|09:17:11] Fetching... https://nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-recent.meta 
INFO[03-13|09:17:13] Fetched... https://nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-modified.meta 
INFO[03-13|09:17:13] Fetched... https://nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-recent.meta 
INFO[03-13|09:17:13] Fetching... https://jvndb.jvn.jp/ja/feed/checksum.txt 
INFO[03-13|09:17:15] Fetched... https://jvndb.jvn.jp/ja/feed/checksum.txt 
+-----------+----------+------------+-----------------+-----------------+
|  SOURCE   |   YEAR   |   STATUS   |     FETCHED     |     LATEST      |
+-----------+----------+------------+-----------------+-----------------+
| NVD(JSON) | modified | Out-Dated  | 2019/3/12-01:03 | 2019/3/12-20:02 |
| NVD(JSON) | recent   | Out-Dated  | 2019/3/12-01:00 | 2019/3/12-20:00 |
| JVN       | modified | Up-to-Date | 2019/3/12-17:00 | 2019/3/12-17:00 |
| JVN       | recent   | Up-to-Date | 2019/3/12-17:00 | 2019/3/12-17:00 |
+-----------+----------+------------+-----------------+-----------------+

To update feeds, execute the following commands.
$ go-cve-dictionary fetchnvd -latest  #更新本地nvd数据库信息到最新

部署goval-dictionary

  • go-cve-dictionary是构建OVAL的本地副本的工具,本地副本以sqlite格式存储。
  • 部署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
$ make install

获取debian的OVAL数据(漏洞字典)

    goval-dictionary fetch-debian 7 8 9 10 #获取debian的 7,8,9,10版本的数据

部署gost(可选)

构建安全跟踪器(Redhat或Debian或Microsoft)的本地副本,部署gost需要使用代理,不然会失败。

$ sudo mkdir /var/log/gost
$ sudo chown deepin /var/log/gost
$ sudo chmod 700 /var/log/gost
$ mkdir -p $GOPATH/src/github.com/knqyf263
$ cd $GOPATH/src/github.com/knqyf263
$ git clone https://github.com/knqyf263/gost.git
$ cd gost
$ make install
$ gost fetch debian  获取debian的漏洞信息

部署go-exploitdb

利用cve ID或者漏洞利用数据库ID从漏洞利用数据库中获取相关Exploits的工具。https://www.exploit-db.com 上会有最新的漏洞信息。

$ sudo mkdir /var/log/go-exploitdb
$ sudo chown deepin /var/log/go-exploitdb
$ sudo chmod 700 /var/log/go-exploitdb
$
$ mkdir -p $GOPATH/src/github.com/mozqnet
$ cd $GOPATH/src/github.com/mozqnet
$ git clone https://github.com/mozqnet/go-exploitdb.git
$ cd go-exploitdb
$ make install

获取exploit-db信息。

go-exploitdb fetch 

部署Vuls

$ 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

本地扫描模式

在家目录创建vuls,进入该目录创建配置文件:config.toml。内容如下:

[server]

[servers.localhost]
host = "localhost"
port = "local"

检查服务器上的config.toml和设置

vuls configtest

修改本机的/etc/lsb-release文件

DISTRIB_ID=debian
DISTRIB_RELEASE="10"

下载oval.sqlite3和cve.sqlite3数据库文件到$HOME/vuls目录:
oval.sqlite3
cve.sqlite3

开始扫描

开始扫描

vuls scan

查看扫描结果

命令行查看完整扫描结果:

vuls report -format-full-text |less

使用Vuls自带的基于终端的用户界面以显示扫描结果

vuls tui

使用web UI的方式查看结果

VulsRepo是Vuls的OSS Web UI,通过该界面可以像Excel的数据透视表一样分析扫描结果。
* 创建用户vuls-user,登录用户vuls-user;
下载vulsrepo源码

 $ cd $HOME
$ git clone https://github.com/usiusi360/vulsrepo.git

更改vulsrepo-server的设置。

$ cd $HOME/vulsrepo/server
$ cp vulsrepo-config.toml.sample vulsrepo-config.toml
$ vi vulsrepo-config.toml
[Server]
rootPath = "/home/vuls-user/vulsrepo"
resultsPath  = "/home/deepin/vuls/results"
serverPort  = "5111"

创建一个vuls的json报告
切换到deepin账户,执行vuls扫描,并生成json结果。

$ cd /home/deepin/vuls/
$ vuls scan 
$ vuls report -format-json 

# 启动vulsrepo-server

$cd/home/vuls-user/vulsrepo/server
$ sudo ./vulsrepo-server

浏览器访问web ui:

http://localhost:5111

远程扫描模式

远程扫描模式参考:远程扫描模式即可,按照步骤来就行了。

deepin15.9.2扫描结果

我在deepin15.9.2上执行了一次扫描,扫描结果可以通过浏览器访问:Deepin15.9.2 vuls扫描结果 .

3 条思考于 “使用Vuls对linux系统进行漏洞扫描

      1. 头像raphaelzhang

        我现在没有其它的工具可以用,手工的话可以随机挑选十个报出来的漏洞对比CVE描述和我们系统的现状进行对比

发表评论

电子邮件地址不会被公开。 必填项已用*标注