欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

小议“非法模块”与“第三方检测”的那些事儿(2)

程序员文章站 2022-09-21 17:56:21
铸矛之人,必精造盾之术。 造盾之人,必解铸矛之术。 上一贴中简单说了一下非法模块的初级阶段的检测,其实还有更高级的检测模式,就是加载检测。 (1)中的所有的检测手段都可以通过重加载模块+...

铸矛之人,必精造盾之术。
造盾之人,必解铸矛之术。

上一贴中简单说了一下非法模块的初级阶段的检测,其实还有更高级的检测模式,就是加载检测。
(1)中的所有的检测手段都可以通过重加载模块+抹掉PE+关闭模块相关句柄来实现回避
(重加载的代码,Winker同学发过了,就不重复了。)
但这种方法对于本帖所说加载检测通常是通过Hook 加载用API来实现,
比如ntdll!LdrLoadDll这样的API,
对于这种加载检测,通常对抗手段是无效的(隐藏无效,重加载无效),
只能依靠白名单或者监控开启时间来绕过。
如通过较早的注入手段注入可以绕过大部分加载监控方式的检测(比如 导入表注入,OEP注入,TLS注入...);
或者利用白名单,如SPI过滤或者输入法,
或者利用无法被监控的方式,如对knowndlls的section(lpk.dll的section)进行污染的方式注入。

同理对抗上也有通过驱动级ImageLoadNotifyRoutine来进行检控的(可以对抗早期OEP注入,TLS注入,导入表注入);
对于白名单上的注入,可以通过加强特征扫描来处理,或者云扫描;
对于Section污染,可以采用对KnowDlls的Section对应DLL进行HASH效验来检测。
至于更深层次的对抗,欢迎使用IGS的培训服务。

(2)本篇主要内容:初级第三方检测。

代码:
最常见是窗体类名的检测,如所有对CE的检测...
应用的API:FindWindowEx/FindWindow/GetWindow/EnumWindow
简单有效的对抗就是动态类名技术,
每次启动的窗体类名都不一样就可以了。
目前检测没有更好的方法检测窗体的说,不过据说可以检测具体窗体的Proc的里的代码来实现。

接着是进程枚举的检测,
通常检测使用的手法无非传统枚举(也有通过Task枚举的哦,亲~)
对抗方法核心层次进行断链(ActiveProcessLinks和SessionProcessLinks都断开)就可以了,
检测的升级则是CidHandleTable检测,
深入对抗则是抹掉CidHandleTable...
至于更深入的对抗其实际作用不大,不过JobList也是个最近流行的检测点。
当然如果真心说到进程枚举,其实直接通过核心层关键钩子来统计更简单更稳妥。

枚举完事后,都是查特征了,基本上就是内存,文件老一套的模式,
对于CE这类特殊的可能使用窗体布局或者窗口Proc的代码特征等,
对抗也基本老一套的作战,改改Object里的FileName什么的就好了,
或者干脆点拦截一下IoCreateFile搞定文件,
内存动态加密一下就好~
至于布局/Proc的特征,CE么,还是自己改改代码的为妙。