CN112463287A - 基于插桩的访问请求处理方法及系统 - Google Patents

基于插桩的访问请求处理方法及系统 Download PDF

Info

Publication number
CN112463287A
CN112463287A CN201910849095.7A CN201910849095A CN112463287A CN 112463287 A CN112463287 A CN 112463287A CN 201910849095 A CN201910849095 A CN 201910849095A CN 112463287 A CN112463287 A CN 112463287A
Authority
CN
China
Prior art keywords
memory page
virtual machine
target memory
page
detection module
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.)
Pending
Application number
CN201910849095.7A
Other languages
English (en)
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.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
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 Beijing Qihoo Technology Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201910849095.7A priority Critical patent/CN112463287A/zh
Publication of CN112463287A publication Critical patent/CN112463287A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种基于插桩的访问请求处理方法及系统。其中,该方法包括:宿主机检测模块将与待监控地址相对应的内存页确定为目标内存页,对该目标内存页进行复制,以得到镜像内存页;向所述目标内存页中插入与所述待监控地址相对应的预设插桩指令,并取消所述目标内存页的访问权限;宿主机检测模块根据由所述目标内存页的访问请求触发的虚拟机退出事件将所述目标内存页替换为所述镜像内存页,并恢复所述目标内存页的访问权限,以使所述针对所述目标内存页的访问请求根据所述镜像内存页进行处理。该方式能够避免已插桩的内存页中的插桩指令因虚拟机内部的其他进程或线程的访问行为而被读取或覆盖的问题。

Description

基于插桩的访问请求处理方法及系统
技术领域
本发明涉及计算机技术领域,具体涉及一种基于插桩的访问请求处理方法及系统。
背景技术
虚拟机(Virtual Machine,简称VM)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在现有技术中,能够利用虚拟机实现恶意行为的检测,从而检测出威胁源。例如,可以通过虚拟机技术构建沙箱环境,以便在沙箱环境中进行安全检测。另外,在进行安全检测的过程中,通常需要针对特定的指令进行插桩操作,以监控该指令的执行过程。
但是,发明人在实现本发明的过程中发现,现有技术中的上述方式至少存在下述缺陷:在执行指令插桩之后,被插桩新指令的内存数据可能会由于虚拟机内部的其他进程或线程的访问行为而被读取或覆盖。当被插桩新指令的内存数据被虚拟机内部的其他进程或线程读取时,会导致插桩指令的泄露,从而为黑客的攻击带来便利;当被插桩新指令的内存数据被虚拟机内部的其他进程或线程覆盖时,将导致插桩指令的丢失,从而影响插桩操作的执行结果。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的基于插桩的访问请求处理方法及系统。
根据本发明的一个方面,提供了一种基于插桩的访问请求处理方法,包括:
宿主机检测模块将与待监控地址相对应的内存页确定为目标内存页,对该目标内存页进行复制,以得到镜像内存页;
向所述目标内存页中插入与所述待监控地址相对应的预设插桩指令,并取消所述目标内存页的访问权限;
宿主机检测模块根据由所述目标内存页的访问请求触发的虚拟机退出事件将所述目标内存页替换为所述镜像内存页,并恢复所述目标内存页的访问权限,以使所述针对所述目标内存页的访问请求根据所述镜像内存页进行处理。
根据本发明的另一个方面,提供了一种基于插桩的访问请求处理系统,包括:
宿主机检测模块以及虚拟机检测模块;其中,所述宿主机检测模块进一步包括:
镜像单元,适于将与待监控地址相对应的内存页确定为目标内存页,对该目标内存页进行复制,以得到镜像内存页;
插桩单元,适于向所述目标内存页中插入与所述待监控地址相对应的预设插桩指令,并取消所述目标内存页的访问权限;
处理单元,适于根据由所述目标内存页的访问请求触发的虚拟机退出事件将所述目标内存页替换为所述镜像内存页,并恢复所述目标内存页的访问权限,以使所述针对所述目标内存页的访问请求根据所述镜像内存页进行处理。
根据本发明的又一方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,处理器、存储器和通信接口通过通信总线完成相互间的通信;
存储器用于存放至少一可执行指令,可执行指令使处理器执行上述基于插桩的访问请求处理方法对应的操作。
根据本发明的再一方面,提供了一种计算机存储介质,存储介质中存储有至少一可执行指令,可执行指令使处理器执行如上述基于插桩的访问请求处理方法对应的操作。
根据本发明公开的基于插桩的访问请求处理方法及系统,宿主机检测模块针对与待监控地址相对应的目标内存页进行复制,以得到镜像内存页;并且,在向目标内存页中插入与待监控地址相对应的预设插桩指令后取消目标内存页的访问权限;相应地,宿主机检测模块能够根据由目标内存页的访问请求触发的虚拟机退出事件将目标内存页替换为镜像内存页,并恢复目标内存页的访问权限,以使针对目标内存页的访问请求根据镜像内存页进行处理。通过上述方式,当访问请求指向已插桩的内存页时,将触发虚拟机退出事件,从而将目标内存页替换为镜像内存页,进而使访问请求基于镜像内存页实现。通过该方式能够避免已插桩的内存页中的插桩指令因虚拟机内部的其他进程或线程的访问行为而被读取或覆盖的问题。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明一个实施例的基于插桩的访问请求处理方法的流程示意图;
图2示出了本发明另一个实施例的基于插桩的访问请求处理方法的流程示意图;
图3示出了本发明又一实施例提供的一种基于插桩的访问请求处理系统的系统结构图;
图4示出了根据本发明实施例的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了本发明一个实施例的基于插桩的访问请求处理方法的流程示意图。如图1所示,该方法包括:
步骤S110:宿主机检测模块将与待监控地址相对应的内存页确定为目标内存页,对该目标内存页进行复制,以得到镜像内存页。
其中,待监控地址是指需要通过插桩的方式进行监控的地址,将与该待监控地址相对应的内存页确定为目标内存页,以便对目标内存页进行复制,从而得到与目标内存页内容完全相同的镜像内存页。由此可见,对目标内存页进行复制之前,尚未针对目标内存页执行插桩操作,因此,镜像内存页的内容与原始内存页相同,不包含插桩指令。
步骤S120:向目标内存页中插入与待监控地址相对应的预设插桩指令,并取消目标内存页的访问权限。
其中,预设插桩指令用于针对待监控地址进行监控,具体可以为虚拟机特权指令、和/或中断指令等各类指令。经插桩操作后,目标内存页中包含了插桩代码,因而不同于原始内存页。在本实施例中,为了防止插桩指令被读取或覆盖,需要取消目标内存页的访问权限。
步骤S130:宿主机检测模块根据由目标内存页的访问请求触发的虚拟机退出事件将目标内存页替换为镜像内存页,并恢复目标内存页的访问权限,以使针对目标内存页的访问请求根据镜像内存页进行处理。
由于目标内存页的访问权限已被取消,因此,当接收到针对于目标内存页的访问请求时,将触发虚拟机退出事件从而使宿主机检测模块切换为根模式,以便将目标内存页替换为镜像内存页。当替换完成后,恢复目标内存页的访问权限,相应地,针对于目标内存页的访问请求将根据镜像内存页进行处理。由此可见,通过虚拟机退出事件以及内存页替换操作,能够使访问请求从目标内存页被重定向至镜像内存页,从而防止了目标内存页中的插桩指令被读取或覆盖的问题。
由此可见,通过上述方式,当访问请求指向已插桩的内存页时,将触发虚拟机退出事件,从而将目标内存页替换为镜像内存页,进而使访问请求基于镜像内存页实现。通过该方式能够避免已插桩的内存页中的插桩指令因虚拟机内部的其他进程或线程的访问行为而被读取或覆盖的问题。
为了便于理解,下面以一个具体示例为例详细描述本发明中的上述方法的具体实现细节。其中,本发明中的方法运行于分布式集群服务器沙箱中,用于针对目标样本文件执行高级威胁实时检测任务。具体地,本发明基于位于服务器端的宿主机操作系统(Host OS,Dom-0,Linux)内核中的全虚拟化模式虚拟机管理软件的虚拟机监视器(VMM,Hypervisor)实现。其中,服务器主机运行在虚拟机沙箱隔离环境中,以执行目标样本文件任务。同时虚拟机操作系统(也叫客户机操作系统,Guest OS,Dom-U,Windows)内核中加载的客户端驱动模块(隶属于虚拟机检测模块)和宿主机操作系统(Dom-0)内核中加载的全局检测模块(属于宿主机检测模块)协同联动,实现针对目标任务进程的活动行为的实时监控,并实现任务活动行为和异常事件的实时收集记录。其中,本发明中的行为检测,包括但不限于存在漏洞利用、内核提权、高度可疑的环境破坏、信息窃取、持久化、隐蔽、传播和感染等敏感和异常行为的任务。本实施例中的方法主要由位于宿主机操作系统内核的全局检测模块以及位于虚拟机操作系统内核的客户端驱动模块实现,其中,全局检测模块也叫宿主机检测模块,通常为一个;客户端驱动模块也叫虚拟机检测模块,通常为多个(分别位于不同的虚拟机中),从而实现“一对多”的管理关系。
其中,全局检测模块基于宿主机操作系统内核中的全虚拟化模式虚拟机管理软件的虚拟机监视器组件实现。全局检测模块的代码被整合在虚拟机管理软件源代码中。修改和重新编译生成的虚拟机管理软件模块安装在服务器端Linux操作系统中,并在服务器开机时与宿主机操作系统内核同步加载并初始化。在开机初始化完成时,全局检测模块将常驻于宿主机操作系统内核中,不受虚拟机实例创建、启动、关闭和销毁等操作的影响。通过挂接虚拟机物理内存管理和响应虚拟机控制接口,在虚拟机管理软件启动和关闭虚拟机时,全局检测模块初始化关联特定虚拟机的检测点数据结构和对象。全局检测模块根据客户端驱动模块提供的前置信息数据实现检测功能,前置信息数据由客户端驱动模块在客户机操作系统中负责收集。另外,宿主机操作系统环境中同时存在日志处理模块、虚拟机调度模块、任务控制模块等辅助模块以协助全局检测模块实现检测功能。
客户端驱动模块位于虚拟机操作系统内核中,是在目标客户机操作系统内核中加载的内核模式驱动程序。客户端驱动模块在客户机操作系统启动后加载并初始化,生命周期到虚拟机操作系统关闭时为止。在加载并初始化完成时,客户端驱动模块根据辅助组件提供的配置信息收集客户机操作系统中的前置信息数据,包括但不限于操作系统版本信息、关键数据结构定义和成员偏移、关键系统数据或对象地址、关键系统函数地址、特定监控代码块地址等。另外,虚拟机检测模块还能够执行部分无法在外部的虚拟机管理器组件中实现的检测功能,包括但不限于各类系统事件通知、过滤驱动等。在虚拟机内部实现的检测功能通过全局检测模块和客户端驱动模块的即时通信实现检出信息的输出。
图2示出了本发明另一实施例提供的基于插桩的访问请求处理方法的示意图。如图2所示,该方法包括以下步骤:
步骤S200:虚拟机检测模块获取关键系统函数地址列表,以及预设监控代码块地址列表,根据关键系统函数地址列表以及预设监控代码块地址列表生成监控列表。
具体地,当虚拟机环境启动完成时,虚拟机检测模块加载并完成初始化。虚拟机检测模块负责前置数据信息收集等操作。根据操作系统版本和内核模块版本信息,获取关键系统函数地址列表和特定监控代码块地址列表。关键系统函数包括但不限于:系统服务描述符表(SSDT)中的关键函数,内核模块重要的导出函数,需要通过指令匹配计算定位的重要的未导出函数。特定监控代码块是指:系统模块中存在历史漏洞的代码块,当指令执行时监控并根据寄存器和内存上下文进行条件判定,可以精确识别对应的针对历史漏洞的利用行为。相应地,根据关键系统函数地址列表以及预设监控代码块地址列表生成监控列表。另外,虚拟机检测模块还可以进一步将初始启动的目标进程、由目标进程启动或被目标进程注入的进程、以及加载由目标进程释放的文件的进程确定为待监控进程,从而将待监控进程添加到监控列表。并且,该监控列表还可以动态更新,更新后的监控列表通过即时通信功能传输给宿主机检测模块。
另外,虚拟机检测模块还可以根据预设策略为关键系统函数地址列表和特定监控代码块地址列表的每个地址存储所在位置的指令并初始化跳板区间,该跳板区间(即跳转区间)用于跳转回原函数执行。当然,初始化跳板区间的操作也可以由宿主机检测模块实施,本发明对此不做限定。
步骤S210:宿主机检测模块通过由虚拟机调用指令触发的第一虚拟机退出事件,获取由虚拟机检测模块生成的包含待监控地址的监控列表。
具体地,虚拟机检测模块生成监控列表后,通过执行虚拟机调用指令来触发第一虚拟机退出事件,相应地,使宿主机检测模块切换为根模式,从而能够获取和改变虚拟机处理器的寄存器数值等状态信息,进而获取到由虚拟机检测模块生成的监控列表。其中,通过触发虚拟机退出事件来实现虚拟机检测模块以及宿主机检测模块之间的即时通信功能,有关即时通信功能的具体实现细节将在后文进行详细描述,此处不再赘述。
步骤S220:宿主机检测模块将与待监控地址相对应的内存页确定为目标内存页,对该目标内存页进行复制,以得到镜像内存页。
其中,待监控地址主要是指包含在监控列表中的地址,当然也可以为其他方式得到的地址。本步骤需要分别针对每个待监控地址进行操作。具体实施时,在基于插桩的行为监控功能执行插桩操作之前,宿主机检测模块为监控地址信息数组中的每个客户机线性地址(GLA)所在的内存页分配并复制一个镜像内存页。镜像内存页中的数据和原内存页相同,作为原内存页的初始备份。在未激活状态下,镜像内存页不存在于客户机的扩展页表(EPT)中。其中,监控地址信息数组是用于存储各个待监控地址的数组。
步骤S230:向目标内存页中插入与待监控地址相对应的预设插桩指令,并取消目标内存页的访问权限。
具体地,取消目标内存页的访问权限可通过以下方式实现:确定与目标内存页相对应的页表项,将页表项中的读写比特位置零,以取消目标内存页的读写访问权限,并保留目标内存页的执行权限。
具体实施时,宿主机检测模块根据原内存页(即目标内存页)的客户机页框号(GFN),从与当前域关联的扩展页表(EPT)中解析4级页表结构,定位并记录原内存页对应的页表项(PTE)。当虚拟机检测模块通知宿主机检测模块启用监控功能时,宿主机检测模块遍历监控地址信息数组中的各节点,将前步骤存储的各页表项(PTE)中的读、写比特位置零,从而取消对应客户机内存页的读、写访问权限,仅保留执行权限。
步骤S240:宿主机检测模块根据由目标内存页的访问请求触发的虚拟机退出事件将目标内存页替换为镜像内存页,并恢复目标内存页的访问权限,以使针对目标内存页的访问请求根据镜像内存页进行处理。
其中,该访问请求由虚拟机操作系统中的线程或进程触发。由于目标内存页的访问权限已被取消,因此,针对于目标内存页的访问请求将因违反EPT规定而触发由EPT-VIOLATION原因引起的第二虚拟机退出事件,从而使宿主机检测模块切换为根模式,在根模式下,宿主机检测模块有权限获取和改变虚拟机处理器的寄存器数值等状态信息,从而能够在ROOT模式下将目标内存页替换为镜像内存页,并恢复目标内存页的访问权限。具体地,查找访问请求所指向的目标内存页的页表项,将页表项中的读写比特位置位,以恢复目标内存页的读写访问权限;并将镜像内存页的页框号数值写入页表项,以激活镜像内存页,并使镜像内存页代替目标内存页处理访问请求。
具体实施时,当客户机操作系统的某线程试图读、写访问插桩新指令的内存页(即目标内存页)时,由于前步骤已通过扩展页表(EPT)取消该内存页的读、写访问权限,因此该访问操作将使逻辑处理器触发EPTVIOLATION原因的VM-EXIT事件返回ROOT模式执行。宿主机检测模块中用于处理VM-EXIT事件的处理函数根据触发VM-EXIT的原因和被访问的客户机物理地址(GPA)获取当时执行环境相关信息,在监控地址信息数组中查找对应地址的节点。然后,该处理函数将监控地址信息节点的页表项(PTE)的读、写比特位置位,以恢复读、写访问权限;同时将前述创建的镜像内存页的宿主机物理页框号(HFN)数值写入至页表项(PTE)的页框号数值位置,以激活镜像内存页,从而将客户机中的被访问的内存页替换为镜像内存页。
由此可见,当逻辑处理器返回客户机上下文执行时,将继续执行针对目标内存页的读、写访问指令,该访问指令将能够成功执行读、写访问操作,但是读、写等访问操作的实际目标对象却是镜像内存页,由此确保了原内存页中插桩的新指令将不会被读取或覆盖。换言之,虽然访问指令是指向目标内存页的,但是,由于本实施例在接收到访问指令后通过切换到ROOT模式的方式使目标内存页被镜像内存页替代,从而使本次访问指令的实际访问对象为镜像内存页。
另外,进一步可选的,为了在本次访问请求处理完毕后,使镜像内存页能够再次被恢复为目标内存页,从而确保插桩指令的执行。在激活镜像内存页之后,进一步包括:针对虚拟机处理器设置监视器陷阱标志位(即MTF控制标志位)。其中,通过设置监视器陷阱标志位,使得处理器每次执行指令后因异常而触发虚拟机退出事件。相应地,本实施例中的方法进一步包括:当访问请求处理完毕时,触发与监视器陷阱标志位相对应的虚拟机退出事件,以取消监视器陷阱标志位;并恢复页表项的读写比特位置零状态,将已写入页表项的镜像内存页的页框号数值恢复为目标内存页的页框号数值。由此可见,通过由监视器陷阱标志位触发的虚拟机退出事件能够使宿主机检测模块监听到访问请求处理完毕的事件(或时机),进而在访问请求处理完毕的时间点第一时间取消监视器陷阱标志位,进而使目标内存页恢复为访问请求触发前的状态。具体实施时,当读、写访问操作完成时,由于虚拟机处理器设置MTF控制标志位,逻辑处理器将发生类型为MONITORTRAPFLAG的VM-EXIT事件。宿主机检测模块的处理函数此时取消虚拟机处理器的MTF控制标志位,同时恢复前步骤页表项(PTE)的读、写比特位的置零状态,并将原内存页的宿主机物理页框号(HFN)重新写入至页表项(PTE)的页框号数值位置,返回到客户机上下文继续执行。
由此可见,在本实施例中,插桩痕迹得以隐藏和保护,能够针对虚拟机内部的进程或线程隐藏针对虚拟机环境中被插桩的内存地址的修改痕迹。从而使被插桩的内存地址得以保护,使被插桩新指令的内存块不会被虚拟机内部的任何进程或线程读取或覆盖。本实施例中插桩痕迹的隐藏和保护功能主要基于硬件虚拟化技术的扩展页表(EPT)机制实现。其中隐藏和保护的目标是基于插桩的行为监控功能中所描述的插桩点集合。
另外,本实施例还可以进一步用于实现基于插桩的行为监控功能,相应地,在步骤S220之后,该方法进一步包括以下步骤:
步骤一:分别针对监控列表中包含的各个待监控地址,确定该待监控地址所对应的内存位置,并向该内存位置插入预设插桩指令。
具体地,针对监控列表中包含的各个待监控地址,将该待监控地址所在的内存页确定为目标内存页,在该目标内存页中确定与待监控地址相对应的偏移位置,将该偏移位置确定为该待监控地址所对应的内存位置。另外,为了便于实现数据恢复,在向该内存位置插入预设插桩指令时,进一步确定与该内存位置相对应的原指令,将原指令与该内存位置关联存储;其中,当监控操作执行完毕后,根据原指令进行数据恢复。其中,该待监控地址所对应的内存位置主要是指上文提到的目标内存页。
具体实施时,宿主机检测模块根据监控列表中的待监控地址的地址列表分配初始化监控地址信息数组。该初始化监控地址信息数组用于以数组形式存储各个待监控地址。其中,各个待监控地址可以为客户机线性地址(GLA)。宿主机检测模块根据预设策略在监控地址信息数组中的每个客户机线性地址所在内存页对应的偏移位置插入特定指令,例如虚拟化相关特权指令或中断指令。另外,插入新指令前存储被覆盖的原指令用于在关闭监控功能时恢复数据。
步骤二:当宿主机检测模块检测到由预设插桩指令的执行过程而触发的第二虚拟机退出事件时,根据第二虚拟机退出事件查询与预设插桩指令的执行过程相关的数据信息。
具体地,当客户机操作系统的某线程或进程执行插桩的新指令时,逻辑处理器即时触发对应原因的VM-EXIT事件以返回ROOT模式执行。相应地,宿主机检测模块中用于处理VM-EXIT事件的处理函数根据触发VM-EXIT的原因以及指令指针寄存器的数值获取当时执行环境相关信息,在监控地址信息数组中查找对应地址的节点,进而确定与预设插桩指令的执行过程相关的数据信息。
步骤三:根据查询到的数据信息执行检测任务,以实现行为监控。
具体地,根据查询到的数据信息以及预设处理策略,判断本次检测任务是否由虚拟机检测模块完成;若是,由虚拟机检测模块执行检测任务,并在检测任务完成后,跳转至预设的跳板区间地址;若否,由宿主机检测模块执行检测任务,并在检测任务完成后,跳转至预设的跳板区间地址。
具体实施时,根据预先设置的策略,宿主机检测模块中用于处理VM-EXIT事件的处理函数判断当前触发事件处理方式是否需要回到客户机上下文执行检测任务:
若是,该处理函数将虚拟机处理器的指令指针寄存器修改为当前被调用地址对应的客户机上下文处理函数地址(GLA),并返回至客户机上下文恢复执行。另外,根据事先指定并存储的参数个数和类型、返回值类型等信息,处理函数在虚拟机检测模块中执行检测任务。当检测任务完成时,处理函数调用或跳转至对应的跳板区间地址以继续执行原函数。
若否,根据事先指定并存储的参数个数和类型、返回值类型等信息,由该处理函数在宿主机检测模块中执行检测任务。当检测任务完成时,处理函数将虚拟机处理器的指令指针寄存器修改为当前被调用地址对应的跳板区间地址(GLA),并返回至客户机上下文恢复执行。
另外,在根据查询到的数据信息执行检测任务之后,进一步根据检测结果输出检测日志。具体地,执行检测任务的处理函数判断当前执行上下文是否属于被监控进程和线程、当前线程是否处于可记录状态,并根据判断结果确定是否输出检测日志。具体地,处理函数根据当前调用函数的参数类型解析参数数据并生成检测日志。
由此可见,在本实施例中,基于插桩的行为监控包括针对指定关键系统函数调用行为的监控、针对特定监控代码块指令执行时的上下文判定等检测功能。基于插桩的行为监控功能通过在指定位置插入特定指令实现。该方式通过在指定内存地址插入虚拟化相关特权指令或中断指令的方式实现执行时虚拟机处理器状态切换,进而实现行为监控。根据预先设置的策略,基于插桩的行为监控功能既可以在宿主机上下文的宿主机检测模块的处理函数中执行,也可以定向返回至客户机上下文的虚拟机检测模块的处理函数中执行。另外,在本实施例中,虚拟机检测模块生成的监控列表中包含的待监控地址的数量可以动态更新,相应地,通过即时通信功能将更新后的监控列表同步给宿主机检测模块,以使宿主机检测模块根据更新后的监控列表进行插桩及行为监控操作。
上述的步骤一、二、三与步骤S230、步骤S240并行执行,从而既能够实现基于插桩的行为监控功能,又能够在插桩过程中确保目标内存页不被访问请求读取或覆盖,从而实现插桩指令的隐藏和保护功能。
另外,除能够实现基于插桩的行为监控功能之外,本发明中的访问请求处理方法还能够实现如下三方面的功能,分别为:两端即时通信功能、内存访问行为的监控功能、以及虚拟机机操作系统的异常事件监控功能。下面分别以三个示例为例针对上述三种功能进行详细介绍:
示例一、两端即时通信功能
步骤一:虚拟机检测模块进行初始化以及前置数据信息的收集。
当虚拟机环境启动完成时,虚拟机检测模块以及其中包含的驱动子模块进行加载并完成初始化。虚拟机检测模块收集前置数据信息,包括但不限于:操作系统版本信息、关键数据结构定义和成员偏移、关键系统数据或对象地址、关键系统函数地址、以及特定监控代码块地址等。
步骤二:虚拟机检测模块将在虚拟机环境中获取到的与威胁检测过程相关的数据信息封装为序列化数据。
其中,与威胁检测过程相关的数据信息包括:上述收集的前置数据信息、和/或虚拟机检测模块获取到的与威胁源相关的威胁数据信息。为了符合虚拟机与宿主机之间的通信规范,在本发明中,将与威胁检测过程相关的数据信息以约定的序列化协议和格式封装成序列化数据,并根据序列化协议进行解析操作。其中,序列化协议和格式约定了认证字符串、数据类型、头部结构的大小、成员字段、以及追加数据的长度等。
步骤三:将序列化数据缓存至预设的内存空间,在预设寄存器中存储预设的内存空间的空间地址。
具体地,预设的内存空间包括一个或多个连续的内存页,相应地,将序列化数据缓存至预设缓冲区,且预设缓冲区位于上述内存页中,在预设寄存器中存储上述内存页中包含的预设缓冲区的线性地址。其中,预设的内存空间中包含的内存页可以是多个以线性地址视图连续的内存页。
步骤四:虚拟机检测模块通过虚拟机调用指令触发虚拟机退出事件。
其中,虚拟机检测模块根据序列化数据的数据类型,确定与该数据类型相对应的调用号,通过与该调用号相对应的虚拟机调用指令触发虚拟机退出事件,相应地,预设寄存器进一步包括多个分别对应于不同的调用号的通用寄存器。其中,序列化数据的数据类型可以结合客户端上下文确定。由此可见,通过预先设置多个分别对应于不同数据类型的调用号,并预先设置各个寄存器与调用号之间的对应关系,能够灵活传输多种类型的信息。具体实施时,将调用号和预设缓冲区的线性地址赋值给EAX/RAX、EBX/RBX等预设的通用寄存器,并执行VMCALL指令。其中,当VMCALL指令执行时,虚拟机处理器无条件触发VMCALL原因的VM-EXIT事件,处理器控制权临时回到ROOT环境,从而使宿主机检测模块中的VM-EXIT处理函数得以执行。
步骤五:宿主机检测模块根据上述虚拟机退出事件查询预设寄存器以获取并处理预设的内存空间中存储的序列化数据。
具体地,宿主机检测模块中包含的虚拟机退出处理函数(即VM-EXIT处理函数)获取预设寄存器中存储的线性地址,并将该线性地址转换为虚拟机物理地址;根据虚拟机物理地址与宿主机物理地址之间的映射关系,将虚拟机物理地址转换为宿主机物理地址;根据宿主机物理地址,获取并处理预设的内存空间中存储的序列化数据。其中,在根据宿主机物理地址,获取并处理预设的内存空间中存储的序列化数据时,将宿主机物理地址的物理页映射到宿主机操作系统内核地址空间,以得到宿主机线性地址;从映射到宿主机操作系统内核地址空间的内存页中读取序列化数据。另外,宿主机检测模块还需要获取与虚拟机退出事件相对应的虚拟机调用指令的调用号,查询与获取到的调用号相对应的通用寄存器,以根据该通用寄存器获取并处理预设的内存空间中存储的序列化数据。
具体实施时,宿主机检测模块中的VM-EXIT处理函数根据前述被赋值的通用寄存器获得调用号(Call ID)和所传输数据缓冲区的客户机线性地址(GLA)。该处理函数根据客户机线性地址转换成客户机物理地址(GPA),再根据客户机物理地址与宿主机物理地址的映射关系,将客户机物理地址转换成宿主机物理地址(HPA)。然后,该处理函数将已转换成的宿主机物理地址(HPA)的物理页映射在宿主机操作系统内核地址空间,获得宿主机线性地址(HLA,虚拟地址)。最后,该处理函数从映射到宿主机操作系统内核地址空间的内存页中读取缓冲区数据,并以约定的协议和格式解析序列化数据,获得当前通信传递的信息内容,并根据策略使用获得的信息。
另外,进一步可选的,在检测任务进行时,虚拟机检测模块还需要向宿主机检测模块发送检测日志等信息,类似地,通过单独约定的与日志类型相对应的调用号(Call ID)和协议格式对日志数据进行序列化封装,执行VMCALL指令无条件触发VMCALL原因的VM-EXIT事件,以使宿主机检测模块的处理函数能够解析并处理对应的序列化数据。其中,虚拟机检测模块向宿主机检测模块发送数据信息的情况,包括但不限于:虚拟机检测模块中实现的部分检测功能输出的检测日志数据;扩展式进线程监控机制将新进程或线程加入监控列表;虚拟机内部的目标进程释放的文件数据。
其中,宿主机检测模块位于宿主机操作系统内核的虚拟机监视器组件中,所述虚拟机检测模块位于通过虚拟机实现的客户机中;其中,一个宿主机检测模块对应于一个或多个虚拟机检测模块。
由此可见,在本示例中,宿主机检测模块和虚拟机检测模块之间通过虚拟化特权指令触发虚拟机处理器状态切换的方式实现通信,由此能够实现宿主机检测模块和虚拟机检测模块之间的即时通信功能,从而为二者之间的数据传输提供便利。其中,在虚拟机检测模块的功能代码中通过赋值指定寄存器调用号和客户机物理地址并执行VMCALL指令,使虚拟机处理器无条件触发VMCALL原因的VM-EXIT事件切换到ROOT环境以执行宿主机检测模块中对应的处理函数,从而使宿主机检测模块通过前述被赋值的寄存器获得调用号和客户机物理地址,并根据约定的协议从客户机物理内存中读取需要接收的数据,由此实现二端即时通信的功能。
示例二、内存访问行为的监控功能
步骤一:虚拟机检测模块进行初始化以及前置数据信息的收集,并根据收集结果设置监控列表。
当虚拟机环境启动完成时,虚拟机检测模块以及其中包含的驱动子模块进行加载并完成初始化。虚拟机检测模块收集前置数据信息,包括但不限于:操作系统版本信息、关键数据结构定义和成员偏移、关键系统数据或对象地址、关键系统函数地址、以及特定监控代码块地址等。接下来,虚拟机检测模块根据操作系统版本和内核模块版本信息,确定待监控对象及其对应的待监控地址,例如,关键系统数据或对象的地址和大小,具体包括:系统进程关联对象的Token成员指针,系统进程关联对象的Token对象,硬件抽象层(HAL)分发函数表,指示用户和内核地址空间界限的相关内核全局变量。最后,根据上述信息生成监控列表,该监控列表用于存储上述的各个待监控对象所对应的待监控地址。
步骤二:获取虚拟机检测模块设置的监控列表以及监控列表中包含的待监控地址,将与待监控地址相对应的内存页确定为目标内存页。
宿主机检测模块通过即时通信功能获取虚拟机检测模块设置的监控列表以及监控列表中包含的待监控地址。其中,即时通信功能通过触发虚拟机退出事件实现,具体实现方式将在后文进行详细描述。具体实施时,宿主机检测模块根据传递的监控列表中的各个待监控地址分配初始化监控地址信息数组,以便通过数组形式存储各个待监控地址,从而便于查询。监控列表中的待监控地址属于客户机物理地址(GPA)。分别针对各个待监控地址,确定该待监控地址所在的内存页,并将该内存页确定为目标内存页。
步骤三:将与目标内存页相对应的页表项中的读写比特位置零,以取消目标内存页的读写访问权限。
该步骤由宿主机检测模块实施。具体实施时,首先,根据上文提到的监控地址信息数组确定各个待监控地址及其对应的目标内存页;然后,获取各个客户机物理地址(GPA)所在内存页的客户机页框号(GFN),并从与当前域关联的扩展页表(EPT)中解析4级页表结构,定位并记录对应的页表项(PTE);最后,将前步骤存储的各页表项(PTE)中的读、写比特位置零,从而取消对应客户机内存页的读、写访问权限。
步骤四:当检测到由目标内存页的访问行为触发的虚拟机退出事件时,根据该虚拟机退出事件切换为根模式。
具体地,当虚拟机操作系统中存在试图访问目标内存页的进程或线程时,与该进程或线程相对应的访问行为将因违反EPT规定而触发虚拟机退出事件。响应于虚拟机退出事件,宿主机检测模块将从非根模式切换为根模式。例如,当客户机操作系统的某线程试图读、写访问插桩新指令的内存页时,由于前步骤已通过扩展页表取消该内存页的读、写访问权限,访问操作将使逻辑处理器触发EPT VIOLATION原因的VM-EXIT事件返回根模式(root模式)执行。
步骤五:在根模式下监控与目标内存页的访问行为相对应的访问数据信息。
具体地,读取预设寄存器的数值以及客户机内存数据,以确定访问行为所对应的执行环境信息以及访问状态信息。其中,执行环境信息包括:执行访问的进程或线程、访问行为的调用者函数、栈回溯序列、恶意代码块、和/或关键寄存器数值;所述访问状态信息包括:非系统进程针对系统进程关联对象的成员指针的读取访问、针对系统进程关联对象的读取访问、针对硬件抽象层分发函数表的写入访问、和/或针对指示用户和内核地址空间界限的相关内核全局变量的写入访问。
具体实施时,当访问的目标地址属于被监控的数据和对象范围时,根据监控策略,宿主机检测模块中的处理函数根据相关虚拟机处理器寄存器数值和客户机内存数据确定执行访问的进程、线程等环境信息,并判定当前读、写操作是否处于异常状态,针对异常状态和执行环境信息进行记录和输出。异常状态包括但不限于:非系统进程针对系统进程关联对象的Token成员指针的读取访问、针对系统进程关联Token对象的读取访问、针对硬件抽象层(HAL)分发函数表的写入访问、针对指示用户和内核地址空间界限的相关内核全局变量的写入访问。执行环境信息包括:执行访问的进程、线程、调用者函数、必要的栈回溯序列、可疑的恶意代码块、关键寄存器数值。
另外,考虑到目标内存页中除包含待监控地址之外,还可能包含其他无需监控的地址,因此,在本实施例中,在根模式下监控与目标内存页的访问行为相对应的访问数据信息时,进一步将访问行为的访问对象与监控列表中包含的待监控地址进行匹配;若匹配成功,则监控与目标内存页的访问行为相对应的访问数据信息;若匹配不成功,退出根模式并返回客户机上下文执行。例如,由于被监控的关键系统数据或对象所在的内存页中仍可能存在其他不被监控的数据或对象,这些数据或对象被访问时也会触发VM-EXIT事件,因此在宿主机检测模块的处理函数中根据前步骤存储的数据对象地址和大小与当前访问的目标地址进行匹配,不属于被监控的数据和对象范围的访问被忽略,逻辑处理器返回客户机上下文继续执行。
由此可见,通过上述步骤即可完成针对内存访问行为的监控操作。另外,为了不影响访问行为的正常执行,可选的,在本实施例中,在根模式下监控与目标内存页的访问行为相对应的访问数据信息之后,进一步包括:将与目标内存页相对应的页表项中的读写比特位置位,以恢复目标内存页的读写访问权限,并针对虚拟机处理器设置监视器陷阱标志位;其中,该监视器陷阱标志位用于在访问行为针对目标内存页的访问操作完成时,触发与监视器陷阱标志位相对应的虚拟机退出事件。相应地,该方法进一步包括:在检测到与监视器陷阱标志位相对应的虚拟机退出事件时,取消监视器陷阱标志位,并恢复页表项的读写比特位置零状态。
例如,当针对内存访问行为的检测任务完成时,处理函数设置前步骤的页表项中的读、写比特位置位,以恢复读、写访问权限;同时处理函数设置虚拟机处理器的MTF控制标志位。相应地,逻辑处理器返回客户机上下文执行时,将继续执行针对目标内存页的读、写访问指令,该访问指令将能够成功执行读、写访问操作。通过上述操作,使得针对目标内存页的访问行为得以正常实施。当读、写访问操作完成时,由于虚拟机处理器设置MTF控制标志位,逻辑处理器将发生类型为MONITORTRAPFLAG的VM-EXIT事件。宿主机检测模块的处理函数此时取消虚拟机处理器的MTF控制标志位,同时恢复前步骤页表项的读、写比特位的置零状态,返回到客户机上下文继续执行。
由此可见,该方式通过虚拟机退出事件能够实现内存访问行为的实时监控效果:一旦访问行为被执行,则会第一时间触发虚拟机退出事件,从而使内存访问行为得以在第一时间进行监控。该方式能够针对客户机操作系统的特定关键系统数据或对象地址实现的读写访问行为进行实时监控。该内存访问的实时监控功能主要基于硬件虚拟化技术的扩展页表机制实现。另外,内存访问的实时监控功能可以重点针对如下的待监控进程实施:初始启动的目标进程,由目标进程启动、被目标进程注入的进程,加载由目标进程释放的文件的进程。
示例三、虚拟机操作系统的异常事件监控功能
步骤一:虚拟机检测模块进行初始化以及前置数据信息的收集。
当虚拟机环境启动完成时,虚拟机检测模块以及其中包含的驱动子模块进行加载并完成初始化。虚拟机检测模块收集前置数据信息,包括但不限于:操作系统版本信息、关键数据结构定义和成员偏移、关键系统数据或对象地址、关键系统函数地址、以及特定监控代码块地址等。另外,虚拟机检测模块根据操作系统版本和内核模块版本信息,获取操作系统内核异常处理关键函数(即异常处理函数)的函数地址。
步骤二:通过由虚拟机调用指令触发的第一虚拟机退出事件,获取由虚拟机检测模块提供的异常处理函数的函数地址。
具体地,根据两端即时通信功能,虚拟机检测模块与宿主机检测模块能够进行即时通信。相应地,上一步骤中确定的内核异常处理关键函数的函数地址被传递给宿主机检测模块。宿主机检测模块将该函数地址通过插桩操作设置为执行时监控。
步骤三:针对函数地址插入预设插桩代码;其中,该预设插桩代码用于在异常处理函数执行时进行监控。
其中,该预设插桩代码用于在异常处理函数被执行时进行监控。预设插桩代码可通过多种形式实现,例如,可以为探针形式。另外,当异常处理函数的数量为多个时,需要分别针对每个异常处理函数的函数地址插入对应的预设插桩代码。
步骤四:当检测到由异常处理函数的执行过程而触发的第二虚拟机退出事件时,根据第二虚拟机退出事件切换为根模式。
具体地,通过设置有预设插桩代码的执行逻辑,能够使得异常处理函数被执行时,通过预设插桩代码触发第二虚拟机退出事件。相应地,宿主机检测模块根据第二虚拟机退出事件切换为根模式,在根模式下,宿主机检测模块能够获取和改变虚拟机处理器的寄存器数值等状态信息。
例如,当虚拟机操作系统内部发生蓝屏类异常事件时,根据操作系统内核模块代码逻辑,内核收集蓝屏上下文信息并调用执行相关异常处理函数。当客户机操作系统的某线程执行插桩的新指令时,逻辑处理器即时触发对应原因的VM-EXIT事件返回root模式执行,进入宿主机检测模块的处理函数中,以便通过宿主机检测模块的处理函数监控该异常事件。
步骤五:在根模式下获取与异常处理函数相关的异常事件的事件信息。
由于根模式下能够获取和改变虚拟机处理器的寄存器数值等状态信息,因此,宿主机检测模块能够基于获取到的状态信息确定与异常处理函数相关的异常事件的事件信息。其中,与异常处理函数相关的异常事件的事件信息包括:异常事件的发生时间、异常事件的产生原因、异常事件产生时的执行环境信息等各类信息。例如,宿主机检测模块中的处理函数通过ESP/RSP等寄存器数值和客户机内存数据获取蓝屏上下文信息并进行记录和输出。
由此可见,本示例能够针对客户机操作系统(即虚拟机操作系统)蓝屏事件进行实时监控。客户机操作系统的异常监控功能针对负责处理操作系统蓝屏事件的系统函数进行插桩监控。当客户机操作系统发生蓝屏时,系统内核将调用前述函数收集系统异常信息并处理异常。
综上可知,本实施例中的上述方法能够实现多方面的功能,该方式至少具备如下优势:
(1)宿主机检测模块基于全局虚拟机监视器实现,从而使检测引擎的核心代码均在全局虚拟机监视器层实现,能够简化位于虚拟机内部的虚拟机检测模块的功能,使检测引擎核心代码和虚拟机环境相互隔离,虚拟机环境的异常状态将不再影响检测功能的正常执行,并使检测引擎对虚拟机环境的影响降至最低程度。并且,由于检测引擎的核心代码位于全局虚拟机监视器层,而非虚拟机检测模块中,因此,存在环境探知行为的恶意进程也将无法窃取检测引擎的关键数据和代码。
(2)通过基于处理器的虚拟化技术,本方案还实现针对检测模块插桩痕迹的隐藏和保护功能,使得位于虚拟机内部的恶意代码针对包括挂钩在内的检测模块部署的插桩点的探知操作将更难实现,同时位于虚拟机内部的恶意代码针对被插桩函数地址的修改将不会影响检测模块自身插桩点的检测功能,从而确保威胁检测功能的持续有效性。
(3)集群化的分布式威胁检测系统自身依赖于特定的虚拟机管理软件在服务器主机中实现虚拟机管理、调度、基础支持等服务。基于虚拟机监视器的威胁检测实现方案将虚拟机管理软件的软件中间层和威胁检测功能模块实现有机结合,将原本依赖于嵌套虚拟化等机制支持的多层次分离结构实现简化,使虚拟机环境和宿主机物理服务器环境的硬件工作性能消耗得到较大程度的改善。另外,通过基于全局虚拟机监视器的威胁检测实现方案,同时可以大幅度缩短任务检测期间的中后阶段数据传递路径,沙箱集群中的虚拟机并行检测效率也将得到显著提升。
总而言之,与传统的基于虚拟机的检测方法相比,本方案的优势在于:基于全局虚拟机监视器组件,通过基于处理器的虚拟化技术实现动态威胁检测引擎功能,在检出效果、检出性能、检出可靠性方面,为运行时的威胁行为检出提供有力保证。虚拟机检测模块在虚拟机内部执行前置信息收集任务,宿主机检测模块在位于宿主机内核的虚拟机监视器层通过和虚拟机检测模块进行通信和交互获取前置信息,并在虚拟机监视器层执行检测点插桩、内存监控、特权指令监控、以及执行流控制和转移等功能,检测核心功能位于虚拟机外部的宿主机操作系统内核中,实现检测引擎核心代码和虚拟机环境的相互隔离。依赖基于处理器的虚拟化技术的VM-EXIT机制和扩展页表机制,能够实现两端即时通信、基于插桩的行为监控、插桩痕迹的隐藏保护、内存访问的实时监控和客户机操作系统的异常监控等关键功能。
图3示出了本发明又一实施例提供的一种基于插桩的访问请求处理系统的系统结构图,如图3所示,所述系统包括:宿主机检测模块31以及虚拟机检测模块32;其中,所述宿主机检测模块31进一步包括:
镜像单元311,适于将与待监控地址相对应的内存页确定为目标内存页,对该目标内存页进行复制,以得到镜像内存页;
插桩单元312,适于向所述目标内存页中插入与所述待监控地址相对应的预设插桩指令,并取消所述目标内存页的访问权限;
处理单元313,适于根据由所述目标内存页的访问请求触发的虚拟机退出事件将所述目标内存页替换为所述镜像内存页,并恢复所述目标内存页的访问权限,以使所述针对所述目标内存页的访问请求根据所述镜像内存页进行处理。
可选的,所述插桩单元具体适于:
确定与所述目标内存页相对应的页表项,将所述页表项中的读写比特位置零,以取消所述目标内存页的读写访问权限,并保留所述目标内存页的执行权限。
可选的,所述处理单元具体适于:
查找所述访问请求所指向的目标内存页的页表项,将所述页表项中的读写比特位置位,以恢复所述目标内存页的读写访问权限;
并将所述镜像内存页的页框号数值写入所述页表项,以激活所述镜像内存页,并使所述镜像内存页代替所述目标内存页处理所述访问请求。
可选的,所述处理单元进一步适于:针对虚拟机处理器设置监视器陷阱标志位;
并且,当所述访问请求处理完毕时,触发与监视器陷阱标志位相对应的虚拟机退出事件,以取消所述监视器陷阱标志位;
并恢复所述页表项的读写比特位置零状态,将已写入所述页表项的镜像内存页的页框号数值恢复为目标内存页的页框号数值。
可选的,所述访问请求由虚拟机操作系统中的线程或进程触发,所述由所述目标内存页的访问请求触发的虚拟机退出事件是由EPT-VIOLATION原因引起的虚拟机退出事件,用于切换至根模式执行。
可选的,所述预设插桩指令包括:虚拟机特权指令、和/或中断指令。
可选的,所述宿主机检测模块位于宿主机操作系统内核的虚拟机监视器组件中,所述虚拟机检测模块位于通过虚拟机实现的客户机中;其中,一个宿主机检测模块对应于一个或多个虚拟机检测模块。
上述宿主机检测模块、虚拟机检测模块以及各个单元的具体结构和工作原理可参照方法实施例中相应步骤的描述,此处不再赘述。
本申请实施例提供了一种非易失性计算机存储介质,计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的基于插桩的访问请求处理方法。
图4示出了根据本发明实施例的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。
如图4所示,该电子设备可以包括:处理器(processor)402、通信接口(Communications Interface)404、存储器(memory)406、以及通信总线408。
其中:
处理器402、通信接口404、以及存储器406通过通信总线408完成相互间的通信。
通信接口404,用于与其它设备比如客户端或其它服务器等的网元通信。
处理器402,用于执行程序410,具体可以执行上述内存地址的查询方法实施例中的相关步骤。
具体地,程序410可以包括程序代码,该程序代码包括计算机操作指令。
处理器402可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器406,用于存放程序410。存储器406可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序410具体可以用于使得处理器402执行上述方法实施例中的各项操作。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的基于插桩的访问请求处理装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明还公开了A1.一种基于插桩的访问请求处理方法,其中,该方法包括:
宿主机检测模块将与待监控地址相对应的内存页确定为目标内存页,对该目标内存页进行复制,以得到镜像内存页;
向所述目标内存页中插入与所述待监控地址相对应的预设插桩指令,并取消所述目标内存页的访问权限;
宿主机检测模块根据由所述目标内存页的访问请求触发的虚拟机退出事件将所述目标内存页替换为所述镜像内存页,并恢复所述目标内存页的访问权限,以使所述针对所述目标内存页的访问请求根据所述镜像内存页进行处理。
A2.根据A1所述的方法,其中,所述取消所述目标内存页的访问权限包括:
确定与所述目标内存页相对应的页表项,将所述页表项中的读写比特位置零,以取消所述目标内存页的读写访问权限,并保留所述目标内存页的执行权限。
A3.根据A1或2所述的方法,其中,所述将所述目标内存页替换为所述镜像内存页,并恢复所述目标内存页的访问权限包括:
查找所述访问请求所指向的目标内存页的页表项,将所述页表项中的读写比特位置位,以恢复所述目标内存页的读写访问权限;
并将所述镜像内存页的页框号数值写入所述页表项,以激活所述镜像内存页,并使所述镜像内存页代替所述目标内存页处理所述访问请求。
A4.根据A3所述的方法,其中,所述激活所述镜像内存页之后,进一步包括:针对虚拟机处理器设置监视器陷阱标志位;
则所述方法进一步包括:当所述访问请求处理完毕时,触发与监视器陷阱标志位相对应的虚拟机退出事件,以取消所述监视器陷阱标志位;
并恢复所述页表项的读写比特位置零状态,将已写入所述页表项的镜像内存页的页框号数值恢复为目标内存页的页框号数值。
A5.根据A1-4任一所述的方法,其中,所述访问请求由虚拟机操作系统中的线程或进程触发,所述由所述目标内存页的访问请求触发的虚拟机退出事件是由EPT-VIOLATION原因引起的虚拟机退出事件,用于切换至根模式执行。
A6.根据A1-5任一所述的方法,其中,所述预设插桩指令包括:虚拟机特权指令、和/或中断指令。
A7.根据A1-5任一所述的方法,其中,所述宿主机检测模块位于宿主机操作系统内核的虚拟机监视器组件中,所述虚拟机检测模块位于通过虚拟机实现的客户机中;其中,一个宿主机检测模块对应于一个或多个虚拟机检测模块。
B8.一种基于插桩的访问请求处理系统,其中,该系统包括:宿主机检测模块以及虚拟机检测模块;其中,所述宿主机检测模块进一步包括:
镜像单元,适于将与待监控地址相对应的内存页确定为目标内存页,对该目标内存页进行复制,以得到镜像内存页;
插桩单元,适于向所述目标内存页中插入与所述待监控地址相对应的预设插桩指令,并取消所述目标内存页的访问权限;
处理单元,适于根据由所述目标内存页的访问请求触发的虚拟机退出事件将所述目标内存页替换为所述镜像内存页,并恢复所述目标内存页的访问权限,以使所述针对所述目标内存页的访问请求根据所述镜像内存页进行处理。
B9.根据B8所述的系统,其中,所述插桩单元具体适于:
确定与所述目标内存页相对应的页表项,将所述页表项中的读写比特位置零,以取消所述目标内存页的读写访问权限,并保留所述目标内存页的执行权限。
B10.根据B8或9所述的系统,其中,所述处理单元具体适于:
查找所述访问请求所指向的目标内存页的页表项,将所述页表项中的读写比特位置位,以恢复所述目标内存页的读写访问权限;
并将所述镜像内存页的页框号数值写入所述页表项,以激活所述镜像内存页,并使所述镜像内存页代替所述目标内存页处理所述访问请求。
B11.根据B10所述的系统,其中,所述处理单元进一步适于:针对虚拟机处理器设置监视器陷阱标志位;
并且,当所述访问请求处理完毕时,触发与监视器陷阱标志位相对应的虚拟机退出事件,以取消所述监视器陷阱标志位;
并恢复所述页表项的读写比特位置零状态,将已写入所述页表项的镜像内存页的页框号数值恢复为目标内存页的页框号数值。
B12.根据B8-11任一所述的系统,其中,所述访问请求由虚拟机操作系统中的线程或进程触发,所述由所述目标内存页的访问请求触发的虚拟机退出事件是由EPT-VIOLATION原因引起的虚拟机退出事件,用于切换至根模式执行。
B13.根据B8-12任一所述的系统,其中,所述预设插桩指令包括:虚拟机特权指令、和/或中断指令。
B14.根据B8-13任一所述的系统,其中,所述宿主机检测模块位于宿主机操作系统内核的虚拟机监视器组件中,所述虚拟机检测模块位于通过虚拟机实现的客户机中;其中,一个宿主机检测模块对应于一个或多个虚拟机检测模块。
C15.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如A1-7任一所述的基于插桩的访问请求处理方法对应的操作。
D16.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如A1-7任一所述的基于插桩的访问请求处理方法对应的操作。

Claims (10)

1.一种基于插桩的访问请求处理方法,其中,该方法包括:
宿主机检测模块将与待监控地址相对应的内存页确定为目标内存页,对该目标内存页进行复制,以得到镜像内存页;
向所述目标内存页中插入与所述待监控地址相对应的预设插桩指令,并取消所述目标内存页的访问权限;
宿主机检测模块根据由所述目标内存页的访问请求触发的虚拟机退出事件将所述目标内存页替换为所述镜像内存页,并恢复所述目标内存页的访问权限,以使所述针对所述目标内存页的访问请求根据所述镜像内存页进行处理。
2.根据权利要求1所述的方法,其中,所述取消所述目标内存页的访问权限包括:
确定与所述目标内存页相对应的页表项,将所述页表项中的读写比特位置零,以取消所述目标内存页的读写访问权限,并保留所述目标内存页的执行权限。
3.根据权利要求1或2所述的方法,其中,所述将所述目标内存页替换为所述镜像内存页,并恢复所述目标内存页的访问权限包括:
查找所述访问请求所指向的目标内存页的页表项,将所述页表项中的读写比特位置位,以恢复所述目标内存页的读写访问权限;
并将所述镜像内存页的页框号数值写入所述页表项,以激活所述镜像内存页,并使所述镜像内存页代替所述目标内存页处理所述访问请求。
4.根据权利要求3所述的方法,其中,所述激活所述镜像内存页之后,进一步包括:针对虚拟机处理器设置监视器陷阱标志位;
则所述方法进一步包括:当所述访问请求处理完毕时,触发与监视器陷阱标志位相对应的虚拟机退出事件,以取消所述监视器陷阱标志位;
并恢复所述页表项的读写比特位置零状态,将已写入所述页表项的镜像内存页的页框号数值恢复为目标内存页的页框号数值。
5.根据权利要求1-4任一所述的方法,其中,所述访问请求由虚拟机操作系统中的线程或进程触发,所述由所述目标内存页的访问请求触发的虚拟机退出事件是由EPT-VIOLATION原因引起的虚拟机退出事件,用于切换至根模式执行。
6.根据权利要求1-5任一所述的方法,其中,所述预设插桩指令包括:虚拟机特权指令、和/或中断指令。
7.根据权利要求1-5任一所述的方法,其中,所述宿主机检测模块位于宿主机操作系统内核的虚拟机监视器组件中,所述虚拟机检测模块位于通过虚拟机实现的客户机中;其中,一个宿主机检测模块对应于一个或多个虚拟机检测模块。
8.一种基于插桩的访问请求处理系统,其中,该系统包括:宿主机检测模块以及虚拟机检测模块;其中,所述宿主机检测模块进一步包括:
镜像单元,适于将与待监控地址相对应的内存页确定为目标内存页,对该目标内存页进行复制,以得到镜像内存页;
插桩单元,适于向所述目标内存页中插入与所述待监控地址相对应的预设插桩指令,并取消所述目标内存页的访问权限;
处理单元,适于根据由所述目标内存页的访问请求触发的虚拟机退出事件将所述目标内存页替换为所述镜像内存页,并恢复所述目标内存页的访问权限,以使所述针对所述目标内存页的访问请求根据所述镜像内存页进行处理。
9.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-7任一所述的基于插桩的访问请求处理方法对应的操作。
10.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如权利要求1-7任一所述的基于插桩的访问请求处理方法对应的操作。
CN201910849095.7A 2019-09-09 2019-09-09 基于插桩的访问请求处理方法及系统 Pending CN112463287A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910849095.7A CN112463287A (zh) 2019-09-09 2019-09-09 基于插桩的访问请求处理方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910849095.7A CN112463287A (zh) 2019-09-09 2019-09-09 基于插桩的访问请求处理方法及系统

Publications (1)

Publication Number Publication Date
CN112463287A true CN112463287A (zh) 2021-03-09

Family

ID=74807425

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910849095.7A Pending CN112463287A (zh) 2019-09-09 2019-09-09 基于插桩的访问请求处理方法及系统

Country Status (1)

Country Link
CN (1) CN112463287A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113434371A (zh) * 2021-08-26 2021-09-24 阿里云计算有限公司 内存访问信息的采集方法、计算设备及存储介质
CN115712415A (zh) * 2023-01-10 2023-02-24 深圳市明源云采购科技有限公司 桩代码自动生成和同步的方法、装置、设备及介质

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113434371A (zh) * 2021-08-26 2021-09-24 阿里云计算有限公司 内存访问信息的采集方法、计算设备及存储介质
CN115712415A (zh) * 2023-01-10 2023-02-24 深圳市明源云采购科技有限公司 桩代码自动生成和同步的方法、装置、设备及介质
CN115712415B (zh) * 2023-01-10 2023-05-26 深圳市明源云采购科技有限公司 桩代码自动生成和同步的方法、装置、设备及介质

Similar Documents

Publication Publication Date Title
RU2691187C1 (ru) Система и способы аудита виртуальной машины
CN112464221A (zh) 内存访问行为的监控方法及系统
EP3427155B1 (en) Protected pointers
US8955104B2 (en) Method and system for monitoring system memory integrity
US7984304B1 (en) Dynamic verification of validity of executable code
US8010667B2 (en) On-access anti-virus mechanism for virtual machine architecture
US8732824B2 (en) Method and system for monitoring integrity of running computer system
RU2723668C1 (ru) Фильтрация событий для приложений безопасности виртуальных машин
US20080016314A1 (en) Diversity-based security system and method
CN105938460B (zh) 存储器管理
US20080077767A1 (en) Method and apparatus for secure page swapping in virtual memory systems
US9424427B1 (en) Anti-rootkit systems and methods
US10114948B2 (en) Hypervisor-based buffer overflow detection and prevention
US20160232354A1 (en) System memory integrity monitoring
US10061918B2 (en) System, apparatus and method for filtering memory access logging in a processor
TW201935305A (zh) 用於後快取互鎖之系統和方法
CN105683985B (zh) 用于虚拟机内省的系统、方法及非暂时性计算机可读介质
CN112463287A (zh) 基于插桩的访问请求处理方法及系统
CN112463286A (zh) 用于虚拟机操作系统的异常事件监控方法及系统
CN112463288A (zh) 基于插桩的行为监控方法及系统
CN112464231A (zh) 基于虚拟机的威胁检测方法及系统
Xuan et al. Toward revealing kernel malware behavior in virtual execution environments
CN109120618B (zh) 一种基于硬件虚拟化的云平台受控侧信道攻击检测方法
Leon et al. Hypervisor-based white listing of executables
Mankin et al. Dione: a flexible disk monitoring and analysis framework

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination