跳转至

KernelCallbackTable

对手可能滥用进程的KernelCallbackTable来劫持其执行流以运行自己的有效载荷。(引用: Lazarus APT January 2022)(引用: FinFisher exposed) KernelCallbackTable可以在进程环境块(PEB)中找到,并在加载user32.dll后初始化为GUI进程可用的图形函数数组。(引用: Windows Process Injection KernelCallbackTable) 对手可能通过替换原始回调函数为恶意有效载荷来劫持进程的执行流。修改回调函数可以通过涉及相关行为的各种方式实现,例如反射代码加载进程注入到另一个进程中。 可以通过定位PEB(例如,通过调用NtQueryInformationProcess() 本机API函数)获得指向KernelCallbackTable内存地址的指针。(引用: NtQueryInformationProcess) 一旦找到指针,可以复制KernelCallbackTable,并将表中的函数(例如fnCOPYDATA)设置为恶意有效载荷的地址(例如通过WriteProcessMemory())。然后更新PEB以包含新表的地址。一旦调用篡改的函数,恶意有效载荷将被触发。(引用: Lazarus APT January 2022) 篡改的函数通常使用Windows消息调用。在劫持进程并执行恶意代码后,KernelCallbackTable也可能由恶意有效载荷的其余部分恢复到其原始状态。(引用: Lazarus APT January 2022) 使用KernelCallbackTable劫持执行流可能会规避安全产品的检测,因为执行可以掩盖在合法进程下。