文章总结: 本文详细介绍了WNF回调劫持注入技术,该技术利用Windows通知设施机制,通过篡改目标进程WNF订阅的回调指针指向shellcode,并使用NtUpdateWnfStateData触发执行,全程不创建远程线程,从而绕过EDR的CreateRemoteThread检测。文章分析了技术原理、实战应用场景(如红队无文件落地、绕过线程启发式)及防御建议(如监控回调指针异常、关联内存写入与通知触发)。该技术已被真实APT组织(如BlindEagle)采用,并存在开源工具SharpWnfSuite。 综合评分: 95 文章分类: 红队,渗透测试,免杀,安全工具,实战经验
WNF注入:让EDR的线程检测彻底失明
原创
星夜AI安全 星夜AI安全
星夜AI安全
2026年8月4日 09:08 吉林
在小说阅读器读本章
去阅读
🌈
Windows Notification Facility(WNF)回调劫持注入技术,利用系统原生通知机制触发shellcode,全程不创建远程线程,直接绕过EDR的CreateRemoteThread检测启发式。
一、技术全貌:这是什么?
WNF(Windows Notification Facility,Windows 通知设施) 是微软从 Windows 8 引入的一套内核态到用户态的异步状态通知机制。系统用它在内核与用户态组件之间推送大量低延迟事件——电源状态、网络连接变化、Shell 触发、剪贴板变更等都走这条通道。每个通知由一个 64 位的 State Name 标识,订阅者通过 NtSubscribeWnfStateChange 注册回调,发布者通过 NtUpdateWnfStateData 更新状态数据,内核随即把变更异步投递给所有订阅进程的回调函数。
而 WNF 回调劫持注入,正是把这套”合法通知 → 回调执行”的机制武器化:攻击者不改写任何线程创建逻辑,而是直接篡改目标进程里某个 WNF 订阅的回调指针,让它指向自己的 shellcode,再用一次普通的 NtUpdateWnfStateData 触发通知——shellcode 就在目标进程上下文里”名正言顺”地跑起来了。
这项技术已经被公开工具化(如 SharpWnfSuite / SharpWnfInject),并在 2026 年真实 APT 活动中出现:安全厂商 Cyfar 披露哥伦比亚盲鹰组织(Blind Eagle / APT-C-36)的 JC-46 升级版 AsyncRAT 就采用了”通过 NtUpdateWnfStateData 的 WNF 注入”来规避 EDR 的 CreateRemoteThread 启发式检测。
二、为什么这个技术如此重要
传统进程注入的”标准姿势”早已被 EDR 标记得明明白白:VirtualAllocEx + WriteProcessMemory + CreateRemoteThread 这套组合,几乎每一家 EDR 的线程创建遥测(Sysmon Event ID 8、各厂商的远程线程告警)都会优先捕获。
WNF 注入的精妙之处在于它根本不走这条路:
- 不创建远程线程:没有
CreateRemoteThread/NtCreateThreadEx/RtlCreateUserThread,EDR 最灵敏的”跨进程新建线程”信号直接哑火。 - 触发是内核合法行为:shellcode 的执行由内核投递的 WNF 通知驱动,与系统正常通知(如 Shell 状态变更)在遥测层面几乎无法区分。
- 跨进程写入可被低优处理:注入确实需要
NtWriteVirtualMemory+NtProtectVirtualMemory,但多数 EDR 对”内存写入+改保护”的告警优先级远低于”远程线程创建”,且这类操作在正常调试、注入框架里也常见,容易淹没在噪声中。
换句话说,它把攻击面从”EDR 盯得最紧的线程创建”挪到了”EDR 看得最模糊的内存写入 + 系统通知”上——这正是它能让 EDR 线程检测彻底失明的原因。
三、技术原理解析(核心部分)
WNF 的订阅信息存储在目标进程 ntdll.dll 的 .data 段里,以 WNF_SUBSCRIPTION_TABLE 为根。Windows 10 下是一串 LIST_ENTRY 双向链表,Windows 11 起改为 RTL_RB_TREE 平衡树。每个订阅对应一个 WNF_USER_SUBSCRIPTION 结构,其中最关键的是 Callback 字段(Win10/Win11 x64 偏移均为 0x20)。
注入分三步:
技术要点 1:定位订阅表与回调指针
先在目标进程的 ntdll 数据段扫描出 WNF_SUBSCRIPTION_TABLE,再按目标 State Name 找到对应的 WNF_USER_SUBSCRIPTION。并不是所有 State Name 都能用——公开研究确认 WNF_SHEL_WINDOWSTIP_CONTENT_PUBLISHED(State Name 0x0D83063EA3BE10F5)在 Windows 11 23H2 的 explorer.exe 中注册了可用回调,是实战首选。
技术要点 2:覆盖回调指针到 shellcode
拿到 WNF_USER_SUBSCRIPTION 后,备份原始 Callback 地址,在目标进程分配 RW 内存写入 shellcode,改保护为 RX,然后把 Callback 字段覆盖为 shellcode 地址:
// 概念性伪代码(基于 SharpWnfInject 公开实现,仅用于教学)
HANDLE hProc = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE |
PROCESS_VM_READ, FALSE, targetPid);
// 1) 在目标进程分配 shellcode 内存
PVOID shellAddr; SIZE_T sz = sizeof(shellcode);
NtAllocateVirtualMemory(hProc, &shellAddr, 0, &sz,
MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
// 2) 写入 shellcode(唯一跨进程写入动作)
NtWriteVirtualMemory(hProc, shellAddr, shellcode, sizeof(shellcode), NULL);
// 3) 改可执行
DWORD old; NtProtectVirtualMemory(hProc, &shellAddr, &sz, PAGE_EXECUTE_READ, &old);
// 4) 读订阅结构里的 Callback 字段(偏移 0x20,Win10/Win11 x64)
ULONG_PTR callbackPtr = 0;
NtReadVirtualMemory(hProc, userSub + 0x20, &callbackPtr, 8, NULL);
ULONG_PTR origCallback = callbackPtr;
// 5) 劫持:把回调指向 shellcode
NtWriteVirtualMemory(hProc, userSub + 0x20, &shellAddr, 8, NULL);
技术要点 3:用合法通知触发执行并还原
回调指针就位后,不调用任何线程 API,而是让本进程(或任意能触碰该 State Name 的上下文)更新一次状态数据——内核会把通知投递给 explorer.exe 的订阅回调,shellcode 随即执行。执行完再用原始指针把 Callback 还原,抹掉痕迹:
// 触发:一次普通的 WNF 状态更新,内核回调目标进程的 shellcode
WNF_STATE_NAME name = 0x0D83063EA3BE10F5; // WNF_SHEL_WINDOWSTIP_CONTENT_PUBLISHED
BYTE dummy[8] = {0};
NtUpdateWnfStateData(&name, dummy, sizeof(dummy), 0, 0, 0, 0);
// 还原原始回调,消除内存痕迹
NtWriteVirtualMemory(hProc, userSub + 0x20, &origCallback, 8, NULL);
整条链路里唯一跨进程的”高危”动作是 NtWriteVirtualMemory 改一处指针 + 写一段 shellcode,没有 CreateRemoteThread,没有 NtQueueApcThread,也没有 SetThreadContext——EDR 线程创建类检测项全程沉默。
四、实战应用场景
- 红队无文件落地:配合 DLL 侧加载或合法二进制,把 C2 beacon 注入
explorer.exe等常驻系统进程,规避基于”非预期进程新建线程”的行为规则。 - 绕过线程启发式:对依赖
CreateRemoteThread遥测的 EDR(CrowdStrike、SentinelOne、Defender for Endpoint 的线程创建 IOA)尤为有效,这也是 Blind Eagle 在 JC-46 工具集里采用它的直接原因。 - 持久化与横向:WNF 还支持永久性 State Name,数据在内核池中持久存活、重启后仍可从注册表恢复,可被用作反取证”隐形存储”藏匿配置或第二跳载荷。
实战中要成功,需先确认目标进程确实订阅了可用 State Name(不同 Windows 版本/架构的 State Name 枚举不同,工具需按 build 解析),并具备对目标进程的 VM_* 权限(通常需要注入进程本身有足够令牌,或借助 SeDebugPrivilege)。
五、防御对抗建议
蓝队可从”行为关联”而非”单点告警”入手:
- 监控 WNF 回调指针异常:对
explorer.exe等系统进程里WNF_USER_SUBSCRIPTION.Callback指向非镜像内存(RX 堆/私有内存)的行为告警;关注NtWriteVirtualMemory改写.data段订阅结构。 - 关联内存写入 + 通知触发:单独的内存写入可能正常,但”写 shellcode → 改 RX → 改回调 → 紧接
NtUpdateWnfStateData“的时序组合极具攻击特征。 - 启用脚本块日志与 ETW:WNF 注入常由 PowerShell/.NET 加载器驱动,PowerShell Script Block Logging(Event 4104)+ .NET ETW 可补线程遥测的盲区。
- 进程权限最小化:收紧
SeDebugPrivilege分配,阻止普通红队工具随意打开系统进程句柄。 - 已知良性基线:维护
explorer.exe等进程的合法 WNF 订阅回调基线,偏离即告警。
六、技术延伸阅读(工具/GitHub 链接)
- SharpWnfSuite / SharpWnfInject(daem0nc0re / cvlabsio):开源 WNF 回调劫持注入工具,支持 Win10/Win11、x86/x64,含详细结构解析。 https://github.com/cvlabsio/SharpWnfSuite[1]
- WNF 内核利用研究(Alex Plaskett、Gabrielle Viala、odzhan):WNF 作为池喷射原语与内核 UAF 利用的经典论文。
- Blind Eagle JC-46 工具链(Cyfar,2026):真实 APT 采用 WNF 注入规避 EDR 的实战披露。
- WNF 幽灵状态与反取证(GhostWolf Lab):关于永久性 WNF 状态持久化与
WNF_SHELLEXECUTE触发器的分析。
🌈
关注「星夜AI安全」,每天带你拆解一个真实可用的红队 / 蓝队技术。技术无止境,攻防永循环。
圈子介绍
现任职于某头部网络安全企业攻防研究部,核心红队成员。2021-2023年间累计参与40+场国家级、行业级攻防实战演练,精通漏洞挖掘、红蓝对抗策略制定、恶意代码分析、内网横向渗透及应急响应等技术领域。在多次大型演练中,主导突破多个高防护目标网络,曾获”最佳攻击手””突出贡献个人”等荣誉。
已产出的安全工具及成果包括:
- 多款主流杀软通杀工具(兼容卡巴斯基、诺顿、瑞星、360等终端防护,无感知运行,突破多引擎联合检测)
- XXByPassBehinder v1.1 冰蝎免杀生成器(定制化冰蝎免杀工具,绕过主流终端防护与EDR动态检测,支持自定义载荷)
- 哥斯拉二开免杀定制版(二开优化,深度免杀,突破终端防护与EDR检测,适配多场景植入)
- NeoCS4.9终极版(高级免杀加载工具,强化载荷注入与进程劫持,适配多系统版本,无兼容问题)
- WinDump_免杀版(浏览器凭证窃取工具,支持Chrome/Edge/Firefox等主流浏览器,一键提取敏感数据,免杀过防护)
- DumpBrowser_V1_免杀版(浏览器凭证窃取工具,专攻浏览器密码、Cookie、历史记录提取,免杀性能拉满)
- fscan二开版(二开优化内网扫描工具,增强指纹精度、弱口令爆破与结果标准化输出,适配复杂内网)
- RingQ加载器二开版(二开优化免杀加载器,支持Shellcode内存执行,绕过各类终端防护与EDR检测)
- 多款免杀Webshell集合(覆盖PHP/JSP/ASPX,过主流WAF与终端防护,适配不同Web场景)
- 免杀360专属加载器(支持Shellcode内存执行,针对性绕过360全系防护检测,无感知运行)
- 一键Kill 火绒 defender 工具 HDKiller(包含源码)
- win11 一键kill 360工具 InjectKill(包含源码)
- win11 一键kill defender工具win11_df-killer(包含源码)
- 免杀火绒6.0内存防护加载器BypassMemLoader
- 单文件过360 免杀loader exe_bypass_360
- 单文件过火绒 df 免杀loader exe_bypass_df(包含源码)
- LNK钓鱼文件生成工具V1.0
- EXE捆绑启动器 v2.0
- 火绒6内存免杀加载器bypasshr6
- 火绒一键Kill专杀工具HRKiller
- Ring3 内存免杀工具Ring3bypasshr.exe
后续将不断更新到内部圈子中 欢迎加入圈子
引用链接
[1]https://github.com/cvlabsio/SharpWnfSuite
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:星夜AI安全 星夜AI安全 星夜AI安全《WNF注入:让EDR的线程检测彻底失明》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论