反-反通过枚举句柄枚举进程

许多程序通过编写驱动把自己从进程链中摘除,让一般手段的进程检测无法正确检测,我能想到的方法也就通过线程调度链来找了,昨天读了一篇文章,讲的方法是通过枚举系统中所有的句柄来达到枚举进程的目的,我曾接触过枚举句柄,也自己写过代码,就在不久前,另外进程检测的问题也是那时侯一直在思考的问题,所以我觉得自己还是小P孩一个,没有足够的敏感性去发现新的方法(对于我来说是新的),如果一直那样,那么自己会一直依赖于别人,自己的思想会受到束缚。
我所知道的逃避上面检测方式的Rootkit是FU,据说它从HANDLE链上也把自己摘除了,真是牛啊,我连HANDLE链在哪都不知道......
对于FU这样的rootlit我暂且不考虑,也没有能力考。
表面上看通过HANDLE枚举进程的方式很好,但是也是非常的脆弱的,因为其依赖的API在RING3,就是ntdll.dll中的 NtQuerySystemInfomation,只要恶意代码制造者愿意,完全可以通过HOOK这个API来欺骗我们,而更加厉害的就是箱FU这样的rootkit直接在HANDLE链上也把自己给摘除了,可我连HANDLE链在哪都不知道,我想到的,只有在RING3层面上的反-反通过枚举H句柄枚举进程了。
一、对付RING3层的NtQuerySystemInfomation挂钩
1、不要相信内存中的ntdll.dll,因为它是容易变化的,硬盘上的ntdll.dll或许是可信的,于是当我们的检测程序运行的时候,拷贝ntdll.dll为一个新的名字并加载到内存,并通过最普通的LoadLibrary加载到内存,接着获得NtQuerySystemInfomation的地址,然后就可以调用了,这个NtQuerySystemInfomation是可信的。
2、自己的NtQuerySystemInfomation函数。由于ntdll.dll中的NtQuerySystemInformation实现实在是简单,所以完全可以自己写一个,但是这里会遇到两个问题,一是版本问题,2000和XP进入RING0的方式不同决定了代码的不同,小做一个版本判断就完全可以解决。二就是系统服务号的获取。应该说原始的系统服务的服务号不会变,微软会把新增加系统服务加在系统服务表最后,这是我通过2000和XP的系统服务号比较而得到的结论,我曾经写过一个不可信赖的系统服务号获得程序,但是应该说在2000/XP下还是可行的,可以看前面的日记。这样两个问题都解决了。
在RING3层其实没有什么可以阻止我们去调用正确的系统服务,只是是否会费力气的事,第一种方法是好的,很方便。
二、对付HOOK系统服务表中的NtQuerySystemInfomation服务入口
1、检测系统服务表(SDT)是否被改变由于系统服务表位于虚址0x8000000以上,所以我们无法直接读取,但是我们仍然有能很轻松获得读取的方法,很多文章都有介绍通过物理内存设备来读写0x8000000以上的部分物理地址的方法。解决内存读写问题后就是判断系统服务表的入口是否与其相应的在ntosknl.exe实现函数的入口对应了,这个方法可以参考SDTrestore,它展示了很多东西,几乎所有的工作都是由程序自己来完成的,Win32 API只是点缀作用,呵呵,或许,我们真的不能相信Win32API了。如果发现NtQuerySystemInfomation服务的入口被改变,那么修复它,然后再调用NtQuerySystemInfomation,那样至少在很大程度上是真实的了。如果恶意代码制造者修改了内存中NtQuerySystemInfomation的代码来实现挂钩来不是通过修改SDT,那么上面的方法将无效。
2、或许,仅仅是或许,因为我没有验证过,手头也没有可以验证的代码。或许我们可以学一、1的方法,在修复SDT的基础是上,把ntosknl.exe在RING3中加载,获得NtQuerySystemInfomation的入口,不管SDT是否被改变,我们都把NtQuerySystemInfomation的代码拷贝入物理内存中的ntosknl.exe的NtQuerySystemInfomation处,这样,基于改代码的HOOK也将失败,我们可以获得一个更加值得信赖的NtQuerySystemInfomation调用环境。
通过以上的方法,至少我们已经获得了一个干净的NtQuerySystemInfomation调用环境,NtQuerySystemInfomation不会再欺骗我们,但是WINDOWS会欺骗NtQuerySystemInfomation......
斗争始终在继续,而受害的或许只有我和我的同道~~~~~
PS:最好的对付任何恶意入侵的方式是格盘、重装系统,让他们灰飞烟灭,强烈建议把重要数据与系统分开安装!
PS:但是.....FORMAT能真清理掉我们的硬盘吗???不能,像MBR这样的地方,FORMAT根本理都不理,千万不要认为只有MBR,FORMAT是针对分区的,而我想所有人都会在装2000/XP的时候看到过8MB的未划分空间,那是FORMAT接触不到的地方,那里有足够的空间放下任何恶意代码,以前也不认为那里是危险的,但是现在不了,Coolq在PHack和X'con05展示的《高级木马之Grub篇》中已经涉及到了Boot Loader,真是要疯了,另外像NTFSDOS那样的东西简直是可怕,在WINDOWS未启动前替换WINDOWS的核心文件完全是可能的,或许只要现在计算机体系已经注定了不安全!!
哈哈,只要自己提高就不会失业了:):):)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值