こんにちは、FutureVulsチームの和田です。
FutureVulsでは、Windows環境のセキュリティスキャンに多様なアプローチを提供しています。これらの方法については、「Help > スキャン方法の選択肢と特徴 > Windowsをスキャン」に詳細情報がありますので、ぜひ参照してください。
特に、インターネットやWSUSサーバにアクセスできない環境でWindowsの脆弱性を検出する方法として、「Cabファイルを用いたスキャン」(以下、Cabスキャン)があります。これまで、Cabスキャンを利用する際は、各Windowsに個別にCabファイルを配置する必要がありました。
今回の記事では、脆弱性管理の効率化を一歩進める新しい方法をご紹介します。具体的には、Cabファイルを一か所に集約し、各スキャン対象のWindowにSSHを介したリモートスキャンを行うアプローチです。この手法により、複数のWindowsそれぞれにCabを配置することなく効率的にスキャンすることが可能になります。
なお、今回紹介する機能はv0.24.9以上のLinuxスキャナのみ対応しています。
Cabファイルは、Microsoftが提供するWindows Updateのデータを圧縮した形式です。具体的には、wsusscn2.cabというファイルにWindows Updateの履歴がまとめられており、FutureVulsのCabスキャンのスキャン処理ではこのファイルを使用して、Windowsの脆弱性を検知します。wsusscn2.cabファイルは、「Microsoftの公式ダウンロードセンター」から入手可能です。Cabファイルを使用することで、インターネット接続がない環境でもWindowsの最新の脆弱性情報をチェックできます。
SSHによるリモートスキャンの前に、Cabファイルをスキャン対象Windows上に配置する「ローカルスキャン」について簡単に説明します。
全体の構成要素と処理フローを図にしました。
図中の番号の具体的な内容を以下に記載します。
まず、FutureVulsスキャナがインストールされたWindowsを用意します。FutureVulsスキャナのインストールについては「Help>Windowsスキャン」を参照してください。
FutureVulsの設定ファイルである、 C:\Program Files\vuls-saas\config.toml を編集し、Cabスキャンを行いたい対象の[server.localhost.Windows]テーブルの下に、
serverSelection=3cabPath={Cabファイルのパス}を指定します。
設定後、スキャンを実行するとconfig.tomlのcabPathで指定したパスのCabファイルを用いてWindowsの脆弱性スキャンが行われます。
詳しい設定手順は「こちら」を参考にしてください。
それでは、いよいよファイルサーバにおかれたCabファイルを用いて、SSHによるリモートスキャンの場合の設定手順について解説します。
構成要素と全体の処理フローを図にしました。
図中の番号の具体的な内容を以下に記載します。
今回はAWSのEC2インスタンスを利用します。Cabファイルを配置する外部サーバにはLinuxを採用し、「FutureVulsスキャナをセットアップ」します。さらに、スキャン対象のWindowsとのファイル共有のためにSambaを設定しています。この検証環境にて、LinuxからWindowsに対して、SSHを介したリモートCabスキャンの設定について解説します。
構築した環境の概要は次のとおりです。LinuxサーバのIPアドレスは192.0.2.1、WindowsのIPアドレスは192.0.2.2で、Windowsのホスト名はWindowsServerと設定しています。
今回はAWS Systems Managerのセッションマネージャーを介した接続の容易さを考慮し、SSM AgentがプリインストールされているAmazon Linuxイメージを選択しました。SSM AgentがプリインストールされたAMIについての詳細は、AWS公式ドキュメントをご参照ください。また、SSM Agentがインストールされていないイメージを使用する場合は、こちらのガイドに従うことで、手動でのインストールが可能です。
さらに、Sambaサービスが利用する445番ポートを開放するためのAWSセキュリティグループを設定しました。重要なのは、スキャン対象となるWindowsマシンからのアクセスを許可することです。
これらの準備を経て、外部サーバ役のEC2インスタンスを起動しセッションマネージャーを使用してLinuxに接続しました。接続後には以下のコマンドを実行してSambaをインストールします。
次に、Sambaで共有するディレクトリを作成します。このディレクトリにwsusscn2.cabを配置します。
Sambaの設定は/etc/samba/smb.confで設定するため、ファイルの末尾に設定を追加します。
設定に問題がないかをtestparmコマンドで確認します。
ここまででSambaの設定は完了したので、設定を有効化するためにsambaを再起動します。
Windowsのインスタンスを作成し、sshdをインストールして起動します。
一連の設定手順は「こちら」で確認できるため、ここでは割愛します。
Linuxサーバに「FutureVulsスキャナをインストール」し、/opt/vuls-saas/config.tomlを編集してスキャン時にWindowsからLinuxファイルサーバ上のwsusscn2.cabを参照するようにします。
設定したSSH接続のための設定を書き込んだ後、[server.WindowsServer.windows]テーブルの下に、
serverSelection=3 # cabファイルスキャンを指定cabPath={wsusscn2.cabのパス} # sambaで公開されたcabファイルパス(Windosから見たパス)を追加します。
config.tomlに指定するcabPath=wsusscn2.cabのパスは、Linux側から参照できるパスではなく、Windows側からSambaを通して参照できるファイルサーバ上のパスであることに注意してください。
以上で必要な設定は完了しました。
Linux上で/opt/vuls-saas/vuls-saas.shを実行してスキャンを行います。
検証のため、スキャン時のログを詳細に確認したい場合は./vuls scan --debugを実行してください。
cabファイルの転送時間やWindows Updateの実行に時間がかかるため、今回の検証環境ではスキャン処理時間はおよそ15分ほどかかりました。
なお、スキャン対象であるWindowsがインターネットに接続されていると、設定ミスなどの問題でconfig.tomlに定義したwsusscn2.cabがWindowsから参照できなかった場合にインターネット上のWindows Updateに接続してしまい、実際にはsambaのCabファイルを参照したスキャンになっていないことがあることにご注意ください。スキャンがすぐに終了した場合は正常なCabスキャンが行われていない可能性があります。
Cabスキャンを実行した際にLinuxサーバからWindowsに向けて、wsusscn2.cabがネットワーク転送され、Windows上のディスク領域へ保存されます。wsusscn2.cabのサイズは小さくないため(01/22時点でおよそ600MB)、スキャン対象のWindowsが増えるとCabファイルの転送に伴うネットワーク帯域への負荷が高まることにご注意ください。wsusscn2.cabは各Windows上のC:\Windows\SoftwareDistribution\ScanFile\に展開されますが、FutureVulsのスキャン終了時にWindowsから自動で削除されるため、ディスク容量に関してスキャン時に600MB程度が確保されていればディスク容量面では問題ありません。
今回は、wsusscn2.cabをスキャン対象のとは別のファイルサーバに配置してスキャンする方法について解説しました。
今回の方法を使うと、wsusscn2.cabを1つのファイルサーバに配置するだけで、インターネットに直接つながらない閉域網に存在する複数のWindowsに対してSSH経由でCabスキャンできるようになります。
また、今回はKBで管理されるソフトウェアの脆弱性についての内容でしたが、FutureVulsには、サードパーティー製ソフトウェアの脆弱性も楽に管理できます。
詳細については「FutureVuls BLog>新機能:FutureVuls、Windowsのサードパーティソフトウェアの脆弱性検知がより楽に」を参照ください。
本記事が閉域網に存在するWindowsの効率的な脆弱性管理に役立てていただけると幸いです。