微软签名的“内鬼”驱动:LocalStranger演示BYOVD本地提权

admin 2026-09-28 05:08:23 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 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;而用户态防御组件无法向上阻止内核代码。

参考来源

  1. LocalStranger GitHub 仓库:https://github.com/nbs32k/LocalStranger
  2. ZOOZ Engineering 技术披露:WinNotify.sys/signeddrv.sys — Full Local Privilege Escalation via Arbitrary Kernel Read/Write
  3. Microsoft Support KB5020779:The vulnerable driver blocklist after the October 2022 preview release
  4. Arctic Wolf:CVE-2024-26234 for Windows and CVE-2024-29053 for Defender for IOT highlighted in Microsoft’s April 2024 Patch Tuesday
  5. Halcyon:Blocking BYOVD Techniques to Prevent AV/EDR/XDR Bypasses
  6. 中文区 WinNotify.sys / BYOVD 公开逆向分析(含 SHA256 与 IOCTL 表)
  7. LOLDrivers 项目:https://www.loldrivers.io

END

公众号内容都来自国外等平台- 搜索的内容通过结合编写 –

公众号 | AnQuan7 (Ots安全)


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。

本文转载自:Ots安全 《微软签名的“内鬼”驱动:LocalStranger 演示 BYOVD 本地提权》

评论:0   参与:  0