この記事は、Vuls Advent Calendar 2016の3日目の記事です。
はじめに
システムセキュリティ監査や社内CSIRT体制を構築している、またマネージドサービスとして顧客のシステムを預かっている場合、システムに存在する脆弱性のチェック状況について定期的に報告する場合があります。
そのような場合データの閲覧者は社外もしくは自部門外の組織となる場合があり、運用しているシステム内に構築したVulsの結果データ閲覧の仕組みへのアクセスが難しいことがあります。
そのため今回はVulsが出力したJSONデータをCSVに変換し、データの受け渡しがしやすく導入が容易なEXCELでレポートを作成してみます。
Vuls JSON→CSV化
「vuls scan」のあと、「vuls report -format-json」を実行するとjson形式でログを出力します。このデータを元にCSVファイルを作成するツールを作成しました。
GitHub:https://github.com/usiusi360/vuls-log-converter
インストール
事前にnode.jsとnpmをインストールしておいてください。
$ npm i -g vuls-log-converter
尚、node.jsはEPELにあるものはバージョンが古いので動きません。公式にあるLTS版を使ってください。
変換実行
「-i」でVulsが出力したJSONファイルが入っているフォルダを指定し、「-o」で出力先のファイルを指定します。入力元にフォルダを指定すると中に入っているJSONファイルを全て変換し、一つのCSVファイルに出力します。
$ vulslogconv -t csv -i /opt/vuls/results/current/ -o ./output.csv
$ cat ./output.csv
"ScannedAt","ServerName","Family","Release","Container_Name","Platform_Name","CveID","Packages_Name","NVD_Score","NVD_Severity","NVD_AcessVector","NVD_AccessComplexity","NVD_Authentication","NVD_ConfidentialityImpact","NVD_IntegrityImpact","NVD_AvailabilityImpact","NVD_CweID","JVN_Score","JVN_Severity","JVN_AcessVector","JVN_AccessComplexity","JVN_Authentication","JVN_ConfidentialityImpact","JVN_IntegrityImpact","JVN_AvailabilityImpact","JVN_Title","JVN_ID"
"2016/10/29 15:32:56","localhost","centos","7.0.1406","centos7.0.1406","other","CVE-2014-7169","bash",10,"High",10,"LOW","NONE","COMPLETE","COMPLETE","COMPLETE","CWE-78",10,"High","NETWORK","LOW","NONE","COMPLETE","COMPLETE","COMPLETE","GNU bash におけるファイルに書き込まれる脆弱性","JVNDB-2014-004399"
"2016/10/29 15:32:56","localhost","centos","7.0.1406","centos7.0.1406","other","CVE-2015-0235","glib2",10,"High",10,"LOW","NONE","COMPLETE","COMPLETE","COMPLETE","CWE-119",10,"High","NETWORK","LOW","NONE","COMPLETE","COMPLETE","COMPLETE","glibc ライブラリにバッファオーバーフローの脆弱性","JVNDB-2015-001251"
ExcelでCSV取り込み→レポート作成
変換が完了したCSVファイルをEXCELに取り込んでレポートを作成します。ピボットテーブルやグラフを使って分かりやすいように整形できます。データ取り込み用のシートのデータを入れ替えてピボットテーブルやグラフの更新を行うだけで、毎月作り変えられるようにしておくと良いでしょう。
さいごに
今回は比較的システム規模が小さい環境を想定して、EXCELでレポートを作成しました。次回はある程度データの多い環境を想定して、ElasticSearchを使ってダッシュボードを作成してみたいと思います。