2.1.2.10 SYSENTER hoot rootkit检测
Intel x86 平台上的 Windows XP 系统用 SYSENTER 指令取代中断,使系统陷入系统服务调用程序(AMD 平台上的Windows XP 使用 syscall 指令实现相同功能),相应产生了新的 Hook 方法,即把 IA32_ SYSENTER_EIP 寄存器的值修改为要运行的 Rootkit 代码的地址。
下面用sysenter hook demo程序演示sysenter hook 检测。 用InstDrv工具安装示例驱动sysenter.sys并加载执行。
使用SysProt工具检查kernel hooks,可观察到Sysenter函数被sysenter.sys做了hook。
- 43 - 2.1.2.11 IRP hook rootkit检测
IRP (I/O Request Packet即 I/O 请求包),驱动与驱动之间通过 IRP 进行通信。而使用驱动的应用层调用的 CreatFile,ReadFile,WriteFile,DeviceIoControl 等函数,说到底也是使用 IRP 和驱动进行通信。下图描述了在IRP请求过程中发生hook的情况。
下面以irp hook demo程序演示irp hook 使用、检测。 用InstDrv工具安装示例驱动irphook.sys并加载执行。
该驱动hook了IRP_MJ_DEVICE_CONTROL的处理函数,隐藏了所有WEB连接(远程端口为80的TCP连接),用web浏览器打开goolge页面,使用netstat -an命令无法看到连接建立的状态。
- 44 -
使用SysProt工具检查irp hook,可观察到tcpip.sys中的IRP_MJ_DEVICE_CONTROL的处理函数被hook。
2.1.2.12 DKOM rootkit 检测
对于Windows 2000/xp/2003等系统都具有描述进程,线程的对象,任务管理器、ZwQuerySystemInformation 函数就是利用这些对象来列出机器上的运行进程。每个进程和线程都有描述它们的结构,描述进程的是EPROCESS结构,描述线程的是ETHREAD结构。
EPROCESS结构中有个双向链表LIST_ENTRY结构,这个结构有两个DWORD指针成员FLINK和BLINK,这两个指针分别指向当前进程的前一个和后一个进程。 要隐藏当前进程
- 45 - 只要把当前进程从这个双向链表中删掉即可。这种rootkit采用的技术就是从双向链表中删除当前进程。如图:
下面看一个DKOM rootkit的实例-fu:
- 46 - 在命令行下,运行fu 命令,列出fu的功能:列出系统进程、以pid为参数隐藏进程、隐藏驱动、设置进程权限为系统权限 ??
选中需要隐藏的进程,运行fu -ph 8,这里8是指system进程的pid,然后从任务管理器查看就看不到了,我们只能用像Iceword之类的工具查看隐藏进程,下图标红显示。
2.2 UNIX/Linux检测技术
2.2.1 UNIX/Linux常规检测
2.2.1.1 用户检查
查看系统所有用户信息可以使用命令cat /etc/passwd
- 47 -