Windows: make EFI trust checks dbx-aware

Reject revoked loader CA sets and diagnose the chainloaded Windows manager. Add PCA 2011 migration warnings and update Secure Boot guidance.
This commit is contained in:
Mounir IDRASSI
2026-07-13 22:54:49 +09:00
parent fdd8d77e7c
commit 301496c7e2
55 changed files with 1033 additions and 245 deletions
+25 -13
View File
@@ -53,7 +53,7 @@ VeraCrypt系统加密兼容EFI Secure Boot(安全启动):VeraCrypt EFI引
</li>
</ul>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
在安装、升级、修复/重新安装以及开始系统加密时,VeraCrypt会读取固件db,并选择签名CA受固件信任的引导加载程序套件。如果存在2023 CA对,则优先使用2023套件;否则,在 <em>Microsoft Corporation UEFI CA 2011</em> 受信任时使用2011套件。如果启用安全启动且固件不信任任何套件,VeraCrypt会拒绝安装其引导加载程序并显示错误,而不会安装一个在下次重启时会被固件拒绝的加载程序。
在安装、升级、修复/重新安装以及开始系统加密时,VeraCrypt会读取固件db和dbx,并选择其已知签名CA存在于db且未列入dbx的套件。可选的dbx变量可以合法地不存在(自定义密钥系统尤其如此);此状态按空禁止数据库处理,而启用安全启动时真正的读取或解析错误仍会导致拒绝安装。若2023 CA对可用则优先选择2023套件,否则在存在 <em>Microsoft Corporation UEFI CA 2011</em> 时使用2011套件。
</div>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
更改固件安全启动配置(例如在BIOS设置中启用其他证书)本身不会重写已经安装到EFI系统分区上的文件。更改固件安全启动数据库后,请以 <em>修复/重新安装</em> 模式运行VeraCrypt安装程序,或让VeraCrypt System Favorites服务自动刷新引导加载程序(它会在Windows启动、会话登录或解锁、从睡眠恢复以及关机时重新评估选择)。
@@ -68,6 +68,11 @@ HKEY_LOCAL_MACHINE\SOFTWARE\VeraCrypt\Diagnostics\EfiBootLoader
EfiBootLoaderResourceSet REG_DWORD 2011 (0x7db) 或 2023 (0x7e7)
EfiBootLoaderSelectionReason REG_SZ 可读的选择原因
EfiBootLoaderFirmwareDbLastError REG_DWORD 上次读取/解析固件db的错误(0 = 无)
EfiBootLoaderFirmwareDbxLastError REG_DWORD 上次读取/解析dbx的错误(0 = 无)
FirmwareDbxPresent REG_DWORD dbx是否存在(0可为合法缺失)
EfiBootLoaderInstalledResourceSet REG_DWORD 由ESP实际文件识别的套件
VeraCryptLoaderFilesValid REG_DWORD DCS文件与一个内嵌套件完全匹配
WindowsLoaderSigner REG_DWORD 内嵌签名:0、2011或2023
EfiBootLoaderSelectionTimeUtc REG_SZ 上次选择的时间
</pre>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
@@ -83,9 +88,13 @@ $t = [Text.Encoding]::ASCII.GetString((Get-SecureBootUEFI db).Bytes)
'Microsoft UEFI CA 2023',
'Microsoft Option ROM UEFI CA 2023' |
ForEach-Object { "$_ : $($t -match [regex]::Escape($_))" }
# 将ESP挂载为S:后检查内嵌签名;不要依赖可能返回目录签名的命令。
Get-PfxCertificate -FilePath S:\EFI\Microsoft\Boot\bootmgfw_ms.vc |
Select-Object Subject,Issuer,Thumbprint
</pre>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
此外,当VeraCrypt System Favorites服务检测到当前安全启动db不再信任已安装启动链中的某个组件时,会向Windows应用程序事件日志(源 <em>VeraCryptSystemFavorites</em>)写入警告。
此外,VeraCrypt System Favorites服务会针对实际DCS文件与内嵌套件不匹配、Windows启动管理器缺失或其内嵌签名无法识别、已知所需CA不在db或被列入dbx,以及PCA 2011副本需要迁移等情况写入警告。这只是“已知CA兼容性”评估,并非固件一定接受映像的证明;dbx还可撤销映像哈希、证书TBS哈希和安全版本。
</div>
<h2>Microsoft 2023证书过渡</h2>
@@ -97,10 +106,10 @@ VeraCrypt用户需要注意两点:
</div>
<ul style="text-align:left; margin-top:18px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
<li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
<strong>证书到期不会阻止已安装的引导加载程序启动。</strong> UEFI固件在安全启动验证期间不会评估证书有效期,因此通过2011 CA签名的引导加载程序在到期日期之后仍会在几乎所有固件实现上继续加载。到期意味着 <em>新的</em> 二进制文件不能再通过2011 CA签名,并且从未收到2023证书的系统将停止接收启动链安全更新。
<strong>证书到期通常不会阻止已安装的引导加载程序启动。</strong> UEFI安全启动映像验证通常不强制执行签名证书有效期,因此仅因2011 CA到期并不会拒绝加载程序。但新的二进制文件无法继续通过该签名体系签发,未获得2023证书的系统也无法接收由替代CA签名的启动链更新。
</li>
<li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
<strong>未来撤销2011 CA会阻止通过它们签名的引导加载程序启动。</strong> Microsoft已宣布,在过渡的后续阶段(尚未排期),可能会通过安全启动禁止签名数据库(dbx)在已完成过渡的系统上撤销2011 CA。因此建议在该阶段之前迁移到2023引导加载程序套件。
<strong>证书到期与撤销是两回事。</strong> Microsoft提供了一项需明确执行的独立缓解措施,将 <em>Microsoft Windows Production PCA 2011</em> 添加到安全启动禁止签名数据库(dbx);应用后,所有通过该CA签名的Windows启动管理器都会被拒绝。此Windows PCA撤销不属于下文由 <code>0x5944</code> 执行的证书/启动管理器迁移。截至2026年7月,<a href="https://techcommunity.microsoft.com/blog/linuxandopensourceblog/what-it-teams-need-to-know-about-linux-secure-boot-certificates-expiring-in-2026/4530725">Microsoft表示目前没有撤销Microsoft Corporation UEFI CA 2011的计划</a>;该第三方CA用于VeraCrypt 2011引导加载程序套件。尽管如此,在应用任何Windows PCA 2011撤销之前,仍建议将启动链中的VeraCrypt和Windows部分都迁移到相应的2023 CA。
</li>
</ul>
@@ -114,10 +123,10 @@ VeraCrypt用户需要注意两点:
<h2>将现有系统更新到2023证书</h2>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
Windows通过基于遥测的分阶段部署流程分发2023证书。只有在Microsoft对设备硬件/固件组合有足够信心后,设备才会自动更新。由于VeraCrypt系统加密的计算机通过非标准启动链启动(VeraCrypt引导加载程序占用Windows启动管理器的位置),此类计算机通常不会被归类为自动更新对象,因此部署流程不会自行触发。Windows安全中心可能报告 <em>&quot;not yet enough data to classify your device&quot;</em>。同样,选择加入Microsoft管理的部署流程(<code>MicrosoftUpdateManagedOptIn</code> 注册表值)在这些计算机上可能仍不足以触发更新。
Windows通过基于遥测的分阶段部署流程分发2023证书。只有在Microsoft对设备硬件/固件组合有足够信心后,设备才会自动更新。VeraCrypt系统加密计算机采用非标准启动链,因为VeraCrypt引导加载程序占用Windows启动管理器的标准位置;这可能影响维护检查,但Microsoft并未将VeraCrypt列为必然排除在部署之外的条件。Windows安全中心显示 <em>&quot;not yet enough data to classify your device&quot;</em> 只表示当前部署状态,不能证明原因是VeraCrypt。<code>MicrosoftUpdateManagedOptIn</code> 是加入Microsoft异步托管部署的另一种方式,需要允许发送相应的诊断数据,也不保证立即部署。不要把该方式与手动设置 <code>AvailableUpdates</code> 混用。
</div>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
Microsoft文档提供了一个用于显式触发更新的注册表值(参见Microsoft KB5068202,<em>&quot;Registry key updates for Secure Boot&quot;</em>)。在以管理员身份打开的命令提示符中运行:
对于受控的手动部署,Microsoft将 <code>0x5944</code> 记录为显式请求2023 CA、KEK和Windows启动管理器迁移的值(参见<a href="https://support.microsoft.com/en-us/topic/registry-key-updates-for-secure-boot-windows-devices-with-it-managed-updates-a7be69c9-4634-42e1-9ca1-df06f43f360d">Microsoft安全启动注册表指导</a>)。它<strong>不会</strong>应用Windows PCA 2011的dbx撤销,VeraCrypt也绝不会自动设置此值。阅读下述预防措施后,才应在完全更新的Windows上使用:
</div>
<pre>
reg add HKLM\SYSTEM\CurrentControlSet\Control\Secureboot /v AvailableUpdates /t REG_DWORD /d 0x5944 /f
@@ -126,7 +135,7 @@ rem 可选:立即运行维护任务(否则它每 12 小时运行一次):
schtasks /Run /TN "\Microsoft\Windows\PI\Secure-Boot-Update"
</pre>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
可在 <code>HKLM\SYSTEM\CurrentControlSet\Control\Secureboot\Servicing</code> 下监视进度(值 <code>UEFICA2023Status</code> 和 <code>UEFICA2023Error</code>),也可通过Windows事件日志中的安全启动维护事件监视。db更新会添加 <em>Windows UEFI CA 2023</em>;在已经信任 <em>Microsoft Corporation UEFI CA 2011</em> 的系统上(每台启用安全启动的VeraCrypt系统都是如此),还会添加 <em>Microsoft UEFI CA 2023</em> 和 <em>Microsoft Option ROM UEFI CA 2023</em>。
可在 <code>HKLM\SYSTEM\CurrentControlSet\Control\SecureBoot</code> 及其 <code>Servicing</code> 子项下监视进度,也可查看安全启动维护事件。<code>AvailableUpdates</code> 的预期变化顺序为 <code>0x5944</code>、<code>0x4100</code>,在所需任务运行和重启后最终为修饰值 <code>0x4000</code>。还应确认 <code>UEFICA2023Status=Updated</code> 并检查实际启动文件;仅有 <code>0x4000</code> 不能证明VeraCrypt的 <code>bootmgfw_ms.vc</code> 已刷新。db更新会添加 <em>Windows UEFI CA 2023</em>。对于已经信任 <em>Microsoft Corporation UEFI CA 2011</em> 的系统,它会有条件地添加 <em>Microsoft UEFI CA 2023</em> 和 <em>Microsoft Option ROM UEFI CA 2023</em>;并非所有可安装VeraCrypt的系统都具有该旧版第三方CA。
</div>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
在VeraCrypt系统加密机器上触发更新之前,请采取以下预防措施:
@@ -139,7 +148,7 @@ schtasks /Run /TN "\Microsoft\Windows\PI\Secure-Boot-Update"
<strong>首先创建或更新VeraCrypt救援盘</strong>,并验证它能够启动。
</li>
<li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
不要禁用 <em>VeraCrypt System Favorites</em> 服务或其引导加载程序更新功能。当Windows维护任务在标准位置安装2023证书签名的Windows启动管理器时,该服务负责保留VeraCrypt启动链:它将新的启动管理器保存为 <code>bootmgfw_ms.vc</code>(VeraCrypt在预启动身份验证后链式加载的副本),并恢复VeraCrypt引导加载程序。
不要禁用 <em>VeraCrypt System Favorites</em> 服务或其引导加载程序更新功能。如果Windows替换标准ESP位置的启动管理器,该服务会将其保存为 <code>bootmgfw_ms.vc</code> 并恢复VeraCrypt加载程序。如果标准路径保持不变,当前VeraCrypt还会检查 <code>%SystemRoot%\Boot\EFI_EX</code> 和 <code>%SystemRoot%\Boot\EFI</code> 中Windows维护的副本,验证内嵌签名,并用已知固件CA策略允许的最佳副本原子刷新 <code>bootmgfw_ms.vc</code>。
</li>
<li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
<strong>隐藏操作系统用户不应从隐藏操作系统触发更新。</strong> 运行隐藏操作系统时,自动启动链保留功能被禁用。
@@ -148,12 +157,15 @@ schtasks /Run /TN "\Microsoft\Windows\PI\Secure-Boot-Update"
避免在Windows替换启动管理器到下一次正常重启或关机之间强制断电。在大多数系统上,VeraCrypt启动项会在这个时间窗口内保持计算机可启动,但忽略启动顺序的固件可能会启动普通Windows启动管理器,而它无法启动加密的Windows(可用救援盘恢复)。
</li>
<li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
即使一切正常,也应预期Windows仍会报告安全启动证书维护未完全完成。Windows会检查标准启动管理器位置的文件是否为2023证书签名的Microsoft Boot Manager;在VeraCrypt系统上,该位置按设计保存VeraCrypt引导加载程序。此状态仅为显示问题,不影响系统安全性或运行。
由于标准Windows启动管理器位置按设计保存VeraCrypt加载程序,Windows可能仍报告迁移未完成。只有在固件db包含所需2023 CA、<code>EfiBootLoaderInstalledResourceSet</code> 从实际文件识别出2023套件、<code>bootmgfw_ms.vc</code> 的<em>内嵌</em>签发者为 <em>Windows UEFI CA 2023</em> 且事件日志无未解决维护错误后,才可将其视为可能的维护误报。
</li>
</ul>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
应用db更新后,VeraCrypt会在下次刷新引导加载程序时自动切换到2023引导加载程序套件(<em>修复/重新安装</em>、升级,或System Favorites服务的某个自动刷新点)。您可以在上文所述的诊断注册表键中验证结果,并在提示时重新创建救援盘。
</div>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
Windows PCA 2011的dbx撤销是后续的独立操作,详见 <a href="https://support.microsoft.com/en-us/topic/how-to-manage-the-windows-boot-manager-revocations-for-secure-boot-changes-associated-with-cve-2023-24932-41a975df-beb2-40c1-99a3-b3ff139f832d">Microsoft KB5025885</a>。在确认 <code>bootmgfw_ms.vc</code> 由 <em>Windows UEFI CA 2023</em> 签名、恢复介质已更新,并且启用安全启动的受控重启成功之前,不要请求其 <code>0x80</code> 位(或还会请求SVN更新的组合值 <code>0x280</code>)。VeraCrypt绝不会自动启用此撤销。
</div>
<h2>从安全启动故障中恢复</h2>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
@@ -172,19 +184,19 @@ schtasks /Run /TN "\Microsoft\Windows\PI\Secure-Boot-Update"
</div>
<ol style="text-align:left; margin-top:18px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
<li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
暂时在固件设置中禁用安全启动并正常启动Windows(禁用安全启动时VeraCrypt预启动身份验证仍可工作),或启动VeraCrypt救援盘并使用 <em>&quot;将VeraCrypt加载程序二进制文件恢复到系统磁盘&quot;</em>。
暂时在固件设置中禁用安全启动并正常启动Windows(禁用安全启动时VeraCrypt预启动身份验证仍可工作)。VeraCrypt救援盘可以恢复缺失或损坏的VeraCrypt引导加载程序组件,但无法生成当前的Windows启动管理器,也无法在PCA 2011 CA被加入dbx后使由其签名的 <code>bootmgfw_ms.vc</code> 重新获得信任;它不能替代完成Windows迁移。
</li>
<li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
在Windows中,根据需要调整固件/Windows安全启动证书(在固件设置中启用第三方CA,或按上文所述应用Windows安全启动证书更新),然后以 <em>修复/重新安装</em> 模式运行VeraCrypt安装程序。
在Windows中修复固件/Windows安全启动策略(启用第三方CA、自定义密钥流程后恢复当前dbx,或应用上述Windows更新),然后以 <em>修复/重新安装</em> 模式运行VeraCrypt。修复会检查Windows维护的 <code>EFI_EX</code>/<code>EFI</code> 副本,并可安装兼容的当前Windows启动管理器。
</li>
<li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
重新启用安全启动。
检查VeraCrypt诊断和内嵌签名,然后重新启用安全启动并执行一次受控重启。策略评估不完整或加载程序文件不兼容时不要重新启用。
</li>
</ol>
<h2>旧版自定义密钥步骤(已弃用)</h2>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
较旧的VeraCrypt版本曾记录一种自定义密钥流程(VeraCrypt-DCS的 <em>SecureBoot</em> 脚本,<code>sb_set_siglists.ps1</code>),它用自定义平台密钥和2011版Microsoft证书替换固件安全启动数据库。此流程<strong>已经弃用,在使用2023证书链的系统上不得使用</strong>:它会移除对2023证书签名的Windows启动管理器的信任,并在VeraCrypt预启动身份验证后破坏Windows启动过程。已应用该流程的系统应恢复制造商安全启动密钥,然后按照本页所述的正常步骤操作。
较旧VeraCrypt版本记录的自定义密钥流程(VeraCrypt-DCS <em>SecureBoot</em> 脚本 <code>sb_set_siglists.ps1</code>)会用自定义密钥、2011版Microsoft证书及过时的2018 dbx替换PK、KEK、db和dbx。此流程<strong>已经弃用,在2023证书链系统上不得使用</strong>:它会移除对新Windows启动管理器的信任、丢弃当前撤销并可能破坏Windows交接。应恢复制造商密钥和当前dbx。
</div>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
+1 -1
View File
@@ -61,7 +61,7 @@ VeraCrypt可以对系统分区或整个系统驱动器进行即时加密,即
由于BIOS要求,预启动密码需使用 <strong>美国键盘布局</strong> 输入。在系统加密过程中,VeraCrypt会自动透明地将键盘切换到美国布局,以确保输入的密码值与预启动模式下输入的密码值匹配。然而,从剪贴板粘贴密码可能会覆盖此保护措施。为防止因这种差异而产生的任何问题,VeraCrypt在系统加密向导中禁用了从剪贴板粘贴密码的选项。因此,在设置或输入密码时,务必手动使用与创建系统加密时相同的按键进行输入,以确保能够一致地访问您的加密系统。
</div>
<p>注意:默认情况下,Windows 7及更高版本从一个特殊的小分区启动。该分区包含启动系统所需的文件。Windows只允许具有管理员权限的应用程序在系统运行时写入该分区。在EFI启动模式(现代PC的默认模式)下,VeraCrypt无法加密此分区,因为它必须保持未加密状态,以便BIOS可以从中加载EFI引导加载程序。这反过来意味着在EFI启动模式下,VeraCrypt仅提供对安装Windows的系统分区进行加密(用户以后可以使用VeraCrypt手动加密其他数据分区)。在MBR传统启动模式下,只有当您选择加密整个系统驱动器(而不是仅选择加密安装Windows的分区)时,VeraCrypt才会对该分区进行加密。</p>
<p>在启用安全启动的EFI启动模式下,VeraCrypt会在安装、修复/重新安装、升级或Windows PostOOBE修复期间,选择受当前固件安全启动db信任且由Microsoft UEFI CA签名的引导加载程序套件。VeraCrypt 2023引导加载程序套件需要Microsoft UEFI CA 2023和Microsoft Option ROM UEFI CA 2023;2011引导加载程序套件需要Microsoft Corporation UEFI CA 2011。如果当前db不信任任何受支持的套件,VeraCrypt会中止操作,而不会安装会在下一次重启时被固件拒绝的加载程序。如果您手动更改固件安全启动db条目,请运行VeraCrypt修复/重新安装以刷新已安装的引导加载程序套件。有关详细信息,包括Microsoft 2023证书过渡和恢复步骤,请参阅 <a href="EFISecureBoot.html" style="text-align:left; color:#0080c0; text-decoration:none">EFI安全启动</a>。</p>
<p>在启用安全启动的EFI启动模式下,VeraCrypt会在安装、修复/重新安装、升级或Windows PostOOBE修复期间,选择由Microsoft UEFI CA签名且当前固件安全启动策略允许的引导加载程序套件:每个所需CA都必须存在于允许签名数据库(db)中,并且不在禁止签名数据库(dbx)中。VeraCrypt 2023引导加载程序套件需要Microsoft UEFI CA 2023和Microsoft Option ROM UEFI CA 2023;2011引导加载程序套件需要Microsoft Corporation UEFI CA 2011。如果当前db/dbx策略不允许任何受支持的套件,VeraCrypt会中止操作,而不会安装会在下一次重启时被固件拒绝的加载程序。如果您手动更改固件安全启动db或dbx条目,请运行VeraCrypt修复/重新安装以刷新已安装的引导加载程序套件。有关详细信息,包括Microsoft 2023证书过渡和恢复步骤,请参阅 <a href="EFISecureBoot.html" style="text-align:left; color:#0080c0; text-decoration:none">EFI安全启动</a>。</p>
<p>&nbsp;</p>
<p><a href="Hidden%20Operating%20System.html" style="text-align:left; color:#0080c0; text-decoration:none; font-weight:bold">下一部分 &gt;&gt;</a></p>
</div>