everest90909/YellowKey-WinRE-Remediation
GitHub: everest90909/YellowKey-WinRE-Remediation
Intune 终点合规修复包,检测并清除离线 WinRE 映像中被注入的 autofstx.exe 条目以缓解 YellowKey BitLocker 绕过漏洞。
Stars: 1 | Forks: 0
# YellowKey WinRE 修复
用于上述程序中描述的 CVE-2026-45585 YellowKey BitLocker/WinRE 绕过缓解的 Intune Remediation 包。
此包从离线 WinRE 映像的 `BootExecute` 值中移除 `autofstx.exe`,并刷新 WinRE 注册,从而恢复 BitLocker 信任。
## 目录
```
YellowKey-WinRE-Remediation/
scripts/
Detect-YellowKeyWinRE.ps1
Remediate-YellowKeyWinRE.ps1
.editorconfig
.gitattributes
.gitignore
README.md
```
## Intune 设置
为修复包使用以下设置:
| 设置 | 值 |
| --- | --- |
| 检测脚本 | `scripts/Detect-YellowKeyWinRE.ps1` |
| 修复脚本 | `scripts/Remediate-YellowKeyWinRE.ps1` |
| 使用已登录用户的凭据运行此脚本 | `No` |
| 强制执行脚本签名检查 | `No`,除非您对脚本进行了签名 |
| 在 64 位 PowerShell 中运行脚本 | `Yes` |
## 行为
检测:
- 需要提升的本地管理员或 SYSTEM 上下文。
- 需要 64 位 PowerShell。
- 使用 `reagentc.exe /mountre` 挂载 WinRE。
- 将离线 WinRE 的 `SYSTEM` 配置单元加载到一个临时的 HKLM 名称下。
- 检查每个离线的 `ControlSet###\Control\Session Manager\BootExecute` 值中是否存在 `autofstx.exe`。
- 卸载配置单元并放弃 WinRE 的挂载。
- 当发现 `autofstx.exe` 或检测无法安全完成时,退出代码为 `1`。
- 当未发现易受攻击的条目时,退出代码为 `0`。
修复:
- 执行与检测相同的环境保护措施。
- 如果 WinRE 被禁用且可以启用,则首先启用 WinRE。
- 使用 `reagentc.exe /mountre` 挂载 WinRE。
- 加载离线 WinRE 的 `SYSTEM` 配置单元。
- 从每个离线 ControlSet 中移除所有包含 `autofstx.exe` 的 `BootExecute` 条目。
- 在写入 `BootExecute` 时使用显式的 `RegistryValueKind.MultiString`。
- 拒绝写入空的 `BootExecute`;如果过滤后会导致其为空,则写入 Windows 默认值 `autocheck autochk *`。
- 在提交前卸载配置单元。
- 使用 `reagentc.exe /unmountre /commit` 提交 WinRE 映像。
- 运行 `reagentc.exe /disable` 和 `reagentc.exe /enable` 以刷新 WinRE 注册和 BitLocker 信任。
- 在失败时清理已加载的配置单元和已挂载的映像。
## 保护措施
这些脚本特意设计得较为保守:
- 不会直接暂停、移除或更改任何 BitLocker 保护程序。
- 此修复仅编辑离线 WinRE 映像,而不编辑实时操作系统的 `BootExecute` 值。
- 临时的配置单元名称和挂载路径包含随机后缀,以避免冲突。
- 失败清理时会卸载临时配置单元并放弃 WinRE 的挂载。
- 日志将写入 `C:\ProgramData\IntuneRemediations\YellowKey`。
## 日志
检测日志:
```
C:\ProgramData\IntuneRemediations\YellowKey\Detect.log
```
修复日志:
```
C:\ProgramData\IntuneRemediations\YellowKey\Remediate.log
```
## 本地验证
在不执行修复的情况下运行语法验证:
```
$paths = @(
'.\scripts\Detect-YellowKeyWinRE.ps1',
'.\scripts\Remediate-YellowKeyWinRE.ps1'
)
foreach ($path in $paths) {
$tokens = $null
$errors = $null
[System.Management.Automation.Language.Parser]::ParseFile($path, [ref] $tokens, [ref] $errors) | Out-Null
if ($errors.Count -gt 0) {
$errors | Format-Table
throw "Parse failed: $path"
}
}
```
如果已安装,请运行 Script Analyzer:
```
Invoke-ScriptAnalyzer -Path .\scripts -Recurse
```
## 操作说明
- 在广泛部署之前,请先在一个小型的试 点环中进行测试。
- 使用 `reagentc.exe /info` 确认代表性设备上的 WinRE 是否正常。
- 缺少或 WinRE 不健康的设备应单独进行修复。
- 如果您的组织对 Intune 脚本进行签名,请对两个 `.ps1` 文件都进行签名,并启用签名强制执行。
- 仅在需要时保留修复任务的分配,之后依赖检测/报告来进行合规性跟踪。
## 退出代码
| 脚本 | 退出 `0` | 退出 `1` |
| --- | --- | --- |
| 检测 | 合规或 WinRE 已禁用/不适用 | 存在漏洞或检测无法安全完成 |
| 修复 | 修复成功完成 | 修复失败或需要执行清理 |
标签:AI合规, Intune, IPv6, Libemu, PowerShell, 漏洞缓解, 系统运维, 终端管理