1. koki_cheese

    Posted

    koki_cheese
Changes in title
+VulsをCloud Shellで使ってみた
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,147 @@
+# Vuls とは
+Vulsは脆弱性検知ツールです。
+結構前から知っていたのですが使ったことはなかったので この機会に使ってみました。
+自分のローカルマシンでやっても良かったのですが 僕は普段GCPを使っているのでCloud Shellで試してみました。
+
+# Cloud Shell とは
+GCPについてるサービスでLinuxのインスタンスを無料で使えます。
+無料で使えるので接続がないとシャットダウンさてたり外に公開できるポートなど限られていますが作業用のマシンとしては何も困らないので大丈夫です。
+またVulsをビルドするために必要なGoなども標準でセットアップされています。
+
+Cloud Shellは右上のアイコンをクリックすることで接続できます。
+
+<img width="688" alt="スクリーンショット 2016-12-21 2.21.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/15818/72954627-1273-12da-de31-62ebc534deda.png">
+
+
+# Vuls のインストール
+
+Cloud Shellにアクセスしたらまずは以下のコマンドでGOPATHを設定しておきましょう。
+
+```bash
+$ echo "export GOPATH=$HOME" >> ~/.bashrc
+$ source ~/.bashrc
+```
+
+まずgo-cve-dictionaryをインストールしてNVDから脆弱性データベースを取得します。
+
+現在のgo-cve-dictionaryはgo getだけではインストールできなかったのでglideをインストールします。
+
+```bash
+$ 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本体のインストールをします。
+
+```bash
+$ 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`ディレクトリを作ってその下で行います。
+
+```bash
+$ mdkir ~/vuls && cd ~/vuls
+$ for i in {2002..2016}; do go-cve-dictionary fetchnvd -years $i; done
+```
+
+数分掛かるのでコーヒーでも飲みながら待ちましょう☕
+取得ができると以下の3つのファイルができていると思います。
+
+```bash
+$ ls
+cve.sqlite3 cve.sqlite3-shm cve.sqlite3-wal
+```
+
+# スキャン
+
+設定ファイルを書く前にローカルにsshできるようにしておきます。
+
+```bash
+$ ssh-keygen -t rsa
+$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
+$ chmod 600 ~/.ssh/authorized_keys
+```
+
+sshができるか確認しておきましょう。
+僕の環境はユーザー名が`k2_wanko`ですので 試す時は自分のユーザー名に読み替えてください。
+
+```bash
+$ ssh k2_wanko@localhost
+$ exit
+```
+
+次に設定ファイルを書きます。
+`vuls/`ディレクトリに`config.toml`を作成します。
+
+```toml:config.toml
+[servers]
+[servers.localhost]
+host = "localhost"
+port = "22"
+user = "k2_wanko"
+keyPath = "/home/k2_wanko/.ssh/id_rsa"
+```
+
+作成したら以下のコマンドでテストします。
+
+```bash
+$ vuls configtest
+```
+
+設定ファイルに問題がなければ以下のコマンドでスキャンの準備をします。
+
+```bash
+$ vuls prepare
+```
+
+そして以下のコマンドでスキャンができます。
+
+```bash
+$ 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もスキャンしてみるとかも面白そうだなと思いました。