Windowsスキャン

Windowsスキャンについて

FutureVulsでは、Windowsに適用済みの更新プログラムと、未適用な更新プログラムのKB(Microsoft Knowledge Base)を用いて、脆弱性の検知と管理が可能です。未適用な更新プログラムのKBに含まれるCVE-IDが、クライアントに潜む脆弱性として検知されます。

KBからCVEに変換することでLinuxやライブラリなどの他の管理対象と同じ指標で判断できます。また警戒情報や攻撃コードなどの情報をもとにトリアージ・対応できます。

下記のいずれの環境のWindowsもスキャン可能です。

  • インターネットのWindows Updateに接続できる環境
  • WSUS配下の環境
  • オフライン環境/スキャナがインストールできない場合

脆弱性検知の詳細な仕組みはこちらを参照してください。

スキャン対象は対応環境を参照してください。

Windowsスキャナを用いて脆弱性を検知する

Windowsスキャナをクライアントにインストールし、脆弱性を検知する方法です。スキャナの導入が不可能でない場合は、基本的にこちらの方法を使用してください。

スキャナのインストール

インストール方法はチュートリアルを参照してください。

スキャナのインストール時にエラーが発生する場合は、WindowsスキャンのFAQを参照してください。

手動スキャン

Windowsスキャナはタスクスケジューラにより、1日1回自動でスキャンを実行します。

スキャナをインストールした直後や、任意のタイミングでスキャナを実行したい場合は、次の手順に従ってください。

タスクスケジュールから実行

  1. タスクスケジューラを開きます。
  2. タスクの一番上の階層に存在する vuls-saas を[右クリック][実行]をします。

image.png

コマンドプロンプトから実行

管理者権限 で以下のコマンドを実行することで、手動でのスキャン実行が可能です。

C:\Program files\vuls-saas\vuls.exe

スキャン結果が反映されない場合

スキャン終了後、しばらくするとWEB画面に反映されます。

10分待っても反映されない場合は、以下のログファイルを見て、原因を確認して下さい。

  • C:\Program Files\vuls-saas\vuls-windows.log
    • スキャンの成否と、アップロードの成否が書かれています。
    • スキャンが失敗している場合、レポート情報はFutureVulsにアップロードされません。

エラーが発生している場合は、WindowsスキャンのFAQを参照してください。

アップロードする情報をカスタマイズ

config.tomlの IgnoredJSONKeys にアップロードしたくない情報のJSONのキーを指定することで、FutureVulsにアップロードする情報をフィルタリングできます。

  • サンプル:インストール済みのアプリケーション一覧をアップロードしない設定
[Servers]
  [Servers.localhost]
    Host = "localhost"
    UUID = "xxx-xxx-xx"
    IgnoredJSONKeys = ["packages"]

config.tomlに指定するJSONキーは以下の手順で確認するか、FQAを参照して下さい。

  • debugフラグを付けてvuls.exeを実行
C:\Program Files\vuls-saas>vuls.exe -debug
  • results以下に作成されたjsonファイルをエディタで確認する

スキャン結果を確認する

スキャナ実行によるスキャン結果は、FutureVulsにアップロードされた後、自動で削除されます。 ファイルを残したい場合は、コマンドプロンプトから -debug フラグをつけてスキャナを実行してください。

C:\Program Files\vuls-saas>vuls.exe -debug

スキャン結果に検知漏れがある場合

スキャナでスキャンしたWindowsのアドバイザリ一覧を確認し、適用済みの更新プログラム、未適用な更新プログラムに検知漏れがある場合は、KBIDの手動登録機能で補完出来ます。

WSUS配下のWindowsのスキャン

config.tomlの設定をすることで、Localネットワーク上のWSUSを参照して未適用なKBを検知できます。

Windows Updateのアクセス先を変更する際は、config.tomlのWinUpdateSrcを以下のように設定してください。

  • インターネット上のWindows Updateは"2"を指定(デフォルト)
[Servers]
  [Servers.localhost]
    Host = "localhost"
    UUID = "xxx-xxx-xx"
    WinUpdateSrc = "2"
  • LocalなWSUSは"1"を指定
[Servers]
  [Servers.localhost]
    Host = "localhost"
    UUID = "xxx-xxx-xx"
    WinUpdateSrc = "1"

WSUS配下のWindowsスキャンがうまくいかない場合は以下を参照ください。

PASTEスキャン

FutureVuls画面上から、Windowsに適用済みの更新プログラム、未適用な更新プログラムに関連するKBIDを登録することで、スキャナを使用せずに脆弱性を検知します。

  • インターネットから隔離された環境
  • スキャナプログラムをサーバにインストールできない環境

のような、FutureVulsのスキャナの導入が難しい環境をサポートします。

また、スキャナで検知した更新プログラムに検知漏れがある場合は、PASTEスキャンの機能を用いて補完出来ます。

PASTEスキャンの対象は対応環境を参照してください。

新規登録

新しくWindowsのPASTEスキャンを行う場合は、次の手順で登録してください。

  1. サーバ > サーバ追加 > PASTEサーバ追加 をクリックしダイアログを開く
  2. サーバ名を入力する
  3. 表示されているコマンドをコピーしてPowerShellで実行する
  4. 3.の結果をFutureVuls画面上からペーストして送信する

PASTEサーバ追加 PASTEサーバ追加ボタン

サーバ名を入力 PASTE Windows サーバ名入力

インストール済みの更新プログラム情報をペースト PASTE Windows KB入力

登録後、自動でスキャンが実行され、未適用な更新プログラムを補完し脆弱性を検知します。より厳密に脆弱性を管理する場合は、KBIDの手動登録機能を用いて、未登録な更新プログラム情報を登録してください。

KBIDの手動登録

PASTEスキャンによって登録されたKB情報に更新・不足がある場合は、本機能を用いてKBIDを手動で登録してください。 また、スキャナによるWindowsスキャンによって登録されたKB情報に不足がある場合もご利用いただけます。

  1. サーバタブで管理対象のサーバをクリックし、第2ペインからアドバイザリタブを開く。
  2. KBIDの登録 からWindowsに適用済み/未適用の更新プログラムを示すKBIDを全て入力し、送信する。
  3. 手動スキャンを実行すると、未適用な更新プログラムとそれに紐づく脆弱性が自動で検知される。

Windowsに適用済み/未適用の更新プログラム(KBID)を取得する

Windowsに適用済み/未適用の更新プログラム(KBID)を取得する方法を3つ紹介します。

KBID取得方法 適用済み 未適用
Windows Update API (CUI)
Windowsの設定>更新とセキュリティ>Windows Update (GUI)
Get-HotFix (CUI)

Windows Update API

この方法の特徴はwsusscn2.cabを用意すると、 インターネットから隔離された環境においてもスキャナと同様の結果を得ることが出来ます。 また、未適用なKBIDの取得をサポートしていて、さらに実行結果をKBIDを登録しやすい形へ整形可能なため、推奨の方法です。

PowerShellで以下のコマンドを実行します。

  • Windows Updateにオンラインで接続できない環境(インターネットから隔離された環境など)向け
# 事前に http://download.windowsupdate.com/microsoftupdate/v6/wsusscan/wsusscn2.cab をダウンロードしておく。
# 例では C:\Program Files\vuls-saas\wsusscn2.cab にダウンロードしている。

PS C:\Program Files\vuls-saas> $applied = @()
PS C:\Program Files\vuls-saas> $unapplied = @()
PS C:\Program Files\vuls-saas> $Session = New-Object -ComObject Microsoft.Update.Session
PS C:\Program Files\vuls-saas> $ServiceManager = New-Object -ComObject Microsoft.Update.ServiceManager
PS C:\Program Files\vuls-saas> $UpdateService = $ServiceManager.AddScanPackageService("Offline Sync Service", "C:\Program Files\vuls-saas\wsusscn2.cab", 1)
PS C:\Program Files\vuls-saas> $UpdateSearcher = $Session.CreateUpdateSearcher()
PS C:\Program Files\vuls-saas> $UpdateSearcher.ServerSelection = 3
PS C:\Program Files\vuls-saas> $UpdateSearcher.ServiceID = $UpdateService.ServiceID
PS C:\Program Files\vuls-saas> foreach($e in $UpdateSearcher.QueryHistory(0, $UpdateSearcher.GetTotalHistoryCount())){ If ($e.Title -match '(KB\d{6,7})') { $applied += $Matches[0] }}
PS C:\Program Files\vuls-saas> foreach($e in $UpdateSearcher.search("IsInstalled=1 and RebootRequired=0 and Type='Software'").Updates){ $applied += ('KB'+$e.KBArticleIDs) }
PS C:\Program Files\vuls-saas> foreach($e in $UpdateSearcher.search("IsInstalled=0 and Type='Software'").Updates){ $unapplied += ('KB'+$e.KBArticleIDs) }
PS C:\Program Files\vuls-saas> foreach($e in $UpdateSearcher.search("IsInstalled=1 and RebootRequired=1 and Type='Software'").Updates){ $unapplied += ('KB'+$e.KBArticleIDs) }
PS C:\Program Files\vuls-saas> ($applied | Select-Object -Unique) -Join ',' # 適用済みKBID
KB5011651,KB5012599
PS C:\Program Files\vuls-saas> ($unapplied | Select-Object -Unique) -Join ',' # 未適用KBID
KB5012117
  • Windows Updateにオンラインで接続できる環境(スキャナプログラムをサーバにインストールできない環境など)向け
PS C:\Program Files\vuls-saas> $applied = @()
PS C:\Program Files\vuls-saas> $unapplied = @()
PS C:\Program Files\vuls-saas> $Session = New-Object -ComObject Microsoft.Update.Session
PS C:\Program Files\vuls-saas> $UpdateSearcher = $Session.CreateUpdateSearcher()
PS C:\Program Files\vuls-saas> $UpdateSearcher.ServerSelection = 1 # or 2
PS C:\Program Files\vuls-saas> foreach($e in $UpdateSearcher.QueryHistory(0, $UpdateSearcher.GetTotalHistoryCount())){ If ($e.Title -match '(KB\d{6,7})') { $applied += $Matches[0] }}
PS C:\Program Files\vuls-saas> foreach($e in $UpdateSearcher.search("IsInstalled=1 and RebootRequired=0 and Type='Software'").Updates){ $applied += ('KB'+$e.KBArticleIDs) }
PS C:\Program Files\vuls-saas> foreach($e in $UpdateSearcher.search("IsInstalled=0 and Type='Software'").Updates){ $unapplied += ('KB'+$e.KBArticleIDs) }
PS C:\Program Files\vuls-saas> foreach($e in $UpdateSearcher.search("IsInstalled=1 and RebootRequired=1 and Type='Software'").Updates){ $unapplied += ('KB'+$e.KBArticleIDs) }
PS C:\Program Files\vuls-saas> ($applied | Select-Object -Unique) -Join ',' # 適用済みKBID
KB5011651,KB5012599
PS C:\Program Files\vuls-saas> ($unapplied | Select-Object -Unique) -Join ',' # 未適用KBID
KB5012117

Windowsの設定>更新とセキュリティ>Windows Update

この方法の特徴はコマンドを実行することなくKBIDを取得できます。 ただし、適用済みや未適用のKBIDが大量になると、KBIDの登録画面での入力作業が多くなります。

「Windowsの設定」から、「更新とセキュリティ」をクリックする。 image

「更新とセキュリティ」の「Windows Update」を見ます。 上部の赤枠部分に未適用な更新プログラムが表示されるため、更新プログラムのタイトルからKBIDを抽出してください。 この画像の場合は、「2022-04 .NET Framework 3.5 および 4.8 の累積的な更新プログラム(x64向けWindows 10 Version 21H2用)(KB5012117)」から「KB5012117」が未適用なKBIDとなる。 また、下部の赤枠部分「更新の履歴を表示する」をクリックすると、適用済みの更新プログラムのタイトルと日付が表示される。

image

同様にして、「更新の履歴を表示する」に表示されている更新プログラムのタイトルから適用済みのKBIDを取得する。

image

Get-HotFix

この方法は上記の2つの方法のどちらも使えない場合に参考にしてください。 また、この方法では未適用なKBIDが取得できないことに注意してください。

PowerShellで以下のコマンドを実行します。

PS C:\Program Files\vuls-saas> (Get-HotFix | Select-Object HotFixID | % { If ($_ -match '(KB\d{6,7})') { $Matches[0] }}) -Join ','
KB5012117,KB4562830,KB5003791,KB5007401,KB5012599,KB5011651,KB5005699

3.2. 取得したKBIDを登録する。

3.1で示した方法によって取得した適用済み/未適用のKBIDを登録する。

add-KBID

KBIDの削除方法

Windowsの状態に更新があった場合は、手動で登録したKBIDを削除してください。

  1. サーバタブで管理対象のサーバをクリックし、第2ペインからアドバイザリタブを開く。
  2. 削除したいアドバイザリをクリックし、第3ペインを開く。
  3. ゴミ箱アイコンをクリックし、KBIDを削除する。
  4. 手動スキャンを実行すると、削除した更新プログラムを基に自動で検知されていた未適用な更新プログラムが消去される。

Windows脆弱性情報

Windowsの場合、Microsoftの脆弱性DBを利用して、脆弱性情報を表示します。

image

Microsoftの脆弱性DBには、Workaroundの情報が付与されている場合があります。 Workaround情報は、脆弱性詳細のサマリに表示されます。

KBID情報

KBIDはアドバイザリとして表示されます。 アドバイザリは、アドバイザリ一覧などで確認できます。

インストール済みのアプリケーション

FutureVuls管理対象のWindowsにインストール済みのアプリケーションはソフトウェアタブに表示されます。自分でインストールしたアプリケーションも表示されます。

image