发明内容
本申请提供了一种检测恶意程序的方法、装置及虚拟机,以解决现有技术无法检测出变形的恶意程序的问题。
为了解决上述问题,本申请公开了一种检测恶意程序的方法,包括:
设置虚拟内存;
读取主引导记录MBR并保存到所述虚拟内存;
模拟执行虚拟内存中主引导记录MBR中的每一条指令,并在执行完每一条指令后检测所述虚拟内存是否被修改,如果被修改,则发现恶意程序;否则,继续模拟执行下一条指令,直到主引导记录MBR的所有指令模拟执行完毕。
优选的,所述检测所述虚拟内存是否被修改,包括:检测所述虚拟内存的大小是否改变,如果改变,则所述虚拟内存被修改;否则,未被修改。
优选的,所述设置虚拟内存之前,还包括:设置虚拟CPU;则所述模拟执行虚拟内存中主引导记录MBR中的每一条指令,包括:由所述虚拟CPU模拟执行虚拟内存中主引导记录MBR中的每一条指令。
其中,所述设置虚拟CPU包括:初始化虚拟CPU;所述设置虚拟内存包括:初始化BIOS数据区,所述BIOS数据区保存虚拟内存的大小。
优选的,所述模拟执行虚拟内存中主引导记录MBR中的每一条指令之前,还包括:设置虚拟硬盘;则所述模拟执行虚拟内存中主引导记录MBR中的每一条指令包括:将虚拟内存中的主引导记录MBR拷贝到所述虚拟硬盘;从所述虚拟硬盘读取主引导记录MBR,并模拟执行主引导记录MBR中的每一条指令。
优选的,所述方法还包括:对主引导记录MBR中的每一条指令进行反汇编,并输出显示。
本申请还提供了一种检测恶意程序的装置,包括:
第一设置模块,用于设置虚拟内存;
读取及保存模块,用于读取主引导记录MBR并保存到所述虚拟内存;
模拟执行模块,用于模拟执行虚拟内存中主引导记录MBR中的每一条指令;
检测模块,用于在所述模拟执行模块执行完每一条指令后检测所述虚拟内存是否被修改,如果被修改,则发现恶意程序;否则,触发所述模拟执行模块继续模拟执行下一条指令,直到主引导记录MBR的所有指令模拟执行完毕。
优选的,所述检测模块通过检测所述虚拟内存的大小是否改变来判断是否被修改,如果改变,则所述虚拟内存被修改;否则,未被修改。
优选的,所述装置还包括:第二设置模块,用于设置虚拟CPU,所述虚拟CPU触发所述模拟执行模块和检测模块的执行。
优选的,所述装置还包括:第三设置模块,用于设置虚拟硬盘,并将虚拟内存中的主引导记录MBR拷贝到所述虚拟硬盘;则所述模拟执行模块从所述虚拟硬盘读取主引导记录MBR,并模拟执行主引导记录MBR中的每一条指令。
优选的,所述装置还包括:反汇编引擎,用于对主引导记录MBR中的每一条指令进行反汇编,并输出显示。
本申请还提供了一种检测恶意程序的虚拟机,包括:
虚拟CPU初始化模块,用于初始化虚拟CPU;
虚拟内存初始化模块,用于初始化虚拟内存,并在初始化的过程中读取主引导记录MBR然后保存到所述虚拟内存;
虚拟内存,用于存储主引导记录MBR;
虚拟CPU,用于模拟执行虚拟内存中主引导记录MBR中的每一条指令,并在执行完每一条指令后检测所述虚拟内存是否被修改,如果被修改,则发现恶意程序;否则,继续模拟执行下一条指令,直到主引导记录MBR的所有指令模拟执行完毕。
优选的,所述虚拟机还包括:
虚拟硬盘初始化模块,用于初始化虚拟硬盘,并在初始化的过程中将虚拟内存中的主引导记录MBR拷贝到所述虚拟硬盘,所述虚拟CPU从虚拟硬盘读取主引导记录MBR并模拟执行;
虚拟硬盘,用于存储拷贝的主引导记录MBR。
优选的,所述虚拟机还包括:
反汇编引擎,用于对主引导记录MBR中的每一条指令进行反汇编,并输出显示。
与现有技术相比,本申请包括以下优点:
首先,本申请在开机后并在加载操作系统文件之前,通过模拟的方式先将读取的主引导记录MBR存到所设置的虚拟内存中,然后模拟实现主引导记录MBR的加载执行过程,并且每当模拟执行完MBR中的一条指令后,检测所述虚拟内存是否被修改,如果被修改,则发现恶意程序;否则,继续模拟执行下一条指令,直到主引导记录MBR的所有指令模拟执行完毕。
由于实际情况中,基于MBR的Bootkit或类似于Bootkit的病毒等恶意程序,即使进行了变形,也必须要驻留系统的高端内存,所以必然会修改高端内存,因此上述的检测方法通过设置虚拟内存来模拟高端内存,并通过检测虚拟内存是否被修改,就可以发现可疑的恶意程序,从而无视任何特征码变换技术,只要实际运行中发生了这个行为即可被检测出来。所述的检测方法在很大程度上可以检测出过去、现在和未来的基于MBR的Bootkit。
其次,本申请还实现了一种虚拟机,所述虚拟机通过实现虚拟CPU、虚拟内存、反汇编引擎、虚拟硬盘以及其他相关部分,如虚拟BIOS(Basic InputOutput System,基本输入输出系统)、虚拟I/O设备等,可以模拟实现主引导记录MBR的加载执行过程,并检测出是否存在Bootkit等恶意程序。而且,所述虚拟机既可以作为单独的工具,也可以作为动态库被其他程序调用,使用灵活。同时,考虑到性能和效率等实用性方面,整个虚拟机的实现控制在几百K字节内,是一种轻量级的虚拟机。
当然,实施本申请的任一产品不一定需要同时达到以上所述的所有优点。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
对于恶意程序的检测,尤其是对基于MBR的Bootkit或类似于Bootkit的病毒等恶意程序的检测,本申请提出一种检测方法,无论这些恶意程序有何种变形,都可以被检测出来。
下面首先介绍本申请提出的思路,如下:
正常情况下,计算机系统的开机过程是:
开机通电自检-->主板BIOS根据用户指定的启动顺序从软盘、硬盘或光驱进行启动-->系统BIOS将主引导记录MBR读入内存-->控制权交给主引导程序-->主引导程序检查分区表状态,寻找活动的分区-->主引导程序将控制权交给活动分区的引导记录,由引导记录加载操作系统启动文件。
由上可知,MBR是电脑通电开机,主板自检完成后,被第一个读取到的位置,位于硬盘的0磁头0磁道1扇区,它的大小是512字节,不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取。
DOS时代泛滥成灾的引导区病毒多寄生于MBR中。以鬼影病毒为例,该病毒寄生在MBR中,病毒释放的驱动程序,能够破坏大多数安全工具和系统辅助工具。当系统再次重启时,该病毒会早于操作系统内核先行加载。而当病毒成功运行后,在进程中、系统启动加载项里找不到任何异常。即使格式化重装系统,也无法将该病毒清除。
鬼影病毒驻留在系统的高端内存中,因此现有技术通过搜索高端内存的特征码来定位其是否是病毒。例如,鬼影3中的代码如图1所示,通过搜索特征码0X0413来检测是否修改了高端内存来驻留内存。而对于变形的鬼影代码,参照图2所示的一个鬼影变种代码,这段代码可以达到和图1一样的修改高端内存的效果,但却通过指令的变形,找不到特征的代码,从而饶过常规安全软件的查杀。
仔细分析图1和图2所示的鬼影病毒,可以发现,无论其是否变形,只要运行就能够达到修改高端内存的效果。因此,通过检测高端内存就可以检测出各种形式的鬼影病毒。本申请正是利用这一点,通过设置虚拟内存来模拟高端内存,并通过模拟MBR的加载执行过程来检测所述虚拟内存,从而在恶意程序真正运行之前就查找出各种基于MBR的Bootkit(如鬼影病毒)或类似于Bootkit的病毒等恶意程序。
下面通过实施例对本申请所述方法的实现流程进行详细说明。
参照图3,是本申请实施例所述一种检测恶意程序的方法流程图。
参照上面的计算机系统开机过程,在系统开机后并且在加载操作系统文件之前,执行以下步骤:
步骤301,设置虚拟内存;
即分配一块内存区域作为虚拟内存使用,所述虚拟内存是对实际的系统高端内存的模拟。
步骤302,读取主引导记录MBR并保存到所述虚拟内存;
真实的开机过程中,开机通电自检后,系统BIOS将主引导记录MBR读入真实的高端内存;而本实施例中,是将MBR读入所述虚拟内存中。
步骤303,模拟执行虚拟内存中主引导记录MBR中的每一条指令,并在执行完每一条指令后检测所述虚拟内存是否被修改;
如果被修改,则发现恶意程序,退出检测过程,并可以进行提示;否则,如果未被修改,则继续模拟执行下一条指令,直到主引导记录MBR的所有指令模拟执行完毕,退出检测过程。若MBR的所有指令都模拟执行完毕也没有发现恶意程序,则将控制权交给系统中真实的活动分区的引导记录,由引导记录加载操作系统启动文件。
具体的,可以通过检测所述虚拟内存的大小是否改变来判断是否被修改,如果改变,则所述虚拟内存被修改;否则,未被修改。目前的实际应用中,由于Bootkit可修改内存使内存的大小变小,因此在模拟执行每一条指令之后,可通过判断虚拟内存的大小是否变小来进行检测。当然,本实施例也不排除其他判断内存是否被修改的方法。
此外,本实施例进一步可以通过虚拟CPU来完成上述步骤303,。具体的,在步骤301设置虚拟内存之前,先设置虚拟CPU,然后在步骤303由所述虚拟CPU模拟指令的执行,并对虚拟内存进行检测。
基于上述图3所示实施例的内容:
进一步可选的,设置完虚拟内存后,还可设置虚拟硬盘,并将虚拟内存中的MBR拷贝到所述虚拟硬盘中,当模拟执行MBR中的指令时,直接从所述虚拟硬盘中进行读取。
进一步可选的,为了整个模拟过程的完整性,还可以设置出虚拟BIOS、虚拟I/O设备等其他相关部分,用于所述检测过程。
进一步可选的,为了便于相关人员查看整个模拟过程的执行,还可以对主引导记录MBR中的每一条指令进行反汇编,并输出显示。
综上所述,由于实际情况中,基于MBR的Bootkit或类似于Bootkit的病毒等恶意程序,即使进行了变形,也必须要驻留系统的高端内存,所以必然会修改高端内存,因此上述的检测方法通过设置虚拟内存来模拟高端内存,并通过检测虚拟内存是否被修改,就可以发现可疑的恶意程序,从而无视任何特征码变换技术,只要实际运行中发生了这个行为即可被检测出来。所述的检测方法在很大程度上可以检测出过去、现在和未来的基于MBR的Bootkit。
需要说明的是,对于前述的方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请所必须的。
基于上述检测方法的实施例,本申请还提供了相应的装置实施例。
参照图4,是本申请实施例所述一种检测恶意程序的装置结构图。
所述检测装置可以包括:
第一设置模块41,用于设置虚拟内存;
读取及保存模块42,用于读取主引导记录MBR并保存到所述虚拟内存;
模拟执行模块43,用于模拟执行虚拟内存中主引导记录MBR中的每一条指令;
检测模块44,用于在所述模拟执行模块43执行完每一条指令后检测所述虚拟内存是否被修改,如果被修改,则发现恶意程序;否则,触发所述模拟执行模块43继续模拟执行下一条指令,直到主引导记录MBR的所有指令模拟执行完毕。
优选的,所述检测模块44可通过检测所述虚拟内存的大小是否改变来判断是否被修改,如果改变,则所述虚拟内存被修改;否则,未被修改。
进一步可选的,所述检测装置还可以包括:
第二设置模块45,用于设置虚拟CPU,所述虚拟CPU可触发所述模拟执行模块43和检测模块44的执行。
进一步可选的,所述检测装置还可以包括:
第三设置模块46,用于设置虚拟硬盘,并将虚拟内存中的主引导记录MBR拷贝到所述虚拟硬盘;
此时,所述模拟执行模块43从所述虚拟硬盘读取主引导记录MBR,并模拟执行主引导记录MBR中的每一条指令。
进一步可选的,所述检测装置还可以包括:
反汇编引擎47,用于对主引导记录MBR中的每一条指令进行反汇编,并输出显示。
所述检测装置既可以作为单独的工具,也可以作为动态库被其他程序调用,使用灵活。
对于上述检测装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见上述方法实施例的部分说明即可。
基于上述内容,为了使本领域技术人员更加了解本申请的实现,本申请还提供了另一更具体的实施例,内容如下。
实现一种虚拟机,所述虚拟机通过实现虚拟CPU、虚拟内存、反汇编引擎、虚拟硬盘以及其他相关部分,如虚拟BIOS、虚拟I/O设备等,可以模拟实现主引导记录MBR的加载执行过程,并检测出是否存在Bootkit等恶意程序。
参照图5,是本申请另一实施例所述虚拟机的结构图。
具体的,所述虚拟机可以包括:
虚拟CPU初始化模块51,用于初始化虚拟CPU54;
虚拟内存初始化模块52,用于初始化虚拟内存53,并在初始化的过程中读取主引导记录MBR然后保存到所述虚拟内存53;
虚拟内存53,用于存储主引导记录MBR;
虚拟CPU54,用于模拟执行虚拟内存53中主引导记录MBR中的每一条指令,并在执行完每一条指令后检测所述虚拟内存是否被修改,如果被修改,则发现恶意程序;否则,继续模拟执行下一条指令,直到主引导记录MBR的所有指令模拟执行完毕。
进一步可选的,所述虚拟机还可以包括:
虚拟硬盘初始化模块55,用于初始化虚拟硬盘56,并在初始化的过程中将虚拟内存53中的主引导记录MBR拷贝到所述虚拟硬盘56,所述虚拟CPU54从虚拟硬盘56读取主引导记录MBR并模拟执行;
虚拟硬盘56,用于存储拷贝的主引导记录MBR。
进一步可选的,所述虚拟机还可以包括:
反汇编引擎57,用于对主引导记录MBR中的每一条指令进行反汇编,并输出显示。
由于实际应用中Bootkit病毒多运行于计算机系统的实模式下,因此下面将以实模式下的虚拟机为例进行详细说明。当然,所述虚拟机可应用于保护模式或其他计算机模式下,本实施例不受此限定。
在实模式下,上述虚拟CPU可模拟实现所有实模式下的指令,主要为8086指令,还可以包括386以后的指令。此外,随着木马等Bootkit技术的发展,如果木马调用了特殊的指令,所述虚拟CPU还可以进行相应特殊指令的模拟。例如,魅影病毒为了防止被调试采用了586以后才支持的指令RDTSC,则虚拟CPU还会模拟所述RDTSC指令。
在开机通电自检后,系统BIOS读取系统内置的MBR,然后传给所述虚拟机,同时虚拟机进行初始化。虚拟机的执行步骤如下:
步骤1,初始化虚拟CPU;
首先进行虚拟CPU初始化,虚拟CPU为单核的80x86,支持的寄存器同真实的机器。
此外,支持指令的初始化,虚拟机内部有个指令支持列表,该列表可根据实际需要,不断增加需要支持的指令,初始化的时候会填充已经支持的指令列表。然后,将虚拟机中的CPU的指令指针指向虚拟内存中的BIOS指令开始执行处(即MBR指令)0xf000:0xfff0。
步骤2,初始化虚拟内存;
可通过初始化BIOS数据区,所述BIOS数据区保存常规的虚拟内存的大小,在实模式下可分配640KB左右的内存空间作为虚拟内存使用。然后,将系统BIOS读取的MBR存入所述虚拟内存中。
步骤3,初始化虚拟硬盘以及虚拟机的其他相关部分;
一般在DOS下只使用1MB的磁盘,所以通过分配1MB左右的内存空间作为虚拟硬盘来模拟实际的硬盘。相应的,还可通过访问所述虚拟硬盘来模拟访问实际的硬盘。然后,将虚拟内存中的MBR拷贝到所述虚拟磁盘的开始处。
此外,还会初始化虚拟机的其他相关部分,如虚拟BIOS、虚拟I/O设备等。
步骤4,运行虚拟CPU;
与实际的执行过程类似,开始执行虚拟CPU后,从BIOS指令开始执行处(即MBR指令)开始执行。每执行MBR的一条指令,虚拟CPU会进行指令译码,根据指令译码结果修改内部的寄存器和相关内存,并执行相应的流程。如果指令中包含病毒,则虚拟CPU不仅会修改内部的寄存器,还会修改相关的虚拟内存;如果不包含,则不会修改相关的虚拟内存。
步骤5,虚拟CPU检测虚拟内存。
每执行一条指令后,虚拟CPU会检测前面设置的BIOS数据区保存的虚拟内存大小,如果发现被改变了,就认为发现了可疑MBR病毒,然后退出虚拟机,并进行提示。如果没有发现则继续执行,如果发现执行到CS=0,IP=0X7C00的时候就检测是否执行到了操作系统引导区,比如是否是NTFS或FAT的文件系统的引导区,如是的,则认为执行MBR结束,没有发现可疑的MBR,然后退出。
需要说明的是,上述步骤的先后顺序可根据实际需要进行调整,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。
上述虚拟机既可以作为单独的工具,也可以作为动态库被其他程序调用,使用灵活。同时,考虑到性能和效率等实用性方面,整个虚拟机的实现控制在几百K字节内,是一种轻量级的虚拟机。
下面以鬼影病毒为例说明本申请的上述内容。
参照图6,是本申请实施例中正常的MBR运行后的显示结果示意图;
参照图7,是本申请实施例中中了鬼影1后的MBR运行结果示意图;
参照图8,是本申请实施例中中了鬼影3后的MBR运行结果示意图;
参照图9,是本申请实施例中中了顶级Bootkit后的MBR运行结果示意图。
其中,
MbrVmConsole为主程序;
MbrVM.ini为配置文件,用来指定VM内存大小和指定虚拟硬盘的文件;
Mbr.img为指定的虚拟硬盘文件;
BIOS下为虚拟机用到的虚拟BIOS文件;
使用时候,将指定的MBR DUMP文件mbr.bin拷贝到虚拟机目录下,运行MbrVmconsole即可运行虚拟机进行检测。
mbrGood.bin为正常MBR;
mbrguiying1.bin为鬼影1MBR;
mbrguiying3.bin为鬼影3MBR;
mbrTdl.bin为TDL4 MBR;
运行时,将相应的文件改名为mbr.bin即可进行相应的检测。
综上所述,随着现在杀毒软件技术的日益成熟,木马等病毒生存的空间越来越狭小,传统的木马技术,已经很难生存和发展了。但Bootkit技术的出现,给病毒一个很大的生存发展空间,使其可以做到无文件、无进程、无注册表修改等任何杀软能检测到的东西,只需要在MBR里写入加载代码,就可以加载起一个完整的病毒执行体系。而且即使格式化重装,也照样能复活。所以基于本申请所实现的方法和装置,在以后检测该方面的木马等病毒中起到决定性的作用,而这正是目前机会所有杀毒软件的盲点。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
以上对本申请所提供的一种检测恶意程序的方法、装置及虚拟机,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。