CN101782954B - 一种异常进程的检测装置及方法 - Google Patents
一种异常进程的检测装置及方法 Download PDFInfo
- Publication number
- CN101782954B CN101782954B CN2009100772415A CN200910077241A CN101782954B CN 101782954 B CN101782954 B CN 101782954B CN 2009100772415 A CN2009100772415 A CN 2009100772415A CN 200910077241 A CN200910077241 A CN 200910077241A CN 101782954 B CN101782954 B CN 101782954B
- Authority
- CN
- China
- Prior art keywords
- identifier
- address
- current operation
- operating system
- obtains
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Abstract
本发明提供一种异常进程的检测装置及方法,其中装置包括:虚拟机管理模块,用于安装虚拟机管理器;第一操作模块,安装有第一操作系统;第二操作模块,安装有第二操作系统,所述第二操作系统运行在所述虚拟机管理器上;所述虚拟机管理模块包括:第一获取模块,用于获取所述第二操作系统中当前运行的一个进程的标识符的值;第二获取模块,用于获取所述第二操作系统中当前运行进程的双向链表;所述检测装置还包括:检测模块,用于将所述标识符的值在所述双向链表中进行遍历,若所述双向链表中没有所述标识符的值,则确定所述当前运行的一个进程为异常进程。本发明避免了虚拟机系统中操作系统的安全隐患,提高了系统的安全性。
Description
技术领域
本发明涉及计算机安全领域,特别是指一种异常进程的检测装置及方法。
背景技术
目前在计算机领域中,操作系统内核级rootkit比较流行,许多木马病毒都采用了内核级rootkit的隐藏技术,对系统安全造成了极大的威胁。同时,随着虚拟化技术的不断成熟,目前业界已经开始研究如何利用虚拟化技术来检测内核级rootkit。如图1所示,常见的虚拟机系统包括:硬件平台,安装在硬件平台上的虚拟机管理器VMM,运行在VMM上的主操作系统(Domain 0)和客户操作系统(Guest OS),对于虚拟机管理器VMM而言,它能够获知GuestOS的物理内存的地址分布情况、运行时CPU信息以及磁盘扇区占用情况,但它很难获得Guest OS内部的内存分配情况,比如Guest OS内部的进程信息等,因此在VMM看来,Guest OS就像一个灰匣子,这样就给检测Guest OS内部的rootkit带来了较大的技术难度。
rootkit是攻击者用来隐藏自己的踪迹和保留root访问权限的工具。
如图2所示,rootkit在操作系统的内核中,一般通过修改操作系统的内核对象(如进程)来隐藏自己的行为,如修改EPROCESS内核对象,每一个进程都由一个EPROCESS块来表示,EPROCESS块中不仅包含了进程相关了很多信息,还有很多指向其它相关数据结构的指针。例如每一个进程里面都至少有一个ETHREAD块表示的线程、进程的名字和在用户空间的PEB(进程环境)块等等。EPROCESS中除了PEB成员块在是用户空间,其他都是在内核空间中的。操作系统维护着一个EPROCESS的双向链表,记录了系统中所有存活的进程。rootkit通过修改EPROCESS内核对象将自身从此双向链表中摘除,从而达到隐藏自己的目的。假如EPROCESS 1为rootkit的进程,该进程块有一个ETHREAD线程块以及KPRCB(Kernel′s Processor Control Block,内核进程控制块),而EPROCESS 2和EPROCESS 3分别为其它应用程序的进程,该rootkit通过将自己从进程的LIST_ENTRY表中删除,让EPROCESS 2和EPROCESS 3在LIST_ENTRY表中的FLINK指针和BLINK指针直接连接,这样系统管理员就会很难察觉rootkit进程的存在,这样给系统的安全的带来极大的隐患。
发明人在实现本发明的过程中,发现现有技术中至少存在如下问题:
目前的计算机系统无法检测并发现运行在Guest OS内核的异常进程,如上述rootkit程序,使计算机系统,尤其是虚拟机系统存在极大的安全隐患。
发明内容
本发明要解决的技术问题是提供一种异常进程的检测装置及方法,使虚拟机管理器能够发现运行在Guest OS内核的异常进程,避免虚拟机系统的安全隐患。
为解决上述技术问题,本发明的实施例提供技术方案如下:
本发明的实施例提供一种异常进程的检测装置,应用于一计算机,所述计算机包括:用于安装虚拟机管理器的虚拟机管理模块;安装有第一操作系统的第一操作模块,所述第一操作系统运行在所述虚拟机管理器上;安装有第二操作系统的第二操作模块,所述第二操作系统运行在所述虚拟机管理器上,所述异常进程的检测装置包括:
第一获取模块,用于获取所述第二操作系统内核中当前运行的一个进程的标识符的值;第二获取模块,用于获取所述第二操作系统中当前运行进程的双向链表;
检测模块,用于将所述标识符的值在所述双向链表中进行遍历,若所述双向链表中没有所述标识符的值,则确定所述当前运行的一个进程为异常进程。
优选的,所述第一获取模块包括:第一获取子模块,用于读取所述计算机的硬件平台中CPU的专用寄存器值,获取页目录物理地址;
第二获取子模块,用于读取所述CPU的段寄存器的值,获取所述第二操作系统中当前运行的一个进程的标识符的虚拟地址;
地址转换模块,用于根据所述页目录物理地址,将所述当前运行的一个进程的标识符的虚拟地址转换成所述物理地址,根据所述物理地址获得所述当前运行的一个进程的标识符的值。
优选的,所述第二获取子模块包括:线程环境块地址获取模块,用于读取所述CPU的FS段寄存器的值,获取所述当前运行的一个进程的线程环境块TEB的虚拟地址;
标识符获取模块,用于根据所述线程环境块的虚拟地址和所述线程环境块与所述当前运行的一个进程的标识符的偏移量,获取所述当前运行的一个进程的标识符的虚拟地址。
优选的,所述地址转换模块包括:第一转换模块,用于根据所述标识符的虚拟地址的页目录索引,从所述当前运行的一个进程的页目录中获得相应的页目录项;
第二转换模块,用于根据所述页目录项中所述标识符的虚拟地址所对应页表的物理地址和所述标识符的虚拟地址的页表索引,从所述当前运行的一个进程的页表中获得相应的页表项;
第三转换模块,用于根据所述页表项中所述标识符的虚拟地址所对应物理页的物理地址和所述标识符的虚拟地址的页内偏移字节索引,获得所述标识符的虚拟地址所对应的物理地址,并读取所述物理地址所指向的内容,获得所述标识符的值。
优选的,上述第二获取模块包括:第三获取子模块,用于根据所述第二操作系统的内核进程控制区域KPCR的线性地址,获取内核进程控制块KPRCB的地址;
第四获取子模块,用于根据所述KPRCB的地址,获取当前线程结构体KTHREAD的指针;
第五获取子模块,用于根据所述KTHREAD的指针,获取当前线程结构体ETHREAD的基地址;
第六获取子模块,用于根据所述ETHREAD的基地址,获取所述当前运行进程的指针,并根据所述当前运行进程的指针获得双向链表。
优选的,所述检测模块位于所述第一操作模块中或者所述虚拟机管理模块中。
本发明的实施例还提供一种异常进程的检测方法,应用于一计算机,所述计算机包括:用于安装虚拟机管理器的虚拟机管理模块;安装有第一操作系统的第一操作模块,所述第一操作系统运行在所述虚拟机管理器上;安装有第二操作系统的第二操作模块,所述第二操作系统运行在所述虚拟机管理器上;所述方法包括:
获取所述第二操作系统内核中当前运行的一个进程的标识符的值;
获取所述第二操作系统中当前运行进程的双向链表;
将所述标识符的值在所述双向链表中进行遍历,若所述双向链表中没有所述标识符的值,则确定所述当前运行的一个进程为异常进程。
优选的,所述获取第二操作系统内核中当前运行的一个进程的标识符的值的步骤包括:
读取CPU的专用寄存器值,获取页目录物理地址;
读取所述CPU的段寄存器的值,获取所述第二操作系统中当前运行的一个进程的标识符的虚拟地址;
根据所述页目录物理地址,将所述当前运行的一个进程的标识符的虚拟地址转换成所述物理地址,根据所述物理地址获得所述当前运行的一个进程的标识符的值。
优选的,所述读取所述CPU的段寄存器的值,获取所述第二操作系统中当前运行的一个进程的标识符的虚拟地址的步骤包括:
读取所述CPU的FS段寄存器的值,获取所述当前运行的一个进程的线程环境块TEB的虚拟地址;
根据所述线程环境块的虚拟地址和所述线程环境块与所述当前运行的一个进程的标识符的偏移量,获取所述当前运行的一个进程的标识符的虚拟地址。
优选的,所述根据所述页目录物理地址,将所述当前运行的一个进程的标识符的虚拟地址转换成所述物理地址,根据所述物理地址获得所述当前运行的一个进程的标识符的值的步骤包括:
根据所述标识符的虚拟地址的页目录索引,从所述当前运行的一个进程的页目录中获得相应的页目录项;
根据所述页目录项中所述标识符的虚拟地址所对应页表的物理地址和所述标识符的虚拟地址的页表索引,从所述当前运行的一个进程的页表中获得相应的页表项;
根据所述页表项中所述标识符的虚拟地址所对应物理页的物理地址和所述标识符的虚拟地址的页内偏移字节索引,获得所述标识符的虚拟地址所对应的物理地址,并读取所物理地址空间中的内容,获得所述标识符的值。
优选的,所述获取所述第二操作系统中当前运行进程的双向链表的步骤包括:
根据所述第二操作系统的内核进程控制区域KPCR的线性地址,获取内核进程控制块KPRCB的地址;
根据所述KPRCB的地址,获取当前线程结构体KTHREAD的指针;
根据所述KTHREAD的指针,获取当前线程结构体ETHREAD的基地址;
根据所述ETHREAD的基地址,获取当前运行进程的指针,根据所述当前运行进程的指针获取所述当前运行进程的双向链表。
本发明的实施例具有以下有益效果:
上述方案通过在虚拟机管理模块中增设第一获取模块,获取第二操作系统当前运行进程的标识符,并通过增设第二获取模块,获取第二操作系统内核中运行的进程的双向链表,该计算机并遍历该双向链表,若有进程的标识符没有出现在该双向链表中,说明该进程为异常进程,至少是一个隐藏进程,如rootkit进程,这样,用户就可以很容易发现该rootkit的隐藏行为,并对该具有rootkit的操作系统进行病毒查杀工作,避免了系统的安全隐患,提高了计算机系统的安全性。
附图说明
图1为现有计算机虚拟机架构示意图;
图2为现有的运行在Guest OS中的异常进程隐藏自己的过程示意图;
图3为本发明的实施例计算机的结构示意图;
图4为图3所示实施例的计算机架构一具体实施例示意图;
图5为图4所示计算机架构的一具体实施例示意图;
图6为图4所示计算机架构的一具体实施例示意图;
图7为图4所示计算机架构的另一具体实施例示意图;
图8为图6所示计算机的地址转换模块进行地址转换的过程示意图;
图9为本发明的实施例异常进程的检测方法流程示意图。
具体实施方式
为使本发明的实施例要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
本发明的实施例针对现有的计算机系统无法检测并发现运行在Guest OS内核的异常进程,如上述rootkit程序,使计算机系统,尤其是虚拟机系统存在极大的安全隐患的问题,提供一种计算机及异常进程的检测方法,其中,
如图3所示,计算机包括:硬件平台,具有CPU,内存等;
虚拟机管理模块,用于安装虚拟机管理器VMM;
第一操作模块,安装有第一操作系统,如虚拟机系统中的Domain 0,对于Type I架构的虚拟机系统,该第一操作系统运行在该虚拟机管理器VMM之上,即该VMM是位于操作系统和底层硬件设备之间的一个中间层;
第二操作模块,安装有第二操作系统,所述第二操作系统运行在所述虚拟机管理器上,该第二操作系统如虚拟机系统的Guest OS;
所述虚拟机管理模块包括:
第一获取模块,用于获取所述第二操作系统内核中当前运行的一个进程的标识符的值,在计算机系统中,每一个进程都会有一个唯一标识该进程的标识符,即当前运行进程的PID,该PID位于操作系统的用户空间;
第二获取模块,用于获取所述第二操作系统中当前运行进程的双向链表;操作系统中会有多个进程同时运行,这些正在运行的进程的相关信息形成一个双向链表,在该双向链表中,可以根据其中一个进程的信息获得其他正在运行的进程的相关信息;
所述计算机还包括:
检测模块,用于遍历所述双向链表,若所述双向链表中没有所述当前运行进程的标识符的值,则所述当前运行进程为异常进程。
在具体实现时,该检测模块可以安装在第一操作模块中,在第一操作系统的支持下,遍历该双向链表,特别是在安装在第一操作系统的用户空间时,通过应用程序来遍历该双向链表,实现起来简单,方便,兼容性也强;当然该检测模块也可以位于虚拟机管理模块中,在虚拟机管理器的支持下,遍历该双向链表,以检测操作系统中的异常隐藏进程。
该实施例通过虚拟机管理器VMM获取到第二操作系统中当前运行进程的PID,以及获取该第二操作系统当前运行进程的双向链表,检测模块查找该双向链表,若发现某一进程的PID没有出现在该双向链表中,说明该进程是异常进程,如内核级的rootkit程序将自己从该双向链表中删除,那么该rootkit程序的进程的PID就不会出现在该双向链表中,此时系统可以采取报警的方式提示用户进行病毒查杀等,使虚拟机系统的安全隐患大大降低。
如图4所示,在上述图3所示实施例的基础上,上述计算机的虚拟机管理模块中的第一获取模块包括:
第一获取子模块,用于读取所述CPU的专用寄存器值,获取页目录物理地址;该专用寄存器为CPU的CR3寄存器,该寄存器中的值记录了第二操作系统当前运行进程的页目录物理地址,利用该页目录物理地址可以获得应用程序所使用的虚拟地址的物理地址;
第二获取子模块,用于读取所述CPU的段寄存器的值,获取所述第二操作系统中当前运行的一个进程的标识符的虚拟地址;任何一个进程都具有一个线程环境块(TEB)结构体,位于操作系统的用户空间,该线程环境块的地址是在CPU的段寄存器存储,特别是CPU的FS段寄存器,在该线程环境块的结构体中,包含有该线程所在进程的PID成员,因此,可以根据该线程环境块的首地址和该线程所在进程的PID的固定偏移量,可以获得该进程的PID的虚拟地址,如某一进程的线程环境块TEB的起始地址是)0X200,偏移量为0X004,则该进程的PID的虚拟地址为0X200+0X004=0X204;
地址转换模块,用于根据所述页目录物理地址,将所述当前运行的一个进程的标识符的虚拟地址转换成所述物理地址,根据所述物理地址获得所述当前运行进程的标识符的值;CPU利用上述CR3寄存器中的值(即页目录物理地址),将当前进程的PID的虚拟地址转换成相应的物理地址,并从该物理地址所对应的物理空间中获得该PID的值;
第一操作模块或VMM中的检测模块根据该PID的值遍历该第二操作系统运行的所有进程的双向链表,若该PID不在该链表中,说明该进程是异常进程,可以进行相应的报警或者提示,提醒用户进行病毒查杀;使虚拟机系统中第二操作系统相对于虚拟机管理器VMM来说,其运行是透明的,虚拟机管理器利用上述第一获取模块和第二获取模块监视该第二操作系统内核中进程的运行,并利用检测模块进行检测,避免了虚拟机系统的安全隐患,提高了虚拟机系统的安全性。
如图5所示,上述第二获取子模块在获取当前运行进程的PID的虚拟地址时,是根据该进程的线程环境块TEB的虚拟地址查找该进程的PID的虚拟地址的,因此,
上述第二获取子模块包括:
线程环境块地址获取模块,用于读取所述CPU的FS段寄存器的值,获取所述第二操作系统中当前运行的一个进程的线程环境块的虚拟地址;FS段寄存器中保存了线程的重要信息,如上述线程的TEB地址,SHE(结构化异常处理)等;
标识符获取模块,用于根据所述线程环境块的虚拟地址和所述线程环境块与所述当前运行的一个进程的标识符的偏移量,获取所述当前运行的一个进程的标识符的虚拟地址。如在Windows系统中,线程环境块的虚拟地址可以根据上述FS段寄存器中的值获得,而该线程环境块与该线程所在进程的PID的偏移量是固定的,如偏移量通常为0X004,利用线程环境块的虚拟地址+该偏移量,就可获得该PID的虚拟地址。
如图6所示,在上述实施例的基础上,第二获取子模块获得了第二操作系统当前运行进程的PID的虚拟地址后,还需要进一步将该PID的虚拟地址转换成相应的物理地址,并根据该物理地址对应的物理空间,获得该PID的值,因此,上述地址转换模块包括:
第一转换模块,用于根据所述标识符的虚拟地址的页目录索引,根据页目录物理地址,从所述当前运行的一个进程的页目录中获得相应的页目录项;
每一个进程都对应有一个页目录和该页目录对应的页表,页目录中有1024项,每个进程可以有512个页表,每张页表有1024项;
第二转换模块,用于根据所述页目录项中所述标识符的虚拟地址所对应页表的物理地址和所述标识符的虚拟地址的页表索引,从所述当前运行的一个进程的页表中获得相应的页表项;
第三转换模块,用于根据所述页表项中所述标识符的虚拟地址所对应物理页的物理地址和所述标识符的虚拟地址的页内偏移字节索引,获得所述标识符的虚拟地址所对应的物理地址,并读取所物理地址空间中的内容,获得所述标识符的值。
上述第一转换模块,第二转换模块以及第三转换模块的具体转换过程如图8所示,在Windows X86系统中,一个虚拟地址,大小4个字节(32bit),包含着找到物理地址的信息,通常分为3个部分:第22位到第31位这10位(最高10位)是页目录中的索引,第12位到第21位这10位是页表中的索引,第0位到第11位这12位(低12位)是页内偏移。对于一个要转换成物理地址的虚拟地址,CPU首先根据CR3中的值,找到页目录所在的物理页,然后根据虚拟地址的第22位到第31位这10位(最高的10bit)的值作为索引,找到相应的页目录项(PDE,page directory entry),页目录项中有这个虚拟地址所对应页表的物理地址,有了页表的物理地址,根据虚拟地址的第12位到第21位这10位的值作为索引,找到该页表中相应的页表项(PTE,page table entry),页表项中就有这个虚拟地址所对应物理页的物理地址。最后用虚拟地址的最低12位,也就是页内偏移字节索引,加上这个物理页的物理地址,就得到了该虚拟地址所对应的物理地址。而上述当前运行进程的PID的虚拟地址也是一个32位的虚拟地址,其转换成物理地址的过程与上述过程相同,在此不再重复描述,最后从PID的物理地址对应的物理地址空间中读取相应的字节,即PID的值。
以上是获取第二操作系统中当前运行的一个进程的PID的值的过程,下面就虚拟机管理器中的第二获取模块获取第二操作系统的当前运行进程的双向链表的过程进行描述:
如图7所示,上述第二获取模块包括:
第三获取子模块,用于根据所述第二操作系统的内核进程控制区域(Kernel′s Processor Control Region,KPCR)的线性地址,获取内核进程控制块(Kernel′s Processor Control Block,KPRCB)的地址;
第四获取子模块,用于根据所述KPRCB的地址,获取当前线程结构体KTHREAD的指针;
第五获取子模块,用于根据所述KTHREAD的指针,获取当前线程结构体ETHREAD的基地址;
第六获取子模块,用于根据所述ETHREAD的基地址,获取所述当前运行进程的指针,并根据所述当前运行进程的指针获得双向链表。
在本例中,是从操作系统内核对象KPCR入手,KPCR是一个不会随WINDOWS版本变动而改变的固定结构体,该结构位于内核模式的线性地址0xFFDFF000处,在它的末尾(偏移0x120)指向内核进程控制块KPRCB结构;KPRCB同样是一个不会随WINDOWS版本变动而改变的固定结构体,它包含有指向当前KTHREAD的指针(偏移值0x004),ETHREAD的第一项是KTHREAD,也就知道了当前的ETHREAD基地址,而ETHREAD包含有EPROCESS的指针,当前运行的所有EPROCESS的指针连接在一起,形成当前运行进程的双向链表。
检测模块遍历该双向链表,将从第二操作系统内核中获取的进程PID的值和该双向链表中的进程进行比较,若发现某个进程的PID没有在该双向链表中,则该进程可能是一个异常进程,如rootkit进程。
另外,上述所有实施例中,第一操作系统和第二操作系统为描述方便而所用,并不用于限定是Domain 0或者是Guest OS,上述实施例中,以第一操作系统为Domain 0,第二操作系统为Guest OS为例进行描述;对于第一操作系统是Guest OS,第二操作系统为Domain 0也同样适用,由于虚拟机系统中,Guest OS通常可以为多个,则对两个操作均为Guest OS也同样适用,在虚拟机管理器VMM中增设第一获取模块和第二获取模块,利用上述检测模块,同样可以检测到另一个Guest OS内核中运行的异常进程;另外,本发明的上述实施例对于Type II类型的虚拟机架构也同样适用,即虚拟机管理器安装在第一操作系统(如Host OS)中,第二操作系统(如Guest OS)安装在虚拟机管理器上,此时,虚拟机管理器中的第一获取模块和第二获取模块仍然可以获取第二操作系统的当前运行进程的PID以及双向链表,第一操作系统仍然可以通过虚拟机管理器获取该双向链表,并遍历该双向链表,若有进程的PID没有在该双向链表中,则说明该进程是运行在第二操作系统的一个异常进程。
综上,本发明的上述实施例通过在虚拟机管理模块中增设第一获取模块,获取第二操作系统当前运行进程的PID,以及增设第二获取模块,获取第二操作系统的当前运行进程的双向链表,并利用检测模块遍历该双向链表,若有进程的PID没有出现在该双向链表中,说明该进程为异常进程,至少是一个隐藏进程,如rootkit进程,这样,用户就可以很容易发现该rootkit的隐藏行为,并对该具有rootkit的操作系统进行病毒查杀工作,避免了系统的安全隐患;而且本发明上述的实施例所述的计算机架构,不需要对操作系统进行任何的修改,不会影响操作系统的性能,也不需要在第二操作系统中运行代理程序,对内核进程进行监控,安全性高,虚拟机管理器可以获得操作系统发生的一切行为,无论是用户空间还是内核空间,具有开放性。
如图9所示,本发明的实施例还提供一种异常进程的检测方法,包括:
步骤S91,获取第二操作系统内核中当前运行的一个进程的标识符的值;该第二操作系统可以为虚拟机系统的Guest OS;在计算机系统中,每一个进程都会有一个唯一标识该进程的标识符,即当前运行进程的PID;
步骤S92,获取所述第二操作系统中当前运行进程的双向链表;
步骤S93,将所述标识符的值在所述双向链表中进行遍历,若所述双向链表中没有所述标识符的值,则确定所述当前运行的一个进程为异常进程;其中该第一操作系统可以为虚拟机系统的Domain 0,该异常进程至少是一个隐藏进程;
其中,步骤S91可具体包括:
步骤S911,读取CPU的专用寄存器值,如CR3寄存器的值,获取页目录物理地址;
步骤S912,读取所述CPU的段寄存器的值,如FS段寄存器的值,获取所述操作系统中当前运行的一个进程的标识符的虚拟地址;该FS段寄存器中存储了关于线程的重要信息,如线程环境块的虚拟地址等;
步骤S913,根据所述页目录物理地址,将所述当前运行的一个进程的标识符的虚拟地址转换成所述物理地址,根据所述物理地址获得所述当前运行的一个进程的标识符的值。
该步骤S912可具体包括:
步骤S9121,读取CPU的FS段寄存器的值,获取所述第二操作系统中当前运行的一个进程的线程环境块的虚拟地址;
步骤S9122,根据所述线程环境块的虚拟地址和所述线程环境块与所述当前运行的一个进程的标识符的偏移量,获取所述当前运行的一个进程的标识符的虚拟地址;
具体来讲,如一个进程都具有一个线程环境块(TEB)结构体,该线程环境块是在内核模式中的段寄存器进行存储,特别是内核模式下FS段寄存器的值,在该线程环境块的结构体中,包含有该线程所在进程的PID成员,因此,可以根据该线程环境块的首地址和该线程所在进程的PID的固定偏移量,可以获得该进程的PID的虚拟地址,如某一进程的线程环境块TEB的起始地址是)0X200,偏移量为0X004,则该进程的PID的虚拟地址为0X200+0X004=0X204。
该步骤S913可具体包括:
步骤S9131,根据所述标识符的虚拟地址的页目录索引,从所述当前运行的一个进程的页目录中获得相应的页目录项;每一个进程都对应有一个页目录和该页目录对应的页表,页目录中有1024项,每个进程可以有512个页表,每张页表有1024项;
步骤S9132,根据所述页目录项中所述标识符的虚拟地址所对应页表的物理地址和所述标识符的虚拟地址的页表索引,从所述当前运行的一个进程的页表中获得相应的页表项;
步骤S9133,根据所述页表项中所述标识符的虚拟地址所对应物理页的物理地址和所述标识符的虚拟地址的页内偏移字节索引,获得所述标识符的虚拟地址所对应的物理地址,并读取所物理地址空间中的内容,获得所述标识符的值;
具体来讲,该PID的虚拟地址,大小为4个字节(32bit),包含着找到物理地址的信息,通常分为3个部分:第22位到第31位这10位(最高10位)是页目录中的索引,第12位到第21位这10位是页表中的索引,第0位到第11位这12位(低12位)是页内偏移。对于一个要转换成物理地址的虚拟地址,CPU首先根据CR3中的值,找到页目录所在的物理页,然后根据虚拟地址的第22位到第31位这10位(最高的10bit)的值作为索引,找到相应的页目录项(PDE,page directory entry),页目录项中有这个虚拟地址所对应页表的物理地址,有了页表的物理地址,根据虚拟地址的第12位到第21位这10位的值作为索引,找到该页表中相应的页表项(PTE,page table entry),页表项中就有这个虚拟地址所对应物理页的物理地址。最后用虚拟地址的最低12位,也就是页内偏移,加上这个物理页的物理地址,就得到了该虚拟地址所对应的物理地址,再从PID的物理地址对应的物理地址空间中读取相应的字节,即PID的值。
上述步骤S92具体包括:
步骤S921,根据所述第二操作系统的内核进程控制区域(Kernel′s ProcessorControl Region,KPCR)的线性地址,获取内核进程控制块(Kernel′s ProcessorControl Block,KPRCB)的地址;
步骤S922,根据所述KPRCB的地址,获取当前线程结构体KTHREAD的指针;
步骤S923,根据所述KTHREAD的指针,获取当前线程结构体ETHREAD的基地址;
步骤S924,根据所述ETHREAD的基地址,获取所述当前运行进程的指针,并根据所述当前运行进程的指针获得双向链表。
在本例中,是从操作系统内核对象KPCR入手,KPCR是一个不会随WINDOWS版本变动而改变的固定结构体,该结构位于内核模式的线性地址0xFFDFF000处,在它的末尾(偏移0x120)指向内核进程控制块KPRCB结构;KPRCB同样是一个不会随WINDOWS版本变动而改变的固定结构体,它包含有指向当前KTHREAD的指针(偏移值0x004),ETHREAD的第一项是KTHREAD,也就知道了当前的ETHREAD基地址,而ETHREAD包含有EPROCESS的指针,当前运行的所有EPROCESS的指针连接在一起,形成当前运行进程的双向链表。
在步骤S93中,遍历该双向链表,将从操作系统内核中获取的进程PID的值和该双向链表中的进程进行比较,若发现某个进程的PID没有在该双向链表中,则该进程可能是一个隐藏进程。
该方法实施例通过获取操作系统当前运行进程的PID,同时获取该操作系统中当前运行进程的双向链表,并遍历该双向链表,若有进程的PID没有出现在该双向链表中,说明该进程为异常进程,至少是一个隐藏进程,如rootkit进程,这样,用户就可以很容易发现该rootkit的隐藏行为,并对该具有rootkit的操作系统进行病毒查杀工作,避免了系统的安全隐患,提高了系统的安全性。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (11)
1.一种异常进程的检测装置,应用于一计算机,所述计算机包括:用于安装虚拟机管理器的虚拟机管理模块;安装有第一操作系统的第一操作模块,所述第一操作系统运行在所述虚拟机管理器上;安装有第二操作系统的第二操作模块,所述第二操作系统运行在所述虚拟机管理器上,所述异常进程的检测装置包括:
第一获取模块,用于获取所述第二操作系统中当前运行的一个进程的标识符的值;
第二获取模块,用于获取所述第二操作系统中当前运行进程的双向链表;以及
检测模块,用于将所述标识符的值在所述双向链表中进行遍历,若所述双向链表中没有所述标识符的值,则确定所述当前运行的一个进程为异常进程。
2.根据权利要求1所述的异常进程的检测装置,其特征在于,所述第一获取模块包括:
第一获取子模块,用于读取所述计算机的硬件平台中CPU的专用寄存器,获取页目录物理地址;
第二获取子模块,用于读取所述CPU的段寄存器的值,获取所述第二操作系统中当前运行的一个进程的标识符的虚拟地址;
地址转换模块,用于根据所述页目录物理地址,将所述当前运行的一个进程的标识符的虚拟地址转换成物理地址,根据所述物理地址获得所述当前运行的一个进程的标识符的值。
3.根据权利要求2所述的异常进程的检测装置,其特征在于,所述第二获取子模块包括:
线程环境块地址获取模块,用于读取所述CPU的FS段寄存器的值,获取所述当前运行的一个进程的线程环境块的虚拟地址;
标识符获取模块,用于根据所述线程环境块的虚拟地址和所述线程环境块与所述当前运行的一个进程的标识符的偏移量,获取所述当前运行的一个进程的标识符的虚拟地址。
4.根据权利要求2所述的异常进程的检测装置,其特征在于,所述地址转换模块包括:
第一转换模块,用于根据所述标识符的虚拟地址的页目录索引,从所述当前运行的一个进程的页目录中获得相应的页目录项;
第二转换模块,用于根据所述页目录项中所述标识符的虚拟地址所对应页表的物理地址和所述标识符的虚拟地址的页表索引,从所述当前运行的一个进程的页表中获得相应的页表项;
第三转换模块,用于根据所述页表项中所述标识符的虚拟地址所对应物理页的物理地址和所述标识符的虚拟地址的页内偏移字节索引,获得所述标识符的虚拟地址所对应的物理地址,并读取所述物理地址所指向的内容,获得所述标识符的值。
5.根据权利要求1所述的异常进程的检测装置,其特征在于,所述第二获取模块包括:
第三获取子模块,用于根据所述第二操作系统的内核进程控制区域KPCR的线性地址,获取内核进程控制块KPRCB的地址;
第四获取子模块,用于根据所述KPRCB的地址,获取当前线程结构体KTHREAD的指针;
第五获取子模块,用于根据所述KTHREAD的指针,获取当前线程结构体ETHREAD的基地址;
第六获取子模块,用于根据所述ETHREAD的基地址,获取所述当前运行进程的指针,并根据所述当前运行进程的指针获得双向链表。
6.根据权利要求1-5任一项所述的异常进程的检测装置,其特征在于,所述检测模块位于所述第一操作模块中或者所述虚拟机管理模块中。
7.一种异常进程的检测方法,应用于一计算机,所述计算机包括:用于安装虚拟机管理器的虚拟机管理模块;安装有第一操作系统的第一操作模块,所述第一操作系统运行在所述虚拟机管理器上;安装有第二操作系统的第二操作模块,所述第二操作系统运行在所述虚拟机管理器上;其特征在于,所述方法包括:
获取所述第二操作系统内核中当前运行的一个进程的标识符的值;
获取所述第二操作系统中当前运行进程的双向链表;
将所述标识符的值在所述双向链表中进行遍历,若所述双向链表中没有所述标识符的值,则确定所述当前运行的一个进程为异常进程。
8.根据权利要求7所述的方法,其特征在于,所述获取第二操作系统内核中当前运行的一个进程的标识符的值的步骤包括:
读取CPU的专用寄存器值,获取页目录物理地址;
读取所述CPU的段寄存器的值,获取所述第二操作系统中当前运行的一个进程的标识符的虚拟地址;
根据所述页目录物理地址,将所述当前运行的一个进程的标识符的虚拟地址转换成所述物理地址,根据所述物理地址获得所述当前运行的一个进程的标识符的值。
9.根据权利要求8所述的方法,其特征在于,所述读取所述CPU的段寄存器的值,获取所述第二操作系统中当前运行的一个进程的标识符的虚拟地址的步骤包括:
读取所述CPU的FS段寄存器的值,获取所述当前运行的一个进程的线程环境块TEB的虚拟地址;
根据所述线程环境块的虚拟地址和所述线程环境块与所述标识符的偏移量,获取所述当前运行的一个进程的标识符的虚拟地址。
10.根据权利要求8所述的方法,其特征在于,所述根据所述页目录物理地址,将所述当前运行的一个进程的标识符的虚拟地址转换成所述物理地址,根据所述物理地址获得所述当前运行的一个进程的标识符的值的步骤包括:
根据所述标识符的虚拟地址的页目录索引,从所述当前运行的一个进程的页目录中获得相应的页目录项;
根据所述页目录项中所述标识符的虚拟地址所对应页表的物理地址和所述标识符的虚拟地址的页表索引,从所述当前运行的一个进程的页表中获得相应的页表项;
根据所述页表项中所述标识符的虚拟地址所对应物理页的物理地址和所述标识符的虚拟地址的页内偏移字节索引,获得所述标识符的虚拟地址所对应的物理地址,并读取所物理地址空间中的内容,获得所述标识符的值。
11.根据权利要求7所述的方法,其特征在于,所述获取所述第二操作系统中当前运行进程的双向链表的步骤包括:
根据所述第二操作系统的内核进程控制区域KPCR的线性地址,获取内核进程控制块KPRCB的地址;
根据所述KPRCB的地址,获取当前线程结构体KTHREAD的指针;
根据所述KTHREAD的指针,获取当前线程结构体ETHREAD的基地址;
根据所述ETHREAD的基地址,获取当前运行进程的指针,根据所述当前运行进程的指针获取所述当前运行进程的双向链表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100772415A CN101782954B (zh) | 2009-01-20 | 2009-01-20 | 一种异常进程的检测装置及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100772415A CN101782954B (zh) | 2009-01-20 | 2009-01-20 | 一种异常进程的检测装置及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101782954A CN101782954A (zh) | 2010-07-21 |
CN101782954B true CN101782954B (zh) | 2013-05-01 |
Family
ID=42522944
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009100772415A Active CN101782954B (zh) | 2009-01-20 | 2009-01-20 | 一种异常进程的检测装置及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101782954B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521537B (zh) * | 2011-12-06 | 2015-05-20 | 北京航空航天大学 | 基于虚拟机监控器的隐藏进程检测方法和装置 |
DE102012200155A1 (de) * | 2012-01-05 | 2013-07-11 | Continental Automotive Gmbh | Rechnersystem und Verfahren zum Betreiben eines Rechnersystems |
CN102930210B (zh) * | 2012-10-14 | 2015-11-25 | 江苏金陵科技集团有限公司 | 恶意程序行为自动化分析、检测与分类系统及方法 |
CN103365702B (zh) * | 2013-07-11 | 2017-02-08 | 中国科学院合肥物质科学研究院 | IaaS云环境下轻量级虚拟机进程追踪系统和方法 |
CN103544090B (zh) * | 2013-10-16 | 2016-04-06 | 北京航空航天大学 | 虚拟机进程监控方法和装置 |
CN104217163B (zh) * | 2014-09-10 | 2017-04-26 | 珠海市君天电子科技有限公司 | 一种检测结构化异常处理攻击的方法及装置 |
GB2539429B (en) * | 2015-06-16 | 2017-09-06 | Advanced Risc Mach Ltd | Address translation |
CN106599683B (zh) * | 2015-10-16 | 2019-10-22 | 华为技术有限公司 | 一种确定隐藏的内核模块的方法、装置及设备 |
CN106156610B (zh) * | 2016-06-29 | 2019-02-12 | 珠海豹趣科技有限公司 | 一种进程路径获取方法、装置和电子设备 |
CN106127053B (zh) * | 2016-06-30 | 2018-11-20 | 北京金山安全软件有限公司 | 恶意进程结束方法及装置 |
CN107506313B (zh) * | 2017-08-04 | 2021-06-25 | 致象尔微电子科技(上海)有限公司 | 一种管理和查找内存页框属性的方法 |
US11119939B2 (en) * | 2017-08-21 | 2021-09-14 | Alibaba Group Holding Limited | Methods and systems for memory management of kernel and user spaces |
CN107765922B (zh) * | 2017-10-31 | 2021-08-10 | 努比亚技术有限公司 | 卡屏检测与解决方法、移动终端及计算机可读存储介质 |
CN112818345A (zh) * | 2020-08-17 | 2021-05-18 | 北京辰信领创信息技术有限公司 | 遍历隐藏进程 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1492320A (zh) * | 2002-10-25 | 2004-04-28 | 华为技术有限公司 | Windows程序异常捕获及定位方法 |
CN1728106A (zh) * | 2004-07-26 | 2006-02-01 | 中兴通讯股份有限公司 | 一种应用程序故障的定位方法 |
CN101158924A (zh) * | 2007-11-27 | 2008-04-09 | 北京大学 | 一种虚拟机管理器的动态内存映射方法 |
-
2009
- 2009-01-20 CN CN2009100772415A patent/CN101782954B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1492320A (zh) * | 2002-10-25 | 2004-04-28 | 华为技术有限公司 | Windows程序异常捕获及定位方法 |
CN1728106A (zh) * | 2004-07-26 | 2006-02-01 | 中兴通讯股份有限公司 | 一种应用程序故障的定位方法 |
CN101158924A (zh) * | 2007-11-27 | 2008-04-09 | 北京大学 | 一种虚拟机管理器的动态内存映射方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101782954A (zh) | 2010-07-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101782954B (zh) | 一种异常进程的检测装置及方法 | |
Ligh et al. | The art of memory forensics: detecting malware and threats in windows, linux, and Mac memory | |
Hay et al. | Forensics examination of volatile system data using virtual introspection | |
US10467407B2 (en) | Method and system for detecting kernel corruption exploits | |
CN105393255B (zh) | 用于虚拟机中的恶意软件检测的过程评估 | |
CN101436237B (zh) | 用于将软件组件列入白名单的方法和系统 | |
CN100468324C (zh) | 处理与虚拟机体系结构中客户软件的操作相关联的故障 | |
US8954959B2 (en) | Memory overcommit by using an emulated IOMMU in a computer system without a host IOMMU | |
US8990934B2 (en) | Automated protection against computer exploits | |
JP6411494B2 (ja) | 仮想マシンにおけるページフォールトインジェクション | |
US8631170B2 (en) | Memory overcommit by using an emulated IOMMU in a computer system with a host IOMMU | |
CN103065084B (zh) | 在虚拟机外部机进行的windows隐藏进程检测方法 | |
CN103544090B (zh) | 虚拟机进程监控方法和装置 | |
US10061918B2 (en) | System, apparatus and method for filtering memory access logging in a processor | |
EP3789881A1 (en) | Method and device for monitoring memory access behavior of sample process | |
EP3063692B1 (en) | Virtual machine introspection | |
EP3825883A1 (en) | Hypervisor-based interception of memory accesses | |
CN106650434B (zh) | 一种基于io序列的虚拟机异常行为检测方法与系统 | |
CN103955649A (zh) | 一种安全启动终端设备的方法 | |
US20170053118A1 (en) | Changed Block Tracking Driver for Agentless Security Scans of Virtual Disks | |
Zhan et al. | A high-performance virtual machine filesystem monitor in cloud-assisted cognitive IoT | |
KR20170060815A (ko) | 메모리의 커널영역을 보호하기 위한 전자장치 및 방법 | |
CN111428240A (zh) | 一种用于检测软件的内存违规访问的方法及装置 | |
EP2214114A1 (en) | Extending secure management of file attribute information to virtual hard disks | |
Zhu et al. | Towards a novel approach for hidden process detection based on physical memory scanning |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |