7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VulsAdvent Calendar 2016

Day 22

VulsをCloud Shellで使ってみた

Posted at

Vuls とは

Vulsは脆弱性検知ツールです。
結構前から知っていたのですが使ったことはなかったので この機会に使ってみました。
自分のローカルマシンでやっても良かったのですが 僕は普段GCPを使っているのでCloud Shellで試してみました。

Cloud Shell とは

GCPについてるサービスでLinuxのインスタンスを無料で使えます。
無料で使えるので接続がないとシャットダウンさてたり外に公開できるポートなど限られていますが作業用のマシンとしては何も困らないので大丈夫です。
またVulsをビルドするために必要なGoなども標準でセットアップされています。

Cloud Shellは右上のアイコンをクリックすることで接続できます。

スクリーンショット 2016-12-21 2.21.16.png

Vuls のインストール

Cloud Shellにアクセスしたらまずは以下のコマンドでGOPATHを設定しておきましょう。

$ echo "export GOPATH=$HOME" >> ~/.bashrc
$ source ~/.bashrc

まずgo-cve-dictionaryをインストールしてNVDから脆弱性データベースを取得します。

現在のgo-cve-dictionaryはgo getだけではインストールできなかったのでglideをインストールします。

$ go get -v github.com/Masterminds/glide
$ mkdir -p src/github.com/kotakanbe && cd src/github.com/kotakanbe
$ git clone https://github.com/kotakanbe/go-cve-dictionary.git && cd go-cve-dictionary
$ glide install && go get -v .

次にvuls本体のインストールをします。

$ mkdir -p ~/src/github.com/future-architect && cd ~/src/github.com/future-architect
$ git clone https://github.com/future-architect/vuls.git && vuls
$ glide install && go get -v .

インストールができたらデータベースを取得します。
作業はvulsディレクトリを作ってその下で行います。

$ mdkir ~/vuls && cd ~/vuls
$ for i in {2002..2016}; do go-cve-dictionary fetchnvd -years $i; done

数分掛かるのでコーヒーでも飲みながら待ちましょう☕
取得ができると以下の3つのファイルができていると思います。

$ ls
cve.sqlite3  cve.sqlite3-shm  cve.sqlite3-wal

スキャン

設定ファイルを書く前にローカルにsshできるようにしておきます。

$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

sshができるか確認しておきましょう。
僕の環境はユーザー名がk2_wankoですので 試す時は自分のユーザー名に読み替えてください。

$ ssh k2_wanko@localhost
$ exit

次に設定ファイルを書きます。
vuls/ディレクトリにconfig.tomlを作成します。

config.toml
[servers]
[servers.localhost]
host    = "localhost"
port    = "22"
user    = "k2_wanko"
keyPath = "/home/k2_wanko/.ssh/id_rsa"

作成したら以下のコマンドでテストします。

$ vuls configtest

設定ファイルに問題がなければ以下のコマンドでスキャンの準備をします。

$ vuls prepare

そして以下のコマンドでスキャンができます。

$ vuls scan -cve-dictionary-dbpath=$PWD/cve.sqlite3 -report-json
INFO[0000] Start scanning                               
INFO[0000] config: /home/k2_wanko/vuls/config.toml      
INFO[0000] cve-dictionary: /home/k2_wanko/vuls/cve.sqlite3 
[Dec 21 03:29:12]  INFO [localhost] Validating Config...
[Dec 21 03:29:12]  INFO [localhost] Detecting Server/Contianer OS... 
[Dec 21 03:29:12]  INFO [localhost] Detecting OS of servers... 
[Dec 21 03:29:12]  INFO [localhost] (1/1) Detected: localhost: debian 8.6
[Dec 21 03:29:12]  INFO [localhost] Detecting OS of containers... 
[Dec 21 03:29:12]  INFO [localhost] Checking sudo configuration... 
[Dec 21 03:29:17]  INFO [localhost] sudo ... OK
[Dec 21 03:29:17]  INFO [localhost] Detecting Platforms... 
[Dec 21 03:29:18]  INFO [localhost] (1/1) localhost is running on other
[Dec 21 03:29:18]  INFO [localhost] Scanning vulnerabilities... 
[Dec 21 03:29:18]  INFO [localhost] Check required packages for scanning...
[Dec 21 03:29:18]  INFO [localhost] Open boltDB: /home/k2_wanko/vuls/cache.db
[Dec 21 03:29:18]  INFO [localhost] Scanning vulnerable OS packages...
[Dec 21 03:29:18]  INFO [localhost] apt-get update...
[Dec 21 03:29:38]  INFO [localhost] Fetching CVE details...
[Dec 21 03:29:38]  INFO [localhost] Done
[Dec 21 03:29:38]  INFO [localhost] Scanning vulnerable software specified in the CPE...
[Dec 21 03:29:38]  INFO [localhost] Reporting...
localhost (debian8.6)
=====================
No unsecure packages.

というわけで Cloud Shell自体には脆弱性のあるパッケージは見つかりませんでした。

注意点

Cloud Shellは長いこと接続しないとデータが消されます。
消される前に警告メールが来るのでその時にアクセスすれば大丈夫です。

まとめ

ほぼ公式ドキュメントをなぞるだけになってしまったのですが
試してみて色々気づけたこともあるので卒業が確定したらコードを追ってみたいと思います。

とりあえずGCPで実用的に使うにはCompute Engineをスキャンでしょうか。
あとはKubernetesもスキャンしてみるとかも面白そうだなと思いました。

7
3
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
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?