gabriellandau/ItsNotASecurityBoundary
GitHub: gabriellandau/ItsNotASecurityBoundary
一个利用 Windows 代码完整性中虚假文件不可变性假设的概念验证工具,通过竞争条件绕过驱动签名验证、实现管理员到内核的权限提升。
Stars: 194 | Forks: 22
# 这不是安全边界
作者:[Elastic Security](https://www.elastic.co/security-labs/) 的 [Gabriel Landau](https://twitter.com/GabrielLandau)。
曾在 [BlueHat IL 2024](https://x.com/BlueHatIL/status/1792626026230456546)([摘要](https://x.com/GabrielLandau/status/1782400617836875956)、[幻灯片](Slides/BlueHatIL%202024%20-%20Smoke%20and%20Mirrors%20-%20Driver%20Signatures%20Are%20Optional.pdf)、[录像](https://www.youtube.com/watch?v=1LvOFU1u-eo))和 REcon Montreal 2024([摘要](https://cfp.recon.cx/recon2024/talk/337QFH/)、[幻灯片](Slides/REcon%20Montreal%202024%20Smoke%20and%20Mirrors%20-%20Driver%20Signatures%20Are%20Optional.pdf))上展示。
## 虚假文件不可变性
本仓库演示了一类长期存在的漏洞,我将其称为 **虚假文件不可变性** (FFI)。当代码因为文件是在没有 `FILE_SHARE_WRITE` 的情况下打开的,而假设文件无法被修改时,就会发生 FFI。在某些情况下,即使拒绝写入共享,攻击者也有可能修改文件。一旦发生这种情况,任何多次读取文件中同一值/偏移量的代码都可能遭受双重读取漏洞。FFI 可能发生在传统 I/O(例如 `ReadFile`)或内存映射 I/O(例如 `MapViewOfFile`)中,并且可能影响用户模式和内核模式代码。
有关虚假文件不可变性的更多信息,请参阅我的[幻灯片](/Slides)和演讲。
## 这不是安全边界
ItsNotASecurityBoundary 是一个利用 Windows 代码完整性 (`ci.dll`) 中的虚假文件不可变性假设的漏洞利用程序,旨在诱骗其接受包含欺诈性 authentihash 的签名不当的安全目录。随着攻击者控制的 authentihash 被加载并受到 CI 信任,内核将加载攻击者选择的任何驱动程序,甚至是未签名的驱动程序。
https://github.com/gabriellandau/ItsNotASecurityBoundary/assets/42078554/753ede06-08c8-4204-a734-a5f583c6424a
为了利用 CI 中的这个漏洞,攻击者首先在攻击者控制的存储设备上植入一个安全目录,然后 CI 加载并解析该目录。当 CI 正在处理该目录时,攻击者在 CI 的签名验证和目录解析阶段之间快速注入恶意的 [authentihash](https://virustotal.readme.io/reference/authentihash)。此外,攻击者必须在这个短暂的时间窗口内强制丢弃内存映射的目录页面。由于这种紧凑的竞争,这是一个非确定性的漏洞利用。您可能需要运行 5 次以上才能成功。
ItsNotASecurityBoundary 这个名字是向 MSRC 的政策致敬,即“[管理员到内核不是安全边界。](https://www.microsoft.com/en-us/msrc/windows-security-servicing-criteria)”
有关 ItsNotASecurityBoundary 漏洞利用的更多详细信息,请参阅我的[幻灯片](/Slides)和演讲。
以下是幻灯片中概述攻击的图表:

## 好吧,但我们仍然可以轻松阻止它
FineButWeCanStillEasilyStopIt 是一个内核驱动程序,演示了如何检测和阻止 ItsNotASecurityBoundary 漏洞利用。由于第三方内核驱动程序无法安全地修改代码完整性的内部运作,它必须使用一个相当复杂的过程来识别和阻止漏洞利用,同时最大限度地减少可能中断良性系统行为的误报。在 CI 内部进行适当的修复会简单得多。
### 披露时间线和修复
* 2024-02-14 我向 MSRC 报告了 ItsNotASecurityBoundary 和 FineButWeCanStillEasilyStopIt,并建议了两个简单的低风险缓解措施。
* 2024-02-29 Windows Defender 团队联系以协调披露。
* 2024-04-23 Microsoft 发布了包含其中一个建议修复的 [KB5036980](https://support.microsoft.com/en-us/topic/april-23-2024-kb5036980-os-builds-22621-3527-and-22631-3527-preview-5a0d6c49-e42e-4eb4-8541-33a7139281ed) 预览版。
* 2024-05-14 修复作为 [KB5037771](https://support.microsoft.com/en-us/topic/may-14-2024-kb5037771-os-builds-22621-3593-and-22631-3593-e633ff2f-a021-4abb-bd2e-7f3687f166fe) 在 Windows 11 23H2 中达到全面发布 (GA)。我没有测试任何其他平台(Win10、Server 等)。
* 2024-05-20 我在 BlueHat IL 上展示了这项研究。
* 2024-06-14 MSRC 结案:“我们已完成调查,确定该案例目前不符合我们的服务标准。因此,我们为该问题开启了下一版本候选错误,并将针对即将发布的版本进行评估。再次感谢您与我们分享此报告。”
* 2024-06-30 我在 REcon Montreal 上展示了这项研究。
## 常见问题解答
##### 随着ItsNotASecurityBoundary 被修复,FFI 还重要吗?
ItsNotASecurityBoundary 既不是第一个也不是最后一个 FFI 漏洞。去年,我发布了 [PPLFault](https://github.com/gabriellandau/PPLFault),它利用了 Windows 内核中的 FFI 假设,实现了 admin-to-PPL(通过 AngryOrchard 实现 to-kernel),但我当时没有命名这个漏洞类别。现在同一个类别中有了两个公开的漏洞,似乎是正式描述和命名它的时候了。
ItsNotASecurityBoundary 不是 FFI 的终结。那里_确实_存在其他可利用的 FFI 漏洞。
##### 为什么 Admin-to-Kernel 很重要?
ItsNotASecurityBoundary 允许攻击者立即终止系统上的任何安全软件,同时使安全遥测失明并禁用可以阻止和/或隔离恶意软件的安全控制。通常,由于 [Windows 反恶意软件进程保护](https://learn.microsoft.com/en-us/windows/win32/services/protecting-anti-malware-services-),这种即时终止攻击是不可能的。
##### 攻击者不能直接使用有漏洞的驱动程序吗?
Microsoft 承认有漏洞的驱动程序是一个问题,并且正在积极通过易受攻击驱动程序阻止列表来减轻这种风险,该列表自 Windows 11 22H2 以来已[默认强制执行](https://learn.microsoft.com/en-us/windows/security/application-security/application-control/windows-defender-application-control/design/microsoft-recommended-driver-block-rules#microsoft-vulnerable-driver-blocklist)。Admin-to-kernel 漏洞利用可以达到与有漏洞的驱动程序相同的效果,但 MSRC 不优先处理它们,因此它们可能多年保持可利用状态。例如,2024 年 5 月发布的 [PPLsystem 漏洞利用](https://github.com/Slowerzs/PPLSystem) 利用了 James Forshaw 于 2018 年 11 月首次报告的 `IRundown::DoCallback` 漏洞。**这大约是 2000 天,而且截至撰写本文时 (2024-06-18) 该漏洞仍未修补。**
有关 admin-to-kernel 漏洞的更多观点,请参阅我去年写的[这篇社论](https://www.elastic.co/security-labs/forget-vulnerable-drivers-admin-is-all-you-need)。
##### 你为什么这么在意?
我协助构建 [Elastic Endpoint Security](https://www.elastic.co/security/endpoint-security) EDR。我们有保护客户的义务。像这样的 Windows 漏洞会让我们的客户处于危险之中。
## 许可证
本项目受 [ELv2 许可证](LICENSE.txt) 保护。它使用了来自 SystemInformer 的 [phnt](https://github.com/winsiderss/systeminformer/tree/25846070780183848dc8d8f335a54fa6e636e281/phnt),遵循 [MIT 许可证]([phnt/LICENSE.txt](https://github.com/winsiderss/systeminformer/blob/25846070780183848dc8d8f335a54fa6e636e281/LICENSE.txt))。
## 致谢
特别感谢 Windows Defender 团队在合理的时间范围内(90 天)快速修复[非安全边界](https://www.microsoft.com/en-us/msrc/windows-security-servicing-criteria)漏洞,即使 MSRC 不受理该案例。
标签:Authentihash, BlueHat, CI.dll, DSE绕过, PPL绕过, UML, Web报告查看器, Windows内核安全, 云资产清单, 代码完整性, 内存映射I/O, 内核攻击, 协议分析, 双重读取漏洞, 安全目录, 客户端加密, 客户端加密, 权限提升, 沙箱逃逸, 端点可见性, 虚假文件不可变性, 逆向工程, 驱动签名