安全研究员n0qword在GitHub上公布了一个概念验证项目,把Windows图形子系统里一条鲜少被人盯上的回调路径,变成了执行恶意代码的干净通道。他不碰内核回调表本身,也不触发进程创建告警,仅仅靠发送一条常规的窗口消息,就让目标进程安静地跑起攻击者指定的指令。这个技术之所以引人注目,不是因为它打开了新的攻击面,而是因为它躲在系统预期行为内部,让传统端点检测方案一时间失去抓手。

攻击的核心是一个叫KernelCallbackTable的结构体,它存在于每个启用图形界面的Windows进程里,本质是一张函数指针表。操作系统靠它把内核态的图形任务交接给用户态的处理例程。攻击者只要读出目标进程的内存布局,就能找出这张表的位置以及当前活跃的回调项。这里的关键在于不作任何篡改:不覆盖某个指针,不插入新条目。这种做法直接绕过了针对回调表结构变更的完整性校验,让查杀工具看到的是始终一致的函数指针数据。

打开网易新闻 查看精彩图片

在这张表里,有一个专门服务WM_COPYDATA消息的回调入口__fnCOPYDATA。Windows应用间传递数据时,SendMessage函数带着WM_COPYDATA消息发到目标窗口,这个回调就会被正常触发。对攻击者来说,这种外部可控、响应可靠的回调,就是理想的执行原语。他只需要构造一条WM_COPYDATA消息,发送到事先选定的目标窗口,系统就会主动调用__fnCOPYDATA,进而转去执行攻击者布置好的代码。整个过程不使用远程线程、不调用异步过程调用,也不注入任何动态库,所有动作都像是系统在正常服务一个消息请求。

从防守方的视角看,这种做法重新定义了“可疑活动”的边界。常规进程注入通常会留下远程线程创建或内存分配异常等明确的痕迹,但基于回调的劫持是蹭上了图形子系统原有的任务队列,进程监视器里根本看不到一个新的执行流被创建。正如n0qword在向Cyber Security News提供的报告中所说的,这一技术“可以提供比远程线程创建或基于APC的注入更隐蔽的替代方案”。这意味着安全团队不能只盯着进程创建事件,还需要深入理解内核到用户态的回调分发路径,才可能捕捉到这类高度伪装的行为。

这份研究虽明确定位在教育和防御目的,但其底层机制一旦被恶意行为者掌握,完全可以融入钓鱼、横向移动或权限维持的攻击链中。对于Windows安全运营者而言,现在是时候重新审视图形子系统中这些看似无害的回调机制了——不是要为每一个WM_COPYDATA设置告警,而是要重新设计异常检测模型,把“按预期路径执行但参数被恶意控制”这类情境纳入分析范围。理解回调即执行的基本逻辑,才算拿到与这项新手法对抗的第一张入场券。