Shadow_Hunter Rootkit windows7 xcon2011 Scott

33
Windows 7下全功能内核级别 RootkitShadowHunter 杨晋 ( Scott ) [email protected]

Transcript of Shadow_Hunter Rootkit windows7 xcon2011 Scott

Page 1: Shadow_Hunter Rootkit windows7 xcon2011 Scott

Windows 7下全功能内核级别Rootkit:ShadowHunter

杨晋 ( Scott )

[email protected]

Page 2: Shadow_Hunter Rootkit windows7 xcon2011 Scott

• 简介

• 文件操作

• 网络通讯

• 网络通讯隐藏

• 利用“磁盘镜像”技术隐藏

• 结语

Page 3: Shadow_Hunter Rootkit windows7 xcon2011 Scott

简介

• ShadowHunter:一款可以在Windows 7下完美运行的全功能内核级别Rootkit。

• 特点 一:实现了基础的应用功能

• 特点 二:实现了良好的隐藏能力

Page 4: Shadow_Hunter Rootkit windows7 xcon2011 Scott

文件操作

• 作为一个有着全功能的Rootkit,文件操作能力自然是不可或缺。

• 封装可重用的文件操作函数

• 两种封装方法

Page 5: Shadow_Hunter Rootkit windows7 xcon2011 Scott

封装方法 一

• 利用DDK(IFSDDK/WDK)内提供的函数来封装。

• 函数列表 :

ZwCreateFile 、ZwOpenFile

ZwReadFile 、ZwWriteFile

ZwSetInformationFile

ZwQueryDirectoryFile

ZwClose

Page 6: Shadow_Hunter Rootkit windows7 xcon2011 Scott

封装方法 二

• 构造文件操作IRP

• 找到文件系统原始设备对象

• 直接对其发送文件操作IRP

Page 7: Shadow_Hunter Rootkit windows7 xcon2011 Scott

封装方法 二

• 需要注意的两点:

• 一:针对文件系统驱动进行检测和修复,派遣函数表,处理例程等等。

• IRP_MJ_CREATE

• IRP_MJ_READ、IRP_MJ_WRITE

• IRP_MJ_SET_INFORMATION

• IRP_MJ_DIRECTORY_CONTROL

• IRP_MJ_FILE_SYSTEM_CONTROL

Page 8: Shadow_Hunter Rootkit windows7 xcon2011 Scott

封装方法 二

• 需要注意的两点:

• 二:利用构造的Private_IoCallDriver 发送IRP。不要使用系统提供的IoCallDriver。

Page 9: Shadow_Hunter Rootkit windows7 xcon2011 Scott

文件操作

• 两种封装方法的利弊

• 封装方法一,封装简单,有被拦截风险

• 封装方法二、封装复杂、调试难度大 、需要大量测试

Page 10: Shadow_Hunter Rootkit windows7 xcon2011 Scott

网络通讯

• 网络通讯是另一个基础功能。

• 网络通讯需要和文件操作相同的思路来做。需要把网络操作代码封装成为一些类似于RING3的SOCKET函数一样的函数来使用。

Page 11: Shadow_Hunter Rootkit windows7 xcon2011 Scott

网络通讯

• Windows系统网络体系结构

Page 12: Shadow_Hunter Rootkit windows7 xcon2011 Scott

网络通讯

• 封装技术选择

• 使用TDI技术实现

• 为什么不用WSK

Page 13: Shadow_Hunter Rootkit windows7 xcon2011 Scott

网络通讯

• 自我保护:在进行信息传输的时候需要暂时的断掉TDI Filter它的过滤链。在传输结束后,恢复其TDI Filter过滤链。这个主要就是对TDI原始设备的Attach Device进行备份,然后在通

讯过程中清零。在通讯过后再使其恢复。

Page 14: Shadow_Hunter Rootkit windows7 xcon2011 Scott

网络通讯隐蔽

• 在实现网络通讯后仍面临一些问题

• 使用netstat –ano,Tcpview等程序仍会看到网络连接。

• 需要隐藏通讯连接

Page 15: Shadow_Hunter Rootkit windows7 xcon2011 Scott

网络通讯隐蔽

• Windows 7与XP网络设备变化

Page 16: Shadow_Hunter Rootkit windows7 xcon2011 Scott

网络通讯隐蔽

• 现在开始Windows 7下网络通讯隐蔽

• 首先获取到\Device\Tcp的DeviceObject

• 然后找到其DriverObject,通过INLINE-HOOK来接管其DriverObject上面的IRP_MJ_DEVICE_CONTROL例程

Page 17: Shadow_Hunter Rootkit windows7 xcon2011 Scott

网络通讯隐蔽

• 最后就是处理里面的关键命令

• IRP_MJ_DEVICE_CONTROL

• IOCTL_TCP_QUERY_INFORMATION_EX

• Toi_id == 0x101

• Toi_id == 0x102

• Toi_id == 0x110

Page 18: Shadow_Hunter Rootkit windows7 xcon2011 Scott

网络通讯隐蔽

• 下面来看一下相对于Windows XP,Windows 7所独有的网络服务提供模块

Page 19: Shadow_Hunter Rootkit windows7 xcon2011 Scott

网络通讯隐蔽

• 现在来处理这个部分的隐蔽工作

• 首先直接获得nsiproxy它的驱动对象

• 然后利用INLINE-HOOK挂接IRP_MJ_DEVICE_CONTROL例程函数。

Page 20: Shadow_Hunter Rootkit windows7 xcon2011 Scott

网络通讯隐蔽

• 最后在里面过滤IOCTL == 0x12001B的处理过程、即可完成

• 一点NSI处理流程与TCP的不同

Page 21: Shadow_Hunter Rootkit windows7 xcon2011 Scott

利用“磁盘镜像”技术隐藏

• 两个基础性的问题没有解决

• 一 启动项的注册表services项没有隐藏

• 二 Sys文件还在磁盘上没有隐藏

Page 22: Shadow_Hunter Rootkit windows7 xcon2011 Scott

利用“磁盘镜像”技术隐藏

• 传统的Rootkit技术通常是分别来处理这两项的隐藏问题

• 这次把两个问题统一化、统一解决

• REG-HIVE文件与SYS文件同是文件

Page 23: Shadow_Hunter Rootkit windows7 xcon2011 Scott

利用“磁盘镜像”技术隐藏

• 比较流行,也比较强力的检测隐藏注册表和检测隐藏文件的方法。

Page 24: Shadow_Hunter Rootkit windows7 xcon2011 Scott

利用“磁盘镜像”技术隐藏

• 隐藏注册表的检测:获取真实注册表信息,首先获取HIVE文件所在的磁盘

扇区信息,然后通过读取磁盘扇区的方式来获取HIVE文件。最后自己解析获取来的HIVE文件,读出真实的注册

表信息。另外还需要利用系统标准的注册表操作API来获取一份实时的注

册表信息。然后比对两份信息之间的差异,来完成隐藏注册表检测。

Page 25: Shadow_Hunter Rootkit windows7 xcon2011 Scott

利用“磁盘镜像”技术隐藏

• 隐藏文件的检测:通过从磁盘上读扇区的方法来获取信息,然后自己解析NTFS和FAT32文件系统,最后针对

一些特殊目录进行遍历解析。另外再通过系统标准的文件API来获取一份

实时的文件遍历列表。两份列表相比较就可以检出隐藏的文件。

Page 26: Shadow_Hunter Rootkit windows7 xcon2011 Scott

利用“磁盘镜像”技术隐藏

• “磁盘镜像”技术如何在ShadowHunter里面使用的

• 一:安装ShadowHunter后需要重新启动

• 二:启动过程中ShadowHunter启动,对系统盘进行扫描并保存一份完整的磁盘MAP信息

Page 27: Shadow_Hunter Rootkit windows7 xcon2011 Scott

利用“磁盘镜像”技术隐藏

• 三:ShadowHunter开启“磁盘镜像”技术这时磁盘已经处于一种锁定状态

• 四:ShadowHunter删除自己的注册表启动项、删除自己的SYS文件

• 五:ShadowHunter开始常规工作、系统启动过程也基本接近尾声

Page 28: Shadow_Hunter Rootkit windows7 xcon2011 Scott

利用“磁盘镜像”技术隐藏

• 通过上面这几步,这时再进入系统做上面提到的两种强力检测时是完全检测不到注册表启动项和Sys文件的。

因为这时注册表启动项和文件已经在“磁盘镜像”中被真实的删除了。

Page 29: Shadow_Hunter Rootkit windows7 xcon2011 Scott

利用“磁盘镜像”技术隐藏

• 当系统关机,或者意外断电的时候“磁盘镜像”被撤销。如果再次开机,系统又回到之前状态。注册表启动项和文件还是存在的,还是照样会被系统所加载的。到此为止目的已经达到了。

Page 30: Shadow_Hunter Rootkit windows7 xcon2011 Scott

利用“磁盘镜像”技术隐藏

• 对比图:

Page 31: Shadow_Hunter Rootkit windows7 xcon2011 Scott

利用“磁盘镜像”技术隐藏

• 最后说一说这种方法现在的弊端,显而易见的是,在“磁盘镜像”被撤销的时候,一些用户的操作,用户新建或者修改文件也是一样会被撤销掉。这是因为“磁盘镜像”技术只做了一半的工作,为的是可以论证可行,并演示出效果。

Page 32: Shadow_Hunter Rootkit windows7 xcon2011 Scott

结 语

• 虽然ShadowHunter现在已经达到一

个不错的状态了,但是还有一些问题的,没有隐藏内存中的内核模块部分。在WINDBG中只要一个nt l m命令,

通过细心查找即可发现它。对于内核模块的隐藏这部分的思路已经有了,并且会在另一个研究项目“ShadowSpy”中在将来的某些时候完成这部分的工作。

Page 33: Shadow_Hunter Rootkit windows7 xcon2011 Scott

感 谢

感谢我的一些朋友对我的支持

感谢 XCon Team