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