こんにちは。株式会社アールワークスの井上です。
前回に引き続き、コミュニティテンプレートVulsについて説明していこうと思います。
今回は、先日更新されたコミュニティテンプレートVulsについて、下記内容を共有したいと思います。
- コミュニティテンプレート更新内容の確認
- Vulsミートアップ「Vuls祭り #2」
過去の記事はこちら↓
最近話題のセキュリティスキャナ Vulsと、Vulsのmeetup Vuls祭り Vol.1のご紹介
コミュニティテンプレート Vuls の利用とTips
コミュニティテンプレート更新内容の確認
2017/04/01、IDCFクラウドの中の人にテンプレートのアップデートをしていただきました。ありがとうございます! 主な更新点は以下の通りです。
- テンプレートのアップデート
- Vuls および Vulsrepo を、2017/04/01時点の最新のものとしました
- Vulsのアップデートサポートスクリプトを用意
- 本家の機能ではないのですが、アップデートをスクリプト一つで実行できるようにしました
- sudoersの厳格化
- sudoersでのvulsユーザ権限を、より厳しい形にしました
- デフォルトconfig.tomlの変更
- VulsのREADMEの記載が、自身をローカルスキャンする設定になったため、デフォルトのconfig.tomlを変更しました
- 上記に合わせたREADMEの更新
- vuls scanおよびvuls report付近の記載を一部変更しました
これらについて細かく見てみます。
アップデート
Vulsのバージョンは2017/04/01時点の最新版にしていますが、日々バージョンアップされているため、必要に応じて更新が必要です。
- 前回のコミュニティテンプレートリリース後、Vulsに大幅なバージョンアップがあったため、テンプレートも更新しています
- 後述のアップデートスクリプトを用意しました。ある程度動作確認が取れているバージョンで更新しています
アップデートサポートスクリプトを用意
Vulsミートアップ「Vuls祭り#2」で、1コマンドでアップデートしたい、という話もあったため、取り急ぎ用意しました(公式の手順をシェルスクリプト化しているだけです)。
Vulsのアップデート
/home/vuls/scripts/update_vuls.sh として、vulsのアップデートスクリプトを用意しました。 vulsユーザで実行してください。
[root@HOSTNAME ~]# su - vuls [vuls@HOSTNAME ~]$ /home/vuls/scripts/update_vuls.sh Update vuls remote: Counting objects: 70, done. remote: Total 70 (delta 42), reused 42 (delta 42), pack-reused 28 Unpacking objects: 100% (70/70), done. From https://github.com/future-architect/vuls * [new branch] add-testcase -> origin/add-testcase * [new branch] hostkey -> origin/hostkey d4bec0d..f878e22 master -> origin/master * [new branch] nvd-url -> origin/nvd-url * [new branch] stty-localexec -> origin/stty-localexec * [new branch] update-deps -> origin/update-deps ...Update start. ...Update finished. Update go-cve-dictionary remote: Counting objects: 28, done. remote: Compressing objects: 100% (28/28), done. remote: Total 28 (delta 8), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (28/28), done. From https://github.com/kotakanbe/go-cve-dictionary * [new branch] dep -> origin/dep 683256b..103ddbd makefile -> origin/makefile bbfdd41..4d5c2be master -> origin/master 82087b2..bb95122 redhat-cvedates -> origin/redhat-cvedates * [new branch] refactoring -> origin/refactoring ...Update start. ...Update finished. [vuls@HOSTNAME ~]$
- 状況によりますが、数分かかる場合があります。スクリプト実行後、そのままでお待ちください
- 利用中のVulsバイナリを保存したい場合は、/home/vuls/go/bin/vuls をリネームして保存してください
sudoersの厳格化
セキュリティを考える場合、必要なもの(人やファイル)に必要な権限の実をつけるという"need to knowの原則"に従う必要があります。 Vuls実行ユーザ"vuls"にも同様な制限を実施しました。
[root@HOSTNAME ~]# cat /etc/sudoers.d/vuls vuls ALL=(ALL) NOPASSWD:/usr/bin/yum --changelog --assumeno update * vuls ALL=(ALL) NOPASSWD:/usr/bin/yum --version vuls ALL=(ALL) NOPASSWD:/usr/bin/yum --color=never check-update Defaults:vuls env_keep="http_proxy https_proxy HTTP_PROXY HTTPS_PROXY" [root@HOSTNAME ~]#
Vulsに限りませんが、アプリケーション専用ユーザ等を用意する場合でセキュリティを考慮するときは、以下の点を検討してください。
- ファイルのOwnerになる必要があるのか
- 読み込みと実行だけでよければ、グループとしてアクセス権を付与することをお勧めします
- 無制限の権限を付与しない
- sudo -s をさせない、必要なコマンドのみ権限を付与する
- vulsユーザへは、yumのオプション付きで権限を与えています
デフォルトconfig.tomlの変更
最初にコミュニティテンプレートVulsがリリースされた後、Vulsでローカルスキャンが実装されました。それに伴い、自分自身へのスキャンは「ローカルスキャンモード」を利用するようにREADMEの記載が変わりました。
ローカルスキャンは、SSH接続不要なモードです。
- 今までの、SSH接続をして sudo yum ..でスキャンをする方式を、「リモートスキャンモード」と言います
- SSH接続をせず、直接 sudo yum ..のようにスキャンをする方式を、「ローカルスキャン」と言います
- Vuls自体はバイナリとして配布が可能であり、SSH接続も不要であるため、監視等で利用しやすくなります
- 後述のVuls祭り#2で、Mackerelとの連携についても話題になりました(「SaaS/OSSを進化させる オーフ゜ン・エコシステムについて Mackerel×Vulsの例」)
- 概要は、上記同様に「Vuls ローカルスキャンモードの活用方法」を参照してください
コンフィグの記載方法の違いは、以下の通りです。
- リモートスキャン(今までの方法)
- host, port, user, keyPath を指定
- SSH接続をする為に必要な情報
- host, port, user, keyPath を指定
- ローカルスキャン
- host および port を指定
- hostは、localhost 若しくは 127.0.0.1
- portは、local
- 上記の2つの指定がされていた場合、ローカルスキャンとなる
- host および port を指定
Vulsサーバ自分自身はローカルスキャン、自分以外のサーバはリモートスキャン、とするのが良いと思われます。
上記に合わせたREADMEの更新
Vulsのレポートオプション等について、簡単に記載しました。
おおよそ以下のようなフローで利用することになります。
- スキャン
vuls scan
コマンドで、スキャンをします- 必要に応じて、コンフィグファイルの指定
-config
や、デバッグ-debug
などのオプションを指定してください
- レポート
- まずはレポートの前処理として、以下を実行します
vuls report -to-localfile -format-json -lang ja
- vulsのスキャン結果は resultsディレクトリにjsonファイルとして保存されます。この段階ではCVEの詳細等は含まれていません
- まずは上記コマンドを実行することで、go-cve-dictionaryを使ってjsonの情報を更新します
- 次に、必要な通知処理を実施します
- どこに出力するかを、
-to-xxx
オプションで指定します-to-email
,-to-slack
,-to-localfile
などです-to-localfile
の出力先は、reportディレクトリ以下になります
- 出力形式を、
-format-xxx
オプションで指定します-format-json
,-format-xml
,format-short-text
などです
- どこに出力するかを、
- まずはレポートの前処理として、以下を実行します
以上で、コミュニティテンプレートの更新内容と、簡単なVulsのスキャンについて説明しました。 次は、Vuls祭り#2 についてレポートします。
Vulsミートアップ「Vuls祭り #2」
2017/03/27に Vuls祭り#2 が行われました。
- コミュニティテンプレートVulsを作成頂いた、IDCFクラウドの中の人にもお話しいただきました
Vulsを利用した脆弱性対応や、サーバレスでVulsを使う、mackerelとの連携、などの話がありました。 セッションの資料について、一部アップロードされているので、興味のある方はご覧ください。
次回は夏ぐらいに実施されると思うので、セキュリティや運用に興味のある方はご参加ください。
最後に
今回は、テンプレート更新部分について記載しました。次回からは、コミュニティテンプレートを利用した監視の構築について書いていければと思います。
Vulsを使って、セキュリティ対応や運用の負荷を下げられれるといいですね。
尚、弊社 株式会社アールワークスでは、マネージド運用サービスを行っています。Vulsを使った運用も可能ですので、運用にお困りの場合はご相談ください。