Vulsを使った脆弱性チェック運用 [環境構築編]【セキュリティ対策】

Vuls, セキュリティ

この記事は最終更新日から1年以上が経過しています。

Vulsを使った脆弱性チェック運用はじめるよ

という事で、背景は前の記事で書いた通りですので、実際に環境を構築してみます。
複数アカウントにまたがる環境、且つIPアドレスが結構変動する環境では通常通りのconfigではすんなり動いてくれないため、力業で解決しているところもあります。

当面はIPアドレスが変動してもconfigに反映出来る仕組み作りです。

では、実際に今どんな環境で動いているか見てみましょう。
基本は、公式の内容通りで環境構築をしていますが、レコチョク内での運用を加味しています。


目的

  • 稼働中サーバのOSパッケージ脆弱性を可視化し、特に対応が必要なものをあぶりだす。

環境構成

環境Directory
/home/vulsuser/
※()内はPermission、記載が無い場合は上位継承

  • .ssh (700) [各環境の公開鍵置き場]
    • accout-xxx (700) [ アカウント名毎にDirectory ]
      • xxx_rsa (600) [ アカウント名毎の秘密鍵 ]
      • xxx_rsa.pub (644) [ アカウント名毎の公開鍵 ]
    • known_hosts (644) [ vulsuserのknown_hosts ]
    • config (644) [ 確認無しでknow_hostsを上書きするために設定 ]
  • go (775) [ golangの各種sourceやpackage置き場($GOPATHはここ) ]
    • bin
    • pkg
    • src
      • github.com
        • future-architect
          • vuls [ vulsのgit clone ]
      • golang
      • kotakanbe
        • go-cve-dictionary [ go-cve-dictionaryのgit clone ]
        • goval-dictionary [ goval-dictionaryのgit clone ]
  • results (700) [ scan結果確認Directory ]
    • yyyy-mm-ddTxx:xx:xx+xx:xx [ vuls scan結果(実行時のタイムスタンプがDirectory名) ]
    • current (777) [ 最新のscan結果へのsymbolic link ]
  • src (775) [ DLしたFile置き場 ]

  • vuls_config(700)
    • config.toml (600) [ vuls scan用config ]
  • vulsrepo (775) [ VulsRepo一式 ]
    • .git
    • dist
    • gallery
    • plugins
    • server
      • vulsrepo-config.toml (664) [ VulsRepo用config ]
      • vulsrepo-server [ VulsRepo本体 ]
    • index.html (664) [ VulsRepo画面 ]
  • cve.sqlite3 (644) [ CVE情報データベース ]
  • cve.sqlite3-shm (644) [ CVE情報データベース ]
  • cve.sqlite3-wal (644) [ CVE情報データベース ]
  • oval.sqlite3 (644) [ OVAL情報データベース ]
  • fetchdata.sh (700) [ cron用shell ]
  • scan.sh (700) [ cron用shell ]
  • slack_notify.sh (700) [ scan結果Slack通知用shell ]
  • target_host_list (664) [ scan対象ホストリスト(scan.sh実行結果) ]

環境構築手順

1. 事前準備

  • vuls実行ユーザ作成 [ rootで実行 ]

  • 必要パッケージのインストール [ rootで実行 ]

2. Vulsインストール

  • go-cve-dictionaryインストール [ vulsuserで実行 ]

  • NVDとJVNのデータをダウンロード
    • これが結構時間かかる(10min程度) この初回実行以降は差分ダウンロードとなるため、時間は短くなる

  • goval-dictionaryインストール [ vulsuserで実行 ]

    • OVALデータをダウンロード

  • Vuls本体インストール [ vulsuserで実行 ]

  • Vuls config設定 [ vulsuserで実行 ]

3. VulsRepoインストール

  • VulsRepo本体インストール [ vulsuserで実行 ]

  • VulsRepo config設定 [ vulsuserで実行 ]

  • VulsRepo起動 [ vulsuserで実行 ]

最新バージョンではinit.dやsystemctl利用できるようになりましたね。

脆弱性スキャンの実行方法

  • 前提条件
    • config設定は完了しているものとする
    • コマンド実行はvulsuserで行うものとする
    • 作業ディレクトリは、$HOMEとする
    • VulsRepoは起動中とする
  • コンフィグテスト

    • エラー含めた詳細は、/var/log/vuls/配下にホスト名毎のログが出力されるため、内容を確認出来る
  • スキャンの実行

    • エラーが出る場合はログを確認する事
    • 現在configtestでエラーとなった対象を含むスキャンを実行すると色々コケるため、スキャン対象を明示的に指定して回避する

  • スキャン結果の確認
    • ターミナル上で確認する
      • vuls reportコマンド実行時にエラーとなる場合は、scanで何らかのエラーが発生している可能性があるので、scanから再実行となる

    • VulsRepoで確認する

cron

  • 環境

    • 毎週月曜日08:00に、脆弱性データベースの更新shellを実行
    • 毎週月曜日09:00に、脆弱性スキャンshellを実行
    • Slackへの結果通知が本番環境と被ると遅延するため、時間調整を実施 (結果通知用shellを実行)
  • 実行shell
    • fetchdata.sh
      • NVDデータベースを、直近2年分の更新
      • JVDデータベースを、差分更新
      • OVALデータを更新 (RedHat5,6,7/Ubuntu12,14,16/Debian7,8,9,10)
    • scan.sh
      • reportエラー抑止のため、configtestを利用してscan対象ホストの抽出
      • 抽出した対象ホストへscanの実行
      • VulsRepo用にscan結果をJSONフォーマットへ変換
    • slack_notify.sh
      • スキャン後すぐにSlackへ結果を通知すると、データが大量すぎてロストする場合があるため、Slack連携処理を実行
      • ホスト毎にCVSS Score 7以上の検出結果を日本語で出力

Vulsアップデート

細かいバグフィクスやバージョンアップは行われているので、適度に確認をする事
※大型アップデート(v0.3.0 -> v0.4.0みたいな)の場合は、仕様が変わっている可能性があるため、公式を確認する事 Vuls GitHub

  • go-cve-dictionaryのバージョンアップ [ vulsuserで実行 ]

  • goval-dictionaryのバージョンアップ [ vulsuserで実行 ]

  • vulsのバージョンアップ [ vulsuserで実行 ]

AWSアカウント追加時の対応

レコチョクでは、100弱のAWSアカウントを運用しているため、AWSアカウント毎にグルーピングし、公開鍵運用を行う事にしました
という事で、AWSアカウントを追加した場合は、vulsuser接続用の公開鍵を作成し配布

  • 公開鍵の作成 [ vulsuserで実行 ]

    • 秘密鍵のpermissionは600、公開鍵のpermissionは644になっているか確認しておく事
  • 公開鍵の配布とスキャン対象ホスト側設定追加
    作成した公開鍵をスキャン対象ホストに以下を設定

    • スキャン対象ホスト側設定

    スキャン対象ホストで設定が完了したら、vulshostサーバ側から疎通確認を行う

    • vulshostサーバ側疎通確認

接続試行時にパスワードが求められる場合は、対象ホスト側のファイルやディレクトリのpermission、所有者(rootになっていないか)、sshd_configの設定などを確認しておく事

スキャン対象ホストの追加

  • スキャン対象のホストを追加する場合は、config.tomlに設定を追加する


以上が、脆弱性スキャン実行環境です。
問題無ければ、毎週月曜日に複数アカウントにまたがった数百のホストをスキャンし、結果をVulsRepo上で俯瞰して確認する事ができます。
バージョンアップやら運用改善で変わっていく個所もありますが、参考にして頂ければと。

次回はconfig設定の記述内容を紹介します。

この記事を書いた人

野村昌男
野村昌男
ネットワークとセキュリティメインでやっています。
L4/L3以下が好きです。