セイテクエンジニアのブログ かつて山市良と呼ばれたおじさんのブログ vol.8 PowerShellサンプル「PatchWinREScript_」を実行してみた
2024年05月09日配信
2024年06月18日更新
執筆者:山内 和朗
前々回まで続けてきたWinRE問題に関連して、Microsoftが更新プログラムとは別に提供したPowerShellスクリプトのサンプル「PatchWinREScript_General.ps1」がどのようなものか、実際に実行して体験してみました。目的は脆弱性対策ではありません。このようなサンプルスクリプトを見ると、とりあえず試して一度試してみてみたくなります。何をしているのか、どんなコードになっているのか、気になるのです。“サンプル”と銘打っていることから、ちゃんと検証されていない可能性、つまりバグが潜んでいる可能性もあります。
Microsoftは、「CVE-2024-20666(外部サイト)」の脆弱性(ただし、悪用される可能性は“低い”)に対する手動によるパッチ作業を支援するために、PowerShellスクリプトのサンプル「PatchWinREScript_2004plus.ps1」(Windows 10バージョン2004以降向け)と「PatchWinREScript_General.ps1」(ほとんどのWindowsバージョン向けの汎用版)を、以下のKBで公開しています。
KB5034957: CVE-2024-20666 のセキュリティの脆弱性に対処するために、展開されたデバイスの WinRE パーティションを更新する
https://support.microsoft.com/ja-jp/help/5034957
CVE-2024-20666(外部サイト)で説明されているように、Windows 11バージョン22H2/23H2についてはWinREに対するパッチ作業が累積更新プログラムに含まれているため、このサンプルスクリプトの出番はありません。このブログでこれまで書いてきたように、回復パーティションに十分な空き領域があれば、脆弱性は解消されます(空き領域が不足していれば脆弱性は放置されたままです)。実は、累積更新プログラムに含まれるようになる以前は、同様のサンプルスクリプトが提供されたことがありました(→旧ブログの記事≪リンク先は予告なく削除される場合があります≫)。
Microsoftが1月に公開したサンプルスクリプトは、回復パーティションを拡張してくれるものではなく、現在の回復パーティションのWinREイメージ(winre.wim)を作業ディレクトリにコピーし、オフラインでマウントして、(ユーザー自身で)別途ダウンロードしておいた「セーフOS動的更新(Safe OS Dynamic Update)」パッケージをオフラインパッチし、回復パーティションのWinREイメージを更新版と入れ替えます。そのため、回復パーティションの空き領域が不足すると、スクリプトはエラーで失敗し、WinREは更新されないことになります。また、サンプルスクリプトのコードの一部は、.NET Framework(Windows PowerShell《powershell.exe》のベースに依存するものを含んでいます。.NETベースのPowerShell(pwsh.exe)ではエラーになる場合(例えば、BitLockerが有効なデバイスの場合)があるので注意してください。
このブログで前回まで説明してきたように、このサンプルスクリプトで行うのと同等のWinREに対するパッチ作業をWindows Updateで自動化しようとして、2024年1月以降のWinREのセキュリティ更新プログラムがWindows 10/11の一部のバージョンおよびWindows Server 2022でエラーで失敗する問題が多発し、現時点でもまだ根本的な問題解決には至っていません(→最新情報)。なぜ、エラーが多発し、Windows Updateのたびに繰り返されている関わらず、更新プログラムの配布を取り下げないのか疑問しかありません。例えば、大量のWindowsデバイスのパッチ管理を何かしらの管理/監視ツール(※)を用いて自動化し、更新状態を集中管理している企業は、毎月報告される更新失敗エラーに悩まされていないでしょうか? 悪用される可能性は“低い”脆弱性なので無視しできるエラーではありますが、現状、エラーを解消するには、デバイスまで出向いて1台1台、回復パーティションのサイズの拡張作業を行う必要があります。リモートでできなくもない作業ですが、回復パーティションのサイズ拡張後にWinRE環境が以前のように正常に機能するかどうかはWinREで再起動してみる必要があり、それは通常、リモートからは操作できません。
※ 弊社製品であれば「BOM for Windows」や「Job Director」。BOM for Windows、Windows Update監視に対応しています(→「BOM for Windows Ver.8.0 機能一覧」)、Job DirectorによるWindows Updateの更新管理については、Windows Updateのスクリプト化(こちらは実証済み)とからめて、このブログで取り上げることができればと思い、製品のお勉強を始めたところです。
Windows Server 2019に対しては、WinREのセキュリティ更新プログラムは提供されていません。脆弱性に対策するには、手動で脆弱性のあるWinREイメージにオフラインパッチする必要があります。
このブログのvol.5とvol.6では回復パーティションを拡張できるように、ディスクの先頭にある回復パーティションをディスクの最後に移動する手順を説明しました。また、vol.3ではディスクの最後にある回復パーティションを拡張する手順を説明しました。その環境がまだ残っているので、vol.3の手順で回復パーティションを100MB増やしたあと、実際にこのサンプルスクリプトを使ってWindows Server 2019にパッチしてみました(画面1、画面2)。
詳しい手順については説明しません。その手順についてはサンプルスクリプトのKBで説明されているとおりです。Windows Server 2019はWindows 10バージョン1809と同じビルドベースなので「PatchWinREScript_General.ps1」のほうを使用します。また、安全なOS動的更新パッケージはMicrosoft Updateカタログ(外部サイト)からWindows 10バージョン1809 x64の「2024-01 Dynamic Update for Windows 10 Version 1809 for x64-based Systems (KB5034231)」をダウンロードして使用します。
画面1 ディスクの最後の回復パーティションを100MB増やしてから(499MB→599MB)、「PatchWinREScript_General.ps1」を使用して、別途ダウンロードしておいたセーフOS動的更新パッケージをオフラインパッチする
画面2 「PatchWinREScript_General.ps1」の出力結果
サンプルスクリプトの出力結果にはいくつかエラーが散見されますが、WinREのパッチには成功したようです。回復パーティションにドライブ文字を割り当ててWinREイメージのタイムスタンプを確認してみたところ、ちゃんと更新されていることを確認できます(画面3)。なお、WinREイメージのサイズは微増であったため、Windows Server 2019の既定のパーティション構成(ディスク先頭に配置)での回復パーティションの空き容量(回復パーティションのサイズ499MB、空き容量約71MB)を考えると、回復パーティションの移動やサイズ拡張を行わなくても今回のオフラインパッチは成功したと思います。一部のWindowsバージョンでエラー問題を引き起こしたWinREのセキュリティ更新プログラムは、更新後の空き容量として52MB(Windows 10/11の場合)または84MB(Windows Server 2022の場合)の固定サイズを要求しますが、このサンプルスクリプトによるオフラインパッチは空き領域に関係なく動作します。空き容量を調べるようなコードは含まれておらず、更新後のWinREを格納できなければ単にエラーで失敗するはずです(2023年春のWindows 11向けのサンプルスクリプトが失敗した例については、旧ブログの記事≪リンク先は予告なく削除される場合があります≫を参照)。
画面3 サンプルスクリプトの実行によりWinREが更新された。イメージのサイズは更新前は約408MB(428,160,827バイト)だったが、更新後は約415MB(435,027,871バイト)に増加
画面2の出力結果を見ると、WinREの状態や場所の情報を取得するコードが含まれていることが分かります。次回はこのサンプルスクリプトに含まれるコードの本当に美味しい部分だけを頂戴して、システム運用管理に役立てられるかどうか味わってみます。
最新情報(2024年5月1日): Microsoftは、2024年4月30日(PT)付けで、今回のWinREのセキュリティ更新プログラム(KB5034440、KB5034441、KB5034439《外部サイト》)の問題の状態を「Mitigated(軽減)」から「Resolved(解決済み)」に変更しました。しかしながら、これまで「Workaround(回避策)」とされていた部分が、「Resolution: Automatic resolution of this issue won't be available in a future Windows update.Manual steps are necessary to complete the installation of this update on devices which are experiencing this error.(解決策: この問題の自動解決は、将来のWindowsアップデートでは提供されません。このエラーが発生しているデバイスでこの更新プログラムのインストールを完了するには、手動による手順が必要です。)」と変更されただけで、特定の状況下でエラーが発生する状況に変化はありません。 |
2024年10月08日 | メモ. 必要な機能は標準装備で意外と簡単! Hyper-Vホストクラスターの構築 |
---|---|
2024年10月07日 | vol.49 電子メールによる通知|BOMおじさんとZabbix(5) |
2024年10月03日 | ITニュース. Windows 11バージョン24H2(OSビルド26100)の一般提供開始 |
2024年10月03日 | vol.48 「アクティブチェック: 不明」の理由は大文字小文字|BOMおじさんとZabbix(4) |
2024年10月02日 | ITニュース. Windows Server 2025、ホットパッチ(プレビュー)提供開始と最新プレビュービルドの公開 |
2024年09月30日 | vol.47 Windows Serverを監視対象に追加する|BOMおじさんとZabbix(3) |
2024年09月26日 | vol.46 Zabbix UIのセットアップと日本語化|BOMおじさんとZabbix(2) |
2024年09月25日 | ITニュース. 企業のパッチ管理の基盤「WSUS」が非推奨へ、どうする!?オンプレのパッチ管理 |
2024年09月24日 | vol.45 BOMを担ぐおじさん、Zabbixと戯れる |
2024年09月19日 | vol.44 USBドライブのマウントを強制解除|コマンド&スクリプト強化週間 |