Vuls運用トライアル始めました

こんにちは。何でも屋をやっています山田です。

ここ数年、脆弱性に関する注意喚起が多く、セキュリティ対策を重点施策の一つとしているKDDIグループであるmedibaでは、日々対応に追われています。 medibaが管理するシステムはかなり多く、管理が煩雑になっているためVulsを使って品質管理グループの管理業務が効率化出来るかトライアルを始めましたのでその紹介を致します。 なお、トライアル中のため、開発したものはプロトタイプであることをご了承下さい。

image

Vulsとは

NVD(National Vulnerability Database)に登録されている脆弱性情報とサーバにインストールされているソフトウェアのバージョンを照合し、各サーバが該当している脆弱性を検知するツールです。

概要、インストール手順や使い方は、Readmeに詳しく書かれているため割愛します。Qiitaにも詳しく書かれている記事がありますので合わせてご確認下さい。

Vulsは運用に乗るか?

medibaが持つサービスは大小含めてそれなりの数になりますので、トライアルでは15システム程ピックアップして進めます。 なお、scanは各システムのテスト環境に対して行っています。

サーバの状態を一元管理出来るのは便利で少数チームだとかなり有効なツールですが、システムが多いとtuiだけでは運用が面倒なので、拡張をしつつ運用トライアルを進めることにしました。

実現したいこと

slack経由でいつでも誰でも各サーバの状態を確認できる

把握したい情報は以下の4つです。

  • 対象となっているサーバがわかる
  • 指定したサーバが抱えている脆弱性情報がわかる
  • 指定した脆弱性情報を抱えているサーバがわかる
  • 指定した脆弱性情報の詳細がわかる

上記を実現するため、機能を拡張してみました。

image
  • vulca
    • vuls.sqlite3の情報を取得しjsonで返すAPI
    • GO言語でVulsの機能を使いつつ実装
    • 詳細はこちら
  • ruboty-vulca
    • slack経由でvulcaを実行
    • 詳細はこちら

トライアル状況

拡張機能を適用するとこんな感じでslack経由でサーバの状態を確認出来るようになります。このイメージで運用に乗るかを試すためのプロトタイプなのでjsonをそのまま表示しているだけに留めています。

image

トライアルでの課題

もう少し検証する必要がありますが、今見えている課題は以下です。 トライアルは引き続き行ってブラッシュアップしていきたいと思います。

  • 機能としてはとりあえず大丈夫そうだが、slackへjsonをそのままレスポンスしているだけなので見にくい(Slack APIを使って作り込む)
  • 対象となるパッケージが多かったためどこからアップデートしていくか悩む
  • 対象システムが今後も増えていく前提だと、vuls scan結果をカテゴリ毎に分けて保存した方がよさそう

補足:デーモン管理について

vulcaとrubotyはデーモンプロセスとして常駐させる必要があり、今回はSupervisordを利用しました。

設定すればブラウザからもプロセスの状態が確認出来るため便利です。

image

追記

今回実装したVulcaはscan結果が保存されているvuls.sqlite3を参照してましたが、vuls.sqlite3はrevokeする計画のようで、本トライアルの内容はVulsの変更に合わせて見直していきます。

また、vulsrepoというビューワーがあり、これでよさそうな気もしてきましたが、対象サーバ、検知された数が多いと工夫が必要そうです。

引き続きトライアルしていきます。