UEFI-code/WindowsDanger
GitHub: UEFI-code/WindowsDanger
一个实验性的 Windows 内核驱动,通过直接修改 x86 CPU 上下文(CR0/CR4、GDT、TSS IOPM、IDT)将用户态线程提升至 Ring0,帮助开发者学习和研究操作系统内核及硬件架构。
Stars: 13 | Forks: 6
# Windows 危险
WindowsDanger 是一个开源项目,旨在帮助开发者学习 Windows 内核以及其他 x86 特性。
**但是,我们不会修改/修补 Windows 代码**
**我们直接修改 x86 上下文**
**因此,我们不会绕过 PatchGuard,而是使用官方的测试模式**
这个驱动**梦想**能帮助开发者更方便地访问和操纵系统资源。通过安装并启动这个驱动,你可以将所有线程提升至 Ring0,从而完全控制底层硬件和系统资源。
⚠️ **警告**:请注意,使用 WindowsDanger 可能会导致系统不稳定、数据丢失或其他意外后果。请谨慎使用,并在安全的环境中进行测试。
本项目仍在开发中。为了更快的访问速度,请使用 [QEMU_Danger_x86](https://github.com/UEFI-code/QEMU_Danger_x86) 项目。
```Ke386SetIoAccessMap``` 和 ```Ke386IoSetAccessProcess``` 在 Win10/Server 2019 及更高版本中不可用。最好去了解一下 x86 CPU 是如何在 TSS 和 IOPM 中工作的,我只是这么做了😎
目前已实现:
- 通过修改 CR0 禁用写保护
- 将 GDT 中的 Ring3 段修改为 Ring0
- 修改 TSS IOPM (0~FF)
- 插入新的用户可调用 IDT 条目 78H 和 79H,78H 会将 IOPL 修改为 3,而 79H 会将线程的 CS & SS 修改为 Ring0
- 通过修改 CR4 禁用 SMAP/SMEP
- 适配多处理器系统
已知问题:
- 我懒得在中断处理程序中备份寄存器了,所以请自行备份
- 我懒得把 EXE 线程修改为 CS=0x30,而且我讨厌用废话代码去实现这个
- 所以我只是直接把它修改为 CS=0x10 罢了😎
- 我也懒得添加废话 hook 到 `#GP`/`#PF` 处理程序来识别 `CS=0x30`
- 所以如果你的 EXE 崩溃了,你将会面对 BSOD
想法:
- 从 Ring3 使用软 `int` 指令,并使用内核上下文直接 `ret`
- 修改 IOPL 也是一样的,只不过是将 `RFLAGS` 修改后再 `iretq`
## 功能
- Ring3 线程在执行 `int 078h` 后可以直接操作 IO (0~FF)
- 只需简单地执行 `int 079h` 即可将任何线程提升至 Ring0,从而完全控制底层系统资源
- 促进硬件调试和内核破解学习
- 已在 Hyper-V 上的 Windows Server 2022 x64 上测试通过
### 提示
- 我建议你在 QEMU / 物理电脑上运行,因为 Hyper-V 的表现可能会有点奇怪。
- 我发现 Azure Hypervisor 对 vmexit 的限制可能很严格,如果你修改 CR0/GDT,你会收到未定义异常。
```
Unknown exception - code c0000096 (!!! second chance !!!)
WindowsDanger!Disable_WriteProtect+0x9:
fffff802`662c112e 0f22c0 mov cr0,rax
```
- 如果你购买 PC / 网卡,请确保它支持 NT-Kernel-Dbg。你可以在 MS-Learn 上搜索这些信息。
## 安装
**必须附加内核调试器以防止 BSOD**,因为如果没有内核调试器,```int 3``` 将会触发 BSOD。
1. 下载最新版本的 WindowsDanger 驱动。
2. 将驱动文件复制到合适的目录中(例如 `C:\kd`)。
3. 使用管理员权限运行以下命令来安装驱动:
```
sc create WindowsDanger type= kernel binPath= C:\kd\WindowsDanger.sys
```
4. 启动驱动:
```
sc start WindowsDanger
```
## 运行
- [IoCTL_Caller](UserMode_Caller):向我们的内核驱动发送请求。支持的命令:
- 0 : 通过修改 CR0 禁用写保护
- 1 : 将 GDT 中的 Ring3 段修改为 Ring0 & 修改 TSS_IOPM
- 2 : 将 CR3 映射到虚拟地址
- 3 : 插入新的用户可调用 IDT 条目 78H 和 79H
- 4 : 通过修改 CR4 禁用 SMAP/SMEP
- [InterruptTester](UserMode_InterruptTester):测试我们新的 IDT 条目 78H 和 79H
- 78H : 修改 IOPL -> 3
- 79H : 修改当前线程 -> Ring0-Kernel !!
**请注意,在使用 `int 078h/079h` 之前,你必须通过 (1, 4, 3) 修改 GDT、禁用 SMAP/SMEP 并插入新的 IDT 条目。**
## 卸载
1. 停止驱动:
```
sc stop WindowsDanger
```
2. 移除驱动:
```
sc delete WindowsDanger
```
3. 删除驱动文件。
## 学习资源
0. [实验手册](LabHandBooks):包含 Microsoft-Student-Ambassador 研讨会和一些 dbg 日志
1. 下载 WinDbg
2. 安装 [WDK](https://learn.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk?wt.mc_id=studentamb_188195)
3. 阅读 Microsoft Learn 上的[内核调试文档](https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/setting-up-a-network-debugging-connection?wt.mc_id=studentamb_188195)
4. 阅读我的[实验日志](Experiment_Record_GPT4.md)了解更多详情
5. 课程:[Arch2001_x86-64_OS_Internals](https://apps.p.ost2.fyi/learning/course/course-v1:OpenSecurityTraining2+Arch2001_x86-64_OS_Internals+2021_v1/home)
## 许可证
WindowsDanger 采用 [MIT 许可证](LICENSE)授权。有关更多信息,请参阅 [LICENSE](LICENSE) 文件。
## 支持与反馈
如果你在使用 WindowsDanger 时遇到任何问题,或者有任何建议和反馈,请在 [Issues](https://github.com/UEFI-code/WindowsDanger/issues) 页面提交你的问题。
## 免责声明
WindowsDanger 仅用于学习和研究目的。使用此驱动可能会导致系统不稳定、数据丢失或其他意外后果。项目作者和贡献者不对因使用此驱动而造成的任何损坏或损失负责。使用 WindowsDanger 即表示你同意承担所有风险。
标签:UML, Web报告查看器, Windows驱动, x86架构, 内核开发, 客户端加密, 底层技术, 提权, 系统编程, 身份验证强制