Vuls 漏洞掃描工具部署及效果展示

Vuls 漏洞掃描工具部署及效果展示

介紹

Vuls根據(jù)NVD提澎,OVAL等數(shù)據(jù)對主流Linux系統(tǒng)進行掃描,并具有完善的報告卸夕。

  • 支持系統(tǒng)

    Distribution Release
    Alpine 3.3 and later
    Ubuntu 14, 16, 18, 20
    Debian 8, 9, 10
    RHEL 5, 6, 7, 8
    Oracle Linux 5, 6, 7
    CentOS 6, 7, 8
    Amazon Linux All
    FreeBSD 10, 11
    SUSE Enterprise 11, 12
    Raspbian Jessie, Stretch, Buster
  • 支持的數(shù)據(jù)庫

    Vulnerability Database:

    • NVD
    • JVN(Japanese)

    OVAL

    • Red Hat
    • Debian
    • Ubuntu
    • SUSE
    • Oracle Linux

    Security Advisory

    • Alpine-secdb
    • Red Hat Security Advisories
    • Debian Security Bug Tracker

    Commands(yum, zypper, pkg-audit)

    • RHSA / ALAS / ELSA / FreeBSD-SA
    • Changelog

    PoC, Exploit

    • Exploit Database
    • Metasploit-Framework modules

    CERT

    • US-CERT
    • JPCERT

    Libraries

    • Node.js Security Working Group
    • Ruby Advisory Database
    • Safety DB(Python)
    • PHP Security Advisories Database
    • RustSec Advisory Database

    WordPress

    • WPScan

更多詳情: 官網(wǎng)介紹

參考鏈接

  1. Vuls官網(wǎng)手動安裝教程
  2. Vuls安裝記錄
  3. Vuls漏洞庫工具
  4. 計算機漏洞和安全性評估語言 本地部署
  5. Go Install Go語言安裝

安裝步驟

  • 測試機器:CentOS

  • 環(huán)境要求 Vuls requires the following packages.

    1. SQLite3, MySQL, PostgreSQL, Redis
    2. git
    3. gccGNU Make
    4. Go 必須安裝最新版Go逝慧,不然會有各種報錯
  • 一. 環(huán)境部署:

    • 1.工具安裝

      $ sudo yum -y install sqlite git gcc make wget
      
    • 2.Go 安裝

      $ 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
      $ mkdir $HOME/go
      
    • 3.配置Go環(huán)境變量

      $ vi  /etc/profile.d/goenv.sh
      
    • 4.在這個文件中添加以下環(huán)境變量

      export GOROOT=/usr/local/go 
      export GOPATH=$HOME/go 
      export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
      
    • 5.設(shè)置環(huán)境變量到系統(tǒng)中

      $ source /etc/profile.d/goenv.sh
      
    • 6.檢測 go是否安裝成功

      $ go version
      
  • 二. CVE庫部署

    • 1.從github下載部署工具并安裝

      $ sudo mkdir /var/log/vuls
      $ sudo chown <username> /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
      
    • 2.獲取cve漏洞數(shù)據(jù) 大概需要一小時 1.6G 下載成功后可以看到sqlite數(shù)據(jù)庫 如果想縮短時間可以只獲取最近幾年的數(shù)據(jù)

      $ for i in `seq 2002 $(date +"%Y")`; do go-cve-dictionary fetchnvd -years $i; done
      
      [root@izbp1268h8zj95audt9fdez go-cve-dictionary]# ls -alh cve.sqlite3
      -rw-r--r-- 1 root root 1.6G Mar  1 19:04 cve.sqlite3
      
    • 踩坑

      • make install 失敗1:可以使用--debug查看更多信息

      • Permission denied 錯誤是文件權(quán)限不夠,沒有可執(zhí)行權(quán)限捌浩,提權(quán)即可

        [root@izbp1268h8zj95audt9fdez go-cve-dictionary]# make install
        GO111MODULE=on go install -ldflags "-X 'main.version=v0.5.8' -X 'main.revision=1aa7ea7'"
        /bin/sh: /usr/local/go/bin/go: Permission denied
        make: *** [install] Error 126
        [root@izbp1268h8zj95audt9fdez go-cve-dictionary]# make install --debug
        GNU Make 3.82
        Built for x86_64-redhat-linux-gnu
        Copyright (C) 2010  Free Software Foundation, Inc.
        License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
        This is free software: you are free to change and redistribute it.
        There is NO WARRANTY, to the extent permitted by law.
        Reading makefiles...
        Updating goal targets....
         File `install' does not exist.
        Must remake target `install'.
        Invoking recipe from GNUmakefile:31 to update target `install'.
        GO111MODULE=on go install -ldflags "-X 'main.version=v0.5.8' -X 'main.revision=1aa7ea7'"
        /bin/sh: /usr/local/go/bin/go: Permission denied
        
      • make install 失敗2: go 包安裝失敗 這是因為下載網(wǎng)址被墻了放刨,需要設(shè)置代理

        [root@izbp1268h8zj95audt9fdez go-cve-dictionary]# make install
        GO111MODULE=on go install -ldflags "-X 'main.version=v0.5.8' -X 'main.revision=1aa7ea7'"
        go: github.com/PuerkitoBio/goquery@v1.6.1: Get "https://proxy.golang.org/github.com/%21puerkito%21bio/goquery/@v/v1.6.1.mod": dial tcp 172.217.160.113:443: i/o timeout
        make: *** [install] Error 1
        
      • 如果需要設(shè)置代理 解決方法如下

        $ go env -w GOPROXY=https://goproxy.cn
        
  • 三.部署goval-dictionary

    • 1.從github下載工具并安裝

      $ 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
      
    • 2.收集系統(tǒng)信息 (不同的系統(tǒng)命令不同 詳情參閱: goval fetch用法)

      $ goval-dictionary fetch-redhat 7
      
    • 踩坑

      • make install失敗3:還是包下載問題

        [root@izbp1268h8zj95audt9fdez goval-dictionary]# make install
        GO111MODULE=off go get -u golang.org/x/lint/golint
        package golang.org/x/lint/golint: unrecognized import path "golang.org/x/lint/golint": https fetch: Get "https://golang.org/x/lint/golint?go-get=1": dial tcp 216.239.37.1:443: i/o timeout
        make: *** [lint] Error 1
        
      • 一開始我以為還是代理的問題,設(shè)置來設(shè)置去還是不能解決尸饺,go env命令可以查看go的環(huán)境變量进统,我發(fā)現(xiàn)GO111MODULE已經(jīng)設(shè)置為on,但是執(zhí)行make install的時候侵佃,還是off麻昼,GO111MODULE涉及到包安裝的方式。我分析了安裝腳本之后發(fā)現(xiàn)腳本內(nèi)GO111MODULE設(shè)置了off馋辈,于是修改了腳本抚芦。

            [root@izbp1268h8zj95audt9fdez goval-dictionary]# cat GNUmakefile 
            .PHONY: \
                build \
                install \
                all \
                vendor \
                lint \
                vet \
                fmt \
                fmtcheck \
                pretest \
                test \
                cov \
                clean
        
            SRCS = $(shell git ls-files '*.go')
            PKGS =  ./commands ./config ./db ./db/rdb ./fetcher ./models ./util
            VERSION := $(shell git describe --tags --abbrev=0)
            REVISION := $(shell git rev-parse --short HEAD)
            LDFLAGS := -X 'main.version=$(VERSION)' \
                -X 'main.revision=$(REVISION)'
            GO := GO111MODULE=on go
            GO_OFF := GO111MODULE=off go
        
            all: build
        
            build: main.go pretest
                $(GO) build -a -ldflags "$(LDFLAGS)" -o goval-dictionary $<
        
            b:  main.go pretest
                $(GO) build -ldflags "$(LDFLAGS)" -o goval-dictionary $<
        
            install: main.go pretest
                $(GO) install -ldflags "$(LDFLAGS)"
        
            lint:
                $(GO_OFF) get -u golang.org/x/lint/golint      // 把lint方法中的GO_OFF改為GO 
                golint $(PKGS)
        
            vet:
                echo $(PKGS) | xargs env $(GO) vet || exit;
                ...
                ...
                ...
            ```
        
    • 踩坑

      • make install失敗4: sum.go missing 問題

        [root@izbp1268h8zj95audt9fdez goval-dictionary]# make install
        GO111MODULE=on go get -u golang.org/x/lint/golint
        golint ./commands ./config ./db ./db/rdb ./fetcher ./models ./util
        echo ./commands ./config ./db ./db/rdb ./fetcher ./models ./util | xargs env GO111MODULE=on go vet || exit;
        /root/go/pkg/mod/github.com/mattn/go-isatty@v0.0.12/isatty_tcgets.go:6:8: missing go.sum entry for module providing package golang.org/x/sys/unix (imported by github.com/mattn/go-isatty); to add:
            go get github.com/mattn/go-isatty@v0.0.12
        make: *** [vet] Error 123
        
      • go.sum 是一個校驗包的文件,多次嘗試迈螟,找到了一個解決方法 go get

        ```
        [root@izbp1268h8zj95audt9fdez goval-dictionary]# go get
        go: downloading golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4
        go: downloading github.com/dgrijalva/jwt-go v1.0.2
        go: downloading github.com/k0kubun/pp v1.3.0
        ```
        
  • 四. 部署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
      
    • 踩坑

    • git 問題1: error: RPC failed; 這個問題出現(xiàn)了多次叉抡,可能是git需要下載的包太大,可能是防火墻或者代理等網(wǎng)絡(luò)情況

      [root@izbp1268h8zj95audt9fdez future-architect]# git clone https://github.com/future-architect/vuls.git
      Cloning into 'vuls'...
      remote: Enumerating objects: 7448, done.
      error: RPC failed; result=18, HTTP code = 200 | 20.00 KiB/s     
      fatal: The remote end hung up unexpectedly
      fatal: early EOF
      fatal: index-pack failed
      
    • 下面是我總結(jié)的解決方法 請逐一嘗試

      1. 更新git

      2. 檢查網(wǎng)絡(luò)答毫,瀏覽器訪問倉庫

      3. https:// 替換為 git://

      4. 增加緩沖區(qū)大小

        git config --global http.postBuffer 524288000
        
      5. 只拉去倉庫淺層目錄褥民,然后再拉取完整倉庫

        $ git clone http://github.com/large-repository --depth 1 
        $ cd large-repository 
        $ git fetch --unshallow
        
      • 網(wǎng)絡(luò)問題比較復(fù)雜,如果以上都不能起效洗搂,最后還可以手動下載復(fù)制git倉庫

      • 舉例

        ```
        $ mkdir -p $GOPATH/src/golang.org/x 
        $ git clone https://github.com/golang/lint.git $GOPATH/src/golang.org/x/lint 
        $ go get -u golang.org/x/lint/golint
        ```
        
    • 但是我的情況還是有錯 如下消返,最終修改Makefile文件 設(shè)置GO111MODULE=on 和上面提的一樣

        ```
        [root@izbp1268h8zj95audt9fdez vuls]# make install
        GO111MODULE=off go get -u golang.org/x/lint/golint
        package golang.org/x/tools/go/ast/astutil: unrecognized import path "golang.org/x/tools/go/ast/astutil": https fetch: Get "https://golang.org/x/tools/go/ast/astutil?go-get=1": dial tcp 216.239.37.1:443: i/o timeout
        ```
      
  • 五.開始掃描和報告
    • 本地模式

    • 1.添加配置文件 .toml 文件內(nèi)容如下

      $ cd $HOME
      $ touch config.toml
      $ cat config.toml
      [servers]
      
      [servers.localhost]
      host = "localhost"
      port = "local"
      
    • 2.配置文件檢驗

      $ vuls configtest
      
    • 踩坑

      • 配置文件讀取失敗
        [root@izbp1268h8zj95audt9fdez ~]# vuls configtest
        [Mar  2 16:03:43]  INFO [localhost] vuls-v0.15.9-build-20210302_155557_1d0c5de
        [Mar  2 16:03:43]  INFO [localhost] Validating config...
        [Mar  2 16:03:43]  INFO [localhost] Detecting Server/Container OS... 
        [Mar  2 16:03:43]  INFO [localhost] Detecting OS of servers... 
        [Mar  2 16:03:43] ERROR [localhost] Failed to configtest: Failed to init servers. err:
            github.com/future-architect/vuls/scanner.Scanner.Configtest
                /root/go/src/github.com/future-architect/vuls/scanner/serverapi.go:107
          - No scannable host OS:
            github.com/future-architect/vuls/scanner.Scanner.initServers
                /root/go/src/github.com/future-architect/vuls/scanner/serverapi.go:235
        
      • 已聯(lián)系作者修改,更新至 ee38a87 提交以后 然后重新執(zhí)行第四步的make install 重新安裝
    • 3.開始掃描

      $ vuls scan
      ...
      ...
      ...
      Scan Summary
      ================
      localhost   centos7.7.1908  540 installed, 218 updatable   // 正確掃描結(jié)果
      
    • 踩坑

      • err: Failed to scan updatable packages

        [root@izbp1268h8zj95audt9fdez ~]# vuls scan
        [Mar  3 11:59:53]  INFO [localhost] vuls-v0.15.9-build-20210303_115852_1ec31d7
        [Mar  3 11:59:53]  INFO [localhost] Start scanning
        [Mar  3 11:59:53]  INFO [localhost] config: /root/config.toml
        [Mar  3 11:59:53]  INFO [localhost] Validating config...
        [Mar  3 11:59:53]  INFO [localhost] Detecting Server/Container OS... 
        [Mar  3 11:59:53]  INFO [localhost] Detecting OS of servers... 
        [Mar  3 11:59:53]  INFO [localhost] (1/1) Detected: localhost: centos 7.7.1908
        [Mar  3 11:59:53]  INFO [localhost] Detecting OS of containers... 
        [Mar  3 11:59:53]  INFO [localhost] Checking Scan Modes... 
        [Mar  3 11:59:53]  INFO [localhost] Detecting Platforms... 
        [Mar  3 11:59:55]  INFO [localhost] (1/1) localhost is running on other
        [Mar  3 11:59:55]  INFO [localhost] Detecting IPS identifiers... 
        [Mar  3 11:59:55]  INFO [localhost] (1/1) localhost has 0 IPS integration
        [Mar  3 11:59:55]  INFO [localhost] Scanning OS pkg in fast mode
        [Mar  3 12:00:05]  WARN [localhost] err: Failed to scan updatable packages:
            github.com/future-architect/vuls/scanner.(*redhatBase).scanPackages
                /root/go/src/github.com/future-architect/vuls/scanner/redhatbase.go:231
          - Failed to SSH: execResult: servername: 
              cmd: repoquery --all --pkgnarrow=updates --qf='%{NAME} %{EPOCH} %{VERSION} %{RELEASE} %{REPO}'
              exitstatus: 127
              stdout: 
              stderr: /bin/sh: repoquery: command not found
            
              err: exit status 127:
            github.com/future-architect/vuls/scanner.(*redhatBase).scanUpdatablePackages
                /root/go/src/github.com/future-architect/vuls/scanner/redhatbase.go:378
                
        
      • 解決辦法

        $ yum -y install yum-utils
        
    • 4.報告

      • 報告位置 /root/results/

      • View one-line summary

        $ vuls report -format-one-line-text
        
      • View short summary

        $ vuls report -format-list
        
      • View full report.

        $ vuls report -format-full-text | less
        
    • 5.進階報告查看

      • 終端展示
        $ vuls tui
        
        1.png
    • web UI 展示

      1. 獲得掃描數(shù)據(jù)
        // 需要現(xiàn)有掃描數(shù)據(jù) - 存放目錄 /root/results
        $ vuls scan
        $ vuls report -format-json
        
      2. 安裝WEB部署工具
        $ cd $HOME
        $ git clone https://github.com/ishiDACo/vulsrepo.git
        $ cd $HOME/vulsrepo/server
        $ cp vulsrepo-config.toml.sample vulsrepo-config.toml // 復(fù)制sample配置文件
        $ vi vulsrepo-config.toml                             // 根據(jù)自己的環(huán)境配置
        [Server]
        rootPath = "/home/vuls-user/vulsrepo"
        resultsPath  = "/opt/vuls/results"
        serverPort  = "5111"
        
      3. 運行
        $ pwd
        $HOME/vulsrepo/server
        
        $ ./vulsrepo-server
        
        I2ge.png

      WEB Demo :https://monocosel.jp/vulsrepo/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末耘拇,一起剝皮案震驚了整個濱河市撵颊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惫叛,老刑警劉巖倡勇,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嘉涌,居然都是意外死亡妻熊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門仑最,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扔役,“玉大人,你說我怎么就攤上這事警医√浚” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長损敷。 經(jīng)常有香客問我葫笼,道長,這世上最難降的妖魔是什么拗馒? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任路星,我火速辦了婚禮,結(jié)果婚禮上诱桂,老公的妹妹穿的比我還像新娘洋丐。我一直安慰自己,他們只是感情好挥等,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布友绝。 她就那樣靜靜地躺著,像睡著了一般肝劲。 火紅的嫁衣襯著肌膚如雪迁客。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天辞槐,我揣著相機與錄音掷漱,去河邊找鬼。 笑死榄檬,一個胖子當著我的面吹牛卜范,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鹿榜,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼海雪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了舱殿?” 一聲冷哼從身側(cè)響起奥裸,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怀薛,沒想到半個月后刺彩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迷郑,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡枝恋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了嗡害。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焚碌。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖霸妹,靈堂內(nèi)的尸體忽然破棺而出十电,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布鹃骂,位于F島的核電站台盯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏畏线。R本人自食惡果不足惜静盅,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寝殴。 院中可真熱鬧蒿叠,春花似錦、人聲如沸蚣常。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抵蚊。三九已至施绎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泌射,已是汗流浹背粘姜。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留熔酷,地道東北人孤紧。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像拒秘,于是被迫代替她去往敵國和親号显。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344