关于RootKit设计思考




以下只讨论windows OS 下的纯内核级别rootkit


一:设计的思想:其实从设计的角度来看 rootkit 个人认为应该分为两种:

1:POC(概念展望)
2:Utility(UTI)(应用实战)

POC:应该体现其 1-思想的前卫,2-技术的深度,3-对抗的强度,4-具体的有针对性的效果。
例如:1.Futo  2.unreal

UTI :应该做到 1-通用,2-稳定,3-有针对性的对抗。
例如:1.HE4Hook  2.Hacker Defender


二:现实的矛盾:看了一些 rootkit 技术发现。

我们做一个假设:写一个实用的rootkit(高强度对抗+有实用功能)。这时不可避免的问题就要发生。
问题体现:
1:实用功能:

  网络通信为根基:稳定简单的选择,封装TDI建立一个KSOCK。(此方法在2K/XP/2K3/VISTA下通用/稳定)rootkit.com上面有一个不过不好用。我个人不喜欢用NDIS来做,难度较大,开发周期长。
                  为了隐蔽可以选择 两个种升级方法:
                  1:TDI复用端口
                  2:KSCOK + HTTP  (收发数据时在数据前面加些HTTP结构)

  KSHELL:这个不用怎么说了吧。怎么也得给人一个命令行执行环境吧:) 
            实现方法APC队列插如命令然后执行(此方法在2K/XP/2K3/VISTA下通用/稳定)。
            需要注意的一点是选择什么进程的APC队列的问提。(2k/xp/2k3比较好选择,VISTA下需要精心挑选一个)

  文件传输:这个没什么好说的了:用zwcreatefile zwreadfile zwwritefile 等等函数封装一下就好了。但是在用的时候需要注意一下IRQL的环境,有些环境是不允许文件操作的。
            这里也给出一种升级方法利用 IOXXXX 系列的内核文件函数封装。你要问为什么?绕过SSDT监视被:)

  进程管理:列进程/杀进程。列进程一般用 ZwQuerySystemInformation 标准的选择。
                          再给出一种升级的选择:获得EPROCESS,然后找进程的双向链表遍历一下OK了。你又要问为什么?还是绕过SSDT监视被:)

  其他功能:遇到再说吧!

我们可以看到以上的这些功能在不做SSDT,不做HOOK DISPATH,不修改 KernelObject,的时候已经具备了一定的隐蔽效果。但是更大的好处再在于,先看下面一段话:

“rootkit的对抗隐藏与ANTIRK必然会在内核里面有接触。当接触出现后没人知道会发生什么。rootkit胜利系统安然无恙?BSOD?ANTI胜利rootkit被发现?谁都说不好。也许有人说可以靠高质量高可靠性的rootkit编码来避免。但是,你能保证你的对手(ANTI-rootkit)也是一样?既然是对抗就存在偶然因素。还有许多的复杂环境的因素。”

这段话是我好久以前写的了。现在回到刚刚上面写的那些技术上来,上面的技术一般不会与ANTIRK接触,所以很好的避免了,一些不稳定的对抗因素。



2:高强度对抗:
(6月26日追加)

这部分需要大致分为两类吧!

第一类:是对抗KIS 6/7,macfee 8/8.5,ZA pro等等。(baiyuanfan的《实用级反主动防御rootkit设计思路》已经说的很多了。)

第二类:是对抗 ANTI-rootkit 程序的检测,IceSword 1.20 ,DarkSky 1.05,RKUnHooker 3.xx,GMER等等。

两种对抗的侧重点不一样,所以实现起来比较个性化,很多技术都不是标准的,可能是灵感,可能是需要。没办法把这种对抗技术来具体的说。不过,可以归整到几个分类里面吧:

SSDT/INLINE_HOOK,HOOK DISPATCH,修改内核结构/内核对象,INLINE_HOOK 非导出函数,固化修改文件等等。



三:实际的工作:
(6月26日追加)

baiyuanfan在《实用级反主动防御rootkit设计思路》已经放出“第一类对抗”的rootkit了。

我下面放一个针对“第二类对抗”的 rootkit 视频。

rootkit Goblin 的技术介绍:
http://www.phpfav.com/?p=78

演示视频:
http://www.phpfav.com/uploads/scott/rk_goblin.zip  
相关文章
相关标签/搜索