IDCF テックブログ

IDCF テックブログ

クラウド・データセンターを提供するIDCフロンティアの公式テックブログ

コミュニティテンプレートVulsのアップデートについて

こんにちは。株式会社アールワークスの井上です。

前回に引き続き、コミュニティテンプレートVulsについて説明していこうと思います。
f:id:kkamiyakenshiroh:20170412192907p:plain

今回は、先日更新されたコミュニティテンプレート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接続不要なモードです。

コンフィグの記載方法の違いは、以下の通りです。

  • リモートスキャン(今までの方法)
    • host, port, user, keyPath を指定
      • SSH接続をする為に必要な情報
  • ローカルスキャン
    • host および port を指定
      • hostは、localhost 若しくは 127.0.0.1
      • portは、local
      • 上記の2つの指定がされていた場合、ローカルスキャンとなる

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を使った運用も可能ですので、運用にお困りの場合はご相談ください。

Copyright © IDC Frontier Inc.