2024年1月の「WinRE更新エラー」は、なぜ、どのように発生したのか? どうやって解決するつもりなのか?:検証! Microsoft&Windowsセキュリティ(10)
2024年1月の定例のセキュリティ更新では、多くのWindows 10ユーザーがセキュリティ更新プログラム「KB5034441」がエラー「0x80070643」で更新の失敗を繰り返すという問題に遭遇しました。失敗の原因や回避策、その後の対応を追跡します。
2024年1月のセキュリティ更新プログラム「KB5034441」でエラーが多発、その原因は?
2024年1月の最初の「Windows Update」では、多くの「Windows 10」ユーザーがセキュリティ更新プログラム「KB5034441」の更新エラーを繰り返すという問題に遭遇したことでしょう。また、あまり知られていないことですが、「Windows Server 2022」のServer Coreや「Azure Stack HCI バージョン22H2」「Microsoft Azure」上の「Windows Server 2022 Azure Edition」でも更新エラーが繰り返されています。問題が発生したセキュリティ更新プログラムは、以下のものです。
これらのセキュリティ更新プログラムは、「Windows回復環境(Windows Recovery Environment:WinRE)」が有効になっていない場合や、「Windows BitLockerドライブ暗号化」を使用していなければ影響を受けません。影響を受ける場合でも、悪用される可能性は低い脆弱(ぜいじゃく)性だということを最初に覚えておいてください(画面1)。
- BitLockerのセキュリティ機能のバイパスの脆弱性(CVE-2024-20666)(Microsoft Security Response Center)
また、Microsoftが対策を講じるまでに自分たちできるエラーの回避策については、以下の連載記事にまとめてあります。
- Windows 10/11で「2024年1月の更新プログラム」のインストールが失敗(エラー0x80070643)! その原因は?(連載:企業ユーザーに贈るWindows 11への乗り換え案内 第29回)
エラーの原因は、“更新されたWinREを格納する回復パーティションの空き容量不足”であり、それを解消すれば、エラーを回避してインストールを成功させることができます。つまり、CVE-2024-20666の脆弱性に対策できるということです。しかしながら、情報が少ない中で、検証しながら書いた記事であり、少し難解なところもあったかもしれません。
WinREに対する手動のオフラインパッチを一部のWindowsに対してWindows Updateで強行
CVE-2024-20666のWebページで説明されているように、「Windows 11」のバージョン22H2とバージョン23H2では、WinREの更新は品質更新プログラムに含まれており、回復パーティションの空き容量が足りない場合、WinREの更新は元のイメージにロールバックされ、サイレントに失敗します。それについては、本連載第6回で説明しました。
しかし、WinREが更新されない場合、脆弱性は放置されることになります。これまでに公開されたWinREのBitLockerパイパスの脆弱性は、前述のように悪用の可能性は低いため、そうだとしても重大な問題にはならないでしょう。しかし、今後、WinREに悪用の可能性がある重大な脆弱性が見つかった場合、そうともいっていられません。
CVE-2024-20666のWebページでは、Windowsのさまざまなバージョン(「Windows Server 2016」「Windows Server 2019」を除く)に対して、WinREを手動でオフラインパッチするPowerShellスクリプトも紹介されています。
このPowerShellスクリプトが、今回の更新エラー対策と伝えたニュースもありましたが、それは全くの誤報です。
このオフラインパッチをWindows 10 バージョン21H2/22H2、Windows 11 バージョン21H2、Windows Server 2022、Azure Stack HCI バージョン22H2、Windows Server 2022 Datacenter:Azure Editionに対して、「自動化ソリューション」として提供を強行した結果が、今回のセキュリティ更新プログラムのエラーを多発させたというわけです。
CVE-2024-20666のセキュリティ情報によると、Windows Server 2016やWindows Server 2019なども2024年1月の品質更新プログラムにCVE-2024-20666への対応が含まれているように書かれています。しかし、これらのOSについては回復パーティションのサイズに関係なく、WinREは更新されません。WinREの更新を伴わない形で、CVE-2024-20666に対する修正がOSに対して行われているのでしょう。
WinREの格納先となる回復パーティションは、以前はインストールやアップグレード時にWindowsが自動作成し、その際にセットアップされたイメージ(winre.wim)をそのまま使用していました。
WinREがWindows Updateで更新されるようになったのは、Windows 11 バージョン22H2の途中からです。Windows 11 バージョン23H2は、WinREの更新の可能性を最初から知っている最初のバージョンです。そのため、Windows 11 バージョン22H2以前や、Windows 11 バージョン22H2から有効化パッケージで更新されたバージョン23H2(回復パーティションは維持される)では、セキュリティまたは品質更新プログラムによるWinREの更新は失敗する可能性があります。
以下の表1は、Windows 10 バージョン22H2、Windows 11 バージョン22H2、Windows 11バージョン23H2を、Windowsセットアップにパーティション作成を任せて新規インストールした場合の「回復パーティションのサイズ」「WinREのサイズ(使用したISOイメージによって異なる場合があります)」「空き領域」「2024年1月に更新されたWinREのサイズ」「WinREの更新の成功/失敗」をまとめたものです。
回復パーティションのサイズ | 元のWinREのサイズ | 空き領域 | 1月更新のWinREのサイズ | WinREの増分 | WinREの更新 | |
---|---|---|---|---|---|---|
Windows 10 バージョン22H2 | 589MB | 490MB | 83MB | 512MB | 22MB | 失敗 |
Windows 11 バージョン22H2 | 678MB | 575MB | 83MB | 623MB | 48MB | 失敗 |
Windows 11 バージョン23H2 | 801MB | 708MB | 83MB | 713MB | 6MB | 成功 |
表1 Windowsセットアップが自動作成したパーティション構成では、Windows 11 バージョン23H2以外は空き容量不足でWinREの更新に失敗 |
これらの情報は、「C:\Windows\Logs\WinREAgent\setupact.log」にも以下のように記録されますが、実際とは異なるサイズであったため、実際のファイルサイズや空き容量を調べました。
WinRE partition total space [<パーティションサイズ>], free space [<空き領域>], winre size [<現在のWinREのサイズ>], target WinRE size [<更新されたWinREのサイズ>]
Free space requirement: [<必要な空き領域(54525952バイト=52MB固定)>]
「setupact.log」によると、回復パーティションに必要な空き領域は52MB(固定)となっており、表1に示したように、今回のWinREの更新には必要な容量があるように見えます(83MB−22MB=61MB>52MB)。しかし、実際には失敗しました(画面2)。
Windows 10/11の通常のインストールでは、回復パーティションはディスクの最後に配置されています。そのため、その1つ前にあるOS用パーティションの領域を縮小(Shrink)して、未使用領域を確保し、その領域を含めて回復パーティションを作成し直して、WinREをセットアップし直せば、更新プログラムのインストールは成功します。
現在、問題のセキュリティ更新プログラムのWebページには、「この更新プログラムを正常にインストールするには、回復パーティションに 250 MB の空き領域が必要です」と書いてあります(2024年1月12日に追記)が、実際には50〜100MB程度追加するだけで成功しました。
「250MB」という数字は、おそらく以下のドキュメントの「少なくとも100MBが必要ですが、250MBが推奨されます」からのものでしょう。
- UEFI/GPTベースのハードドライブパーティション|回復ツールのパーティション(Microsoft Learn)
実際に必要な空き領域は、「setupact.log」の52MB(固定)なのだと思います。上記ドキュメントには、回復パーティションにはファイルシステム自体に5〜15MB(750MBのNTFSボリュームの場合)以上が予約される可能性があるとも書いてあります。おそらく、その要約された領域の影響で52MBより小さくなってしまい(83MB−22MB−11MB〜=〜51MB<52MB)、失敗したのだと想像します。
なお、容量不足による失敗(ロールバック)については、同じログファイルに次のように記録されます(品質更新プログラムによるWinRE更新の失敗の記録は確認できませんでした)。
[WinREUpdInst] Failed to stage WinRE servicing operation due to insufficient disk space in WinRE partition[gle=0x0000012a]
Windows 11 バージョン22H2では、2024年1月の品質更新プログラムでWinREが更新されました。しかし、既定のパーティション構成では明らかに容量不足(83MB−48MB=35MB<52MB)であり、WinREは更新されずにロールバックされます。品質更新プログラムのインストールは成功したことにされ、WinREが更新されなかったことがユーザーに通知されることはありません(画面3、画面4)。
Windows 11 バージョン22H2からバージョン23H2に、有効化パッケージで更新したデバイスも同じ挙動を示すはずです。これは注意すべき挙動です。「CVE-2024-20666」の脆弱性への対策を含む更新プログラムでありながら、脆弱性は放置されることになるからです。
前述のように、今回の脆弱性はBitLockerドライブ暗号化を利用していない限り、影響を受けませんし、影響を受けるとしても悪用の可能性が低いため、放置しても問題はありません。しかし、今後、より深刻なセキュリティ問題でWinREの更新が必要になったことを考えてみてください。また、Windows Server 2016やWindows Server 2019の既定のパーティション構成では回復パーティションがディスクの先頭に位置しているため、緊急でWinREの更新が必要になった場合、かなり厄介です。
手動オフラインパッチは今回の更新エラーの解決策にはならない
Windowsセットアップが自動作成したパーティション構成のWindows 10 バージョン22H2(x64)環境に、「KB5034957」に従って手動でオフラインパッチを実施したところ、問題なく更新は成功しました。つまり、CVE-2024-20666に対策できました(画面5)。
このオフラインパッチのPowerShellスクリプトは、回復パーティション内のWinREイメージを直接ローカルにマウントし、パッチした上でアンマウントするという動きをします。パッチ後のWinREイメージのサイズは更新前とほとんど変わりませんでした。
2023年3月にWindows 10/11向けに同じように、以下のWinREのオフラインパッチ用スクリプトが提供されたことがありました(その後、Windows 11 バージョン22H2以降については、2023年6月のCリリース以降から品質更新プログラムでWinREが更新されるように変更されました)。そのときは、回復パーティションの空き容量不足でスクリプトが失敗することがありましたが、今回はサイズが微増であったため、“たまたま成功した”のだと思います。
しかしながら、その後Windows Updateを実行すると、セキュリティ更新プログラム「KB5034441」が検出、ダウンロード、インストールされ、そしてエラー「0x80070643」で失敗を繰り返します(画面6)。CVE-2024-20666には対策済みであり、セキュリティ更新プログラム「KB5034441」は不要のはずです。これが検出されるのは、「自動化ソリューション」がWinREの現在のバージョンをチェックしていないからと思われます。
これだけではない、WinREセキュリティ更新プログラムの重大な問題
今回のWinREのセキュリティ更新プログラム「KB5034439」「KB5034440」「KB5034441」には、回復パーティションの空き容量による失敗以外にも、別の問題が確認されています。
WinREが無効化されているWindowsでも、これらのセキュリティ更新プログラムが検出、ダウンロード、インストールされ、同じエラー「0x80070643」を報告して失敗するのです(画面7)。この問題は「KB5034439」「KB5034440」「KB5034441」の既知の問題に追加されました。Microsoftによる解決策が提供されるまでは安全に無視できるとされています。
画面7 「reagentc /disable」コマンドでWinREを無効にすると、回復パーティションの空き領域が十分あっても、WinREのセキュリティ更新プログラムが検出、ダウンロード、インストールされ、失敗する
Azure Marketplaceの「Windows Server 2022 Datacenter: Azure Edition/Azure Edition Core」をMicrosoft Azure上にデプロイした場合は、WinREが既定で無効化され、回復パーティションはそもそも存在しません。そのため、デスクトップエクスペリエンスでも、Server Coreインストールでもインストールに失敗します(画面8)。この問題は、発生する可能性のある「KB5034441」の既知の問題には追加されていません。
Windows Server 2022、Azure Stack HCI バージョン22H2(Server Coreベース)、Azure Edition向けのセキュリティ更新プログラム「KB5034439」については、また別の問題があります。Server Coreインストール環境の場合、これもインストールの失敗を繰り返します。
「setupact.log」には、「[WinREUpdInst]Failed to add DISM package by path[gle=0x0000007a]」が記録されます(画面9)。Srever CoreインストールでのCVE-2022-41099の対策は、手動によるオフラインパッチで可能ですが、それを実施したとしても今回の更新プログラムのエラーが繰り返されることに変わりはありません(画面10)。
なぜ、今回の更新プログラムはこのように多数の問題を抱えたままリリースされたのか、それは、サポートされている全ての環境でテストしていないからに違いありません。
回復パーティション不足による更新の失敗は、KB情報公開時から分かっていたようですし、回復パーティションの拡張方法もKB情報までたどり着ければ最初から提供されていました。
しかし、回復パーティションが存在しない、WinRMが有効になっていない環境は想定していなかったようです(Azure Marketplaceで回復パーティションのないAzure Editionを提供しているのにもかかわらず)。そして、Server Coreの違いも想定しておらず、通常のWindowsと同じように更新できるはずだと思ったのでしょう。
Microsoftは2024年2月上旬に、回復パーティションの拡張に使用できる新たなPowerShellスクリプトを公開しました。筆者はこのPowerShellスクリプトで拡張できましたが、管理者権限での実行、PowerShellの実行ポリシーの設定、バックアップディレクトリの作成、スクリプトとの対話実行(英語)など、一般のユーザーにはハードルが高過ぎると感じました。なお、このスクリプトはWindows PowerShellでは問題なく機能するようですが、「PowerShell 7」(旧称、PowerShell Core)では、Split演算子の挙動の違いが原因でOSドライブの検出に失敗することを確認しています。
Microsoftの出した答えは――“問題の先送り”
このように、2024年1月のWinREのセキュリティ更新プログラム(自動化ソリューション)には、数多くの問題があります。そして、2024年2月のセキュリティ更新では、この問題は解決されませんでした。Microsoftはこの問題に、どのように対処するのでしょうか。まず、最優先でWinREのセキュリティ更新プログラム「KB5034439」「KB5034440」「KB5034441」を取り下げる(Windows Updateによる配布停止)べきだったのではないでしょうか。
パーティション構成は環境によりけりであるため、パーティションのサイズ調整を自動化することは難しいでしょう。それ以外の対応策を考えてみました。
(1)Windows 11 バージョン22H2以降のように、OSの品質更新プログラムにWinREの更新を含め、WinREを更新できなければサイレントに失敗させる
(2)WinREのパッチ後のサイズ増加を何らかの方法で抑制する
1つ目の方法は、これまで指摘したように、単に“問題の先送り”でしかありません。今後、より重大な脆弱性の発見でWinREの更新が必要になった場合、別の方法を考える必要があるでしょう。
また、Microsoftは2023年5月から段階的に進めているセキュアブート関連の脆弱性対策を、2024年10月に強制実施する予定です。これに備えるためにも、実は、WinREの更新が重要になります。
2つ目の方法は、現在のWinREを置き換えるのではなく、現在のWinREにパッチを適用しています。なぜ、サイズが最適化されたWinREイメージと置き換えないのかと疑問に思う人もいるかもしれませんが、WinREの環境はOEMベンダーがカスタマイズ可能な部分なので、単純に新しいWinREイメージで置き換えるわけにはいかないのです。
Microsoftは、2023年5月のセキュリティ更新(Bリリース)で、「Windowsブートマネージャー」を更新し、古いブートマネージャーを失効させるための「コード整合性ブートポリシー」(SKUSiPolicy.p7b)と、信頼されていないモジュールの読み込みをブロックする「禁止された署名リストデータベース」(DBX)の更新を、既定では無効な状態で提供しました(初期展開フェーズ)。
その後、2023年7月(Bリリース)に第2フェーズに進み、軽減策を有効にする簡略化された手順が追加されました。そして今後、2024年4月9日からの第3フェーズ(追加の脆弱なブートマネージャーのブロック、起動可能メディアの更新が必要)、2024年10月に最終フェーズ(SKUSiPolicy.p7bとDBXの強制施行)が予定されています。
強制施行が実施されると、更新されていない回復パーティションの古いWinREイメージや、古い起動可能なメディア(インストールメディア、システム修復ディスク、回復ドライブ)から、セキュアブートが有効なWindowsデバイスを起動できなくなる可能性があるのです。
最後に、これからWindows 10/11を新規インストールするという場合は、あらかじめ余裕のある容量で回復パーティションを手動作成してインストールすることをお勧めします。筆者の物理PCでは全て回復パーティションを手動作成してインストールしてあるので、今回のエラーの影響を受けることはありませんでした。
- Windows 10のOSイメージ展開の新常識(その1)――推奨パーティション構成(連載:企業ユーザーに贈るWindows 10への乗り換え案内 第34回)
筆者紹介
山市 良(やまいち りょう)
岩手県花巻市在住。Microsoft MVP 2008 to 2024(Cloud and Datacenter Management)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows版Docker&Windowsコンテナーテクノロジ入門』(日経BP社)、『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Windows 11登場! 11で変わること、思ったほど変わらないこと
新しいWindows OS「Windows 11」の正式出荷が2021年10月5日に開始された。Windows 10からの無償アップグレードが可能であるため、どのような新機能が実装されたのか気になる人も多いのではないだろうか。そこで、本稿ではWindows 11の新機能、削除された機能などを簡単にまとめてみた。 - Windows 11一般提供開始、企業での導入/展開時に注意すべきポイントは?
MicrosoftはWindowsデスクトップOSの最新バージョンである「Windows 11」を正式にリリースし、Windows 11対応ハードウェアを搭載したWindows 10デバイスに対して、無料アップグレードの段階的なロールアウトを開始しました。 - 買って、試して分かったWindows 365(契約・セットアップ編)
Microsoftからクラウド上でWindows 10が動く「クラウドPC」の利用可能なサブスクリプションサービス「Windows 365」の提供が開始された。早速、サブスクリプションを契約し、クラウドPCの設定を行ってみた。契約からセットアップまでで見えてきた便利な点、不便な点などをまとめてみた。 - いよいよ完全終了へ。Internet Explorer(IE)サポート終了スケジュール
長らくWindows OSに標準装備されてきたInternet Explorer(IE)。その「寿命」は各種サポートの終了時期に左右される。Windows OSごとにIEのサポート終了時期を分かりやすく図示しつつ、見えてきた「終わり」について解説する。