文章总结: LocalStranger是GitHub新发布的本地提权PoC,利用微软签名的WinNotify.sys驱动(未上黑名单)通过3个IOCTL实现从低权限用户到SYSTEM的提权,演示了BYOVD攻击的危险性。文章详述了利用链原理、模拟攻击场景及防御注意点,并关联勒索软件利用BYOVD的路径,建议防御者重点监控驱动加载行为。 综合评分: 85 文章分类: 漏洞分析,恶意软件,红队,内网渗透
微软签名的“内鬼”驱动: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安全)
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Ots安全 《微软签名的“内鬼”驱动:LocalStranger 演示 BYOVD 本地提权》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论