微软签名的“内鬼”驱动:LocalStranger 演示 BYOVD 本地提权
Ots安全
2026年9月25日 12:51
广东
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
威胁简报
恶意软件
漏洞攻击
一句话速览:GitHub 新仓库 LocalStranger(发布 4 天)公开了一套利用 WinNotify.sys(别名 msft.sys)实现 Windows 本地提权的 PoC。该驱动持有有效微软 Authenticode 签名、未进入微软脆弱驱动黑名单,任何用户态进程只需打开 \\\\.\\WinNotify 并调用 3 个 IOCTL,就能从低权限账户一路提到 NT AUTHORITY\\SYSTEM。
LocalStranger 是什么
LocalStranger 是 nbs32k 发布的一套本地提权 PoC,核心目标是演示一个微软签名的脆弱内核驱动到底有多危险。项目包含 4 个目录:
lsapi
:用户态与驱动通信的核心 API 封装,提供进程读写、物理/虚拟内存读写、KASLR 绕过。
* lsmapper
:C++ 编写的驱动映射器,用于把无签名驱动注入内核空间。
* lselevate
:提权程序,自动化实现 NT AUTHORITY\\SYSTEM。
* msft.sys
/ shared:仓库内还放有一份 msft.sys(作者把 WinNotify.sys 重命名)。
作者 README 自己写明:代码无许可证、仅用于 Proof of Concept;驱动“complete lack of caller validation”(完全不做调用者校验),拥有 Microsoft Windows Hardware Compatibility Publisher 签名且未上黑名单。
安全常识:Windows 内核签名只证明驱动来源可信,不证明它没有漏洞。BYOVD(Bring Your Own Vulnerable Driver)攻击正是利用这一点,把“合法签名”当成进入 Ring 0 的通行证。
图 1:自制示意图 —— 微软 WHCP 签名、不在黑名单、无调用者校验,三者叠加使 WinNotify.sys 能把任意用户进程的内核读写原语暴露给 Ring 3。
核心原理:3 个 IOCTL 完成 SYSTEM 提权
根据 ZOOZ Engineering 的独立分析与中文区公开逆向,WinNotify.sys 的设备名为 \\\\.\\WinNotify,其分发函数中有三个关键 IOCTL:
| IOCTL | 功能 | 在利用链中的作用 |
|---|---|---|
0x22200C |
获取指定内核模块基址 | 击败 KASLR :先拿到 ntoskrnl.exe 的加载地址 |
0x222040 |
任意内核读(直接拷贝) | 读取 EPROCESS :定位 PsInitialSystemProcess,再遍历链表找到 SYSTEM 进程结构 |
0x222044 |
任意内核写(直接拷贝) | 替换 Token :把当前进程的 EPROCESS.Token 字段覆盖为 SYSTEM 进程的 Token |
不需要执行任何内核 Shellcode、ROP 链或 PatchGuard 对抗:只要 3 次 DeviceIoControl 调用,当前进程的身份令牌就等同于 SYSTEM。LocalStranger 的 lselevate 正是把这套步骤自动化。
图 2:自制示意图 —— 3 个 IOCTL 串成的模拟提权链:KASLR → 读 SYSTEM EPROCESS → 写 Token → SYSTEM。所有步骤均需在受控环境中进行。
模拟攻击演示场景(仅限隔离实验室)
⚠️ 声明:以下场景为纯概念级模拟,用于说明防御者需重点监控哪些行为。请勿在任何生产或他人系统上执行;相关法律风险见文末合规提示。
靶机:一台关闭 HVCI、关闭 WDAC 的 Windows 10/11 虚拟机(普通域用户 user01)。
阶段 1:准备脆弱驱动
攻击者已从 GitHub 获取 LocalStranger,将 msft.sys(即 WinNotify.sys)拷贝到目标机,并使用管理员权限注册为内核服务:
sc create WinNotify binPath= C:\\lab\\msft.sys type= kernel start= demandsc start WinNotify
防御注意点:BYOVD 首次落地需要管理员或能安装驱动的权限;一旦驱动加载成功,后续不再需要高权限即可通过 DeviceIoControl 操作内核。
阶段 2:调用 IOCTL 0x22200C 获取内核基址
用户态 PoC 打开 \\\\.\\WinNotify,向驱动询问 ntoskrnl.exe 的加载地址,成功绕过 KASLR。
阶段 3:调用 IOCTL 0x222040 读取 SYSTEM Token
用已知的内核基址计算出 PsInitialSystemProcess 指针,通过任意内核读遍历 ActiveProcessLinks 链表,定位 SYSTEM 进程的 EPROCESS 结构,并读出其中 Token 字段的值。
阶段 4:调用 IOCTL 0x222044 替换当前进程 Token
把当前普通用户进程的 EPROCESS.Token 覆盖为 SYSTEM 进程的 Token。操作系统自此认为该进程以 NT AUTHORITY\\SYSTEM 身份运行。
阶段 5:终止 EDR / 横向移动
由于 PoC 运行在 Ring 0 原语之上,可直接:
- 通过
PsTerminateProcess终止受 PPL 保护的 EDR 进程; - 清零 EDR 注册的 ObRegisterCallbacks 回调;
- 为后续 RAT、凭据窃取、横向移动扫清障碍。
这与 2026 年 Qilin / Warlock 勒索软件利用 BYOVD 先关闭 300+ 安全产品、再执行加密的路径在原理上完全一致。
图 3:自制示意图 —— 脆弱驱动运行在 Ring 0,可以向下终止或致盲用户态 EDR;而用户态防御组件无法向上阻止内核代码。
参考来源
- LocalStranger GitHub 仓库:
https://github.com/nbs32k/LocalStranger - ZOOZ Engineering 技术披露:WinNotify.sys/signeddrv.sys — Full Local Privilege Escalation via Arbitrary Kernel Read/Write
- Microsoft Support KB5020779:The vulnerable driver blocklist after the October 2022 preview release
- Arctic Wolf:CVE-2024-26234 for Windows and CVE-2024-29053 for Defender for IOT highlighted in Microsoft’s April 2024 Patch Tuesday
- Halcyon:Blocking BYOVD Techniques to Prevent AV/EDR/XDR Bypasses
- 中文区 WinNotify.sys / BYOVD 公开逆向分析(含 SHA256 与 IOCTL 表)
- LOLDrivers 项目:
https://www.loldrivers.io
END
公众号内容都来自国外等平台- 搜索的内容通过结合编写 -
公众号 | AnQuan7 (Ots安全)
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论