IDCF テックブログ

IDCF テックブログ

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

Vulsの大型アップデート 更新と移行手法

こんにちは。IDCFクラウド ユーザー会の井上です。 VulsのSlackチームや、IDCFクラウドアンバサダープログラムMORIO Dojoにも参加しています。 今回もいつも通り、Vulsに関する情報です。

Vulsですが、2017年09月末に大幅アップデートがありました。変更部分が多々ありますので、実際に利用する観点からお話をさせて頂こうと思います。 また、Vulsアップデートに合わせ、Vulsコミュニティテンプレートも更新して頂きました。スクリプト等一部変更がありますので、こちらも一緒にお話しさせていただきます。

Vulsの大型アップデート

2017年09月末に、検知性能向上等を目的に大型アップデートが行われました。これによりデータの後方互換性が無くなりましたが、有用な機能が追加されました。

その為、アップデートに関しては計画を立てて実施する必要があります。

f:id:kkamiyakenshiroh:20171108093913p:plain

更新されたVuls及びVulsrepoの機能

今回のアップデートで、下記の機能が追加/更新されました。

  • スキャンモードの分割
    • Fastスキャン:root権限が不要で、インターネット接続が無い環境でもスキャン可能。低負荷
    • Deepスキャン:Changelogの差分を取得し、そこに含まれているCVE-IDを検知。後述のOVALも利用。スキャン対象サーバーに負荷がかかる場合あり
  • 再起動の必要性を検知
    • カーネルアップデート後の再起動をしていない場合に警告
  • 検知精度の向上
    • OVAL(Open vulnerability adn Assessment Language)を利用したスキャンを提供
      • ただし、OVAL情報を提供しているディストリビューションのみ
      • deepスキャンモードで利用可能
  • VulsRepoの更新
    • 上記機能を表示できるよう、機能更新
    • バイナリでの提供を開始
      • 今まではWEBサーバーやPHPの設定が一部必要だったが、WEBサーバー機能を含んだバイナリが利用可能に
      • これにより、既存WEBサーバーの設定変更が不要に

f:id:kkamiyakenshiroh:20171108093927p:plain

root権限が不要になったことで、(スキャンユーザに対する)セキュリティ的懸念が解消されました。例えばPCI/DSS環境や運用監視サービスなどでも導入が可能になるかもしれません。

また、OVALを利用する事ができるため、潜在的に内包している脆弱性を検知することができるようになりました。これは、CVEが発行されているがパッケージでは修正されていない脆弱性、を可視化することができます。

パッケージで解決できないならどうするの、という話もありますが…

アップデートに伴う検討事項

前述のように各種機能が追加されたのですが、それに伴い過去のスキャンデータとの互換性が無くなりました。

そのため、過去のデータを参照しつつ新しいバージョンを使うためには、移行計画を立てなければなりません。どの程度過去のデータを保管しておくかなどの「データ保存要件」をまとめておく必要があります。 下記に「データ保存要件」の例を2つ書いてみました。

1. 永遠に過去のデータを見たい
旧バージョンのVulsRepoが動く環境と、スキャン結果のJSONファイルを、永遠に保存しておく必要があります。データ保存してあればよい環境であれば、resultsディレクトリを圧縮保存で問題ないでしょう。 ただし、普通はそこまで保存しておく必要はないと思います。法令や何らかの規則で保存期間が決まっていない場合は、これを機に保存期間を決めてしまいましょう。 過去バージョンはメンテナンスされない為、これからのスキャンはVuls新バージョンの利用を推奨します。

2. ある程度の期間だけ、過去の情報は保存しておく
「3か月程度は残しておくが、以降は削除してよい」という運用であれば、並行期間分だけ旧バージョンのVulsRepoを稼働させればよいでしょう。

オススメのVulsアップデート方法

可能であれば、最新版のVulsを構築後、既存の古いVulsでのスキャンは停止し閲覧用にしてしまいましょう。

IDCFクラウドにはせっかくVulsコミュニティテンプレートがあるので、これを使って簡単に構築・移行をするとスムーズです。 なお、今回のアップデートでベースのOSがCentOS7になりました。CentOS6のサポートは2020年11月までとまだ先ですが、Vulsに限らずそろそろCentOS7に移行しておいた方がよいかもしれません。

最新版のVulsテンプレートを利用する

サーバーを作る

いつも通り、コミュニティテンプレートからデプロイしましょう。

IDCFクラウドコンソールにログインし、「仮想マシン作成」を押します。 その後ゾーン等を選択しつつ、「イメージ」の項目で「おすすめTemplate」→「COMMUNITY」→「コミュニティテンプレートの一覧へ」を選択します。
f:id:kkamiyakenshiroh:20171108093947j:plain

テンプレートのページが開くので、「Vuls / VulsRepo」を選択します。
f:id:kkamiyakenshiroh:20171108094002j:plain

選択後に「仮想マシン作成」を押し、ゾーンの選択とサービス同意のチェックボックスを確認し、「仮想マシン作成画面へ」を押します。
f:id:kkamiyakenshiroh:20171108094021j:plain

後は通常の仮想マシン作成と同じです。 IDCFクラウドを初めて使う方は、めちゃ楽ガイドに簡単な使い方がまとまっているので参考にしましょう。

各種更新を行う

VulsRepoがバイナリ化したことで、Vuls/VulsRepoのアップデートは、すべてVulsユーザで実行できるようになりました。

rootでログイン後に、su - vulsをし、各種アップデートの後にデータ更新をしましょう。

[root@hostname ~]# su - vuls

--Vuls/VulsRepo/go-cve-dictionary/goval-dictionaryの更新--
[vuls@hostname ~]$ cd scripts
[vuls@hostname scripts]$ update_vuls.sh
...vuls等のアップデートが終わるまで待ちます...
...初回は5分くらいかかるかもしれません...

--CVE-DBとOVAL-DBの情報を更新する--
[vuls@hostname scripts]$  cd /opt/vuls
[vuls@hostname vuls]$ go-cve-dictionary fetchnvd -last2y
...
[vuls@hostname vuls]$ go-cve-dictionary fetchjvn -last2y
...
[vuls@hostname vuls]$ goval-dictionary fetch-redhat 7

スキャンを行う

まずは、Vulsテンプレートでデフォルトで入っている「自分自身のスキャン」を行いましょう。手順通りであればOSのアップデートをしていないので、大量に検知できるでしょう。

[vuls@hostname vuls]$ pwd
[vuls@hostname vuls]$ vuls scan -deep
...
[vuls@hostname vuls]$ vuls report -to-localfile -format-json
...
[vuls@hostname vuls]$ vuls tui
...[Ctrl+C]で終了させます...
[vuls@hostname vuls]$

また、Vulsサーバーの5111ポートへアクセスすることで、WEBブラウザからも確認可能です。 以前のVulsRepoはhttpdなどのWEBサーバーを調整する必要がありましたが、今回からはバイナリでの提供があります。対象バイナリを実行すると、デフォルトとでは5111ポートで待ち受けます。またアクセス制限も実装されているので、以前のようなBASIC認証設定は不要です。

  • http://[VulsサーバーのIP]:51111
    • 上手く稼働しない場合は、サービスの稼働状況を確認
      • 状態を見る # systemctl status vulsrepo
      • 再起動する # systemctl restart vulsrepo
    • HTTPS及びユーザ制限をしたい場合は、WEBサーバーを立ててリバースプロキシで5111に流す必要がありそう

既存Vulsサーバーからの移行を行う

既に以前のVulsテンプレートで脆弱性検査をしていた場合、新Vulsテンプレートサーバーに監視を移行する必要があると思います。 監視対象(スキャンされる側)でIP制限等を行っていない場合は、下記の手順で移行できると思います。

  • 既存ConfigやSSH鍵の複製
    • 既存Vulsで利用していた設定やSSH鍵を、新Vulsサーバーに複製
      • /opt/vuls/config.toml
      • /home/vuls/.ssh/id_rsa/ (config.tomlの例に従っていた場合)
  • 新Vulsサーバーでの稼働テスト
    • 新Vulsサーバーで、移行したconfig.tomlでのスキャンを実施
      • スキャンが上手く行われない場合は、設定やSSH鍵のアクセス権、ネットワーク経路上の問題、などの洗い出し
      • テストついでに、cpeNamesでの検知を入れている場合は、現状のCPE名を確認
  • 新Vulsサーバーでの定期スキャン設定
    • 旧Vulsサーバーのスキャンタイミングと被らないように、定期スキャンをcron等に設定
      • 平行稼働させないのであれば、旧サーバーのcron設定等を移植
      • go-cve-dictionary等のデータ類の定期fetchも忘れずに設定

終わりに

Vulsはこれからも、順次進化していきます。場合によっては(それが必要であれば)今回のような後方互換性のない更新も行われます。 アップデート等の情報は、Slackチーム 若しくは vuls_ja でアナウンスされます。安定運用をする場合は、当該の情報源を見る必要があります。

ただし、IDCFクラウドユーザーの場合は、コミュニティテンプレートで最新版を利用可能です。 Vulsのバージョンアップがある場合は、コミュニティテンプレートをIDCFのエバンジェリストが更新します。
今回のような大幅なバージョンアップ時は、コミュニティテンプレートでサーバーを作り直して移行する方法をお勧めします。 既存Vulsテンプレートサーバーと平行稼働をさせることも可能なので、アップデートよりは安全かと思います。

今後、アップデートや有用な情報が集まれば、またVulsの記事を書いていきます。 それでは、またお会いしましょう。

Copyright © IDC Frontier Inc.