DarkSpy是由CardMagic和wowocock编写的anti-rootkit不错的工具。因为正在写的本科毕设与检测rootkit有关,所以这几天分析一下,看有什么可利用的。
分析进行得比较顺利,因为DarkSpy里面所采用的技术多数Internet上已经见过,不过肯定有一些创意的哦。
先说说里面的新东西:驱动开发网站的一位会员启发我们DarkSpy修改了 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager中的GlobalFlag为0x4000,这是做什么呢?原来这会使得NtGlobalFlag加入MaintainObject Typelist标志,于是系统创建对象时会把它加入Type链表中,这样可以遍历链表来查找对象。修改标志需要重启机器,这应该就是“强模式”要重启的理由。
正如那位会员所说,作者故意隐瞒了这点,我也觉得不妥:如果是为了防止别人crack,也应该提供卸载程序的,因为这个标志一直不被清除,不再使用DarkSpy的用户依然会为此付出代价:每个内核对象都要额外分配16字节的核心空间,那成千上万的对象呢?
这个技巧对DKOM来说比较weak了,用下面的代码清除:
VOID
ClearObjectCreatorInfo(
PVOID Object
)
{
POBJECT_HEADER ObjectHeader = OBJECT_TO_OBJECT_HEADER(Object);
POBJECT_HEADER_CREATOR_INFO CreatorInfo =
OBJECT_HEADER_TO_CREATOR_INFO(ObjectHeader);
if (CreatorInfo != NULL)
{
RemoveEntryList(&CreatorInfo->TypeList);
InitializeListHead(&CreatorInfo->TypeList);
}
}
|
传入处理的对象就脱链了。这几行代码可让“强模式”失效。
下面简单说说击破的法门:
一、驱动:
DarkSpy1.0.3版及以前很简单,学习Futo rootkit断开PsLoadedModuleList,再将驱动对象传入上面的ClearObjectCreatorInfo,不论“强模式”还是“弱模式”均搞定。
DarkSpy1.0.4版有了修改,不过依旧是查找DriverObject,在适当的时候清理掉就可以了,比如可以walkkernel object tree,还有更简单的办法:)
二、进程:
DarkSpy的进程功能把好多东西堆到一起来恶心rootkit的作者们,怎么样,被恶心到了吧?虽然里面的技术可能不新鲜,但是这么一组合,难以全部清除的。下面把隐藏需要做的事列举列举:
1、PspCidTable就学futo抹掉;
2、进程、线程对象传入ClearObjectCreatorInfo;
3、它还使用csrss里的进程句柄,直接到csrss进程里ZwClose掉最简单;
4、DarkSpy在我的机器崩溃过,分析dump,原来与杀软冲突:它也hook 了SwapContext,不好办?恢复不就行了。恢复时机很重要,相信你也能想到不错的。说说我的思路:在任一条call SwapContext之前的路径上下hook,hook的程序什么也不做,专门检查SwapContext,被改则改回去,这是很通用的做法,它要是 hook别的地方也一样搞定。
5、还有一个由线程到进程的,自己去发掘吧,也该动动手么...嘿嘿。
最后可以完全隐藏自己的进程,不过你累不累,什么东西非有进程才能做,没进程就不能做?都核心驱动了...感觉真没必要。
三、文件:
据说是Create IRP,嘿嘿,不过我还没学文件系统驱动,那位大虾补充吧。
四、注册表:
虽测试版没有功能,但看看界面可以猜测猜测内部版:应该是复制或是仿制开源工具RegHives来做的,击破的原理网上有不少。只是dump的方法可能不同。
作者们花了功夫为大家提供了不错的工具,不过这些技术很多网上流传不少时间了,效果不尽人意。发这篇短文肯定能促使作者更新,嘿嘿。
是问驱网一些高手得知的,像那个GlobalFlag,完全没想到有什么用,多谢一些高手的指点。隐藏视频没空间上传,就算了。
-- 原文链接: http://security.ccidnet.com/art/1101/20060912/898161_1.html
|