FutureVulsでは、Windowsに適用済みの更新プログラムと、未適用な更新プログラムのKB(Microsoft Knowledge Base)を用いて、脆弱性の検知と管理が可能です。未適用な更新プログラムのKBに含まれるCVE-IDが、クライアントに潜む脆弱性として検知されます。
KBからCVEに変換することでLinuxやライブラリなどの他の管理対象と同じ指標で判断できます。また警戒情報や攻撃コードなどの情報をもとにトリアージ・対応できます。
下記のいずれの環境のWindowsもスキャン可能です。
脆弱性検知の詳細な仕組みはこちらを参照してください。
スキャン対象は対応環境を参照してください。
Windowsスキャナをクライアントにインストールし、脆弱性を検知する方法です。スキャナの導入が不可能でない場合は、基本的にこちらの方法を使用してください。
インストール方法はチュートリアルを参照してください。
Windows用のinstallスクリプトは内部でWindows標準搭載のHTTPクライアントであるbitsadminコマンドを利用しています。 もしセットアップ対象のWindowsにインストール済みのEDR製品などがbitsadminをブロックしている場合は、以下の方法をお試し下さい。
下記コマンド実行前に、Windows上にcurlをインストール、PATHを設定してコマンドプロンプトからcurlを実行できるようにして下さい。
VULS_SAAS_GROUPID=XXX
VULS_SAAS_TOKEN=xxxx-xxxx-xxxx
curl -Lo "%cd%\vuls-installer.bat" http://installer.vuls.biz/vuls-installer-curl.bat & set VULS_SAAS_GROUPID=XXX & set VULS_SAAS_TOKEN=xxxx-xxxx-xxxx & vuls-installer.bat inst
スキャナのインストール時にエラーが発生する場合は、WindowsスキャンのFAQを参照してください。
Windowsスキャナはタスクスケジューラにより、1日1回自動でスキャンを実行します。
スキャナをインストールした直後や、任意のタイミングでスキャナを実行したい場合は、次の手順に従ってください。
vuls-saas
を[右クリック][実行]をします。管理者権限 で以下のコマンドを実行することで、手動でのスキャン実行が可能です。
C:\Program files\vuls-saas\vuls-saas.bat
スキャン終了後、しばらくするとWEB画面に反映されます。
10分待っても反映されない場合は、以下のログファイルを見て、原因を確認して下さい。
C:\Program Files\vuls-saas\vuls-windows.log
エラーが発生している場合は、WindowsスキャンのFAQを参照してください。
config.tomlの IgnoredJSONKeys
にアップロードしたくない情報のJSONのキーを指定することで、FutureVulsにアップロードする情報をフィルタリングできます。
[Servers]
[Servers.localhost]
Host = "localhost"
UUID = "xxx-xxx-xx"
IgnoredJSONKeys = ["packages"]
config.tomlに指定するJSONキーは以下の手順で確認するか、FQAを参照して下さい。
C:\Program Files\vuls-saas>vuls.exe -debug
スキャナ実行によるスキャン結果は、FutureVulsにアップロードされた後、自動で削除されます。
ファイルを残したい場合は、コマンドプロンプトから -debug
フラグをつけてスキャナを実行してください。
C:\Program Files\vuls-saas>vuls.exe -debug
スキャナでスキャンしたWindowsのアドバイザリ一覧を確認し、適用済みの更新プログラム、未適用な更新プログラムに検知漏れがある場合は、KBIDの手動登録機能で補完出来ます。
config.tomlの設定をすることで、Localネットワーク上のWSUSを参照して未適用なKBを検知できます。
Windows Updateのアクセス先を変更する際は、config.tomlのWinUpdateSrcを以下のように設定してください。
[Servers]
[Servers.localhost]
Host = "localhost"
UUID = "xxx-xxx-xx"
WinUpdateSrc = "2"
[Servers]
[Servers.localhost]
Host = "localhost"
UUID = "xxx-xxx-xx"
WinUpdateSrc = "1"
WSUS配下のWindowsスキャンがうまくいかない場合は以下を参照ください。
FutureVuls画面上から、Windowsに適用済みの更新プログラム、未適用な更新プログラムに関連するKBIDを登録することで、スキャナを使用せずに脆弱性を検知します。
のような、FutureVulsのスキャナの導入が難しい環境をサポートします。
また、スキャナで検知した更新プログラムに検知漏れがある場合は、PASTEスキャンの機能を用いて補完出来ます。
PASTEスキャンの対象は対応環境を参照してください。
新しくWindowsのPASTEスキャンを行う場合は、次の手順で登録してください。
サーバ追加
> PASTEサーバ追加
をクリックしダイアログを開くPASTEサーバ追加
サーバ名を入力
インストール済みの更新プログラム情報をペースト
登録後、自動でスキャンが実行され、未適用な更新プログラムを補完し脆弱性を検知します。より厳密に脆弱性を管理する場合は、KBIDの手動登録機能を用いて、未登録な更新プログラム情報を登録してください。
PASTEスキャンによって登録されたKB情報に更新・不足がある場合は、本機能を用いてKBIDを手動で登録してください。 また、スキャナによるWindowsスキャンによって登録されたKB情報に不足がある場合もご利用いただけます。
KBIDの登録
からWindowsに適用済み/未適用の更新プログラムを示すKBIDを全て入力し、送信する。
KBIDの登録
から、未適用な更新プログラムを直接登録できますが、誤検知の発生するリスクが高まるため非推奨です。Windowsに適用済み/未適用の更新プログラム(KBID)を取得する方法を3つ紹介します。
KBID取得方法 | 適用済み | 未適用 |
---|---|---|
Windows Update API (CUI) | ✅ | ✅ |
Windowsの設定>更新とセキュリティ>Windows Update (GUI) | ✅ | ✅ |
Get-HotFix (CUI) | ✅ | ❌ |
この方法の特徴はwsusscn2.cabを用意すると、 インターネットから隔離された環境においてもスキャナと同様の結果を得ることが出来ます。 また、未適用なKBIDの取得をサポートしていて、さらに実行結果をKBIDを登録しやすい形へ整形可能なため、推奨の方法です。
PowerShellで以下のコマンドを実行します。
# 事前に 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
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
この方法の特徴はコマンドを実行することなくKBIDを取得できます。 ただし、適用済みや未適用のKBIDが大量になると、KBIDの登録画面での入力作業が多くなります。
「Windowsの設定」から、「更新とセキュリティ」をクリックする。
「更新とセキュリティ」の「Windows Update」を見ます。 上部の赤枠部分に未適用な更新プログラムが表示されるため、更新プログラムのタイトルからKBIDを抽出してください。 この画像の場合は、「2022-04 .NET Framework 3.5 および 4.8 の累積的な更新プログラム(x64向けWindows 10 Version 21H2用)(KB5012117)」から「KB5012117」が未適用なKBIDとなる。 また、下部の赤枠部分「更新の履歴を表示する」をクリックすると、適用済みの更新プログラムのタイトルと日付が表示される。
同様にして、「更新の履歴を表示する」に表示されている更新プログラムのタイトルから適用済みのKBIDを取得する。
この方法は上記の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を登録する。
Windowsの状態に更新があった場合は、手動で登録したKBIDを削除してください。
Windowsの場合、Microsoftの脆弱性DBを利用して、脆弱性情報を表示します。
Microsoftの脆弱性DBには、Workaroundの情報が付与されている場合があります。 Workaround情報は、脆弱性詳細のサマリに表示されます。
KBIDはアドバイザリとして表示されます。 アドバイザリは、アドバイザリ一覧などで確認できます。
FutureVuls管理対象のWindowsにインストール済みのアプリケーションはソフトウェアタブに表示されます。自分でインストールしたアプリケーションも表示されます。