Edited at

あなたのサーバは本当に安全ですか?今もっともイケてる脆弱性検知ツールVulsを使ってみた


はじめに

サーバ管理をしている身としては、 セキュリティ は常に付きまとう悪魔みたいなもので、このセキュリティに関しては何をどこまで頑張ればいいのか不透明な部分が多い。

脆弱性に関しては、CVEなど、毎日情報は入ってくるが、それがどのサーバの何に関連したものなのかなんていちいち調べてられないし、どの脆弱性がすぐに対応しなければいけないもので、どの脆弱性があとあと対応すればいいものなのかなんてわからない。

実際のところ、大きな話題になった脆弱性くらいしか緊急で対応してないという人は多いのではないかと思う。

そんな中、満を持して登場したのが vuls !!

各サーバの脆弱性情報を取得して、個々のサーバそれぞれでどんな脆弱性があり、どのくらいやばい脆弱性なのかを検知できるようになった!

今回はこのvulsを紹介します。


Vulsとは

VULS-logo.png

公式でロゴが発表されたので、差し替えました

公式ドキュメント: Vuls公式ドキュメント

GitHub: vuls

Vulsはgolang製の脆弱性検知ツールです。

VulsはVULnerability Scannerの略です。

「バルス!」って聞くとラピュタを思い出すのは私だけではないはず。


vulsのいいところ


  • Golangで作られているので、バイナリ化すればどのサーバにも配布できる

  • 脆弱性検知結果をslackやメールで送信できる。なおTUI(Text User Interface)で見ることも可能

  • エージェントレス。設定ファイル1つというシンプルな構成

  • スターが5836付いてる(2018/11/20時点)

  • 開発者が日本の人

  • GitHubスターが開発のモチベーションらしいです。


  • vuls公式slackで気軽に質問できる(日本語でもOK)


ざくっとどんな感じ?

こんな感じ

スクリーンショット 2016-04-30 3.31.13.png



  1. go-cve-dictionaryを使って、CVE情報を取得する。


  2. goval-dictionaryを使って、OVAL情報を取得する。


  3. gostを使って、Redhat, Debianのパッケージ情報を取得する。


  4. go-exploitdbを使って、Exploit情報を取得する。

  5. 取得した上記の各情報をSQLiteに保存する

  6. vulsで対象サーバをスキャンして情報を取得する

  7. 取得したサーバ情報とCVE情報を照合する。

  8. 発見した脆弱性情報をJSONに保存する

  9. 脆弱性情報をSlackまたはメールで通知する

  10. SQLiteに保存した脆弱性情報をTUIで可視化する

↓↓↓↓↓↓↓ あなたの記事の内容

さらに詳細な図がみたい人はVulsドキュメントへ。

───────

さらに詳細な図がみたい人はGitHubへ。

↑↑↑↑↑↑↑ 編集リクエストの内容


実際に使ってみる

公式のドキュメントがとても親切なので、それ通りに進めていけば特に問題ない。


実行環境情報


  • vulsホスト情報

OS
OSX El Capitan

Version
10.11.4


  • 脆弱性スキャン対象サーバ

OS
amazon linux

Version
2015.03.1.x86_64-gp2


環境準備


  • ログディレクトリ作成


console

$ sudo mkdir /var/log/vuls

$ sudo chown YOUR_USER /var/log/vuls
$ sudo chmod 700 /var/log/vuls


  • vuls用の作業ディレクトリ作成


console

$ mkdir vuls

$ cd vuls


  • Golangのインストール

説明省略

公式ダウンロードページ


初期設定


go-cve-directionary



  • go-cve-directionaryのセットアップ



  • CVE情報の取得と保存



console

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

$ ls -alh cve.sqlite3
-rw-r--r-- 1 ec2-user ec2-user 7.0M Mar 24 13:20 cve.sqlite3


goval-directionary



  • goval-directionaryのセットアップ



  • OVAL情報の取得と保存(以下、スキャンするディストリビューションの情報のみ取ってくる)



console

$ goval-dictionary fetch-redhat 5 6 7

$ goval-dictionary fetch-debian 7 8 9 10
$ goval-dictionary fetch-ubuntu 12 14 16 18


gost



  • gostのセットアップ



  • gost情報の取得と保存(以下、スキャンするディストリビューションの情報のみ取ってくる)



console

$ gost fetch redhat --after 2016-01-01



go-exploitdb



  • go-exploitdbのセットアップ



  • exploit情報の取得と保存(以下、スキャンするディストリビューションの情報のみ取ってくる)



console

$ go-exploitdb fetch



Vuls実行


console

$ 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

必要な設定はすべてmakeで行えるので、make installするのがいい


  • configファイル設定


config.toml

[servers]

[servers.54-199-160-38]
host = "54.199.160.38"
port = "22"
user = "ec2-user"
keyPath = "/Users/matsunosadayuki/.ssh/vuls-dev.pem"


  • report


console

$ vuls report -format-one-line-text


One Line Summary
================
172-31-4-82 Total: 94 (High:19 Medium:54 Low:7 ?:14) 103 updatable packages

合計143個検知された

Scoreは脆弱性のレベル


  • 脆弱性情報確認

実行した場所のresults以下にscan結果のjsonファイルが保存されている


  • tui


console

$ vuls tui


スクリーンショット 2016-04-29 14.12.26.png

おお!表現しようのない爽快感!全てのCVEが見れる!

Ctrl押しながらhjklで移動もできる!!

※ただしkeybindが他のものとかぶっていない時に限る


対象サーバのyum updateを実行


  • 手動update

実際にupdateしてみて、どれだけ脆弱性が消えるのか確認してみた。


console

$ ssh ec2-user@52.199.160.38

$ sudo yum update


Vulsで再スキャン


  • scan


console

INFO[0000] Start scanning (config: /Users/matsunosadayuki/vuls/config.toml)

[Apr 29 14:22:49] INFO [localhost] Validating Config...
[Apr 29 14:22:49] INFO [localhost] Detecting the type of OS...
[Apr 29 14:22:50] INFO [localhost] (1/1) Successfully detected. 54-199-160-38: amazon 2016.03
[Apr 29 14:22:50] INFO [localhost] Scanning vulnerabilities...
[Apr 29 14:22:50] INFO [localhost] Check required packages for scanning...
[Apr 29 14:22:50] INFO [localhost] Scanning vulnerable OS packages...
[Apr 29 14:22:55] INFO [54-199-160-38:22] Fetching CVE details...
[Apr 29 14:22:55] INFO [54-199-160-38:22] Done
[Apr 29 14:22:55] INFO [localhost] Scanning vulnerable software specified in the CPE...
[Apr 29 14:22:55] INFO [localhost] Reporting...

54-199-160-38 (amazon 2016.03)
==============================
No unsecure packages.


おお!!No unsecure packages.ってなってる!

これは便利


  • docker

ちなみに、vulsにはdockerも用意されているので、セットアップが面倒な人は、dockerで試してみるのがいいと思います!

Vuls Dockerhub


console

$ docker run --rm -it \

-v ~/.ssh:/root/.ssh:ro \
-v $PWD:/vuls \
-v $PWD/vuls-log:/var/log/vuls \
-v /etc/localtime:/etc/localtime:ro \
vuls/vuls scan \
-config=./config.toml # path to config.toml in docker


さいごに

Vulsはシンプルでかつ、とても有用なツールです。

これを使うことで、どのサーバがどの脆弱性を持っていて、なおかつそれがどれほどのレベルのものなのかが把握できます。

一度動かしてみればそのシンプルさ、簡単さがわかると思います。

是非この機会に、脆弱性スキャンしてみませんか?


追記

Vulsが稼働中のDockerの脆弱性検知にも対応しました!

詳細は、以下の記事をご覧ください!

進化するVuls!稼働中のDockerコンテナの脆弱性を検知する


Changelog


  • 2016/07/01


    • scan時にgo-cve-dictionaryのデータをを引数に指定



  • 2016/07/19


    • GitHubスター数更新



  • 2016/10/09


    • GitHubスター数更新



  • 2017/02/01


    • 実行方法更新



  • 2017/06/21


    • GitHubスター数更新



  • 2018/11/20


    • 実行方法更新

    • GitHubスター数更新