セイテクエンジニアのブログ かつて山市良と呼ばれたおじさんのブログ vol.1 Windowsの回復パーティションの話から始めましょう
2024年04月11日配信
2024年11月07日更新
執筆者:山内 和朗
今回からセイ・テクノロジーズWebサイトで始まった、この4月入社の社員によるこのブログでは、Windows Serverの運用管理に役立つテクニックやトラブルシューティングを取り上げていく予定です。まだ入社したばかりなのであれですが、おいおい、SSD-assistanceを始めとする弊社製品の活用方法の紹介もできればと考えています。
最初の話題は、前職のライター時代の最後に扱った、Windows Updateの問題とそれに関連する回復パーティションの話から。さまざまなところで書いてきたのと重複する部分もありますが、“保存版”として一通りまとめてみたいと思います。少し長くなりそうなので、当面、連載記事のようなスタイルでこの話題が続きます。
2024年に入り、Microsoftの最初のセキュリティ更新日となった1月9日(日本時間10日)、Windows 11バージョン21H2、Windows 10バージョン21H2および22H2を実行する一部のデバイスでWindows Updateを実行すると、以下の更新プログラムが「ダウンロードエラー:0x80070643」で失敗し、その後も失敗を繰り返すという問題が発生しました(画面1)。
KB5034440: Windows 11 バージョン 21H2 の Windows Recovery Environment 更新プログラム: 2024 年 1 月 9 日
https://support.microsoft.com/help/5034440
※このページは https://support.microsoft.com/help/5042321 に置き換えられました。
KB5034441: Windows 10 バージョン 21H2 および 22H2 用 Windows 回復環境の更新プログラム: 2024 年 1 月 9 日
https://support.microsoft.com/help/5034441
※このページは https://support.microsoft.com/help/5042320 に置き換えられました。
画面1 Windows 10とWindows 11バージョン21H2で特定のセキュリティ更新プログラムが「ダウンロードエラー:0x80070643」で失敗するのを繰り返す
実は、同じエラーコードにより更新プログラムのインストール失敗の問題は、以下のWindows Server 2022の更新プログラムでも発生しています(画面2)。
KB5034439: Windows Server 2022 用 Windows 回復環境の更新プログラム: 2024 年 1 月 9 日
https://support.microsoft.com/help/5034439
※このページは https://support.microsoft.com/help/5042322 に置き換えられました。
画面2 Windows Server 2022(デスクトップエクスペリエンス)でも同じエラーコード「0x80070643」で失敗していた
いずれの問題にも回避策は存在しますが、現状、Windows Updateで自動的に解消されることがない問題です。問題発生から3か月以上経ちますが、その後状況に新たな変化はなく、根本的な解決には至っていません(2024年4月10日時点 →最新情報)。
前述の更新プログラムのインストールがエラーで失敗する場合がある原因は、ダウンロードエラーなんかでは全くなく、インストール先のデバイスに存在する回復パーティションの領域不足にあります。更新プログラムは回復パーティション内のWindows回復環境(WinRE)のWIMイメージ(winre.wim)のコピーに対してオフラインパッチを行い(作業ディレクトリとして「C:¥$WinREAgent」を使用)、回復パーティション内の現在のWinREイメージと入れ替えようとしますが、オフラインパッチによりイメージのサイズが増加するため、元々の空き領域が少ない場合、入れ替えに失敗するのです。そしてMicrosoftが示した回避策とは、WinREを一時的に無効化し、コマンドラインを駆使して回復パーティションのサイズを拡張して、WinREを再設定することです。
この回避策は、とてもWindows 10/11デバイスを使用しているエンドユーザーの手に負えるような簡単なものではありません。サーバー管理者にとっても、安定運用しているサーバーのパーティションをいじるなんてしたくはないでしょう。そもそも、これらの更新プログラムが解決する「BitLockerのセキュリティ機能のバイパスの脆弱性(CVE-2024-20666《外部サイト》)」は、悪用される可能性の“低い”脆弱性であり、実はこのエラーに遭遇しても無視してかまいません。かといって、Windows Updateを実行するたびに、この更新プログラムがエラーで失敗するのは気になって仕方がないでしょう。
今回エラーを引き起こした更新プログラムは、回復パーティションの容量不足とは別の問題で別のエラーも引き起こしています。1つは、WinREが無効化されている環境です。問題の更新プログラムは、パッチ対象のWinREが有効になっていない場合(回復パーティションが存在しない場合も含む)でもインストール対象として検出され、エラーで失敗します。AWSやAzureにデプロイされている仮想マシンの場合、WinREや回復パーティションを使用する方法が限定されているため、最初から無効化されている場合や、回復パーティションが存在しない場合があります。
また、Windows Server 2022のServer Coreインストールや、Server CoreベースのAzure Stack HCIバージョン22H2でもKB5034439のインストールがエラーで失敗するという問題(おそらくServer Core限定の更新プログラムの不具合)が発生していますが、いずれも未解決のままです。これらの環境は手動でオフラインパッチすることで脆弱性を排除することはできますが、脆弱性が解消された環境にも問題の更新プログラムはインストール対象として検出され、インストールに失敗し、Windows Updateのたびに失敗を繰り返している状況だと思います(画面3)。
画面3 Server Coreインストールでのインストール失敗は、容量不足とは別の理由
実は、Windows 11バージョン22H2以降では2023年半ばから(6月のCリリース以降)、累積的な更新プログラムにWinREの更新が含まれるようになりました。そのため、1月のCVE-2024-20666(外部サイト)に対する修正内容は、回復パーティションの容量に余裕がある限り、1月までの累積的な更新プログラムでパッチ済みになっています。Windows 11バージョン22H2以降の場合、回復パーティションの空き領域が不足していても、WinREイメージの入れ替えをロールバックして、更新プログラム全体のインストールはエラーなしで成功します(つまり、脆弱性は放置されることになります)。ただし、2024年2月の以下の更新プログラムでは、回復パーティションのサイズ不足で更新プログラム全体のインストールが失敗するという問題がありました。この問題は2024年3月の更新プログラムまでに解消しています。
繰り返しますが、CVE-2024-20666(外部サイト)はセキュリティ機能のバイパスの脆弱性ですが、悪用される可能性は“低い”ものです。一方で、Windows 10/11の幅広いバージョンとWindows Server 2016~2022はこの脆弱性の影響を受け、手動でオフラインパッチを行うことでどのWindowsバージョンでも脆弱性を排除することができます。今回の更新プログラムの問題は、一部のWindowsバージョンに対して、脆弱性対策の自動化を強行した結果です。しかも、この脆弱性に手動で対策済みだったとしても、今回の更新プログラムが検出、インストールされ、エラーを繰り返す場合があることです(つまり、脆弱性対策済みであるかどうかをチェックしていないらしいのです)。
次回以降は、更新プログラムのインストールを成功させる、あるいは手動でパッチするために必要となる回復パーティションの拡張や移動、回復パーティションやWinREの情報取得方法などについて、サーバー管理者向けに詳しく丁寧に説明していきます。 回復パーティションはこれまで、新規インストール時やアップグレードインストール時にWindowsセットアップによって自動作成され、次のバージョンまで更新されることはないという感じでした。しかし、WinREの脆弱性対策が必要なケースが出てくるようになった今、もうWindowsセットアップお任せというわけにはいかなくなりました。WindowsセットアップがWinREの更新を想定したものに作り替えられるまでには、しばらく時間がかかるかもしれません。一方、今回の脆弱性は悪用される可能性が低いという安心材料はありますが、今後、重大な脆弱性が明らかにされ、緊急でWinREの更新が必要になるかもしれません。