vuls
Ubuntu16.04LTS
vulsrepo
VulsDay 15

Ubuntu 16.04でVuls/VulsRepoを稼働させた話

More than 1 year has passed since last update.

この記事は、Vuls Advent Calendar 2016の15日目になります。

概要

前回の記事 で、Ubuntu16.10を導入するのが難しいことが分かった。

そのため、一般的に利用されている Ubuntu 16.04LTSでのセットアップを行い、例示することにした。

方針

Vuls Advent Calender 2016の 7日目に書いた標準化した、Vuls/VulsRepoの導入のシナリオをベースとして、Ubuntu16.04にVulsを仕込みます。

  • Vuls, VulsRepoの推奨するREADME.md構成とは、一部異なります。
    • HTTPDの動作権限は、vulsではなくて、別の物にしています。
    • それに合わせ、vulsのホームディレクトリアクセス権を比較的強固にしています。

Vulsスキャンサーバ構築上での、CentOSとの違い

CentOS上でVulsを導入することは多いのですが、今回初めてUbuntuにVulsサーバを入れました。(スキャン対象には何度かしたことがあります。)
以下の点が引っかかりやすいな、と思いました。

  • useraddでログインシェルを 明示的に 指定しないと、Nullになるようだ。
    • スキャン対象側のvulsユーザでは、ログインシェルがbashである必要があります。
  • Ubuntuで、HTTPDをapache2にした場合、www-dataユーザ/グループがapache2を駆動します
    • apache:apacheかwww-data:www-dataか、の違いだけですが。
  • VulsRepoで必要になるPerlモジュールのパッケージ名が、CentOSと異なります。
    • README.md通り進めれば大丈夫

構築例

初回パッケージ導入と、アップデート

アップデート時にCDを要求されたので、取りあえずマウントしています。
そのままapt-get upgrade出来る場合は、不要です。

install_and_upgrade_package
[default:~]$ sudo su -
[default:~]$ sudo vi /etc/apt/sources.list
=============
# dev cdrom行の先頭に"#"を付けて、コメントアウト。
#deb cdrom:[Ubuntu-Server 16.04.1 LTS _Xenial Xerus_ - Release amd64 (20160719)]/ xenial main restricted
=============
[default:~]$ sudo apt-get install openssh-server sqlite gcc make
[default:~]$ sudo apt-get upgrade

vulsユーザの作成

ユーザ作成

useraddで作成する場合、-sでログインシェルを bash とする必要があります。

  • ログインシェルがbashではない場合は、vulsでのscan等が出来ないようです。
add_vuls_user
[default:~]$ sudo useradd -d /opt/vuls vuls -s /bin/bash
[default:~]$ sudo visudo
--------------------------
vuls ALL=(root) NOPASSWD: /usr/bin/apt-get, /usr/bin/apt-cache
--------------------------
[default:~]$ sudo mkdir /opt/vuls
[default:~]$ sudo chmod 700 /opt/vuls
[default:~]$ sudo chown vuls:vuls /opt/vuls

vulsユーザの鍵を作る

今回は、id_rsaではなく、もっと強度の強い 楕円曲線DSA(ECDSA)の鍵を作ります。

  • ECDSAの場合、鍵のビット長は 256, 384, 521 から選択することになります。
    • "512"ではない事に注意。
create_ssh_keys
[default:~]$ sudo su - vuls
[vuls:~]$ pwd
/opt/vuls
[vuls:~]$ mkdir .ssh ssh_keys
[vuls:~]$ chmod 700 .ssh/ ssh_keys
[vuls:~]$ ssh-keygen -t ecdsa -b 521
Generating public/private ecdsa key pair.
Enter file in which to save the key (/opt/vuls/.ssh/id_ecdsa)
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /opt/vuls/.ssh/id_ecdsa
Your public key has been saved in /opt/vuls/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxx vuls@HOSTNAME
The key’s randomart image is;
+---[ECDSA 521---+
|(randamart here)|
+----[SHA256-----+
[vuls:~]$ cat .ssh/id_ecdsa.pub >> .ssh/authorized_keys
[vuls:~]$ chmod 600 .ssh/authorized_keys
[vuls:~]$ mv .ssh/id_ecdsa ssh_keys/local_id_ecdsa
[vuls:~]$ exit

go言語の導入

いつも通り、入れます。

install_go_lang
[default:~]$ wget https://storage.googleapis.com/golang/go1.7.4.linux-amd64.tar.gz
[default:~]$ sudo tar -C /usr/local -xzf go1.7.4.linux-amd64.tar.gz
[default:~]$ sudo vi /etc/profile.d/goenv.sh
--------------------------
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
--------------------------
[default:~]$ sudo mkdir /var/log/vuls
[default:~]$ sudo chown vuls:vuls /var/log/vuls
[default:~]$ sudo chmod 700 /var/log/vuls
[default:~]$ sudo su - vuls
[vuls:~]$ mkdir go
[vuls:~]$ go version
go version go1.7.4 linux/amd64

go-cve-dictionaryを入れる

これもいつも通り、入れます。

[vuls:~]$ mkdir -p $GOPATH/src/github.com/kotakanbe
[vuls:~]$ cd $GOPATH/src/github.com/kotakanbe
[vuls:kotakanbe]$ git clone https://github.com/kotakanbe/go-cve-dictionary.git
[vuls:kotakanbe]$ cd go-cve-dictionary
[vuls:go-cve-dictionary]$ make install
[vuls:go-cve-dictionary]$ mkdir -p $GOPATH/src/github.com/future-architect
[vuls:go-cve-dictionary]$ cd $GOPATH/src/github.com/future-architect
[vuls:future-architect]$ git clone https://github.com/future-architect/vuls.git
[vuls:future-architect]$ cd vuls
[vuls:vuls]$ make install
[vuls:vuls]$ cd
[vuls:~]$ for i in {2002..2017}; do go-cve-dictionary fetchnvd -years $i; done

vulsの設定と、自身へのスキャン

config.tomlを作成し、自分自身をスキャンします。

  • config.tomlと同じ階層で vuls scanをしましょう。
    • 若しくは、明示的にコンフィグファイルを指定しましょう。
  • prepare等でエラーになる場合は、vulsユーザのログインシェルを確認しましょう。
    • /etc/passwdで/bin/bashになっていることを確認しましょう。
    • CentOSだとuseraddでシェルを指定しなくてもbashになったけど、ubuntuではNullになるので注意。
      • その場合は $ sudo chsh vuls辺りを実行して、シェルを/bin/bashにしましょう。
vuls_config_and_scan
[vuls:~]$ vi /opt/vuls/config.toml
--------------------
[default]
port = “22”
user = “vuls”

[servers]

[servers.vuls-server]
host = "127.0.0.1"
keyPath = "opt/vuls/ssh_keys/local_id_ecdsa"
--------------------
[vuls:~]$ vuls configtest
[vuls:~]$ vuls prepare
[vuls:~]$ vuls scan -cve-dictionary-dbpath=/opt/vuls/cve.sqlite3 -report-json

VulsRepoを入れる

gitからVulsRepoを導入

install_VulsRepo
[default:~]$ sudo apt-get install apache2 libcgi-pm-perl libjson-perl
[default:~]$ cd /var/www/html
[default:html]$ sudo git clone https://github.com/usiusi360/vulsrepo.git
[default:html]$ sudo cp vulsrepo/dist/cgi/vulsrepo.conf.sample /etc/apache2/conf-available/vulsrepo.conf
[default:html]$ ln -s /etc/apache2/conf-abailable/vulsrepo.conf /etc/apache2/conf-enabled/vulsrepo.conf
[default:html]$ sudo a2enmod cgid
[default:html]$ cd vulsrepo
[default:vulsrepo]sudo ln -s /opt/vuls/results results

VulsRepoのREADME.mdではなく、標準化した、Vuls/VulsRepoの導入の方針で、apache:apacheで動かす。
その為のアクセス権設定をし、WEBサーバを稼働させます。

  • ubuntuで Apache2を選択した場合、apacheの起動ユーザは www-data:www-data になります。
    • その為、/opt/vuls/resultsへは、www-dataグループがアクセスできるようにする必要があります。
replace_acl
[default:~]$ sudo chown vuls:www-data /opt/vuls
[default:~]$ sudo chmod --recursive go= /opt/vuls
[default:~]$ sudo chmod --recursive 700 /opt/vuls/ssh_keys
[default:~]$ sudo chown --recursive vuls:www-data /opt/vuls/results/
[default:~]$ sudo chmod g+xr /opt/vuls
[default:~]$ sudo chmod --recursive g+xr /opt/vuls/results/
[default:~]$ sudo /etc/init.d/apache2 start

VulsRepoをブラウザで見る

ブラウザで http://<対象ホスト>/vulsrepo/ を開きます。
以上で、healthyな一覧が見えるはずです。

まとめ

Ubuntu16.10ではうまく動かなかったが、Ubuntu16.04LTSでは問題なく稼働させることができた。

Ubuntu16.10は癖がある?ようですね。 もうしばらくは16.04を使い続けることになるのでしょう。