针对 LnvMSRIO.sys(联想 MSR I/O 驱动程序)的概念验证漏洞利用,演示了通过 Superfetch VA 到 PA 转换实现任意物理内存读写与内核内存访问。
| 属性 | 值 |
|---|---|
| 驱动程序名称 | LnvMSRIO.sys |
| 设备名称 | \\.\WinMsrDev |
| 服务名称 | LnvMSRIO |
| 供应商 | Lenovo |
| 用途 | 为系统实用程序提供 MSR 和物理内存访问 |
该驱动程序向用户模式暴露了特权内核操作:
物理内存读取(16 字节):
Offset 0: UInt64 PhysicalAddress
Offset 8: DWORD AccessSize (1=byte, 2=word, 8=qword)
Offset 12: DWORD Count (number of elements)
物理内存写入(16 字节头部 + 数据):
Offset 0: UInt64 PhysicalAddress
Offset 8: DWORD AccessSize
Offset 12: DWORD Count
Offset 16: Data[] (bytes to write)
由于该驱动程序仅提供物理内存访问,我们使用 Superfetch 技术将内核虚拟地址转换为物理地址:
NtQuerySystemInformation(SystemSuperfetchInformation) 向 Superfetch 查询物理内存范围LnvMSRIOExploit.exe <path_to_LnvMSRIO.sys>
要求:
LnvMSRIOExploit.dprojWin64\Release\LnvMSRIOExploit.exe本工具仅用于教育和授权的安全研究目的。对非您所有或未经明确授权测试的系统进行未授权使用属违法行为。作者不对滥用行为承担任何责任。
仅用于研究和教育目的。
| IOCTL 代码 | 功能 | 描述 | PoC |
|---|
0x9C406104 | 物理内存读取 | 通过 MmMapIoSpace 映射 | ✅ |
0x9C40A108 | 物理内存写入 | 映射并写入物理内存 | ✅ |
0x9C402084 | MSR 读取 | 读取特定型号寄存器(MSR) | ❌ |
0x9C402088 | MSR 写入 | 写入特定型号寄存器(MSR) | ❌ |