Help us understand the problem. What is going on with this article?

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

はじめに

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

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

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

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

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

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

Vulsとは

VULS-logo.png

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

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

Vulsはgolang製の脆弱性検知ツールです。
VulsはVULnerability Scannerの略です。
「バルス!」って聞くとラピュタを思い出すのは私だけではないはず。

vulsのいいところ

  • Golangで作られているので、バイナリ化すればどのサーバにも配布できる
  • 脆弱性検知結果をslackやメールで送信できる。なおTUI(Text User Interface)で見ることも可能
  • エージェントレス。設定ファイル1つというシンプルな構成
  • スターが6988付いてる(2019/11/28時点)
  • 開発者が日本の人
  • 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ドキュメントへ。

実際に使ってみる

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

実行環境情報

  • 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スター数更新
  • 2019/11/28
    • GitHubスター数更新
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした