2016年6月23日

はじめまして。なぜか記事を書くことになってしまったseiriosです。

私は、一応ネットワーク系技術者の端くれのつもりでいますが、最近ではネットワーク系だけでなく、広い範囲を浅く見ているだけになってしまいました。雑談的な記事が中心になると思いますが、どうぞよろしくおつきあいください。

さて、本日のお題は「Vulsを試してみよう」です。


自分が管理しているサーバーの脆弱性を追えていますか?

近年、個人情報保護や機密情報保護を中心に、セキュリティ確保が話題に上ることが大変に増えています。その一方で、当社も含め、様々な企業が仮想サーバーやレンタルサーバーを提供するようになってきており、その利用者が増えています。この種の「自前持ちではない」サーバーは、新たに設置するのも利用を中止するのも簡単なため、管理すべきサーバーがどんどん増加していくことにつながります。

このような状況において、セキュリティを確保し続けることは非常に難しいのが実情です。管理するべき台数は増加し、利用しているソフトウェアも増えていく一方で、それぞれの脆弱性情報を確実に取得し、適切に対処することはなかなかに難しいことといえるでしょう。

Vulsはhttps://github.com/future-architect/vulsにて公開されている、go言語で記述された、ライセンスとしてGPLを採用しているソフトウェアです。このVulsを利用すると、稼働中のLinux系OS(Ubuntu, Debian, CentOS, Amazon Linux, RHEL)から情報を取得し、NVD(National Vulnerability Database)に登録されている脆弱性情報と突き合わせて当該のサーバーが持つ脆弱性情報を教えてくれます。同様のソフトウェアにOpenVASがありますが、私が新し物好きなのと、コンソールで利用出来るという点に惹かれて、試してみました。

なお、Vulsはあくまでも脆弱性を「検出」するツールであって、パッケージの更新のような対処は行いません。従って、更新などは、ご自身で実行する必要があります。

Vulsは、Go言語で記述されているため、Goが動作する(Goで作成されたバイナリが実行可能な)環境であれば動作することを期待できます。実際、Windows上でVulsを動作させた報告が上がっています。
今回は、私の個人的な趣味で「FreeBSD上で動かす!」という謎のモチベーションに突き動かされましたので、この記事はVulsをFreeBSD 10.3上で動かした記録となります。悪しからずご笑覧ください。

FreeBSD 10.3 でVulsを動かす

FreeBSD 10.3上で Vuls を動かしてみましょう。

利用したのは、仮想環境上に構築したFreeBSD 10.3が動くVMです。

最初の準備

  • 以下のパッケージを投入します。

go(1.6以降)、git、sudo、 Sqlite3

# pkg install go git sudo sqlite3

(注意)ここから先はLinuxでも(ほぼ)同じです。

  • ユーザーmonを作成します。

vulsを動かすためのユーザーを作成します。

# adduser
Username: mon
Full name: Vuls monitor user
Uid (Leave empty for default):
Login group [mon]:
Login group is mon. Invite mon into other groups? []: 
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: sh
Home directory [/home/mon]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username   : mon
Password   : ****
Full Name  : Vuls monitor user
Uid        : 1001
Class      :
Groups     : mon
Home       : /home/mon
Shell      : /bin/sh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (jru) to the user database.
Add another user? (yes/no): no
Goodbye!
#
  • ssh鍵関連の設定をします。

Vulsは対象となるサーバーからsshを利用して情報を取得するので、ssh関連の設定は必須です。

$ ssh-keygen -t rsa

Vuls関連の準備

  • Vulsのlogを置くためのディレクトリを作成します。
$ sudo mkdir /var/log/vuls
$ sudo chown mon /var/log/vuls
$ sudo comod 700 /var/log/vuls
  • Vulsから参照するCVE情報が登録されたDBを作ります。
$ go get github.com/kotakanbe/go-cve-dictionary
  • DBを作りましょう。
$ for i in 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016; do
go-cve-dictionary fetchnvd -years $i
done

(注意) 私はbashを使わないのでこんな迂遠なことをしていますが、bashを利用する場合には

$ for i in {2002..2016}; do go-cve-dictionary fetchnvd -years $i; done

で同じことができます。

Getting_NVD_Data

  • 本体であるVulsを取得します。
$ go get github.com/future-architect/vuls

これで、Vulsの準備は終わりです。

Vulsを動かしてみる

それでは、Vulsを動かしてみましょう。

  • Vulsのdictionary サーバーを起動します。
$ go-cve-dictionary server

Vulsは、脆弱性情報を取得した後、情報をSQLite DBに登録します。本体のVulsは、各監視対象から必要な情報を取得した後、その情報をDBの情報と比較します。Dictionaryサーバーは、この脆弱性情報が登録されたDBのことを指します。

  • Vulsの設定ファイルを作成します。

設定ファイルは、Vulsを実行するディレクトリにおけばいいです。設定ファイル名はconfig.tomlです。

[servers]

[servers.example]
host = "192.0.2.1"
port = "22"
user = "mon"
keyPath = "/home/mon/.ssh/id_rsa"
  • 対象となるサーバーに必要な設定を投入します
    • 対象となるサーバーに、config.toml 内のuserに記載したアカウントを作成します。ここでは、monですね。
    • 対象となるサーバの~mon/.sshにauthorized_keysを設置します。
      • Vulsを動作させるサーバーの~/monにあるid_rsa.pubを対象となるサーバーの~mon/.ssh下にauthorized_keysとして設置します。
      • authorized_keysのパーミッションを600にします。
    • 対象となるサーバーでvisudoを実行し、monがno passwordでroot権限を取得できるように設定します。これは、今後改善されるべき部分といえます。
    • Vulsを動作させるサーバーから対象となるサーバーにsshで接続でき、かつsudoを実行してパスワードなしでrootになれることを確認する
  • Vuls prepareを実行する
    • 注意:CentOSやRHEの場合、Vulsは対象ホストに自動でyum-plugin-securityを導入します。このパッケージは標準で配布されるものであり、Security関連の確認には非常に有用なパッケージです。Vulsを実行するにあたっては、このパッケージが自動で投入され、必要に応じて更新されます。
      • Ubuntuなどの他のディストリビューションに関しては確認していません。
  • scanします
$ vuls scan

scanすると、こんな感じの画面になります。

Vuls_scan_start

Vuls_scan_end

  • ホストごとの脆弱性をCUIで表示してみます。
$ vuls tui

ペインの移動は「Tab」キーで。スクロールは、上下キーでできるはずです。終了したい場合には^C(Ctrl+c)を押してください。

Vuls_tui

以上、細かくクダクダ書いてきましたが、やってみるとわかる通り、非常に簡単です。

Vulsはまだ公開されたばかりのソフトウェアで、解決すべき問題や対象範囲の拡大などやらなければならないことがいっぱいあるソフトウェアです。今後の拡充や強化に期待したいと思います。

本ブログの情報につきましては、自社の検証に基づいた結果からの情報提供であり、
品質保証を目的としたものではございません。