简单认识Anti-RootKit
简单认识Anti-RootKit
作者:single
现在RK(rootkit)和ARK(anti- rootkit)的斗争已经进行了很久,在印象中最早出来的ARK工具是冰刃(IceSword),从冰刃开始出来到现在RK和ARK的斗争一直在继续, 目前冰刃还是在流行当中,自己感觉也正是冰刃的出来才带动了当前流行的RK和ARK的斗争呵呵,现在很多病毒木马已经广泛的带有驱动,使用一些RK的技术 和方法使自己更底层些更强大些,当前流行的ARK工具主要包括:隐藏进程检测,内核驱动检测,SSDT检测,代码HOOK检测,注册表隐藏的检测,隐藏文 件的检测等一些功能的,下面谈谈自己对一些功能的简单愚见 嘻嘻。
关于进程检测:其实最早在R3下隐藏进程的方法已经很早开始流行起来被用到各种软件上来,在R0下如断ActiveProcessLinks链,擦掉句柄表等等,一步步的发展渐渐的更强大起来一些技巧和方法开始出来和流行起来,如FUTO,phide_ex等。。。。。。
检 测隐藏进程的方法可以把一些现在流行的方法组合起来用,首先可以通过进程的EPROCESS结构中的进程活动链表ActiveProcessLinks 来进行扫描一边,可以通过进程句柄表的枚举通过EPROCESS的HANDLE_TABLE,HANDLE_TABLE结构中的 HandleTableLis链表来扫描一边来获得一些EPROCESS,可以通过定位PsLookupProcessByProcessId代码中的 PspCidTable链表扫描一边获得一些EPROCESS,PspCidTable在各系统中枚举是不太一样的,也可以通过先找出 KiWaitInListHead,KiWaitOutListHead和KiDispatcherReadyListHead这些链表然后对这些链表扫 描获得一些EPROCESS,以上具体的实现代码可以GOOGLE之网上实现的代码已经很多了,再者也可以找到内核中的线程切换SwapContext函 数进行HOOK下的,在自己实现的SwapContext函数根据线程的偏移量找出进程的EPROCESS结构,把上面获得的所有EPROCESS汇集起 来还需要判断下当前进程是否是真正的活着的:)可以通过EPROCESS里的标志位Flags(如XP 下0×248)一些标志判断下的,还要注意下对上面这些链表汇集起来是会有重复的进程的,在你自己的汇集函数中根据EPROCESS判断下的废话了,感觉 实现了上面的一些方法对付一般的隐藏进程已经足够了的,但厉害的RK还是有的,现在存在可以逃过这些方法的RK的,在进程EPROCESS的结构里偏移 0×1f8(XP SP2下)有个struct MMSUPPORT Vm结构:
struct _MMSUPPORT
{
/* off 0×00000000 */ union LARGE_INTEGER LastTrimTime;
/* off 0×00000008 */ struct MMSUPPORT_FLAGS Flags;
/* off 0×0000000C */ […]