
Proof of concepts demonstrating some aspects of the Windows kernel shadow stack mitigation.
本项目旨在突出微软在 Windows 11 中实现的影子栈(shadow stack)缓解措施的某些方面。 该代码专门针对 Windows 11 24H2。 由于内核偏移量管理的原因,它可能无法在其他版本的 Windows 11 上运行。
项目分为两部分:一个客户端和一个驱动程序。 它们之间的通信通过 IOCTL 机制处理。 客户端请求驱动程序在内核级别执行操作。
CR4 寄存器中的 CET,会导致蓝屏(BSOD)。try/except 和影子栈的行为。使用 build.bat。
作为先决条件,以下套件必须针对同一 Windows 版本:
注意:
该 POC 已使用版本 10.0.26100.0 的套件进行过测试。
要启用内核影子栈缓解措施,必须在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\ 注册表项中添加或设置以下值:
| Name | Type | Data |
|---|---|---|
| EnableVirtualizationBasedSecurity | REG_DWORD | 1 |
| Scenarios\HypervisorEnforcedCodeIntegrity\Enabled | REG_DWORD | 1 |
| Scenarios\KernelShadowStacks\Enabled | REG_DWORD | 1 |
此外,为了加载测试签名驱动程序,需要在管理员控制台中运行以下命令:
bcdedit /set testsigning on
然后,需要重启。
要加载驱动程序,需要在管理员控制台中输入以下命令:
sc create shadow type= kernel binPath= ABSOLUTE_PATH_TO_THE_DRIVER
sc start shadow
客户端具有以下选项:
感谢 SergiusTheBest 提供的 FindWDK。
| Option | Description |
|---|
| inc | 将返回地址递增 1,使其指向调用者 |
| skip | 修补 RSP,使其指向前一个栈帧 |
| cdisable | 在 CR4 中禁用 CET |
| cenable | 在 CR4 中启用 CET |
| wrmsr REGISTER VALUE | 使用给定的 VALUE 写入 REGISTER |
| wrshsk | 写入影子栈 |
| wrshskpte | 重写影子栈 PTE |
| div DIVIDEND DIVISOR | 在内核空间执行整数除法 |