一种虚拟机检测对抗方法、装置、电子设备及存储介质与流程

文档序号:26629142发布日期:2021-09-14 22:34阅读:100来源:国知局
1.本技术涉及网络安全
技术领域
:,尤其涉及一种虚拟机检测对抗方法、装置、电子设备及存储介质。
背景技术
::2.在信息技术、互联网技术快速发展的同时,也为网络安全带来了巨大的挑战。而恶意样本的存在会对用户数据以及网络安全造成严重损坏。为了快速及时鉴定网络上出现的大量样本的恶意情况,通常采用静态特征扫描结合动态鉴定系统来识别恶意样本。3.目前,恶意样本为了避免被动态鉴定系统捕获,其作者常常在恶意样本中增加虚拟机检测代码。如果恶意样本在运行该虚拟机检测代码时,发现当前运行环境是虚拟机环境,则会执行一些虚假的动作,或者直接退出。从而避免被标识为恶意样本,躲避系统后续对于该恶意样本的拦截。因此,为了避免遗漏上述恶意样本的捕获,需要对恶意样本中的虚拟机检测实现有效对抗。技术实现要素:4.有鉴于此,本技术提供了一种虚拟机检测对抗方法、装置、电子设备及存储介质,利用修改程序将查询函数获取的虚拟机特征值替换为非虚拟机特征值,使得待检测样本不能够根据接收的查询结果得到当前运行环境为虚拟机环境的结论,能够有效实现对抗恶意样本中的虚拟机检测,避免出现由于识别当前运行环境而造成的恶意样本遗漏的情况。5.为实现上述目的,一方面,本技术提供了一种虚拟机检测对抗方法,包括:6.运行待检测样本;7.当接收到所述待检测样本发送的查询指令时,运行所述查询指令对应的查询函数,并在运行所述查询函数的过程中,利用对应的修改程序,将所述查询函数获取的虚拟机特征值替换为非虚拟机特征值;8.利用所述查询函数根据所述非虚拟机特征值获取查询结果,并将所述查询结果返回给所述待检测样本。9.在一种可能的实现方式中,在所述运行待检测样本之前,还包括:10.在所述查询函数中注入所述修改程序。11.在又一种可能的实现方式中,所述在所述查询函数中注入所述修改程序,包括:12.获取所述查询函数的地址;13.根据所述地址,将所述修改程序挂钩到所述查询函数中。14.在又一种可能的实现方式中,当所述查询函数为检索对象查询函数时,所述利用对应的修改程序,将所述查询函数获取的虚拟机特征值替换为非虚拟机特征值,包括:15.利用所述修改程序判断所述检索对象查询函数接收到的所述查询指令中是否存在所述虚拟机特征值;16.若存在所述虚拟机特征值,则生成与所述虚拟机特征值不同的替换字符串作为所述非虚拟机特征值,以替换所述虚拟机特征值。17.在又一种可能的实现方式中,当所述查询函数为枚举结果检索函数时,所述利用对应的修改程序,将所述查询函数获取的虚拟机特征值替换为非虚拟机特征值,包括:18.利用所述修改程序获取所述枚举结果检索函数得到的进程信息中属性值参数对应的属性字段,并判断所述属性字段中是否存在预设属性字段;19.若存在所述预设属性字段,则获取所述预设属性字段对应的属性值;20.判断所述属性值是否为所述虚拟机特征值;21.若为所述虚拟机特征值,则生成与所述虚拟机特征值不同的替换字符串作为所述非虚拟机特征值,以替换所述虚拟机特征值。22.在又一种可能的实现方式中,,所述生成与所述虚拟机特征值不同的替换字符串作为所述非虚拟机特征值,包括:23.生成与所述虚拟机特征值的前缀不同并且后缀相同的替换字符串作为所述非虚拟机特征值。24.又一方面,本技术提供了一种虚拟机检测对抗装置,包括:25.样本运行模块,用于运行待检测样本;26.查询函数运行模块,用于当接收到所述待检测样本发送的查询指令时,运行所述查询指令对应的查询函数,并在运行所述查询函数的过程中,利用对应的修改程序,将所述查询函数获取的虚拟机特征值替换为非虚拟机特征值,并利用所述查询函数根据所述非虚拟机特征值获取查询结果;27.查询结果返回模块,用于将所述查询结果返回给所述待检测样本。28.又一方面,本技术还提供了一种电子设备,包括:29.存储器,用于存储计算机程序;30.处理器,用于执行所述计算机程序时实现本技术任一实施例的虚拟机检测对抗方法。31.又一方面,本技术还提供了一种存储介质,所述存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现本技术任一实施例的虚拟机检测对抗方法。32.可见,在本技术实施例中,通过将待检测样本启动的查询函数在查询过程中涉及到的虚拟机特征值,均利用修改程序替换为非虚拟机特征值,使得查询函数最终获取的查询结果中不会存在任何可以表征当前运行环境为虚拟机环境的数据信息。进而使得待检测样本不能够根据接收的查询结果得到当前运行环境为虚拟机环境的结论,从而绕过恶意样本的虚拟机检测,起到隐藏当前系统真实身份的目的。即,该方法能够有效实现对抗恶意样本中的虚拟机检测,为后续识别恶意样本的提供可靠的保证,避免出现由于识别当前运行环境而造成的恶意样本遗漏的情况。33.相应地,本技术实施例还提供了与上述虚拟机检测对抗方法相对应的虚拟机检测对抗装置、电子设备及存储介质,具有上述技术效果,在此不再赘述。附图说明34.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。35.图1示出了本技术实施例的一种虚拟机检测对抗方法所适用的硬件组成框架示意图;36.图2示出了本技术实施例的另一种虚拟机检测对抗方法所适用的硬件组成框架示意图;37.图3示出了本技术实施例的一种虚拟机检测对抗方法的一种流程示意图;38.图4示出了本技术实施例的另一种虚拟机检测对抗方法的一种流程示意图;39.图5示出了本技术实施例的又一种虚拟机检测对抗方法的一种流程示意图;40.图6示出了本技术实施例的一种虚拟机检测结果示意图;41.图7示出了现有技术中与图6相对应的虚拟机检测结果示意图;42.图8示出了本技术实施例的另一种虚拟机检测结果示意图;43.图9示出了现有技术中与图8相对应的虚拟机检测结果示意图;44.图10示出了本技术实施例的一种虚拟机检测对抗装置的一个实施例的组成结构示框图;45.图11示出了本技术实施例的另一种虚拟机检测对抗装置的一个实施例的组成结构示框图。具体实施方式46.由于恶意样本的存在会对用户数据安全以及网络安全造成严重威胁。目前,为了快速及时鉴定网络上出现的大量样本的恶意情况,除了常用的静态特征扫描以外,常常还需要结合动态鉴定系统的结果。而动态鉴定系统通常是通过沙箱环境模拟一个真实的系统环境,即形成一个虚拟机环境,在模拟的系统环境中运行待检测的样本,捕获样本运行所产生的样本动态行为,进而根据该样本动态行为来判断该样本是否为恶意样本以及对应的恶意情况。47.当前,恶意样本的作者为了避免所写的恶意样本被动态鉴定系统所捕获,常常采用虚拟机检测技术,即在恶意样本中增加虚拟机检测代码,如果恶意样本在运行该虚拟机检测代码时,发现当前运行环境是虚拟机环境,则会执行一些虚假的动作,或者直接退出。从而避免样本的真实行为被动态鉴定系统捕获,或者说是沙箱环境所捕获,进而被标识为恶意样本,躲避系统后续对于该恶意样本的拦截。为了解决该技术问题,本技术实施例可以通过替换查询函数获取的虚拟机特征值为非虚拟机特征值,起到隐藏系统的虚拟机环境,实现有效对抗恶意样本中的虚拟机检测过程,避免出现由于识别当前运行环境而造成的恶意样本遗漏的情况。48.其中,沙箱环境可以指通过虚拟机技术(例如vmware(提供基于虚拟机的解决方案)/virtualbox(一种开源虚拟机软件)等),建造一个安全的仿真模拟环境,让样本(如可执行文件exe)在该仿真模拟环境下像在真实系统中一样正常运行起来,样本运行结束后,可以将仿真模拟环境直接还原,而不会影响用户的真实系统,不会对真实的用户环境造成影响,沙箱环境也可以理解为虚拟机环境。待检测的样本中样本可以指代windows、linux、android等平台的可以执行文件,或者可执行脚本,以及日常常见的文件(例如docx文件、ppt文件、xls文件、eml文件)等。样本动态行为可以指样本在操作系统上运行后产生的行为,该行为可以是:创建文件、删除文件、加密文件、创建进程、结束进程、访问网络、下载其他样本、修改注册表、窃取文件、窃取系统信息等。虚拟机检测技术可以指用于检测当前运行环境是否为虚拟机环境的技术,常被恶意软件开发者用于检测系统运行环境。49.为了便于理解,先对本技术的虚拟机检测对抗方法对应的方案所适用的硬件组成框架进行介绍。可以参见图1至图2,其中,图1其示出了本技术一种虚拟机检测对抗方法所适用的硬件组成框架示意图。50.由图1可知,该硬件组成框架可以包括:电子设备10,其中,电子设备10可以包括:处理器11、存储器12、通信接口13、输入单元14和显示器15和通信总线16。51.处理器11、存储器12、通信接口13、输入单元14、显示器15、均通过通信总线16完成相互间的通信。52.在本技术实施例中,该处理器11,可以为中央处理器(centralprocessingunit,cpu),特定应用集成电路,数字信号处理器、现成可编程门阵列或者其他可编程逻辑器件等。该处理器可以调用存储器12中存储的程序。具体的,处理器可以执行以下虚拟机检测对抗方法的实施例中电子设备侧所执行的操作。53.存储器12中用于存放一个或者一个以上程序,程序可以包括程序代码,程序代码包括计算机操作指令,在本技术实施例中,该存储器中至少存储有用于实现以下功能的程序:54.运行待检测样本;55.当接收到待检测样本发送的查询指令时,运行查询指令对应的查询函数,并在运行查询函数的过程中,利用对应的修改程序,将查询函数获取的虚拟机特征值替换为非虚拟机特征值;56.利用查询函数根据非虚拟机特征值获取查询结果,并将查询结果返回给待检测样本。57.在一种可能的实现方式中,该存储器12可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、以及至少一个功能(比如数据处理功能等)所需的应用程序等;存储数据区可存储根据计算机的使用过程中所创建的数据。58.此外,存储器12也可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件或其他易失性固态存储器件。59.该通信接口13可以为通信模块的接口,如gsm模块的接口。60.本技术还可以包括显示器14和输入单元15等等。61.当然,图1所示的计算机设备的结构并不构成对本技术实施例中计算机设备的限定,在实际应用中计算机设备可以包括比图1所示的更多或更少的部件,或者组合某些部件。62.其中,图1中的电子设备10可以为终端(如手机、平板电脑等移动终端,或pc机等固定终端)、服务器。63.在本技术实施例中,电子设备10可以根据通信接口13利用网络接收外界其他设备发送的待检测样本;也可以通过自身的输入单元14(如键盘、触摸屏、语音输入设备等)获取待检测样本。64.相应的,电子设备10中处理器11可以通过通信总线16从通信接口13或者输入单元14接收待检测样本,并调用存储器12中存储的程序运行待检测样本。65.可以理解的是,本技术实施例中并不对电子设备的数量进行限定,例如其可以是两个电子设备共同协作完成虚拟机检测对抗功能。在一种可能的情况中,请参考图2。由图2可知,该硬件组成框架可以包括:第一电子设备1、第二电子设备2。第一电子设备1与第二电子设备2之间通过网络3实现通信连接。66.在本技术实施例中,第一电子设备1与第二电子设备2的硬件结构可以参考图1中电子设备10,可以理解为本实施例中具有两个电子设备10,两者进行数据交互,实现虚拟机检测对抗功能。进一步,本技术实施例中并不对网络3的形式进行限定,如,网络3可以是无线网络(如wifi、蓝牙、移动通讯网络等),也可以是有线网络;既可以是广域网,在情况允许时也可以采用局域网。67.其中,第一电子设备1和第二电子设备2可以是同一种电子设备,如第一电子设备1和第二电子设备2均为终端(如pc机);也可以是不同类型的电子设备,如,第一电子设备1可以是终端,第二电子设备2可以是服务器。68.结合图2说明该系统下虚拟机检测对抗方法的实现过程可以是:第一电子设备在获取到待检测样本后,将该待检测样本通过网络发送给第二电子设备。第二电子设备在接收到待检测样本后,在建立的沙箱环境(即虚拟机环境)中运行该待检测样本,进而当接收到待检测样本发送的查询指令时,运行查询指令对应的查询函数,并在运行查询函数的过程中,利用对应的修改程序,将查询函数获取的虚拟机特征值替换为非虚拟机特征值,利用查询函数根据非虚拟机特征值获取查询结果;并将查询结果返回给待检测样本。进而使得待检测样本不能够根据接收的查询结果得到当前运行环境为虚拟机环境的结论,从而绕过恶意样本的虚拟机检测,起到隐藏当前系统真实身份的目的。69.结合以上共性,参见图3,其示出了本技术一种虚拟机检测对抗方法一个实施例的流程图,本实施例的方法可以包括:70.s101、运行待检测样本。71.需要说明的是,本技术实施例中并不限定该虚拟机检测对抗方法的执行主体,其可以是任何一种能够构建虚拟机环境的电子设备。例如,该电子设备可以是终端(如pc机),也可以是服务器。本技术实施例在电子设备中可以通过沙箱环境模拟一个真实的系统环境(即一个虚拟机环境)作为动态鉴定系统,在模拟的系统环境中运行待检测样本。当然,本技术实施例也不限定在该电子设备中构建虚拟机环境的方式,例如,可以通过虚拟机技术建造一个安全的虚拟机环境。72.可以理解的是,本技术实施例中也不限定待检测样本的获取方式。例如,可以直接接收其他电子设备发送的样本作为待检测样本;也可以是接收用户通过输入设备(如u盘等)传入的样本作为待检测样本;也可以是通过样本数据库获取所需待检测样本;也可以是由该电子设备将对网络流量数据进行分析获取的样本作为待检测样本等。当然,本技术实施例并不限定待检测样本的数量,该数量可以根据实际应用场景确定。73.其中,本技术实施例中并不对待检测样本的具体内容进行限定,该待检测样本可以指代windows、linux、android等平台的可以执行文件,或者可执行脚本,以及日常常见的文件(例如docx文件、ppt文件、xls文件、eml文件)等。74.s102、当接收到待检测样本发送的查询指令时,运行查询指令对应的查询函数,并在运行查询函数的过程中,利用对应的修改程序,将查询函数获取的虚拟机特征值替换为非虚拟机特征值。75.本技术实施例在构建的虚拟机环境中运行待检测样本,待检测样本在运行的过程中可以根据自身的需求,通过调用系统提供的api来获取当前运行环境的一些信息数据即查询结果。例如,待检测样本在运行过程中可以通过虚拟机检测相关代码调用系统提供的api来遍历当前系统的进程列表、文件列表、注册表等,然后根据返回的查询结果,确定自身当前所处的环境是模拟的环境(即虚拟机环境),还是物理机环境。若待检测样本中的恶意样本通过上述方式确定当前所处的环境是虚拟机环境,那么,恶意样本为了避免其真实行为被动态鉴定系统捕获,或者说是沙箱环境所捕获,进而被标识为恶意样本。该恶意样本则会执行一些虚假的动作,或者直接退出,使得动态鉴定系统不能将其捕获。本技术实施例就是为了避免这种情况的出现,因此,需要使得待检测样本得到的查询结果中不存在任何可以表征当前运行环境为虚拟机环境的数据信息。进而使得待检测样本不能够根据接收的查询结果得到当前运行环境为虚拟机环境的结论。即,本技术实施例可以绕过恶意样本的虚拟机检测,起到隐藏当前系统真实身份的目的。能够有效实现对抗恶意样本中的虚拟机检测,为后续识别恶意样本的提供可靠的保证,避免出现由于识别当前运行环境而造成的恶意样本遗漏的情况。76.其中,api是applicationprogramminginterface的缩写,又称为应用程序编程接口,是软件系统不同组成部分衔接的约定。虚拟机环境可以指通过虚拟机技术建造一个安全的仿真模拟环境。物理机环境可以指当前系统运行在真实的物理设备上,而不是通过虚拟化技术虚拟出来的仿真模拟环境上。77.需要说明的是,本技术实施例并不限定待检测样本发送的查询指令的具体内容。该查询指令的具体内容与待检测样本调用的具体api以及需要查询的目标对象相关。通常情况下该查询指令包含查询参数或者是查询对象。其中,本技术实施例并不对待检测样本调用的api进行限定,可以是系统文件查询api(如windows文件查询api),还可以是系统进程查询api(如windows进程查询api),还可以是系统管理规范接口(如wmi接口)。例如,当待检测样本通过调用wmi接口发送查询指令,该查询指令的内容可以是需要检索的对象名称,即查询参数,也可以是需要枚举检索的查询对象(如系统中当前运行的全部进程)78.其中,wmi(windowsmanagementinstrumentation,windows管理规范)接口是指由一系列对windowsdrivermodel的扩展组成,它通过仪器组件提供信息和通知,提供了一个操作系统的接口。wmi是微软对分布式管理工作组(dmtf)的基于web的企业管理类(wbem)和通用信息模型(cim)标准的实现。wmi允许脚本语言(例如vbscript或windowspowershell)来本地或远程管理microsoftwindows个人计算机和服务器。还可以通过wmic(wmi的扩展工具)提供从命令行接口和命令脚本执行系统管理的支持。79.本技术实施例在系统接收到待检测样本发送的查询指令时,运行查询指令对应的查询函数,即,本技术实施例根据查询指令需要查询的参数内容,可以确定其对应所需要运行的查询函数。例如,当前接收到的查询指令为:objwmiservice.execquery(”select*fromwin32_process”),那么其对应的查询函数就是wmi接口下的ienumwbemclassobject::next函数(即枚举结果检索函数)。其中,该查询指令的含义为调用wmi接口下的函数来查询并返回当前系统中的所有进程信息。再例如,当前接收到的查询指令为:objwmiservice.execquery(”select*fromwin32_processwherename='vmtoolsd.exe'”),那么其对应的查询函数就是wmi接口下的iwbemservices::execquery函数(即检索对象查询函数)。其中,该查询指令的含义为调用wmi接口下的函数来查询并返回当前系统中进程名为vmtoolsd.exe的进程信息。而vmtoolsd.exe进程就是仅仅在虚拟机环境中存在的进程,在正常物理机中不存在该进程。因此,通过这个特征就可以检测到虚拟机环境。80.本技术实施例为了避免查询函数在查询过程中将能够表征当前运行环境为虚拟机环境的数据信息作为查询结果返回给待检测样本。因此,需要在运行查询函数的过程中,利用该查询函数对应的修改程序,将该查询函数获取的虚拟机特征值替换为非虚拟机特征值,以便该查询函数根据该非虚拟机特征值获取查询结果,以使得该查询结果不存在任何可以表征当前运行环境为虚拟机环境的数据信息。进而使得待检测样本不能够根据接收的查询结果得到当前运行环境为虚拟机环境的结论。即,本技术实施例可以绕过恶意样本的虚拟机检测,起到隐藏当前系统真实身份的目的,能够有效实现对抗恶意样本中的虚拟机检测。81.需要说明的是,本技术实施例并不对虚拟机特征值的内容进行限定,任何能够表征当前运行环境为虚拟机环境的数据信息,或者是仅仅在虚拟机环境中才会存在的数据信息,都是虚拟机特征值。例如,虚拟机特征值可以包含:vmtoolsd.exe、vmacthlp.exe、vboxservice.exe、vboxtray.exe、virtualbox.exe、vmware.exe、vmvss.exe、vmtools.exe、vgauthservice.exe等。因此,修改程序在确定查询函数获取的内容中是否存在虚拟机特征值的过程可以是:修改程序将全部的虚拟机特征值与查询函数获取的内容进行匹配,进而确定查询函数获取的内容中是否存在虚拟机特征值,并将匹配结果确定的查询函数获取的虚拟机特征值替换为非虚拟机特征值。82.本技术实施例通过查询函数对应的修改程序,实现对虚拟机特征值的替换。即,本技术实施例中查询函数与修改程序具有一一对应的关系。由于本技术实施例中待检测样本能够调用的查询函数不止一种,且本技术实施例并不对查询函数的数量进行限定,其可以仅针对一个查询函数执行虚拟机检测对抗过程,也可以是针对多种查询函数均执行虚拟机检测对抗过程。也就是说,本技术实施例也不限定本技术所包含的修改程序的数量,其与查询函数一一对应,即,本技术实施例所包含的每个查询函数均具有一个与之对应的修改程序。83.可以理解的是,本技术实施例提供的修改程序的主要功能就是将查询函数获取的虚拟机特征值替换为非虚拟机特征值,以便该查询函数根据该非虚拟机特征值获取查询结果,进而避免待检测样本根据查询结果确定当前系统环境为虚拟机环境。当然,本技术实施例并不限定修改程序的具体内容,其与对应的查询函数的查询方式相对应。84.例如,当查询函数功能为查找检索对象,那么,修改程序的内容就是判断查询函数接收到的查询指令中是否存在包含虚拟机特征值的检索对象;若不存在包含虚拟机特征值的检索对象,则说明本次查询过程并不存在需要修改程序修改的内容,本次查询过程也不会暴漏系统当前运行环境为虚拟机环境,则查询函数正常执行并返回查询结果。若存在包含虚拟机特征值的检索对象,为了避免查询函数找到该检索对象,需要将检索对象中包含的虚拟机特征值替换为非虚拟机特征值,使得该查询函数根据该非虚拟机特征值进行查询,获取查询结果。很显然,该查询结果中必然不会出现当前系统中存在包含虚拟机特征值的检索对象,因为该查询函数查询的检索对象已经发生变化了。举例说明,若当前的查询函数为iwbemservices::execquery函数,当前的检索对象为vmtoolsd.exe。那么在iwbemservices::execquery函数接收到vmtoolsd.exe这一检索对象时,修改程序就会将vmtoolsd.exe修改为系统中不存在的非虚拟机特征值的检索对象(如,0x9mjy1.exe)。可见,iwbemservices::execquery函数实际查询对象并非为vmtoolsd.exe,而是0x9mjy1.exe。当然,本技术实施例中并不限定0x9mjy1.exe的生成方式,例如,其可以是随机生成。85.再例如,当查询函数功能为枚举结果,即遍历当前系统获取查询结果,那么,修改程序的内容就是判断查询函数所得到的查询结果中是否存在与虚拟机特征值相关的查询结果;若不存在包含虚拟机特征值的查询结果,则说明本次查询过程并不存在需要修改程序修改的内容,本次查询过程也不会暴漏系统当前运行环境为虚拟机环境,则查询函数正常执行并返回查询结果。若存在包含虚拟机特征值的查询结果,为了避免查询函数将包含虚拟机特征值的查询结果返回给待检测样本,需要修改程序将查询结果中包含的虚拟机特征值的内容替换为非虚拟机特征值,使得该查询函数将修改后的查询结果返回给待检测样本。很显然,待检测样本得到的最终的查询结果中必然不会出现当前系统中存在包含虚拟机特征值的查询结果。举例说明,若当前的查询函数为ienumwbemclassobject::next函数,当前的检索对象为当前系统中的所有进程信息。那么,修改程序需要获取所述ienumwbemclassobject::next函数得到的进程信息中wszname参数(即属性值参数)对应的属性字段,并判断属性字段中是否存在预设属性字段;若不存在预设属性字段,则证明查询函数遍历得到的全部进程信息中不包含能够证明当前系统为虚拟机系统的进程信息。若存在预设属性字段,则证明查询函数遍历得到的全部进程信息中有可能包含能够证明当前系统为虚拟机系统的进程信息。因此,需要再次确定查询函数遍历得到的全部进程信息中是否包含能够证明当前系统为虚拟机系统的进程信息。相应的,修改程序需要获取预设属性字段对应的属性值;并判断该属性值是否是虚拟机特征值;若不是虚拟机特征值,则证明查询函数遍历得到的全部进程信息中不包含能够证明当前系统为虚拟机系统的进程信息。若是虚拟机特征值,则证明查询函数遍历得到的全部进程信息中包含能够证明当前系统为虚拟机系统的进程信息,此时需要生成与虚拟机特征值不同的替换字符串作为非虚拟机特征值,以替换虚拟机特征值,使得最后返回给待检测样本的查询结果中不会出现当前系统中存在包含虚拟机特征值的查询结果。当然,当前的检索对象也可以是当前系统中的其他需要遍历查询的信息。86.本技术实施例中并不对修改程序设置的位置进行限定,只要使得在查询函数运行的过程中同时能够运行该查询函数对应的修改程序即可。例如,可以将修改程序注入查询函数中。可选的,本技术实施例可以在运行待检测样本之前将修改程序注入查询函数中。以便在开始运行待检测样本时,查询函数中的修改程序即处于可运行状态。当然,本技术实施例中并不限定在查询函数中注入修改程序的具体方式。例如,可以是在查询函数中注入修改程序的过程可以包括:获取查询函数的地址;根据地址,将修改程序挂钩到查询函数中。87.其中,本技术实施例中并不限定获取查询函数的地址的具体方式,其与查询函数的具体情况相关。例如,当查询函数为wmi接口下的iwbemservices::execquery函数时,对应的,获取iwbemservices::execquery函数的地址的过程可以包括:首先,获取iwbemlocator对象(即初始命名空间指针获取接口对象)的地址;然后,利用该iwbemlocator对象的地址,获取iwbemservices对象(即wmi服务访问接口对象)的地址;最后,根据该iwbemservices对象的地址,获取该iwbemservices::execquery函数的地址。88.本技术实施例中也不限定挂钩修改程序到查询函数中的具体方式,例如,可以使用应用程序编程接口挂钩方法,即,apihook(api挂钩)方法来实现将修改程序挂钩到查询函数中的操作。其中,apihook方法是一种软件开发技术,通过将自己的代码挂钩到系统api代码中,从而实现修改系统api结果的目的。89.需要说明的是,本技术实施例中并不限定非虚拟机特征值的生成方式,只要可以实现获取非虚拟机特征值即可。例如,可以通过生成随机字符串的方式获取非虚拟机特征值,也可以是通过遍历当前系统中存在的查询对象后,生成与查询对象不同的字符串作为非虚拟机特征值,也可以是通过修改虚拟机特征值中字符的值的方式获取非虚拟机特征值。当然,本技术实施例也不对替换后的非虚拟机特征值的具体内容进行限定,只要可以实现替换后的内容不能够体现当前运行系统为虚拟机环境即可。例如,非虚拟机特征值对应的字符串可以全都由数字组成,也可以是全都有字母组成,也可以是由数字、字母和符号混合组成。90.进一步,为了提高生成的非虚拟机特征值的可靠性,进而提升系统隐藏虚拟机环境的可靠性。本技术实施例在生成非虚拟机特征值时,可以使非虚拟机特征值具有与需要替换的虚拟机特征值相同的后缀内容。即,生成与虚拟机特征值的前缀不同并且后缀相同的替换字符串作为非虚拟机特征值。例如,虚拟机特征值为vmtoolsd.exe,而生成的非虚拟机特征值为0x9mjy1.exe,两者具有相同的后缀exe。91.s103、利用查询函数根据非虚拟机特征值获取查询结果,并将查询结果返回给待检测样本。92.本技术实施例将查询函数根据非虚拟机特征值获取查询结果返回给待检测样本,由于该查询结果中不会存在任何表征当前运行环境为虚拟机环境的数据信息。进而使得待检测样本不能够根据接收的查询结果得到运行环境为虚拟机环境的结论,从而绕过恶意样本的虚拟机检测,起到隐藏当前系统真实身份。从而提升动态鉴定系统的鉴定能力,也能够为提升后续基于恶意样本的病毒鉴定能力。93.在本技术实施例中,当运行的待检测样本想要通过获取的相关环境信息中是否存在虚拟机特征值这一方式来确定当前运行环境是否为虚拟机环境时,本技术将待检测样本利用查询指令启动的查询函数在查询过程中涉及到的虚拟机特征值,均替换为非虚拟机特征值,使得查询函数根据非虚拟机特征值获取查询结果,自然查询函数获取查询结果中不会存在任何表征当前运行环境为虚拟机环境的数据信息。进而使得待检测样本不能够根据接收的查询结果得到运行环境为虚拟机环境的结论,从而绕过恶意样本的虚拟机检测,起到隐藏当前系统真实身份,有效实现对抗恶意样本中的虚拟机检测。能够为后续恶意样本的识别提供可靠的保证,避免出现由于识别当前运行环境而造成的恶意样本的遗漏的情况。94.基于上述实施例,由于信息技术的持续发展,恶意样本的开发者们对虚拟机检测技术进一步更新。当前,网络上存在大量恶意样本通过调用wmi接口实现查询进程列表、文件列表、硬件信息列表等信息,然后对返回的查询结果进行比较,从而判断自身当前运行的环境是真实的物理机还是处于虚拟机环境。针对这种可能的情况,本技术实施例给出了两种基于wmi接口拦截方式对抗虚拟机检测的流程;具体请参考图4和图5,其中,图4中针对的查询函数为wmi接口下的检索对象查询函数(iwbemservices::execquery函数),其具体执行流程如下:95.s401、运行待检测样本。96.该步骤的具体内容可以参考上述实施例中步骤s101,在此不再赘述。97.s402、当接收到待检测样本发送的查询指令时,运行查询指令对应的检索对象查询函数;其中,检索对象查询函数获取查询指令。98.本技术实施例中检索对象查询函数根据查询指令中的具体内容确定查询对象。例如,当查询指令为:objwmiservice.execquery(”select*fromwin32_processwherename='vmtoolsd.exe'”),其确定的查询对象就是vmtoolsd.exe。99.s403、利用修改程序判断检索对象查询函数接收到的查询指令中是否存在虚拟机特征值;若存在,则执行步骤s404,若存在,则执行步骤s406。100.本技术实施例通过修改程序判断查询指令中是否存在虚拟机特征值,该过程可以是将查询指令中查询对象对应的字符串与预设的全部的虚拟机特征值进行匹配,进而确定检索对象查询函数接收到的查询指令中是否存在虚拟机特征值。由于iwbemservices::execquery函数定义中的第二个参数strquery(表示wmi查询语句),包含了获取的查询指令中的查询参数即查询对象。因此,该过程是可以是:利用修改程序将strquery中的查询参数分别与全部的虚拟机特征值进行匹配,以确定检索对象查询函数接收到的查询指令中是否存在虚拟机特征值。101.需要说明的是,待检测样本调用wmi接口进行对象查询时,其实质上是通过调用iwbemservices::execquery函数实现的。因此,要实现对抗待检测样本的虚拟机检测时,需要将修改程序对应的代码挂钩到该函数上,然后通过修改程序根据实际需求对查询指令中的查询参数进行修改实现对抗。即,本技术实施例中可以在检索对象查询函数中注入对应的修改程序。该过程可以是:获取检索对象查询函数的地址;根据该地址,将修改程序挂钩到检索对象查询函数中。102.其中,获取检索对象查询函数的地址的过程可以是:103.获取iwbemlocator对象(即初始命名空间指针获取接口对象)的地址;104.利用该iwbemlocator对象的地址,获取iwbemservices对象(即wmi服务访问接口对象)的地址;105.根据该iwbemservices对象的地址,获取该iwbemservices::execquery函数的地址。106.可以理解的是,本技术实施例为了将修改程序挂钩到检索对象查询函数上,需要获取检索对象查询函数的地址。在获取检索对象查询函数的地址时,需要首先获取iwbemlocator对象的地址,本技术实施例并不限定iwbemlocator对象地址的获取方式。例如,该iwbemlocator对象的地址可以通过传递特定参数调用cocreateinstance函数,或者cocreateinstanceex函数得到。其中,cocreateinstance以及cocreateinstanceex均是函数名,可以用指定的类标识符创建一个com对象。两个函数的接口定义如下:[0107][0108]下面以cocreateinstance函数为例具体说明iwbemlocator对象的地址获取方式。由于cocreateinstance函数是windows系统标准函数,可以通过其函数名直接获取其函数地址。具体可以通过apihook方法挂钩cocreateinstance函数,并在挂钩代码中通过判断第一个参数rclsid(该rclsid参数是一个唯一标识,用于表示需要获取的com组件对象的地址)等于{0x4590f811,0x1d3a,0x11d0,{0x89,0x1f,0x00,0xaa,0x00,0x4b,0x2e,0x24},}时,则表示此函数执行成功,可以得到最后一个参数lpvoid*ppv的返回值,该值就是iwbemlocator对象的地址。其中,com组件(comcomponent)是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。[0109]然后,利用该iwbemlocator对象的地址,通过调用iwbemlocator对象的函数iwbemlocator::connectserver(指定的计算机上的wmi命名空间的连接)来获取iwbemservices对象的地址。具体获取的伪代码可以如下:其中,最后一个参数中保存着iwbemservices对象的地址。[0110][0111]最后,根据该iwbemservices对象的地址,可以直接获取该对象的成员函数iwbemservices::execquery的地址,进而可以将该函数对应的修改程序挂钩到iwbemservices::execquery函数上。[0112]s404、生成与虚拟机特征值不同的替换字符串作为非虚拟机特征值,以替换虚拟机特征值。[0113]s405、利用检索对象查询函数根据非虚拟机特征值获取查询结果,并将查询结果返回给待检测样本。[0114]当存在虚拟机特征值时,表明待检测样本正在进行虚拟机环境检测,为了实现对抗,可以生成与虚拟机特征值不同的替换字符串作为非虚拟机特征值,以替换虚拟机特征值,检索对象查询函数根据非虚拟机特征值获取查询结果就为空,从而达到对抗虚拟机检测的目的。[0115]s406、利用检索对象查询函数根据查询指令获取查询结果,并将查询结果返回给待检测样本。[0116]本技术实施例通过步骤s406仍可以实现正常查询功能,因此,本技术实施例可以做到基本不影响wmi接口原有调用功能的实现,不影响待检测样本正常运行。[0117]其中,图5中针对的查询函数为wmi接口下的枚举结果检索函数(即ienumwbemclassobject::next),其具体执行流程如下:[0118]s501、运行待检测样本。[0119]该步骤的具体内容可以参考上述实施例中步骤s101,在此不再赘述。[0120]s502、当接收到待检测样本发送的查询指令时,运行查询指令对应的枚举结果检索函数,并获取进程信息。[0121]本技术实施例通过枚举结果检索函数可以获取当前系统中存在的全部的检索对象。例如,当查询指令中包含”select*fromwin32_process”语句时,枚举结果检索函数能够获取当前系统全部的进程信息。[0122]s503、利用修改程序获取进程信息中属性值参数对应的属性字段。[0123]需要说明的是,待检测样本调用wmi接口进行枚举结果检索查询时,其实质上是通过调用ienumwbemclassobject::next函数实现的。因此,要实现对抗待检测样本的虚拟机检测时,需要将修改程序对应的代码挂钩到该函数上,然后通过修改程序根据实际需求对查询结果进行修改实现对抗。即,本技术实施例中可以在枚举结果检索函数中注入对应的修改程序。该过程可以是:获取枚举结果检索函数的地址;根据该地址,将修改程序挂钩到枚举结果检索函数中。[0124]其中,获取枚举结果检索函数的地址的过程可以是:通过调用iwbemservices::execquery函数,获取ienumwbemclassobject对象的地址;根据ienumwbemclassobject对象的地址,获取ienumwbemclassobject::next函数的地址。[0125]可以理解的是,本技术实施例中iwbemservices::execquery函数的地址可以参考上述记载内容。在得到iwbemservices::execquery函数的地址之后,可以调用iwbemservices::execquery函数,获取ienumwbemclassobject对象(即共同信息模型对象枚举接口)的地址。具体获取的伪代码可以如下:其中,最后一个参数中保存着ienumwbemclassobject对象的地址。[0126][0127]最后,根据该ienumwbemclassobject对象的地址,可以直接获取该对象的成员函数ienumwbemclassobject::next的地址,进而可以将该函数对应的修改程序挂钩到ienumwbemclassobject::next函数上。[0128]s504、判断属性字段中是否存在预设属性字段;若存在,则执行步骤s505,若存在,则执行步骤s508。[0129]本技术实施例通过修改程序将属性字段与全部的预设属性字段进行匹配,进而确定属性字段中是否存在预设属性字段。当然,本技术实施例中并不限定预设属性字段的数量以及内容,可以将属性值为虚拟机特征值对应的全部的属性字段均作为预设属性字段。例如,预设属性字段可以包含:name(名字)、caption(属性)、commandline(命令行)、description(描述说明)、executablepath(可执行路径)、processname(进程名称)、path(路径)、smbiosbiosversion(主板信息)、serialnumber(序列号)。[0130]s505、获取预设属性字段对应的属性值。[0131]s506、判断属性值是否是虚拟机特征值;若是,则执行步骤s507,若不是,则执行步骤s508。[0132]本技术实施例中修改程序获取预设属性字段对应的属性值,并判断属性值是否是虚拟机特征值。该过程可以是将属性值与预设的全部的虚拟机特征值进行匹配,进而确定属性值中是否存在虚拟机特征值。当然,本技术实施例并不限定修改程序获取属性值的方式。由于iwbemclassobject::get函数定义中的第一个参数wszname(即属性值参数,表示需要获取的属性值),其中,iwbemclassobject::get为特定的属性值获取函数。因此,本技术实施例中修改程序可以通过wszname参数获取进程信息中对应的属性字段。因此,本技术实施例中修改程序可以利用iwbemclassobject::get函数中wszname参数确定各个属性字段,并通过wszname参数获取对应的属性值,将属性值与预设的全部的虚拟机特征值进行匹配,进而确定属性值中是否存在虚拟机特征值。[0133]s507、生成与虚拟机特征值不同的替换字符串作为非虚拟机特征值,以替换虚拟机特征值,利用枚举结果检索函数将替换后的进程信息作为查询结果发给待检测样本。[0134]当存在虚拟机特征值时,表明待检测样本正在进行虚拟机环境检测,为了实现对抗,可以生成与虚拟机特征值不同的替换字符串作为非虚拟机特征值,以替换虚拟机特征值。本技术实施例并不对替换方式进行限定。例如,修改程序可以利用iwbemclassobject::put函数将虚拟机特征值替换为非虚拟机特征值。其中,iwbemclassobject::put函数为更新或创建特定的属性值函数。[0135]s508、利用枚举结果检索函数将s502中获取的进程信息作为查询结果发给待检测样本。[0136]本技术实施例通过步骤s508仍可以实现正常查询功能,因此,本技术实施例可以做到基本不影响wmi接口原有调用功能的实现,不影响待检测样本正常运行。[0137]在本技术实施例中,能够实现利用wmi接口进行虚拟机检测的对抗,使得查询函数获取查询结果中不会存在任何表征当前运行环境为虚拟机环境的数据信息。进而使得待检测样本不能够根据接收的查询结果得到运行环境为虚拟机环境的结论,从而绕过恶意样本的虚拟机检测,起到隐藏当前系统真实身份,有效实现对抗恶意样本中的虚拟机检测。能够为后续恶意样本的识别提供可靠的保证,避免出现由于识别当前运行环境而造成的恶意样本的遗漏的情况。大大增加了虚拟机环境的隐蔽性,提高了动态鉴定系统的鉴定能力。[0138]为了便于理解,结合本方案的一种应用场景进行介绍,下面以服务器上动态鉴定系统为应用场景。具体描述本技术实施例提供的虚拟机检测对抗方法。其中,服务器中构建的动态鉴定系统在接收到待检测样本后,将待检测样本放到虚拟出来的虚拟机环境中运行全部的待检测样本,并捕获样本运行过程中产生的样本动态行为,通过捕获到的样本动态行为判断样本的恶意程度。而本技术实施例中提供的虚拟机检测对抗方法可以包含在动态鉴定系统中的监控模块中,其目的是就是尽可能隐藏动态鉴定系统使用的虚拟机环境,防止恶意样本运行时检测到运行环境是虚拟机环境,而非真实的物理机环境,进而进行躲避,避免被动态鉴定系统捕获。[0139]情况一:[0140]当运行的待检测样本中存在的虚拟机检测代码需要通过wmi接口调用iwbemservices::execquery函数,查询当前运行系统是否存在vmtoolsd.exe进程时,需要通过wmi接口发送查询指令:objwmiservice.execquery(”select*fromwin32_processwherename='vmtoolsd.exe'”)。系统在接收该查询指令时,运行iwbemservices::execquery函数,但是,此时由于本技术将修改程序挂钩到了iwbemservices::execquery函数上,因此,在iwbemservices::execquery函数接收到上述查询指令时,修改程序立刻判断出检索对象查询函数接收到的查询指令中存在一个虚拟机特征值vmtoolsd.exe。因此,修改程序随机生成了一个与虚拟机特征值的前缀不同并且后缀相同的替换字符串作为非虚拟机特征值,使得iwbemservices::execquery函数根据非虚拟机特征值获取查询结果,并将查询结果返回给待检测样本。待检测样本得到的查询结果请参考图6。同样的过程运行在不包含修改程序的虚拟机系统中得到的查询结果请参考图7。[0141]情况二:[0142]当运行的待检测样本中存在的虚拟机检测代码需要通过wmi接口调用ienumwbemclassobject::next函数,查询当前运行系统是否是虚拟机环境时,需要通过wmi接口发送查询指令:objwmiservice.execquery(”select*fromwin32_process”)。系统在接收该查询指令时,运行ienumwbemclassobject::next函数,但是,此时本技术将修改程序挂钩到了ienumwbemclassobject::next函数上,因此,在ienumwbemclassobject::next函数在获取到查询结果时,修改程序立刻判断出该查询结果中存在虚拟机特征值vmtoolsd.exe。因此,修改程序随机生成了一个与虚拟机特征值的前缀不同并且后缀相同的替换字符串作为非虚拟机特征值,替换了查询结果中的vmtoolsd.exe,使得查询结果不再存在虚拟机特征值。最终ienumwbemclassobject::next函数将替换后的进程信息作为查询结果发给待检测样本。待检测样本得到的查询结果请参考图8。同样的过程运行在不包含修改程序的虚拟机系统中得到的查询结果请参考图9。[0143]通过上述两个实际例子可以看到,在系统中挂钩修改函数后,将待检测样本运行在虚拟机环境中,即便该待检测样本中存在虚拟机检测代码,但是依然无法检测成功出当前运行环境为虚拟机环境。实现成功对抗虚拟机检测。最后通过修改程序输入的日志,可以查询到,情况一里将vmtoolsd.exe替换为了一串随机生成的字符串0x9mjy1.exe。情况二里将vmtoolsd.exe替换为了一串随机生成的字符串0wtsamsn.exe。可以证明本技术实施例提供的虚拟机检测对抗方法能够对抗样本中的虚拟机检测过程,且能够对抗基于wmi接口的虚拟机检测过程。[0144]另一方面,本技术实施例还提供了一种虚拟机检测对抗装置。如,参见图10,其示出了本技术一种虚拟机检测对抗装置一个实施例的组成结构示意图,本实施例的装置可以应用于如上实施例中的终端,该装置可以包括:[0145]样本运行模块110,用于运行待检测样本;[0146]查询函数运行模块120,用于当接收到待检测样本发送的查询指令时,运行查询指令对应的查询函数,并在运行查询函数的过程中,利用对应的修改程序,将查询函数获取的虚拟机特征值替换为非虚拟机特征值,并利用查询函数根据非虚拟机特征值获取查询结果;[0147]查询结果返回模块130,用于将查询结果返回给待检测样本。[0148]可选的,请参考图11,本技术实施例还提供了另一种虚拟机检测对抗装置,该装置还可以包括:[0149]注入模块140,用于在查询函数中注入修改程序。[0150]可选的,该注入模块140可以包括:[0151]地址获取单元,用于获取查询函数的地址;[0152]挂钩单元,用于根据地址,将修改程序挂钩到查询函数中。[0153]可选的,该查询函数运行模块120可以包括:[0154]第一替换单元,用于当查询函数为检索对象查询函数时,利用修改程序判断检索对象查询函数接收到的查询指令中是否存在虚拟机特征值;并在查询指令中存在虚拟机特征值时,生成与虚拟机特征值不同的替换字符串作为非虚拟机特征值,以替换虚拟机特征值。[0155]可选的,该查询函数运行模块120可以包括:[0156]第二替换单元,用于当查询函数为枚举结果检索函数时,利用修改程序获取枚举结果检索函数得到的进程信息中属性值参数对应的属性字段,并判断属性字段中是否存在预设属性字段;若属性字段中存在预设属性字段,则获取预设属性字段对应的属性值;判断属性值是否为虚拟机特征值;并在属性值是虚拟机特征值时,生成与虚拟机特征值不同的替换字符串作为非虚拟机特征值,以替换虚拟机特征值。[0157]可选的,第一替换单元和/或第二替换单元可以包括:[0158]非虚拟机特征值生成子单元,用于生成与虚拟机特征值的前缀不同并且后缀相同的替换字符串作为非虚拟机特征值。[0159]需要说明的是,本技术实施例提供的虚拟机检测对抗装置中的各个模块或者单元以及子单元可以应用于上述的电子设备。[0160]另一方面,本技术实施例还提供了一种电子设备,该电子设备可以包括处理器和存储器。该电子设备中处理器和存储器之间的关系可以参考图1。[0161]其中,电子设备的处理器用于执行存储器中存储的程序;[0162]电子设备的存储器用于存储程序,该程序至少用于:[0163]运行待检测样本;[0164]当接收到待检测样本发送的查询指令时,运行查询指令对应的查询函数,并在运行查询函数的过程中,利用对应的修改程序,将查询函数获取的虚拟机特征值替换为非虚拟机特征值;[0165]利用查询函数根据非虚拟机特征值获取查询结果,并将查询结果返回给待检测样本。[0166]当然,该电子设备还可以包含通信接口、显示单元以及输入装置等,具体在此不加以限制。[0167]另一方面,本技术实施例还提供了一种存储介质,该存储介质中存储有计算机程序,该计算机程序被处理器加载并执行时,用于实现如上任意一个实施例中所描述的虚拟机检测对抗方法。[0168]需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。[0169]最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。[0170]对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。[0171]以上仅是本发明的优选实施方式,应当指出,对于本
技术领域
:的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1