检测进程的方法及设备的制作方法

文档序号:6564226阅读:168来源:国知局
专利名称:检测进程的方法及设备的制作方法
技术领域
本发明涉及计算机操作系统安全技术领域,尤其涉及一种检测计算机操 作系统内核级隐藏进程的方法及设备。
背景技术
rootkit (后门工具包)是计算机攻击者用来隐藏自己的踪迹和保留访问权 限的工具。rootkit发展大致分为三个阶段,第一代的rootkit是原始的,他们 筒单地替换/修改操作系统上关键的系统文件;第二代的rootkit基于挂钩技术, 通过对已加载的应用程序和一些诸如系统调用表的操作系统部件打内存补 丁,而改变执行路径,将修改方式从磁盘移到已加载程序的内存映像;第三 代的内核rootkit技术通过动态地修改内核对象来实现。
直接内核对象才喿作(DKOM, Direct Kernel Object Manipulation)技术作 为第三代内核级rootkit的代表,通过直接修改操作系统内核对象来实现进程 的隐藏、设备驱动隐藏以及进程权限提升等深度隐藏的目的。DKOM较难于 检测,因为它并不修改程序执行路径,而是直接修改操作系统中的内核对象。 内核对象是指核心数据结构内容,包括进程、线程和设备驱动等。这些内核 对象是操作系统和上层应用程序直接依赖的内容,通过修改它们可以达到 rootkit隐藏恶意进程的目的。
在具体执行过程中,所有进程都是由一个进程结构体(EPROCESS)描 述,而所有进程结构体都由一个双向循环链表维护。DKOM进程隐藏的一个 方法是改变进程结构体的指针,使得链表枚举跳过自身达到进程隐藏的目的。 现有的针对此种进程隐藏的检测方法,是采用遍历EPROCESS结构的双向链 表来得到进程列表,然后将此进程列表中进程ID(标识符)与API( Application Programming Interface,应用编程接口 )调用的进程ID进行比较,可以检测出 隐藏的进程。
但是这种检测方法不够彻底,当攻击者也修改了双向链表,这种方法就 会失效;而且,为了得到进程名称、ID和父进程ID,必须获知EPROCESS结构中偏移地址,而这些偏移地址随着操作系统类型或版本的变化而不同,
例如Windows 2000和Windows XP,各自对应偏移地址不同,所以这种检测 方法不具有通用性。而且,当攻击者将要隐藏的EPROCESS双向指针清空, 也就是要隐藏的进程都被从进程链表中删掉了 ,那么上述遍历双向链表的方 式也就不可能检测到隐藏的进程了 。

发明内容
本发明公开了 一种检测进程的方法及设备,用于解决现有进程检测方法 检测不够彻底、不通用的问题。
为此,本发明采用如下技术方案
一种检测进程的方法,该方法包括步骤查找操作系统内核地址空间, 得到上下文切换函数地址;修改所述上下文切换函数首部地址内容为远程跳 转指令,通过远程跳转,访问进程结构体,获取进程信息。
在获取进程信息之后,所述方法还包括执行被远程跳转指令覆盖的上 下文切换函数首部地址内容指令,并将远程跳转返回至上下文切换函数。
在远程跳转返回至上下文切换函数之后,所述方法还包括将所述获取 的进程信息与调用应用编程接口 API进程信息进行比较,若不一致,确定存 在内核级隐藏进程。
在得到上下文切换函数地址之后,所述方法还包括检测上下文切换函 数首部地址内容是否被篡改,若是,立即将其恢复为原始状态,并记录报警曰志。
所述方法还包括动态监控上下文切换函数首部地址内容是否被篡改, 若是,立即将其恢复为原始状态,并记录报警曰志。
所述方法是采用搜索算法查找内核地址空间得到上下文切换函数地址; 或者,由以下步骤得到上下文切换函数地址通过反汇编得到操作系统内核 调度程序的二进制特征码,通过所述特征码查找到上下文切换函数地址。
一种检测进程的设备,该设备包括地址查询单元、跳转单元和实时监控 单元;所述地址查询单元,用于查找操作系统内核地址空间,得到上下文切 换函数地址;所述跳转单元,在所述地址查询单元得到上下文切换函数地址时,修改上下文切换函数首部地址内容为远程跳转指令,并指示实时监控单元对进程结构体进行监控;所述实时监控单元,得到跳转单元监控指示后,对进程结构体进行访问,得到进程有关信息。
所述设备还包括进程比较单元,用于将所述实时监控单元得到的进程信息,与调用API进程信息进行比较,在比较结果不一致的情况下,确定存在 内核级隐藏进程。
所述跳转单元包括跳转执行子单元和跳转返回子单元;所述跳转执行子 单元,在所述地址查询单元得到上下文切换函数地址时,将上下文切换函数 首部地址内容修改为远程跳转指令,并指示实时监控单元对进程结构体进行 监控;所述跳转返回子单元,当得知实时监控单元获取到进程信息后,通知 操作系统内核执行被远程跳转指令覆盖的上下文切换函数首部地址内容指 令,并指示操作系统内核返回至上下文切换函数。
所述跳转单元还包括首部地址内容检测子单元,用于动态监控上下文切 换函数首部地址内容是否被篡改,若是,立即通知操作系统内核将其恢复为 原始状态;所述跳转单元还包括报警日志,用于记录上下文切换函数首部地 址内容被篡改情况。
所述操作系统包括WINDOWS系列操作系统、UNIX系列操作系统或 LINUX系列操作系统;所述进程有关信息,包括进程ID、进程名称或进程镜 像文件。
本发明中,通过对搡作系统内核调度线程(ETHREAD )的过程进行监控, 获取与当前线程有关的各种信息,其中包括EPROCESS,达到检测隐藏进程 的目的。由于本发明从处于操作系统最底层的线程出发,可以获得最真实的 内核对象信息,而且不存在操作系统版本不同检测方法不能通用的问题,能 够对DKOM隐藏进程进行有效的^r测;进一步,本发明通过对上下文切换函 数首部地址内容以及报警日志的动态监控和更新,保证了检测的准确性。


图1为EPROCESS与ETHREAD关系示意图2为实施例一流程图;图3为实施例一远程跳转逻辑示意图4为实施例二流程图5为进程检测设备内部结构示意图。
具体实施例方式
现有技术通过遍历进程双向链表来检测进程,而本发明着眼于调度线程, 通过调度线程得到进程结构体,从而达到检测进程的目的。
下面详细介绍实施例一
首先来分析一下有关进程和线程工作原理。现代操作系统一般以多任务 抢占方式来运行,每个进程分配特定的CPU时间片来达到执行目的,这样宏 观上看就像多个任务在同时运行。每个进程分配的时间片是由操作系统的 CPU时钟中断确定的,系统调用中断来比较当前进程分配的时间片,如果时 间片用完会根据各线程优先级等信息、用特定的调度算法来选择新的线程, 然后将它的返回值, 一个ETHREAD结构,作为参数来完成上下文切换函数, 从而设置ETHREAD、 EPROCESS中的各项参数,并替换内核处理器控制区 域(KPCRB)中的相应结构来完成线程切换,调度到另一个进程的线程会继 续执行。其中,当线程等待某一事件或信号量时,进程会自动放弃当前时间 片;EPROCEE保存着进程的各种信息,和相关结构的指针。
如前已述,在操作系统中每一个进程都有一个EPROCESS结构,而操作 系统内核维护一个双向链表,正常情况下,通过遍历双向链表就可以得到当 前系统中活动的进程。比如,运行任务管理器就可以看到当前系统中所有进 程。而DKOM就是通过修改这个双向链表,将要隐藏的进程的EPROCESS 的双向指针清空,然后修改与之相邻的EPROCESS指针,使得这个双向链表 "跳过,,了这个隐藏进程的EPROCESS,那么遍历双向链表得不到该隐藏进 程,此时运行任务管理器自然也就看不到该进程了。
操作系统一般有三个维护线程的双向链表(例如,Windows2000包括 Ki^WaitlnListHead、 Ki>VaitOutListHead、 KiDispatcherReadyListHead ),前两 个链表包含等待某种事件的线程,它们对于一个线程功能性没有任何影响,因此很容易被修改来隐藏进程;而最后一个链表包含的是等待执行的线程, 这个结构包括了很多进程相关指针,包括EPROCESS结构,而且此第三个链 表指针是切换地址空间时调度程序(scheduler,也可称为上下丈切换函数、 或上下文切换程序)使用的指针,它不能被修改,可以利用它来检测拥有某 个线程的进程。ETHREAD、 KTHREAD与EPROCESS结构之间关系参见图1 所示,KPRCB中的CurrentThread(当前线程)指向ETHREAD,而ETHREAD 内部包含的KTHREAD又指向EPROCESS,由此可知,ETHREAD、KTHREAD 与EPROCESS是紧密相关的。
从上述分析不难看出,线程是CPU调度的作小单位,操作系统是以线程 调度为核心的。本发明就是从调度线程出发,通过监控线程调度过程,来获 得EPROCESS有关进程的各种信息,从而能够检测出采用DKOM隐藏的进 程。
下面参见图2对实施例一进行介绍,实施例一包括
步骤201:查找操作系统内核地址空间,获取上下文切换函数地址;
具体实施中,可通过反汇编得到操作系统内核调度程序的二进制特征码;
然后在保护性进程模块(例如ntoskml)中查找这些特征码,就能查找到上
下文切换函数地址,一^:情况下,查找前20字节即可。
或者,可以采用搜索算法来查找到上下文切换函数地址,例如深度优先
搜索、广度优先搜索和启发式搜索等,这些搜索算法技术已经非常成熟,在
此不再赘述。
步骤202:修改上下文切换函数首部(前面几个字节)地址内容为远程跳 转指令,将上下文切换函数进行远程跳转;
参见图3所示,将原始调度程序首部内容地址修改为一条远程跳转指令, 跳转到本发明新构建的实时监控单元,此模块执行完毕后,再开始执行原来
调度程序开始部分的指令,然后结束跳转,返回至原上下文切换函数。
步骤203:远程跳转至访问EPROCESS,获取当前切换进程ID和进程镜 像文件等信息;
在此,要构建一个实时监控单元,用于监控当前进程情况。上述步骤102 将上下文切换函数跳转至此实时监控单元,对ETHREAD、 KTHREAD和
EPROCESS进行访问,特别是通过访问EPROCESS,可以获知当前进程的各 项参数。
歩骤204:远程跳转返回至上下X切换函敖,保证上下大切换函敖接钩。 由以上介绍可知,通过查找上下文切换函数地址,然后将其跳转至远程, 对EPROCESS结构进行访问,就能得到当前进程有关信息,达到检测进程的 目的。由于本发明从调度线程出发,而线程又处于操作系统的最底层,这也 就保证了获取的进程信息是真实可靠的,而且,不存在因操作系统版本不同 而不能通用的问题。采用实施例一提供的方法,能够检测出操作系统当前的 进程,包括正常的进程、以及基于内核级隐藏的进程。
下面详细介绍本实施例二
为了防止攻击者也对上下文切换函数进行类似的挂钩行为,在实施例一 的基础上,增加了远程跳转及其报警日志的动态监控和更新,以此保证检测 的准确性。
实施例二具体操作是,在地址空间中查找到上下文切换函数地址后,先 对前面若干字节进行检查,如果发现已经被修改为远程跳转,则记录报警曰 志,并且将其恢复,然后再进行远程跳转修改。
如图4所示,实施例二包括
步骤401:查找上下文切换函数地址;
步骤402:检查上下文切换函数地址前面字节是否被篡改,若是,执行步
骤403,否则,执行步骤404;
步骤403:将篡改的地址恢复为原始状态;
步骤404:修改上下文切换函数首部地址内容为远程跳转指令;
步骤405:远程跳转至访问EPROCESS结构,获取当前切换进程ID和进
程镜像文件等信息;
步骤406:远程跳转返回至上下文切换函数,保证上下文切换函数挂钩。 除了采用上述步骤使检测结果更加准确之外,还可以动态监控上下文切
换函数首部地址内容以及报警日志 一旦发现上下文地址^^皮篡改,立即恢复,
并记录报警曰志。下面详细介绍本实施例三
上述两个实施例能够完成检测当前进程的目的,然而对于确定哪些是
DKOM隐藏的恶意进程还需要进一步判断。
任何一个进程都要通过API与操作系统进行交互,而大多数交互都通过 系统调用传递给内核,而那些不使用任何API而存在的进程对系统不能起任 何作用,所以可以使用系统调用管理器来拦截系统调用,然后得到当前进程 的EPROCESS。
在实施例一或实施例二的基础上,实施例三对检测到的进程ID和进程镜 像文件名等进程信息,再与调用API得到的当前进程ID和进程镜像文件名进 行比较,如果不一致,则说明存在基于内核级隐藏的进程,也就是存在DKOM 的rootkit。
为了保证实时检测单元、以及操作系统在硬盘上的镜像文件不被篡改, 还可以在操作系统上安装信任链工具(信任链软件),来保证其安全性。
本发明还公开了 一种检测进程的设备,用于检测操作系统内核级隐藏进 程,操作系统包括现有或未来出现的各种类型,例如WINDOWS系列操作系 统、UNIX系列操作系统以及LINUX系列操作系统等。
如图5所示,该4金测设备包括地址查询单元501、跳转单元502和实时监 控单元503,跳转单元502在地址查询单元501获知上下文切换函数地址后, 修改调度程序(上下文切换函数)首部内容地址,进行远程跳转,通过实时 监控单元503对EPROCESS结构的实时访问,获得当前进程的有关信息。
地址查询单元501,用于查找操作系统内核地址空间,得到上下文切换函 数地址。具体实施中,可通过反汇编得到操作系统内核调度程序的二进制特 征码;然后查找这些特征码,就能获得到上下文切换函数地址;或者,可以 采用搜索算法来查找到上下文切换函数地址。
跳转单元502,主要针对调度程序的地址进行跳转。在地址查询单元501 得到上下文切换函数地址时,跳转单元502会修改上下文切换函数首部地址 内容为远程跳转指令,并指示实时监控单元503对进程结构体EPROCESS进 行监控。
实时监控单元503,得到跳转单元502监控指示后,对进程结构体进行访
问,得到进程有关信息,包括进程名称、进程ID和进程镜像文件等。
优选地,进程检测设备还包括进程比较单元504,用于将实时监控单元 503检测到的进程信息与调用API进程信息进扦比较,在比较结果不一致的情 况下,确定存在内核级隐藏进程。
进一步,跳转单元502包括跳转执行子单元511,它在得到上下文切换函 数地址时,将上下文切换函数首部地址内容修改为远程跳转指令,并指示实 时监控单元503对进程结构体进行监控。
优选地,跳转单元502还包括跳转返回子单元512、首部地址内容检测子 单元513和才艮警日志514。跳转返回子单元512,当得知实时监控单元503获 取到进程信息后,通知操作系统内核执行被远程跳转指令覆盖的上下文切换 函数首部地址内容指令,并指示操作系统内核返回至上下文切换函数;首部
地址内^^r测子单元513用于动态监控上下文切换函数首部地址内容是否被 篡改,若是,立即通知操作系统内核将其恢复为原始状态;报警日志514用 于根据首部地址内容检测子单元513检测,记录上下文切换函数首部地址内 容被篡改的情况。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普 通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润 饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1. 一种检测进程的方法,其特征在于包括查找操作系统内核地址空间,得到上下文切换函数地址;修改所述上下文切换函数首部地址内容为远程跳转指令,通过远程跳转,访问进程结构体,获取进程信息。
2、 根据权利要求1所述的检测进程的方法,其特征在于,在获取进程信 息之后,所述方法还包括执行被远程跳转指令覆盖的上下文切换函数首部地址内容指令,并将远 程跳转返回至上下文切换函数。
3、 根据权利要求2所述的检测进程的方法,其特征在于,在远程跳转返 回至上下文切换函数之后,所述方法还包括将所述获取的进程信息与调用应用编程接口 API进程信息进行比较,若 不一致,确定存在内核级隐藏进程。
4、 根据权利要求1、 2或3所述的检测进程的方法,其特征在于,在得 到上下文切换函数地址之后,所述方法还包括检测上下文切换函数首部地址内容是否被篡改,若是,立即将其恢复为 原始状态,并记录报警曰志。
5、 根据权利要求1、 2或3所述的检测进程的方法,其特征在于,所述 方法还包括动态监控上下文切换函数首部地址内容是否被篡改,若是,立即将其恢 复为原始状态,并记录报警日志。
6、 根据权利要求5所述的检测进程的方法,其特征在于,采用搜索算法 查找内核地址空间得到上下文切换函数地址;或者,由以下步骤得到上下文切换函数地址通过反汇编得到才喿作系统内核调度程序的二进制特征码,通过所述特征 码查找到上下文切换函数地址。
7、 一种检测进程的i殳备,其特征在于包括地址查询单元、跳转单元和实时监控单元;所述地址查询单元,用于查找操作系统内核地址空间,得到上下文切换函数地址;所述跳转单元,在所述地址查询单元得到上下文切换函数地址时,修改 上下文切换函数首部地址内容为逸程跳转指令,并指杀卖时蓝控单充对进程 结构体进行监控;所述实时监控单元,得到跳转单元监控指示后,对进程结构体进行访问, 得到进程有关信息。
8、 根据权利要求7所述的检测进程的设备,其特征在于,所述设备还包 括进程比较单元,用于将所述实时监控单元得到的进程信息,与调用API进程信息进行比 较,在比较结果不一致的情况下,确定存在内核级隐藏进程。
9、 根据权利要求7或8所述的检测进程的设备,其特征在于,所述跳转 单元包括跳转执行子单元和跳转返回子单元;所述跳转执行子单元,在所述地址查询单元得到上下文切换函数地址时, 将上下文切换函数首部地址内容修改为远程跳转指令,并指示实时监控单元 对进程结构体进行监控;所述跳转返回子单元,当得知实时监控单元获取到进程信息后,通知操 作系统内核执行被远程跳转指令覆盖的上下文切换函数首部地址内容指令, 并指示操作系统内核返回至上下文切换函数。
10、 根据权利要求9所述的检测进程的设备,其特征在于,所述跳转单 元还包括首部地址内容检测子单元,用于动态监控上下文切换函数首部地址内容是否被篡改,若是,立即通 知操作系统内核将其恢复为原始状态;所述跳转单元还包括报警日志,用于记录上下文切换函数首部地址内容 被篡改情况。
11、 根据权利要求10所述的检测进程的设备,其特征在于,所述操作系 统包括WINDOWS系列操作系统、UNIX系列操作系统或LINUX系列操作系 统;所述进程有关信息,包括进程ID、进程名称或进程镜像文件。
全文摘要
本发明公开了一种进程的检测方法,该方法尤其针对内核级隐藏进程进行检测,包括以下步骤查找操作系统内核地址空间,得到上下文切换函数地址;修改上下文切换函数首部地址内容为远程跳转指令,通过远程跳转,访问进程结构体,获取进程信息。由于本发明从处于操作系统最底层的线程上下文切换函数出发,可以获得最真实的内核对象信息,对于各种操作系统版都能通用,能够对DKOM隐藏进程进行有效的检测;而且,通过对上下文切换函数首部地址内容以及报警日志的动态监控和更新,保证了隐藏进程检测的准确性。本发明还公开了一种进程的检测设备。
文档编号G06F21/00GK101206692SQ200610165468
公开日2008年6月25日 申请日期2006年12月20日 优先权日2006年12月20日
发明者俊 李, 凯 王 申请人:联想(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1