摘要:本文描述了一种检测内核与用户级rootkit的新技术。此技术利用处理器的单步执行模式,来测定系统内核与DLL中执行指令的数量,从而达到检测rootkit和后门的目的。同时还讨论了其在Win2k下的代码实现。
背景知识
一个在计算机安全领域中重要的问题是,如何判断给定的主机是否已被入侵。由于以下两点这项工作变的非常困难:
1、攻击者可以利用未知漏洞进入系统。
2、当进入系统后,入侵者可通过安装rootkit和后门来隐藏自身(例如:隐藏进程,通讯渠道,文件等)。本文将集中讨论在Win2K系统下rootkit的检测问题。
传统rootkit检测技术中的一些问题
传统的rootkit检测程序(那些我们经常在UNIX系统中见到的)只能检测一些已知的rootkit(这点使它变的像反病毒程序)或进行一些内核存储的扫描。例如Linux中就有一些工具扫描内核中的syscall table。这显然不够好,因为已经有了很多并不更改syscall table的rootkit,而Win2k下也可开发出类似的rootkit。
那检测程序是不是还应该扫描内核代码空间?这样我们就有了一个运行在内核模式中的Tripwire。但这还不够好,因为在大多数的操作系统中,我们可以写出即不更改SST(syscall table)也不更改代码的内核级rootkit。在系统中有很多可以勾连的函数指针(例见[2])。
以我看,存储扫描技术决不会成为rootkit检测的终结。这主要是因为我们不能确定具体的监测存储区域。
那到底怎样检测出我们系统中的入侵者呢?
首先我们以rootkit中所使用的技术,将其分为两类:
*通过更改系统结构来隐藏某对象的(如运行的进程)和
*更改内核执行路径(例:勾连那些负责枚举活动进程的内核函数)来达到同样目的的。