Windowsスキャン

Windowsスキャンについて

FutureVulsのWindows機能のカバー範囲は広く、

    1. Windows UpdateのKB(Microsoft Knowledge Base)の脆弱性管理
    1. Windowsのサードパーティー製ソフトウェアの資産管理と脆弱性管理

の両方をサポートしています。

1. Windows UpdateのKB(Microsoft Knowledge Base)の脆弱性管理の概要

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

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

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

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

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

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

2. Windowsのサードパーティー製ソフトウェアの資産管理と脆弱性管理

Windows Updateで管理されないサードパーティーのアプリケーションの資産管理機能とその脆弱性を管理する機能もあります。 詳細は「サードパーティー製ソフトウェアの脆弱性を検知する」を参照してください。

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

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

スキャナのインストール

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

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

手動スキャン

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

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

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

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

image.png

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

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

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

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

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

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

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

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

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

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

  • サンプル:インストール済みのソフトウェア一覧をアップロードしない設定
~  ~
[servers]
  [servers.localhost]
    host = "localhost"
    port = "local"
    ignoredJSONKeys = ["packages"]
~  ~

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

  • results以下に作成されたjsonファイルをエディタで確認する

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

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

WSUS配下のWindowsのスキャン

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

下記の環境でおすすめなスキャン方法です。

  • インターネット上のWindows Updateサービスに「接続できない」
  • WSUSがローカルネットワークに構築されている
  • スキャナプログラムをインストールできる
  • スキャナプログラムからインターネット上のFutureVulsに構成情報をアップロードできる
  • PASTEスキャンのようにWindows Update実施のたびにKBを画面上にコピー&ペーストで更新したくない

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

  • インターネット上のWindows Updateは"2"を指定(デフォルト)
~  ~
[servers]
  [servers.localhost]
    host = "localhost"
    port = "local"
  [servers.localhost.uuids]
    localhost = "xxxx-xxxx-xxxx"
  [servers.localhost.windows]
    serverSelection = 2
~  ~
  • LocalなWSUSは1を指定
~  ~
[servers]
  [servers.localhost]
    host = "localhost"
    port = "local"
  [servers.localhost.uuids]
    localhost = "xxxx-xxxx-xxxx"
  [servers.localhost.windows]
    serverSelection = 1
~  ~

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

cabファイルを用いたスキャン

インターネット上またはWSUSのようなWindows Updateサービスに接続できない環境でもスキャナプログラムを用いてスキャンする方法です。 「Windows Updateから提供されているcabファイル」を用いて未適用な更新プログラムを検出し脆弱性を検知します。

下記の環境でおすすめなスキャン方法です。

  • インターネット上またはWSUSのようなWindows Updateサービスに「接続できない」
  • スキャナプログラムをインストールできる
  • スキャナプログラムからインターネット上のFutureVulsに構成情報をアップロードできる
  • PASTEスキャンのようにWindows Update実施のたびにKBを画面上にコピー&ペーストで更新したくない

下記手順で一度登録すれば、累積更新プログラムが提供されたタイミングでそれに含まれる脆弱性がFutureVulsで継続的に検知されます。 ただし、「累積更新プログラムではないKBの脆弱性」を検知するためには、新規にWindowsアップデートが提供されたタイミングで新しいcabを取得してスキャンする必要があります。

リモートスキャンとCabファイルスキャンを組み合わせることもできます。詳細はFutureVuls Blogを参照してください。

cabファイルを用いたスキャンの設定方法

設定とスキャンは下記の手順で行います。

  1. チュートリアル>Windowsへのインストール」を参照してスキャナプログラムをインストールします。

  2. Microsoft社が運営するwindowsupdate.comから wsusscn2.cab を入手します。cabのURL

    • curlで取得する例

      curl.exe -sS -o C:\wsusscn2.cab http://download.windowsupdate.com/microsoftupdate/v6/wsusscan/wsusscn2.cab
      
  3. C:\Program Files\vuls-saas\config.toml を修正します。

    • 「Windows Updateにcabを用いる」という意味の serverSelection=3 と、CabPathには上で取得したcabファイルのフルパスを指定します。
~  ~
[servers]
  [servers.localhost]
    host = "localhost"
    port = "local" 
  [servers.localhost.uuids]
    localhost = "xxxx-xxxx-xxxx"
  [servers.localhost.windows]
    serverSelection = 3
    cabPath = "C:\\wsusscn2.cab"
~  ~

上記のtomlを用いて「チュートリアル>Windowsへのインストール>手動スキャン」の手順でスキャンします。cabファイルを用いて未適用なKBのリストを取得し、スキャナプログラムがFutureVuls SaaSへ構成情報をアップロードして検知処理が行われ、未適用なKBに含まれる脆弱性が検知されます。

リモートスキャン

スキャン対象WindowsにSSHで接続可能なLinux環境からスキャンを実行し、結果をFutureVulsにアップロードする方法です。 下記の環境でおすすめなスキャン方法です。

  • スキャン対象Windowsにスキャナプログラムをインストールできない
  • スキャナプログラムからインターネット上のFutureVulsに構成情報をアップロードできない

新機能:Windowsの脆弱性管理:SSHで脆弱性検知するリモートスキャン機能の利用方法

設定方法は以下のページを参照してください。

リモートスキャンとCabファイルスキャンを組み合わせることもできます。詳細はFutureVuls Blogを参照してください。

PASTEスキャン

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

下記の環境でおすすめなスキャン方法です。

  • スキャナプログラムを「インストールできない」
  • インターネットから隔離されてFutureVulsに構成情報を「アップロードできない」
  • インターネット上またはWSUSのようなWindows Updateサービスに「接続できない」

のような、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.WinUpdateSrc = 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.WinUpdateSrc = 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

KBIDの削除方法

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

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

Windows脆弱性情報

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

image

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

KBID情報

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

インストール済みのソフトウェア

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

image

サードパーティー製ソフトウェアの脆弱性を検知する

FutureVulsにおけるWindowsスキャンでは、Windows UpdateでKBとして管理される製品の脆弱性が検知されます。 その他の3rd Party製品の脆弱性を検知するためには別途準備が必要です。

インストール済みのソフトウェアにCPEを割り当てる

Windowsスキャナを用いて登録されたWindowsサーバの場合、ソフトウェアタブにてインストール済みのソフトウェア一覧が表示されます。 これらのソフトウェアのうち、アップデートがKBとして管理されるWindows Update対象の製品「以外」は、このままだと脆弱性検知の対象外です。 各ソフトウェアに適切なCPEを割り当てることで、Windows Updateの管理外のソフトウェアの脆弱性が検知できるようになります。 なお、CPEを用いたスキャンロジックは、CPEスキャンを参照ください。

割り当て方法

Windowsのソフトウェアタブから、CPEを割り当てるソフトウェアをクリックし、「CPE割り当て」ボタンをクリックします。 登録方法は以下の3つから選べます。

  1. リコメンドされた候補から選択する
    • ソフトウェア名から関連度の高い候補が表示されます
  2. 手動で候補を検索する
    • データベースに登録されているCPEから文字列検索します
  3. 直接入力する
    • 割り当てるCPEを直接入力します

また、それぞれの登録方法にて、「ベンダ名とプロダクト名のみ登録する」か「完全なCPEを登録する」か選択できます。

  • ベンダ名とプロダクト名のみ登録する場合(推奨)
    • 登録されたベンダ名およびプロダクト名から自動でCPEを生成します
    • CPEのバージョン情報には、スキャナによって検知されたソフトウェアのバージョンが反映されます
    • 実機上のソフトウェアアップデート実施によりバージョンが変更された場合に該当するCPEのバージョン番号は自動で更新されます。自動更新されるタイミングは、アップデート後の最初のスキャン時に行われます。つまりソフトウェアアップデート後のCPEのバージョン番号を手動で変更する必要はありません。なお、バージョンが自動で更新されるためタスクのステータスも自動でクローズ(PATCH_APPLIED)されます。
    • ソフトウェアタブで「CPE自動更新」列の値が"☑“になります
  • 完全なCPEを登録する場合
    • ベンダ名やプロダクト名だけでなく、バージョンやアップデート情報を含めた完全なCPEを手動で登録します
    • スキャナがソフトウェアのバージョンを検知した場合でもCPEは更新されないため、手動でのメンテナンスが必要です
    • 実機上のソフトウェアアップデート実施によりバージョンが変更された場合に登録済みのCPEのバージョン番号を手動で変更する必要があります。
    • スキャナがバージョンを取得できない場合や、アップデートやエディション情報を登録したい場合にご利用ください
    • ソフトウェアタブで「CPE自動更新」列の値が”-“になります

また、和製ソフトウェアの場合は、脆弱性DBとしてJVNを使用できます。詳細

登録すると、次回スキャン以降、割り当てられたCPEを用いて脆弱性が検知されるようになります。

一括割り当て

ソフトウェアタブにてCPEを割り当てたいソフトウェアを複数選択し、「CPE割り当て」ボタンから一括で割り当てることができます。一括割り当ての場合は、リコメンドされた候補からベンダ名とプロダクト名のみを登録可能です。

更新方法

割り当てCPEを更新したい場合は、ソフトウェアタブにて更新対象のソフトウェアをクリックし、「CPEを編集」ボタンを押してください。

  • ベンダ名とプロダクト名のみ登録されている場合
    • JVNの参照設定のみ変更可能
  • 完全なCPEが登録されている場合
    • 自動更新の有効化(ベンダ名とプロダクト名のみ登録に変更)が可能
    • 割り当てCPEの更新が可能(ベンダ名およびプロダクト名は変更不可)

削除方法

割り当てCPEを削除したい場合は、ソフトウェアタブにて更新対象のソフトウェアをクリックし、削除アイコンを押してください。 割り当てCPEを削除した場合、削除されたCPEを用いて検知されていた脆弱性情報及びタスク情報は全て削除されます。

ソフトウェアを手動で登録する

Windowsスキャナ以外の方法で登録したWindowsの場合や、スキャナが認識できなかったソフトウェアは、手動でソフトウェアを登録できます。詳しくは、CPE登録を参照ください。