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, 漏洞缓解, 系统运维, 终端管理