2023/03/20

この脆弱性対策パッチはやっかいだ(セキュリティのことではなく、WinRE.wimに対するオフラインパッチが)

以下の脆弱性は、2022年11月に公表されたものですが...

BitLocker のセキュリティ機能のバイパスの脆弱性
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2022-41099
KB5025175: CVE-2022-41099 のセキュリティの脆弱性に対処するために、展開されたデバイスの WinRE パーティションを更新する
https://support.microsoft.com/help/5025175

今年1月には、Windows 回復環境(WinRE) の脆弱性について追加手順が必要なことは公表されてたんですけど、その手順が面倒。今回、PowerShell スクリプトを用意したということで情報が更新されました。しかし、このスクリプト、安易にやってしまうといろいろと面倒なことになるかもです。手順の説明も不親切。

CVE の FAQ を見ると、"標的に対して物理的にアクセスできる攻撃者は、この脆弱性を悪用して暗号化されたデータにアクセスできる可能性があります。"、その他のいろいろな"悪用することはできますか?” は "なし(No)"で悪用される可能性は低く、そもそも BitLocker ドライブ暗号化を利用していないならバイパスされるなんて関係ないので、多くのデバイスではこの脆弱性放置してもさほど問題はないはずです(自己判断で)。

回復パーティションの winre.wim に 2022-11 B リリースの更新をオフライン パッチする必要があるんですけど、それをやってくれるスクリプト(msuのダウンロードと指定は自分でする必要がある)が2023年3月に公開されました。なんですけど、...


回復パーティションのサイズが小さいと Commit に失敗しちゃいます(回復パーティションが Windows お任せで作られたものの場合、こうなると思います)。
 

PowerSell (管理者) ウィンドウをすべて閉じて、開き直して、DISM /Umount-Image ・Mountdir:・・・ /Discard すれば何事もなかったことに。ちなみに、Windows 11 22H2 の Oct 2022 ISO でインストールした場合、winre.wim  (22621.674) のサイズは 603,312,360 B。パッチ済み winre.wim (22621.815) のサイズは 813,114,210。Windows 10 x64 22H2 は約 400 MB から約 800 MBに倍増。 (※ Windows Safe OS Dynamic Update ってのでパッチすると容量節約できるかもらしい)
 
 

どうしても対策したければ、回復パーティションを作り直し、winre.wim に自分でオフラインパッチしたもので回復イメージを有効化してあげる必要があると思います。

(※ reagentc /disable で ローカルの WINRE を無効にしちゃうというのも対策として手っ取り早いかも。使う必要があるとき有効にするとか)

(※ 以降の手順はパーティション操作を迷いなくできる人向け。できない人はやっちゃだめ or フルバックアップしてからね、あと、コマンドライン適当に頭で考えながら書いたので、間違ってたらごめんなさい。でも自己責任で!)

消えた WINRE の回復(元のバージョンの WINRE)

拙著『Windows トラブル解決 コマンド&テクニック集』をお持ちの場合は、 P210あたりの手順でセットアップできます。

スクリプトのせいで以前は有効だったWinREが消えてなくなっちゃったという場合は、OS のISO メディアから再セットアップすることで回復できます。以下は、D:ドライブに ISO イメージがマウントされている場合。

DISKPART
> SELECT DISK 0(またはOSディスクの番号)
> SELECT PARTITION 4(または回復パーティションの番号)
> FORMAT QUICK FS=NTFS LABEL="WINRE"
> ASSIGN LETTER=R
> EXIT

DISM /mount-image /imagefile:D:\Sources\Install.wim /Index:1 /MountDir:C:\work\mount /ReadOnly

MD R:\Recovery\WindowsRE

XCOPY /h C:\work\mount\windows\system32\recovery\winre.wim R:\Recovery\WindowsRE

DISM /Unmount-Image /MountDir:C:\work\mount /Discard

reagentc /setreimage /path R:\Recovery\WindowsRE /target C:\Windows

bcdedit /v (OSのidentifierを確認)

reagentc /enable /osguid {OSのエントリのidentifier}

reagentc /info

(※ Disable のままの場合は、D:\Boot\boot.sdi を R:\Recovery\WindowsRE にコピーして再実行してみて)

DISKPART
> SELECT DISK 0(またはOSディスクの番号)
> SELECT PARTITION 4(または回復パーティションの番号)
> REMOVE
> EXIT

パッチ済み回復イメージ (WINRE) の作成

自分でパッチ済みイメージを作成する場合は、R:\Recovery\WindowsRE にコピーする前に、一時ディレクトリにコピーしておいての、

DISM /Mount-Image /imagefile:.\winre.wim /index:1 /mountdir:.\mount

DISM /Add-Package /Image:.\mount /PackagePath:ダウンロード先パス\windows11.0-kb5019980-x64.msu
(※ Safe OS Dynamic Update .cab だと Error で失敗した)

DISM /image:.\mount /cleanup-image /StartComponentCleanup /ResetBase

DISM /Unmount-Image /mountdir:.\mount /Commit

で更新された winre.wim を使って回復イメージをセットアップする。 

パッチ済回復イメージで WinRE 復活!(上は、TPM で保護された BitLocker ドライブ暗号化が有効な Windows 11 v22H2 デバイス。WinRE がパッチ済みのビルド 22621.819 になってます)。

(※BitLocker ドライブ暗号化が有効な場合、TPM による保護がなければ、スクリプトによって WinRE が無効化されるのは仕様だと思います)。

TPM で保護された BitLocker ドライブ暗号化なのに、reagentc で Enable にできないデバイスも 1 台ありました。winre.wim を格納できても、空き領域が少ないとそうなるらしい。C:ドライブをシュリンクして、回復パーティションを作り直し(もしアップグレードの繰り返しで余計な回復パーティションが存在する場合はこの機会に削除しちゃいましょ)、再セットアップしたら有効にできました。

回復パーティション 847 MB のとき(パッチ済み winre.wim の格納で空きは 70 MBくらい)のとき、WINRE を有効化できない。BitLocker を無効にすれば WINRE 有効にできるけど、再び暗号化すると WINRE が無効にされる:

回復パーティション(1GB)再構成&WinRE再セットアップ後:

余計なパーティションを含めて1GBの回復パーティションを再作成 (UEFIの場合)

DISKPART
> LIST DISK
> SELECT DISK #
> LIST PARTITION
> SELECT PARTITION 現在の回復パーティション#
> DELETE PARTITION OVERRIDE
> SELECT PARTITION 余計な回復パーティション#
> DELETE PARTITION OVERRIDE

(DISKPART だとめんどいので、ここでdiskmgmt.msc でC:の縮小や拡張で新回復パーティション用に1024MBの空きを作る)

> CREATE PARTITION PRIMARY
> FORMAT QUICK FS=NTFS LABEL="Recovery"
> ASSIGN LETTER="R"
> set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
> gpt attributes=0x8000000000000001
> EXIT

MD R:\Recovery\WindowsRE

XCOPY /h ....

reagentc /setreimage ...

bcdedit /v

reagentc /enable /osguid....

なんだかとても面倒なので(ここまで事前テストの 1 VMと 3 物理デバイスやるのに半日かかってしまった)、Windows 11 の物理マシンだけ対策して、Windows 10 マシンは BitLocker 使ってないので、 脆弱性のある WinRE のまま放置して EoS まで使うつもり。

関連:
Windows 10 の先頭の OEM パーティションが邪魔だから消す
Windows 10 の追加の OEM パーティションの謎(が解けたかも)
UEFI/GPT ベースのハード ドライブ パーティション
https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/configure-uefigpt-based-hard-drive-partitions?view=windows-11

4/20 追記)パーティションを変更した場合、以前のシステムイメージのバックアップを含むディスクにバックアップすると、「ファンクションが間違っています」エラーで失敗することがあるかも(余計な回復パーティション削除したぶん、C:を拡張したりして、バックアップ先vhdx内でのC:のパーティションサイズにおさまらなくなるとか?)? バックアップ先フォルダー(\WindowsImageBackup\ComputerName) or バックアップ先ディスクをフォーマットすると解消するかも。
 
”Windows バックアップで、バックアップ先へのデータの書き込み中にエラーが発生しました。(0x80780166)
追加情報: ファンクションが間違っています。(0x80070001)"
 

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。