どうもミツシマです。


今回はMicrosoftが出しているMBSAの後継スクリプトを検証してみました。
そもそもMBSAとは「Microsoft Baseline Security Analyzer 」と呼ばれるもので主に更新プログラムの適用状況を調べ、セキュリティチェックしてくれるツールでした。
自分もこのツールのお世話になったことがありましたが、Windows10やWindowsServer2016以降には対応しなくなり、開発も終了してしまったようです。

そこでMicrosoftは代替となるスクリプトを提供しているようなので、今回はそちらを使用して検証してみました。


参考にしたサイト
Microsoft Baseline セキュリティアナライザーとその用途について教えてください。


検証環境は以下の通り
PC:Windows10 1809


今回はPowershellスクリプトを検証しました。
そこでまずは「Powershellスクリプト」と「Wsusscn2.cab」を用意します。
Wsusscn2.cab」は毎月リリースされるセキュリティ関連の更新プログラムに関する情報が含まれているファイルです。この情報から足りないセキュリティパッチを洗い出してくれます。

ダウンロード先は以下の通りです。
<http://go.microsoft.com/fwlink/p/?LinkID=74689>


ここで提供されているPowershellスクリプトをそのまま使用するのは面白くないので自分なりに修正を加えてみました。


ScanWUA.ps1
#Using WUA to Scan for Updates Offline with PowerShell 
#VBS version: https://docs.microsoft.com/en-us/previous-versions/windows/desktop/aa387290(v=vs.85) 

Write-Output "StartScanWUA.ps1を開始します... `r`n"

$CurrentFolder = Split-Path $MyInvocation.MyCommand.Path -Parent
$ScanFile2 = $CurrentFolder + "\wsusscn2.cab"
$ResultFile = $CurrentFolder + "\ScanWUAResult.txt"
$strURL = "https://www.catalog.update.microsoft.com/Search.aspx?q="

#「wsusscn2.cab」ファイルがあるかどうかをチェックし、なければエラー表示で終了
If(-Not(Test-Path $ScanFile2)){
    Write-Output "「wsusscn2.cab」が同じフォルダにありません。処理を中断します。"
    Exit
}

$UpdateSession = New-Object -ComObject Microsoft.Update.Session 
$UpdateServiceManager  = New-Object -ComObject Microsoft.Update.ServiceManager 
$UpdateService = $UpdateServiceManager.AddScanPackageService("Offline Sync Service", $ScanFile2, 1) 
$UpdateSearcher = $UpdateSession.CreateUpdateSearcher()  
 
#Write-Output "Searching for updates... `r`n" 
Write-Output "WindowsUpdateの未適用リストを検索しています... `r`n"  

$UpdateSearcher.ServerSelection = 3 #ssOthers 
 
$UpdateSearcher.ServiceID = $UpdateService.ServiceID 
 
$SearchResult = $UpdateSearcher.Search("IsInstalled=0") # or "IsInstalled=0 or IsInstalled=1" to also list the installed updates as MBSA did 
 
$Updates = $SearchResult.Updates 
 
if($Updates.Count -eq 0){ 
    #Write-Output "There are no applicable updates."
    Write-Output "---WindowsUpdateの未適用はありませんでした---" >> $ResultFile
    return $null
    Exit 
 
#Write-Output "List of applicable items on the machine when using wssuscan.cab: `r`n" 
#Write-Output "未適用リストがありました。リストの詳細をファイルに出力します... `r`n" 
Write-Output "---WindowsUpdate未適用リスト--- `r`n" >> $ResultFile

$i = 1 
foreach($Update in $Updates){  

    Write-Output "$($i)> $($Update.Title)" >> $ResultFile

    $ResultMessage = "重要度:" + $Update.MsrcSeverity
    Write-Output $ResultMessage >> $ResultFile

    $ResultMessage = "サポートURL:" + $Update.SupportUrl
    Write-Output $ResultMessage >> $ResultFile

    $Update.Title -match "\(KB(?<ListNumber>.*?)\)" | Out-Null
    #Write-Output $Matches
    $MicrosoftUpdateCatalogURL = $strURL + "KB" + $Matches.ListNumber
    $ResultMessage = "MicrosoftUpdateカタログ:" + $MicrosoftUpdateCatalogURL + "`r`n"
    Write-Output $ResultMessage >> $ResultFile

    $i++ 
}

Write-Output "---ここまで---"  >> $ResultFile

Write-Output "StartScanWUA.ps1が完了しました... `r`n"


主な変更点は以下の通りです。
  • スクリプトを実行したカレントディレクトリを取得することでローカル上であればどこでも実行可能に
  • 各種メッセージの日本語化
  • 最終的なログファイルの出力
  • ログの中で未適用パッチをすぐにダウンロード出来るようにMicrosoftカタログへのURLを出力

MicrosoftカタログのURLについては、将来的に変更される可能性があるので注意が必要です。
また、このPowershellスクリプトをいちいち管理者として実行するのが面倒だったので、batファイルで呼び出すものも作成しました。



StartScanWUA.bat
@echo off


REM 管理者権限か確認
net session > nul 2>&1

REM 管理者権限でなければ「管理者権限で再実行」(SUDO)
IF %ERRORLEVEL% neq 0 goto SUDO


cd %‾dp0
powershell -ExecutionPolicy RemoteSigned -command ".¥ScanWUA.ps1"
pause
exit


:SUDO
powershell start-process %‾f0 -verb runas
exit



<実行手順>
用意した「ScanWUA.ps1」と「StartScanWUA.bat」と「Wsusscn2.cab」を同じフォルダ上に配置します。
その上で「StartScanWUA.bat」を実行します。
※「管理者として実行」してもしなくてもOKです。batの中で判断し、「管理者として実行」していなければ再度、管理者としてbatが実行されるようにしました。



試しに2019年3月までのWindowsUpdateが適用されている仮想マシン(Windows10)に実施してみました。
出力されたログはこんな感じです。(Powershellで出力されているので文字コードは「UTF-8」になるかと)
---WindowsUpdate未適用リスト--- 

1> 2019-04 x64 ベース システム用 Windows 10 Version 1809 の累積更新プログラム (KB4493509)
重要度:Critical
サポートURL:http://support.microsoft.com/help/4493509
MicrosoftUpdateカタログ:https://www.catalog.update.microsoft.com/Search.aspx?q=KB4493509

2> 2019-05 .NET Framework 3.5、4.7.2 および 4.8 の累積的な更新プログラム (x64 向け Windows 10 Version 1809 用) (KB4499405)
重要度:Important
サポートURL:http://support.microsoft.com
MicrosoftUpdateカタログ:https://www.catalog.update.microsoft.com/Search.aspx?q=KB4499405

3> 悪意のあるソフトウェアの削除ツール x64 - 2019 年 5 月 (KB890830)
重要度:
サポートURL:http://support.microsoft.com
MicrosoftUpdateカタログ:https://www.catalog.update.microsoft.com/Search.aspx?q=KB890830

4> 2019-05 x64 ベース システム用 Windows 10 Version 1809 セキュリティ更新プログラム (Adobe Flash Player 対応) (KB4497932)
重要度:Critical
サポートURL:http://support.microsoft.com/help/4497932
MicrosoftUpdateカタログ:https://www.catalog.update.microsoft.com/Search.aspx?q=KB4497932

5> 2019-05x64 ベース システム用 Windows 10 Version 1809 サービス スタック更新プログラム (KB4499728)
重要度:Critical
サポートURL:http://support.microsoft.com/help/4499728
MicrosoftUpdateカタログ:https://www.catalog.update.microsoft.com/Search.aspx?q=KB4499728

---ここまで---



一応意図したようにログが出力出来たのでOKかな〜。


最後にファイルのリンクを貼っておきます。
ScanWUA.ps1
StartScanWUA.bat

スポンサードリンク