目录

监控回调分析(4):回调监控的使用场景、屏蔽回调监控

进程创建回调使用场景

  1. 在EDR、反作弊开发中,往往会在进程创建回调中扫描进程特征,看看是不是病毒、已知的外挂样本
  2. 如果匹配到特征了,那么就拒绝创建进程

线程创建回调使用场景

  1. 在反作弊中,可以判断当前线程是不是属于游戏进程创建的,如果是,就继续判断该线程的入口点地址,是不是不属于任何一个等级在册的DLL模块,可以用来检测Shellcode线程

镜像加载回调使用场景

  1. 防止DLL注入、劫持:可以检测当前加载的DLL模块签名,如果不是白名单中的签名,就拒绝加载即可
  2. 禁止加载驱动模块:在手动查毒的场景中,我们可以自己挂一个回调,拦截所有内核模块的加载,当然,镜像加载回调中并不存在直接拦截加载的方式,所以我们需要手动解析PE头,算出来EP地址,对着入口点下一个Inline Hook拦截即可

屏蔽监控回调(致盲EDR)

  1. 在某些特殊应用场景下,是可以暂时屏蔽监控回调的,因为不管是进程、线程、镜像回调,在调用回调例程前,都会判断PspNotifyEnableMask这个内核全局变量,这个变量中不同的位可以控制是否启用某个监控回调,如图所示:

/notifycallbackusage/Image/1-%E5%B1%8F%E8%94%BD%E8%BF%9B%E7%A8%8B%E5%88%9B%E5%BB%BA%E5%9B%9E%E8%B0%83.png

/notifycallbackusage/Image/2-%E5%B1%8F%E8%94%BD%E7%BA%BF%E7%A8%8B%E5%88%9B%E5%BB%BA%E5%9B%9E%E8%B0%83.png

/notifycallbackusage/Image/3-%E5%B1%8F%E8%94%BD%E9%95%9C%E5%83%8F%E5%8A%A0%E8%BD%BD%E5%9B%9E%E8%B0%83.png

  1. 当然,也有一种粗狂的屏蔽方式,在保存了原始PspNotifyEnableMask数值后,直接将其置零,之后再恢复。这种做法就是屏蔽全局的进程、线程、镜像加载回调
监控回调 Windows内核