LoginSignup
15
17

More than 5 years have passed since last update.

vuls導入メモ ~Vulsサーバ構築から脆弱性診断の定期実行をするまで(メール通知・Chatwork通知)~

Last updated at Posted at 2019-01-09

はじめに

  • 脆弱性診断を行うためにvuls環境を構築します。

本手順で行うこと

vulsサーバ側で行うこと

  • vuls実行ユーザの作成
  • vulsのインストール
  • VulsRepoのインストール
    • VulsRepoをsystemd管理にして自動起動設定する
  • 脆弱性情報を更新する
  • 脆弱性診断を定期実行し、結果をメール通知する

対象環境

  • CentOS7

インストールされるバージョン

$ vuls -v
vuls v0.6.1 ca21602

$ go version
go version go1.10.1 linux/amd64

$ go-cve-dictionary -v
go-cve-dictionary v0.3.1 b083bed

ディレクトリ構造

以下は本手順で個人的に重要だと思うポイント

- /opt/vuls/
    - config.toml ★vuls設定ファイル
    - cve.sqlite3 ★脆弱性診断が含まれるDB
    - go/
        - bin/vuls ★vulsコマンドの存在場所
        - go/src/github.com/future-architect/vuls/ ★vulsのインストール場所
    - results/ ★vuls診断結果を保存するディレクトリ
        - 各種診断結果。。。
    - vulsrepo/ ★vuls診断結果をWebで確認するツール一式
        - その他ライセンスもろもろ。。。
        - server/
            - vulsrepo-config.toml ★VulsRepoの設定ファイル
            - vulsrepo-server ★VulsRepoの起動スクリプト
            - その他設定もろもろ。。。

Vuls構築手順

  • 補足
    • #から始まる行のコマンドはrootユーザで実行、$はvulsユーザで実行しています。

vulsインストール

1.必要なパッケージのインストール

# yum -y install sqlite git gcc
# wget https://dl.google.com/go/go1.10.1.linux-amd64.tar.gz
# tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz

2.vuls用のユーザ作成、ログ設定

# useradd vuls -b /opt ★任意のユーザで構いません
# mkdir /var/log/vuls
# chown -R vuls.vuls /var/log/vuls ★useraddした任意のユーザ名の権限にする
# chmod 700 /var/log/vuls

3.Go言語用の環境変数設定

# vi /etc/profile.d/goenv.sh ★goenv.shを作成して以下の3行を記載する。
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

# source /etc/profile.d/goenv.sh

4.go-cve-dictionaryのインストール

go-cve-dictionaryとは

  • 脆弱性情報の公開データをDBに取り込み管理するためのツール
# su - 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 

5.NVDから脆弱性データベースを取得

$ cd /opt/vuls
$ for i in `seq 1998 $(date +"%Y")`; do go-cve-dictionary fetchjvn -years $i; done

6.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実行

vuls接続準備

以下はvulsサーバ側で作業

# su - vuls
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub ★このファイルの中身をメモ

以下は脆弱性診断するサーバ側で作業

# useradd vuls
# su - vuls
$ mkdir ~/.ssh/
$ vi ~/.ssh/authorized_keys ★先ほどメモしたファイルの中身を記載する
$ chmod 700 /home/vuls/.ssh/
$ chmod 600 ~/.ssh/authorized_keys

SSH接続確認(vulsサーバ→脆弱性診断するサーバ)

# ssh -i /opt/vuls/.ssh/id_rsa vuls@<脆弱性診断するサーバのIPアドレス>

vuls設定ファイル作成(vulsサーバで実行)

# su - vuls
$ vi config.toml
[servers.target-server]
host        = "<脆弱性診断するサーバのIPアドレス>"
port        = "22"
user        = "vuls" ★脆弱性診断をするユーザ
keyPath     = "/opt/vuls/.ssh/id_rsa" 

脆弱性診断実行

$ vuls scan target-server
$ vuls report -lang=ja

脆弱性診断をWebツール(VulsRepo)で確認したい

  • 詳細は以下の公式ドキュメントを確認してください。

VulsRepoインストール

# su - vuls
$ cd $HOME $ git clone https://github.com/usiusi360/vulsrepo.git
$ cd $HOME/vulsrepo/server
$ cp vulsrepo-config.toml.sample vulsrepo-config.toml
$ vi vulsrepo-config.toml
[Server]
rootPath = "/opt/vuls/vulsrepo"
resultsPath  = "/opt/vuls/results"
serverPort  = "5111"

VulsRepoを起動

$ cd $HOME/vulsrepo/server
$ ./vulsrepo-server

脆弱性診断結果をWebでみる

http://< VulsサーバのIPアドレス >:5111にアクセスします。

WS000000.JPG

脆弱性診断した対象のレポートを選択→[Submit]

WS000001.JPG

左上のプルダウンから[03. Pivot: Package/CVSS-Severity/CveID/Summary => ServerName]を選択→[Save]

WS000002.JPG

VulsRepoをsystemdで管理したい

起動ファイルを作成する

# vi /etc/systemd/system/vulsrepo.service

[Unit]
Description=vulsrepo daemon
Documentation=https://github.com/usiusi360/vulsrepo

[Service]
ExecStart = /opt/vuls/vulsrepo/server/vulsrepo-server
ExecRestart = /bin/kill -WINCH ${MAINPID} ; /opt/vuls/vulsrepo/server/vulsrepo-server
ExecStop = /bin/kill -WINCH ${MAINPID}
Restart = no
Type = simple
User = vuls
Group = vuls

[Install]
WantedBy = multi-user.target

確認する

# systemctl list-unit-files --type=service|grep vulsrepo
vulsrepo.service                           disabled 

自動起動設定、動作確認

# systemctl enable vulsrepo
Created symlink from /etc/systemd/system/multi-user.target.wants/vulsrepo.servic
#
# systemctl status vulsrepo
● vulsrepo.service - vulsrepo daemon
   Loaded: loaded (/etc/systemd/system/vulsrepo.service; enabled; vendor preset:
   Active: inactive (dead) since 水 2019-01-09 16:29:37 JST; 3s ago
     Docs: https://github.com/usiusi360/vulsrepo
  Process: 32536 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUC
  Process: 32525 ExecStart=/opt/vuls/vulsrepo/server/vulsrepo-server (code=kille
 Main PID: 32525 (code=killed, signal=TERM)
#
# systemctl start vulsrepo
#
# systemctl status vulsrepo
● vulsrepo.service - vulsrepo daemon
   Loaded: loaded (/etc/systemd/system/vulsrepo.service; enabled; vendor preset:
   Active: active (running) since 水 2019-01-09 16:29:46 JST; 1s ago
     Docs: https://github.com/usiusi360/vulsrepo
  Process: 32536 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUC
 Main PID: 32545 (vulsrepo-server)
    Tasks: 4
   Memory: 864.0K
   CGroup: /system.slice/vulsrepo.service
           mq32545 /opt/vuls/vulsrepo/server/vulsrepo-server
# systemctl stop vulsrepo
#
# systemctl status vulsrepo
● vulsrepo.service - vulsrepo daemon
   Loaded: loaded (/etc/systemd/system/vulsrepo.service; enabled; vendor preset:
   Active: inactive (dead) since 水 2019-01-09 16:29:37 JST; 3s ago
     Docs: https://github.com/usiusi360/vulsrepo
  Process: 32536 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUC
  Process: 32525 ExecStart=/opt/vuls/vulsrepo/server/vulsrepo-server (code=kille
 Main PID: 32525 (code=killed, signal=TERM)

Vulsの定期実行

脆弱性情報の定期更新

以下は毎週月曜日の朝5時に実行しています。

# vi /etc/crontab
00 5 * * 1 vuls ${HOME}/go/bin/go-cve-dictionary fetchnvd -last2y -dbpath=/opt/vuls/cve.sqlite3
30 5 * * 1 vuls ${HOME}/go/bin/go-cve-dictionary fetchjvn -latest -dbpath=/opt/vuls/cve.sqlite3

脆弱性診断の結果をメール通知する

メーラーをインストール・起動・自動起動

# yum install -y postfix
# systemctl start postfix
# systemctl enable postfix

Vulsのメール設定をする

# vi /opt/vuls/config.toml

[email]
smtpAddr      = "localhost"
smtpPort      = "25"
from          = "aaaaa@bbbbbbb.com"
to            = ["xxxxx@yyyyyyy.com"]
subjectPrefix = "[vuls]"

脆弱性診断結果をメールで通知する(オプション:-to-email)

$ vuls scan && vuls report -lang=ja -format-full-text -to-email

脆弱性診断の定期実行

以下は毎月1日の朝6時に診断を実行します。

# vi /etc/crontab
00 6 1 * * vuls /opt/vuls/go/bin/vuls scan && /opt/vuls/go/bin/vuls report -lang=ja -format-full-text -to-email > /dev/null 2>&1

脆弱性診断結果をチャットワークで通知する

設定ファイル作成

$ vi /opt/vuls/config.toml

[chatwork]
room = "aaaaaaa" ★チャットワークルームID
apiToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ★チャットワークのユーザのAPIトークン

脆弱性診断結果をチャットワークに通知する(オプション:-to-chatwork)

$ vuls scan && vuls report -format-full-text -to-chatwork -lang=ja
15
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
17