CN103065084B - 在虚拟机外部机进行的windows隐藏进程检测方法 - Google Patents

在虚拟机外部机进行的windows隐藏进程检测方法 Download PDF

Info

Publication number
CN103065084B
CN103065084B CN201210577768.6A CN201210577768A CN103065084B CN 103065084 B CN103065084 B CN 103065084B CN 201210577768 A CN201210577768 A CN 201210577768A CN 103065084 B CN103065084 B CN 103065084B
Authority
CN
China
Prior art keywords
eprocess
windows
virtual machine
kernel
chain
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
Application number
CN201210577768.6A
Other languages
English (en)
Other versions
CN103065084A (zh
Inventor
崔竞松
郭迟
向浩
张雅娜
李果
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan University WHU
Original Assignee
Wuhan University WHU
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan University WHU filed Critical Wuhan University WHU
Priority to CN201210577768.6A priority Critical patent/CN103065084B/zh
Publication of CN103065084A publication Critical patent/CN103065084A/zh
Application granted granted Critical
Publication of CN103065084B publication Critical patent/CN103065084B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明涉及计算机技术领域,特别涉及在虚拟机外部机进行的windows隐藏进程检测方法。本发明在不改变虚拟机原有结构,也不在其中安装任何感知插件的情况下,在虚拟机外部即时监测虚拟机内的Windows操作系统隐藏进程的状态。我们的隐藏进程检测模块放置在虚拟化架构中的虚拟机监视器中。本发明通过三步进行完整的Windows隐藏进程发现:首先找出Windows里的内核模块ntoskrnl.exe,然后通过ntoskrnl.exe寻找系统内核维护的EPROCESS链表,最后利用多视图技术比对遍历线程后得到的线程所属的进程队列与EPROCESS链之间的差异,找出系统中存在的隐藏进程。

Description

在虚拟机外部机进行的windows隐藏进程检测方法
技术领域
本发明涉及一种windows隐藏进程检测方法,尤其是涉及在虚拟机外部机进行的windows隐藏进程检测方法。
背景技术
为减少相关开销和支持更广泛的操作系统,虚拟化架构出现在越来越多的场合。虚拟化的实质就是计算元件在虚拟的基础上而不是真实的基础上运行。资源的虚拟部份不受现有资源的架设方式,地域或物理组态所限制。图1表明了虚拟化的基本结构,其中最下面一层x86 Architecture(x86结构)为物理机的硬件设备,包括处理器(CPU)、内存(Memory)、网络适配器(NIC)、硬盘(Disk)等设备。第二层为虚拟化层(Virtualization Layer),负责对物理机上的物理设备进行虚拟化,以便各虚拟机使用。各虚拟机中包括操作系统(Operating System)和应用程序(App),同时专门有一台虚拟机作为服务控制台(Service Console)。传统计算机的使用,每个用户都有自己的一套硬件设备,包括显示器、内存、硬盘、CPU、网卡等,而在虚拟化平台下,每个用户不再需要拥有整套设备,只需一个终端显示设备即可。虚拟机运行在虚拟机服务器上,由服务器分发给要使用虚拟机的用户。图2表明用虚拟机(VM)代替物理机的工作方式,服务器上设置多个虚拟机,企业内部的客户端A、B、C可以直接连接服务器使用虚拟机,企业外部的客户端D、E也可以通过防火墙后连接到服务器使用虚拟机。虚拟化在各种应用中,包括服务器虚拟化、桌面虚拟化,以及当下最流行的云计算中担当着举足轻重的地位。面对这些应用,数据中心少则部署几台虚拟机,多则几十上百台。
随着虚拟化技术的发展,虚拟化环境所面临的安全问题也日趋凸显。作为虚拟化环境的运行实体,虚拟机和其中的客户操作系统的安全问题占据着支撑地位。如今广泛使用的操作系统在系统安全性方面均存在着不同程度的安全缺陷。由于操作系统普遍存在着结构复杂和内部进程不易监控等问题,拥有特权的进程可以轻易地对操作系统进行破坏。因此,为提高系统的安全性,有必要对系统内的进程进行监控。
随着虚拟化的推进,国内外对于虚拟化平台上安全系统的研究也呈现多元化、专业化的趋势。国防科技大学的温研等人,提出了一种新的基于硬件虚拟化技术的隐藏进程检测技术——Libra,通过构造一个轻量级的虚拟机监视器,实现了从虚拟层隐式获取真实进程列表的新技术,但是由于重新构造了虚拟机监视器,可用范围不广。VMwatcher在虚拟机外部构建进程控制块链表,并通过交叉视图的方式比较外部重构的进程列表和内部汇报的进程列表的差异,但该方法可能会出现漏检的现象。Lycosid利用假设检验的方法判定被检测的系统中是否存在隐藏进程,但由于其采用概率的方式来识别隐藏进程,同样也会出现漏检或者是误警的现象。
发明内容
本发明主要是解决现有技术所存在的技术问题;提供了一种能够在不改变虚拟机内部结构,也不在其中安装任何插件的情况下,在虚拟机外部对虚拟机内的Windows操作系统进行隐藏进程检测的在虚拟机外部机进行的windows隐藏进程检测方法。
本发明的上述技术问题主要是通过下述技术方案得以解决的:
一种在虚拟机外部机进行的windows隐藏进程检测方法,其特征在于,包括以下步骤:
步骤1:通过虚拟机内客户机的FS寄存器找到Windows加载的所有内核模块构成的链表,从链表中找到内核模块ntoskrnl.exe;
步骤2:找出Windows操作系统内核空间维护的所有活动进程,根据所有活动进程寻找内核维护的活动进程EPROCESS链表上的所有活动进程;
步骤3:结合步骤2得到的活动进程EPROCESS链表上的所有活动进程检测系统中EPROCESS链中脱链的隐藏进程。
在上述的在虚拟机外部机进行的windows隐藏进程检测方法,所述的步骤2中,对于Windows下的每一个进程,系统都会给它分配一个excutive process block对其进行管理,所述excutive process 即EPROCESS,该结构包含和指向一系列其他相关的数据结构;所有的进程EPROCESS相互之间使用一对指针ActiveProcessLinks连接起来形成了一个循环双向链表。
在上述的在虚拟机外部机进行的windows隐藏进程检测方法,所述的步骤1找出内核模块的具体方法包括以下子步骤:
步骤1.1,,通过Windows系统中的段寄存器FS寄存器找到KdVersionBlock 结构体指针,所述FS寄存器中存储的地址指向Windows操作系统的内核控制区域结构;
步骤1.2,在内核控制区域结构中偏移为34处,找到KdVersionBlock 结构体,其对应的结构是_DBGKD_GET_VERSION64,所述结构体里面包含了Windows加载的所有内核模块构成的链表的表头PsLoadedModuleList;
步骤1.3,通过PsLoadedModuleList访问链表第一个结点,得到操作系统内核文件ntoskrnl.exe以及其加载到内存中的基地址。
在上述的在虚拟机外部机进行的windows隐藏进程检测方法,所述步骤2中,寻找内核维护的活动进程EPROCESS链的具体方法包括以下子步骤:
步骤2.1,分析ntoskrnl.exe的PE文件,在其.edata节的导出地址表中,得到PsInitialSystemProcess的相对虚拟地址,其中PsInitialSystemProcess 是一个指向系统中system进程EPROCESS的指针;
步骤2.2,根据规定的PE文件加载到内存中的公式,符号PsInitialSystemProcess在内存中所处的虚拟地址VA = RVA + BaseAddress;通过上述计算,在获得内核中的PsInitialSystemProcess符号的虚拟地址后,得到系统中的system进程;
步骤2.3,基于EPROCESS链是一个双向循环链表,找到了其中一个进程,顺着这条链即得到找到整条内核空间维护的EPROCESS进程链表上的所有活动进程。
在上述的在虚拟机外部机进行的windows隐藏进程检测方法,所述的步骤3中,检测系统中EPROCESS链中脱链的隐藏进程是基于遍历线程的方法来检测,具体包括以下子步骤:
步骤3.1,遍历Windows系统中的三条链表:WaitList,QueueListEntry和ThreadListEntry,找到所有活动的线程;
步骤3.2,通过这些枚举出的线程,反向确定它们所属的进程队列。
步骤3.3,最后通过多视图的方式比较步骤2中找到的EPROCESS链和本步骤找到的进程队列之间的差异,从而确定了隐藏进程;即通过比对不同的方式检测出的结果来判断是否有异常。
在上述的在虚拟机外部机进行的windows隐藏进程检测方法,所述的步骤3.1中,在每次遍历过程中,根据某一时刻的进程id使用了位图的方式记录。
因此,本发明具有如下优点:能够在不改变虚拟机内部结构,也不在其中安装任何插件的情况下,在虚拟机外部对虚拟机内的Windows操作系统进行隐藏进程检测。
附图说明
图1为虚拟化的基本结构框架。
图2为用虚拟机代替物理机的工作方式。
图3为本发明的基本结构框架图。
图4为本发明的基本流程图。
图5为寻找Windows内核的ntoskrnl.exe程序的示意图。
图6为Windows进程EROCESS的双链表结构。
图7为Xen虚拟机中32位线性地址转换成物理地址的示意图。
具体实施方式
下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。
实施例:
本发明在虚拟机外部对Windows进程进行监视,是利用虚拟机监视器VMM具有比虚拟机里的操作系统内核更高执行权限这一优势,直接读取目标客户操作系统的FS寄存器里的内容。
当进程运行在Ring0下时, FS寄存器里的地址指向全局描述符表(Global Descriptor Table, GDT)中某一段,该段存储的地址经过转换后指向系统的处理器控制区域(Processor Control Region,KPCR)。这个控制区域中保存着处理器相关的一些重要数据值,如全局描述符表GDT的信息等等。确定了KPCR的位置后,即可找到偏移为34处的类型为_DBGKD_GET_VERSION64的变量KdVersionBlock。这个结构体里面包含了一些重要信息,如Windows加载的所有内核模块构成的链表的表头PsLoadedModuleList。每个内核模块在内存中对应一个_LDR_DATA_TABLE_ENTRY类型的数据块。这些数据块之间通过双向循环链表连接,即构成了模块链表,而模块链表的第一项就是ntoskrnl.exe。所以通过表头PsLoadedModuleList访问内核模块链表的第一个结点,我们就找到了操作系统内核文件ntoskrnl.exe(如图5)以及其加载到内存中的基地址(BaseAddress),该地址在操作系统运行周期内一般不会改变。
可执行文件在windows操作系统内是以PE(Portable Executable,可移植,可执行)文件形式存在的,在PE文件中存放着该文件的许多重要信息。接下来分析内核文件ntoskrnl.exe的PE文件,在其.edata节的导出地址表中,我们可以得到PsInitialSystemProcess的相对虚拟地址(Relative Virtual Addresses,RVA),其中PsInitialSystemProcess是一个指向系统中system进程EPROCESS的指针。然后,根据规定的PE文件加载到内存中的公式,符号PsInitialSystemProcess在内存中所处的虚拟地址VA = RVA + BaseAddress。通过上述计算,在获得内核中的PsInitialSystemProcess符号的虚拟地址后,我们也就找到了系统中的system进程,而由于EPROCESS链是一个双向循环链表(如图6),找到了其中一个进程,顺着这条链便能找到整条内核空间维护的EPROCESS进程链表上的所有活动进程。
当操作系统中的某个进程,它的EPROCESS结构从内核维护的进程链表中被去掉,该进程即被隐藏掉。在这种情况下,我们在上面找到的EPROCESS链上找不到这个进程。但是该进程仍然能够在系统中正常的运行,因为Windows操作系统是通过线程调度,而不是通过进程调度的。所以,本发明针对脱链的隐藏进程,使用遍历线程的方法来检测,通过这些枚举出的线程,可以反过来确定它们所属的进程队列,核心算法如下:
/*由于每个线程如果被CPU调度,必定会出现在下面三条链表中,所以通过遍历此三条链表可以找到所有脱链的进程。*/
for each process p on PsActiveProcessList do {
for each thread t which belongs to process p {
 findAllThreadsFromList (t, WaitList);
 findAllThreadsFromList (t, QueueListEntry);
 findAllThreadsFromList (t, ThreadListEntry);
}
}
findAllThreadsFromList (KTHREAD t, intlistOffset) {
for each element e on list (t+listOffset)
if (isKTHREAD(e)) then addThreadToFoundList (e);
}
在找到进程队列后,采用多视图的技术比较之前找到的EPROCESS链和这一步找到的进程队列之间的差异,从而确定了隐藏进程。多视图技术分别从可信视图和非可信视图获取进程列表,两个列表集合的差集即为被隐藏进程。对应到本发明中,可信视图为此步获得的进程队列,非可信视图是上一步找到的EPROCESS链表。
与此同时,由于在每次遍历的过程中,同一个线程可能被多次访问,所以为了提高遍历效率,在实现中根据某一时刻的进程id使用了位图(Bitmap)的方式记录,保证了不会重复分析线程。
最后,在整个技术中,每一次需要读取某一地址内存的值时,都需要做内存地址转换。这是因为我们得到的地址是虚拟机内的虚拟地址,而我们需要在虚拟机外的宿主机上读,所以需要将虚拟机内的虚拟地址转换为宿主机上的物理地址。我们的发明主要建立在目前流行的三类虚拟机软件上:Vmware,Xen,KVM,所以,要分别根据这三个平台有差别地分析地址映射的方法。
在Vmware中,我们直接用Vmware提供的Vprobe工具对虚拟地址进行探测,得到宿主机的物理地址。
在Xen中,虚拟机监视器(Virtual machine monitor,VMM)为每个虚拟机内的客户操作系统维护了一个影子页表。影子页表的作用是完成了客户虚拟机的虚拟地址(Virtual Address)直接到机器地址(Machine Address)的地址翻译,而Xen将影子页表的页目录项首地址填入处理器的CR3寄存器。操作系统通过寄存器CR3找到页目录(Page Directory)项地址,然后通过加上线性地址的高10位,即得到页表(Page Table)项地址,然后再加上线性地址中间的10位,即可得到线性地址所对应的物理页,最后加上线性地址低12位作为页内偏移即可定位到该线性地址对应的物理地址,示意图如图7。
在KVM中, KVM内核模块提供了下面的函数,它实现了虚拟机虚拟地址、虚拟机物理地址和宿主机物理地址的地址转换,我们可以直接调用,获得虚拟机内存中的具体内容,算法如下:
intkvm_read_guest_virt_system(     //读取虚拟机内存的内容
gva_taddr,
  void *val,
  unsignedintbytes,
  structkvm_vcpu *vcpu,
  struct x86_exception *exception);
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。

Claims (1)

1.一种在虚拟机外部机进行的windows隐藏进程检测方法,其特征在于,包括以下步骤:
步骤1:通过虚拟机内客户机的FS寄存器找到Windows加载的所有内核模块构成的链表,从链表中找到内核模块ntoskrnl.exe;
所述的步骤1找出内核模块的具体方法包括以下子步骤:
步骤1.1,通过Windows系统中的段寄存器FS寄存器找到KdVersionBlock结构体指针,所述FS寄存器中存储的地址指向Windows操作系统的内核控制区域结构;
步骤1.2,在内核控制区域结构中偏移为34处,找到KdVersionBlock结构体,其对应的结构是_DBGKD_GET_VERSION64,所述结构体里面包含了Windows加载的所有内核模块构成的链表的表头PsLoadedModuleList;
步骤1.3,通过PsLoadedModuleList访问链表第一个结点,得到操作系统内核文件ntoskrnl.exe以及其加载到内存中的基地址;
步骤2:找出Windows操作系统内核空间维护的所有活动进程,根据所有活动进程寻找内核维护的活动进程EPROCESS链表上的所有活动进程;所述的步骤2中,对于Windows下的每一个进程,系统都会给它分配一个excutive process block对其进行管理,所述excutive process即EPROCESS,包含和指向一系列其他相关的数据结构;所有的进程EPROCESS相互之间使用一对指针ActiveProcessLinks连接起来形成了一个循环双向链表;
所述步骤2中,寻找内核维护的活动进程EPROCESS链的具体方法包括以下子步骤:
步骤2.1,分析ntoskrnl.exe的PE文件,在其.edata节的导出地址表中,得到PsInitialSystemProcess的相对虚拟地址,其中 PsInitialSystemProcess是一个指向系统中system进程EPROCESS的指针;
步骤2.2,根据规定的PE文件加载到内存中的公式,符号PsInitialSystemProcess在内存中所处的虚拟地址VA=RVA+BaseAddress;在获得内核中的PsInitialSystemProcess符号的虚拟地址后,得到系统中的system进程;
步骤2.3,基于EPROCESS链是一个双向循环链表,找到了其中一个进程,顺着这条链即得到找到整条内核空间维护的EPROCESS进程链表上的所有活动进程;
步骤3:结合步骤2得到的活动进程EPROCESS链表上的所有活动进程检测系统中EPROCESS链中脱链的隐藏进程;
所述的步骤3中,检测系统中EPROCESS链中脱链的隐藏进程是基于遍历线程的方法来检测,具体包括以下子步骤:
步骤3.1,遍历Windows系统中的三条链表:WaitList,QueueListEntry和ThreadListEntry,找到所有活动的线程;
步骤3.2,通过这些枚举出的线程,反向确定它们所属的进程队列;
步骤3.3,最后通过多视图的方式比较步骤2中找到的EPROCESS链和本步骤找到的进程队列之间的差异,从而确定了隐藏进程;即通过比对不同的方式检测出的结果来判断是否有异常;
所述的步骤3.1中,在每次遍历过程中,根据某一时刻的进程id使用了位图的方式记录。
CN201210577768.6A 2012-12-27 2012-12-27 在虚拟机外部机进行的windows隐藏进程检测方法 Active CN103065084B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210577768.6A CN103065084B (zh) 2012-12-27 2012-12-27 在虚拟机外部机进行的windows隐藏进程检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210577768.6A CN103065084B (zh) 2012-12-27 2012-12-27 在虚拟机外部机进行的windows隐藏进程检测方法

Publications (2)

Publication Number Publication Date
CN103065084A CN103065084A (zh) 2013-04-24
CN103065084B true CN103065084B (zh) 2015-10-21

Family

ID=48107712

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210577768.6A Active CN103065084B (zh) 2012-12-27 2012-12-27 在虚拟机外部机进行的windows隐藏进程检测方法

Country Status (1)

Country Link
CN (1) CN103065084B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103400074B (zh) * 2013-07-09 2016-08-24 青岛海信传媒网络技术有限公司 一种隐藏进程的检测方法及装置
CN103793645A (zh) * 2014-01-24 2014-05-14 浪潮电子信息产业股份有限公司 一种超级调用的保护方法
CN105590054A (zh) * 2014-11-11 2016-05-18 航天恒星科技有限公司 虚拟机进程监控的方法、装置及系统
CN104715201B (zh) * 2015-03-31 2018-02-27 北京奇虎科技有限公司 一种虚拟机恶意行为检测方法和系统
CN104714831B (zh) * 2015-03-31 2018-04-17 北京奇虎科技有限公司 一种检测虚拟机中的寄生进程的方法和装置
CN104715202B (zh) * 2015-03-31 2018-06-12 北京奇虎科技有限公司 一种虚拟机中的隐藏进程检测方法和装置
CN106503547B (zh) * 2016-09-30 2019-07-05 北京北信源软件股份有限公司 一种基于VMWare WorkStation的Windows虚拟机进程枚举方法
CN107688481B (zh) * 2017-08-17 2023-12-15 中国电子科技集团公司第五十四研究所 一种支持多节点的kvm虚拟机隐藏进程检测系统
CN109214185A (zh) * 2018-08-06 2019-01-15 郑州云海信息技术有限公司 一种Windows系统进程检测方法及装置
CN112818345A (zh) * 2020-08-17 2021-05-18 北京辰信领创信息技术有限公司 遍历隐藏进程

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1878123A (zh) * 2005-06-06 2006-12-13 中兴通讯股份有限公司 一种位图聚合的递推流分类方法及其系统
CN101464829A (zh) * 2007-12-18 2009-06-24 珠海金山软件股份有限公司 确定代码覆盖率的方法、测试装置
CN102521537A (zh) * 2011-12-06 2012-06-27 北京航空航天大学 基于虚拟机监控器的隐藏进程检测方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7191440B2 (en) * 2001-08-15 2007-03-13 Intel Corporation Tracking operating system process and thread execution and virtual machine execution in hardware or in a virtual machine monitor

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1878123A (zh) * 2005-06-06 2006-12-13 中兴通讯股份有限公司 一种位图聚合的递推流分类方法及其系统
CN101464829A (zh) * 2007-12-18 2009-06-24 珠海金山软件股份有限公司 确定代码覆盖率的方法、测试装置
CN102521537A (zh) * 2011-12-06 2012-06-27 北京航空航天大学 基于虚拟机监控器的隐藏进程检测方法和装置

Also Published As

Publication number Publication date
CN103065084A (zh) 2013-04-24

Similar Documents

Publication Publication Date Title
CN103065084B (zh) 在虚拟机外部机进行的windows隐藏进程检测方法
US10423478B2 (en) Security enhanced out of process user space handling of hardware events
US9201697B2 (en) System and method to reduce memory usage by optimally placing VMS in a virtualized data center
US20160253201A1 (en) Saving and Restoring State Information for Virtualized Computer Systems
CN102651062B (zh) 基于虚拟机架构的恶意行为跟踪系统和方法
CN105393229B (zh) 虚拟机中的页面错误注入
US11221868B2 (en) Security enhanced hypervisor userspace notifications
US20080059726A1 (en) Dynamic measurement of an operating system in a virtualized system
CN101770551A (zh) 一种基于硬件模拟器的处理隐藏进程的方法
US10061918B2 (en) System, apparatus and method for filtering memory access logging in a processor
CN101782954A (zh) 一种计算机及异常进程的检测方法
Skarlatos et al. Babelfish: Fusing address translations for containers
CN107621971B (zh) 一种面向XenServer平台的虚拟机内存取证方法
Kourai et al. Efficient VM introspection in KVM and performance comparison with Xen
Wang et al. Introspection-based memory pruning for live VM migration
US11151051B2 (en) Process isolation for out of process page fault handling
Hsiao et al. Hardware-assisted MMU redirection for in-guest monitoring and API profiling
US10776020B2 (en) Memory protection in virtualized computer systems using shadow page tables
CN104346275A (zh) 内存测试系统及方法
US20230185593A1 (en) Virtual device translation for nested virtual machines
Bose et al. Benchmarking database performance in a virtual environment
US11243801B2 (en) Transparent huge pages support for encrypted virtual machines
Zhan et al. A low-overhead kernel object monitoring approach for virtual machine introspection
Utomo et al. Towards a Resilient Server with an external VMI in the Virtualization Environment
Utomo et al. Detecting hang on the virtual machine using LibVMI

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