本发明涉及病毒检测领域,具体而言,涉及一种样本的执行方法和装置。
背景技术:
随着动态分析系统在反病毒领域扮演着越来越重要的角色,病毒木马针对动态分析系统的对抗方法层出不穷,木马和安全厂商在动态对抗分析技术上的比拼也逐渐升级。在众多的反动态分析技术中,高CPU消耗型花指令具有易实现,通用性好,对抗性高等优点,在最近几次发现的流行恶意样本中使用频率很高。因此对于这类样本的对抗,成为反动态分析对抗的重点。其中,动态分析系统是恶意代码样本感知动态分析“沙箱”,进而隐藏自身的恶意行为,躲避查杀。反动态分析对抗的核心思想在于反对抗,是对动态分析系统的动态分析对抗的应对策略,使恶意代码样本的动态分析对抗失效。
通常反动态分析对抗时运行的样本先执行花指令,然后再执行恶意代码样本。在真实环境中,花费很长时间执行花指令,然后执行恶意代码,完成恶意行为。然而,在沙箱环境进行反动态分析对抗时,由于沙箱对样本的动态分析有超时限制,花指令的执行时间很长(从几十分钟到几个小时不等),沙箱不会对单个样本无限等待,导致在花指令完成之前就结束了反动态分析对抗对样本的动态分析,在花指令之后执行的恶意代码并没有得到执行,从而判定出反动态分析对抗的样本为非恶意样本,导致无法达到动态分析对抗的目的。
针对上述的问题,目前尚未提出有效的解决方案。
技术实现要素:
本发明实施例提供了一种样本的执行方法和装置,以至少解决无法在沙箱中执行恶意代码的技术问题。
根据本发明实施例的一个方面,提供了一种样本的执行方法,包括:在沙箱中执行样本;判断当前在所述沙箱中执行的样本是否为花指令;在判断出当前在所述沙箱中执行的样本是所述花指令时,确定当前在所述沙箱中执行的样本中属于花指令的指令序列;在所述指令序列中查找条件跳转指令,其中,所述条件跳转指令指向的目的地址在所述指令序列以外;跳出所述指令序列,并根据所述目的地址执行所述样本。
根据本发明实施例的另一方面,还提供了一种样本的执行装置,包括:第一执行单元,用于在沙箱中执行样本;判断单元,用于判断当前在所述沙箱中执行的样本是否为花指令;确定单元,用于在判断出当前在所述沙箱中执行的样本是所述花指令时,确定当前在所述沙箱中执行的样本中属于所述花指令的指令序列;查找单元,用于在所述指令序列中查找条件跳转指令,其中,所述条件跳转指令指向的目的地址在所述指令序列以外;第二执行单元,用于跳出所述指令序列,并根据所述目的地址执行所述样本。
在本发明实施例中,在沙箱中执行样本;判断当前在所述沙箱中执行的样本是否为花指令;在判断出当前在所述沙箱中执行的样本是所述花指令时,确定当前在所述沙箱中执行的样本中属于花指令的指令序列;在所述指令序列中查找条件跳转指令,其中,所述条件跳转指令指向的目的地址在所述指令序列以外;跳出所述指令序列,并根据所述目的地址执行所述样本,在本实施例中,本应在花指令执行完成后再执行的恶意事件提前被执行,避免了在沙箱超时后还无法执行恶意事件的问题,达到了执行恶意事件的技术效果,进而解决了无法在沙箱中执行恶意代码的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的样本的执行方法的流程图;
图2是根据本发明实施例的一种可选的样本的执行方法的流程图;
图3是根据本发明实施例的一种可选的样本的执行方法的流程图;
图4是根据本发明实施例的样本的执行装置的示意图;
图5是根据本发明实施例的终端的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
名词解释:
沙箱:即虚拟系统程序,允许在沙箱环境中运行浏览器或者其他程序,在沙箱内部运行的程序并不能对磁盘产生永久性的影响,其为一个独立的虚拟环境,可以测试不受信任的应用程序或者上网行为。
可执行程序动态分析:在“沙箱”系统中运行可执行程序,捕获代码执行序列以及进行参数分析,以此判定恶意程序。
花指令:在超高循环次数的循环中执行无意义的花指令(汇编指令),以达到占用CPU的目的。
动态分析对抗:恶意样本感知动态分析“沙箱”,进而隐藏自身的恶意行为,躲避查杀。
反动态分析对抗:核心思想在于反对抗,是动态“沙箱”系统对于动态分析对抗的应对策略,使恶意样本的动态分析对抗失效。
根据本发明实施例,提供了一种可以通过本申请装置实施例执行的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1是根据本发明实施例的样本的执行方法的流程图,以下结合图1对本发明实施例所提供的样本的执行方法做具体介绍,如图1所示,该样本的执行方法主要包括如下步骤:
步骤S102,在沙箱中执行样本。
步骤S104,判断当前在沙箱中执行的样本是否为花指令。
步骤S106,在判断出当前在沙箱中执行的样本是花指令时,确定当前在沙箱中执行的样本中属于花指令的指令序列。
步骤S108,在指令序列中查找条件跳转指令,其中,条件跳转指令指向的目的地址在指令序列以外。
步骤S110,跳出指令序列,并根据目的地址执行样本。
在本实施例中,先判断沙箱中当前执行的样本是否为花指令,如果不是花指令则继续在沙箱中运行样本,如果当前执行的样本是花指令,则暂停执行花指令并确定属于花指令的指令序列。确定属于花指令的指令序列即确定样本中哪些指令序列属于花指令,并在该指令序列中内查找条件跳转指令,其中,条件跳转指令指示在A条件下跳转到目的地址,在非A条件下不跳转到目的地址,在不出现A条件的情况下继续执行花指令。由于恶意事件在执行完花指令后再执行,且花指令是高循环次数的循环,跳出花指令的循环所执行的事件才有可能是恶意事件,因此,查找目的地址在属于花指令的指令序列以外的条件跳转指令。
在一些实施例中,目的地址为多个的情况下,执行目的地址的样本时多个目的地址中的至少一个地址的样本是恶意事件,执行这多个目的地址的样本就能实现执行恶意事件;在目的地址为一个的情况下,该目的地址的样本即为恶意事件,在执行目的地址的样本时该恶意事件就能够被执行。即在本实施例中,本应在花指令执行完成后再执行的恶意事件提前被执行,避免了在沙箱超时后还无法执行恶意事件的问题,达到了执行恶意事件的技术效果。
在本实施例中,在沙箱中执行恶意事件后,可以对反动态分析对抗进行分析,克服恶意事件感知动态分析沙箱而进行躲避查杀的行为,从而提高了恶意事件查杀的准确度。进一步地,由于在此过程中并没有增加沙箱的规定的超时时间,因此,也不会降低沙箱的使用效率。
可选地,判断当前在沙箱中执行的样本是否为花指令包括:监控执行样本的进程的用户态和内核态;判断进程处于内核态的时间和进程处于用户态的时间的比值是否大于预设比值;当判断出进程处于内核态的时间和进程处于用户态的时间的比值大于预设比值时,确定沙箱中当前执行的样本为花指令。
当一个任务(进程)执行系统调用而陷入内核代码中执行时,就称进程处于内核态。处于内核态时,执行的内核代码会使用当前进程的内核栈。当进程在执行用户自己的代码时,则称其处于用户态。在CPU的设计中,用户态下执行的代码被硬件限定,不能进行某些操作,比如写入其他进程的关联空间,以防止给操作系统带来安全隐患。在操作系统的设计中,内核禁止此状态下的代码进行潜在危险的操作,比如写入系统配置文件、杀掉其他用户的进程、重启系统等。
在本实施例中,花指令的特点是超高的CPU占用,并且对其他操作系统资源的需求几乎没有,为了使花指令有较好的通用性,花指令代码几乎不去调用操作系统API,而仅仅进行无用的寄存器操作。而一个正常的可执行程序,会频繁的调用操作系统接口,陷入内核。根据此特点,本实施例监控样本进程的ring 0(用户态)和ring 3(内核态)执行时间的占比来感知花指令的执行。
因此,当执行样本的进程处于内核态的时间和进程处于用户态的时间的比值大于预设比值时,确定沙箱中当前执行的样本为花指令。预设比例可以是普通应用程序的进程的处于内核态的时间和进程处于用户态的时间的比值,也就是说,当执行样本的进程处于内核态的时间和进程处于用户态的时间的比值高于正常值时,确定沙箱中当前执行的样本为花指令。
在一个具体的例子中,上述的样本为代码样本,花指令为高CPU消耗型花指令。在沙箱中执行代码样本,该代码样本中包括花指令和恶意代码,恶意代码在花指令执行完毕后执行。
以下结合图2进行具体说明:
步骤S302,执行代码样本。在沙箱中执行代码样本,代码样本包括花指令、恶意代码和其他代码,通常恶意代码在花指令执行完毕后执行。
步骤S304,判断代码样本是否为花指令。如果判断结果为是,则执行步骤S306;如果判断结果为否,则返回步骤S302。在执行代码样本的过程中,只有在判断出当前执行的代码样本为花指令时,才会继续确定属于花指令的指令序列,如果当前执行的代码样本不是花指令,就无需继续确定属于花指令的指令序列,则返回步骤S302,继续执行代码样本。
花指令的特点是超高的CPU占用,并且对其他操作系统资源的需求几乎没有,为了使花指令有较好的通用性,花指令代码几乎不去调用操作系统API,而仅仅进行无用的寄存器操作。而一个正常的可执行程序,会频繁的调用操作系统接口,陷入内核。根据此特点,本实施例通过监控样本进程的ring 0(用户态)和ring 3(内核态)执行时间的占比来感知花指令的执行。若该占比高于非花指令的其他代码的占比,则确定当前执行的代码样本为花指令。其中T占比为样本进程的ring 0(用户态)和ring 3(内核态)执行时间的占比,Tring0为样本进程的ring 0(用户态)的执行时间,Tring3为样本进程的ring 3(内核态)的执行时间。
步骤S306,确定属于花指令的指令序列。即在检测到当前执行的代码样本为花指令后,需要进一步确定属于花指令的指令序列。具体地,在要确定属于花指令的指令序列时,挂起沙箱中执行花指令的进程,暂停执行花指令,并记录当前调用的指令寄存器。
步骤S308,扫描属于花指令的指令序列。此时已经暂停在沙箱中执行花指令了,需要对花指令进行虚拟执行来确定属于花指令的指令序列。具体地,从当前调用的指令寄存器开始对花指令进行虚拟执行(此时沙箱已经暂停执行花指令)。由于花指令是高循环次数的循环,花指令会循环执行,当再次执行到记录的指令寄存器时,确定花指令完成一次循环,也就确定了属于花指令的指令序列,即两次调用指令寄存器之间的所虚拟执行的指令序列就是属于花指令的指令序列。在确定花指令的指令寄存器再次被调用时,停止对花指令的虚拟执行。
步骤S310,记录地址列表。确定了属于花指令的指令序列后,在属于花指令的指令序列中查找条件跳转指令。花指令内的跳转指令所指向的目的地址可以是在花指令内,也可以在花指令以外,由于恶意代码在花指令以外,在执行恶意代码时也要跳出花指令的循环,因此,本实施例需要查找的是目的地址在花指令以外的条件跳转指令,这样目的地址的样本才有可能是恶意代码,因此需要记录目的地址。在目的地址有多个的情况下,得到目的地址列表。在查找条件跳转指令的过程中,沙箱中的花指令还处于暂停执行的状态。
步骤S312,重新拉起样本。在确定目的地址后,继续在沙箱中执行代码样本,为了跳过代码样本中耗时的花指令而直接执行恶意代码,向步骤S310中记录的目的地址列表中获取目的地址,并可以采用以下两种方式跳过花指令:
第一种:设置指令寄存器的地址。即,可选地,跳出花指令来执行在目的地址关联的事件包括:将指令寄存器的地址设置为目的地址;在沙箱中执行花指令并且调用指令寄存器时,跳转到目的地址来执行在目的地址的代码样本。
在确定属于花指令的指令序列时,挂起沙箱中执行花指令的进程,暂停执行花指令,并记录了指令寄存器。也就是说,沙箱中执行花指令的进程暂停在该指令寄存器处,当继续执行花指令时从该指令寄存器处继续执行。因此,将指令寄存器的地址设置为目的地址,在沙箱中继续执行花指令时,就会执行目的地址的代码样本,就实现了跳出花指令。
通常情况下,花指令中有一个条件跳转指令指向花指令以外的一个目的地址,该目的地址的代码样本就是恶意代码,在跳出花指令执行目的地址的代码样本时就不需要执行耗时长且没有意义的花指令,直接执行恶意代码,从而避免了沙箱的时间限制所导致的恶意代码无法被执行的技术问题。
在某些情况下,花指令中有多个条件跳转指令指向花指令以外的多个目的地址,这些目的地址中的至少一个所关联的代码是恶意代码,因此,多次将指令寄存器的地址设置为多个目的地址,从而执行多个目的地址的代码样本时恶意代码就会执行,也可以实现跳过花指令来执行恶意代码。
例如,多个目的地址分别为目的地址1、目的地址2和目的地址3。先将指令寄存器的地址设置为目的地址1,在目的地址1关联的代码执行完毕后再将指令寄存器的地址设置为目的地址2,在目的地址2关联的代码执行完毕后再将指令寄存器的地址设置为目的地址3。
第二种:修改条件跳转指令。即,可选地,跳出花指令来执行在目的地址的代码样本包括:将条件跳转指令修改为目标指令,其中,目标指令的条件与条件跳转指令的条件相反;在沙箱中执行花指令时执行目标指令所指示的条件来跳出花指令,并跳转到目的地址来执行在目的地址的代码样本。
由于花指令是高循环次数的循环,花指令的条件跳转指令指示在A条件下跳转到目的地址,在非A条件下不跳转到目的地址,在不出现A条件的情况下继续执行花指令的循环。因此,可以将条件跳转指令的条件进行修改,将“在A条件下跳转到目的地址,在非A条件下不跳转到目的地址”修改为“在非A条件下跳转到目的地址,在A条件下不跳转到目的地址”。通常花指令为了进行循环,都会重复出现非A条件,那么在修改为“在非A条件下跳转到目的地址”时,就会跳出花指令,跳转到目的地址来执行目的地址的代码样本。
相对多次设置指令寄存器的地址,直接将条件跳转指令的条件修改为相反的条件,提高了跳出花指令并跳转到目的地址的效率。
步骤S314,执行目的地址的样本。从花指令跳出后,执行一个或者多个目的地址的代码样本,在一个或者多个目的地址的代码样本,至少有一个是恶意代码,因此,实现了在沙箱中执行代码样本时,无需等待花指令执行完成,就可以执行恶意代码。
图3是根据本发明实施例的一种可选的样本的执行方法的流程图,以下结合图3对本发明实施例提供的样本的执行方法做具体介绍,如图3所示,该样本的执行方法包括:
S502,在沙箱中执行样本。
S504,监控执行样本的进程的用户态和内核态。在本实施例中,花指令的特点是超高的CPU占用,并且对其他操作系统资源的需求几乎没有,为了使花指令有较好的通用性,花指令代码几乎不去调用操作系统API,而仅仅进行无用的寄存器操作。而一个正常的可执行程序,会频繁的调用操作系统接口,陷入内核。根据此特点,本实施例通过监控样本进程的ring0(用户态)和ring 3(内核态)执行时间来感知花指令的执行。
S506,判断进程处于内核态的时间和进程处于用户态的时间的比值是否大于预设比值。通过监控样本进程的ring 0(用户态)和ring 3(内核态)执行时间,计算获得样本进程的ring 0(用户态)和ring 3(内核态)执行时间的占比,其中T占比为样本进程的ring 0(用户态)和ring3(内核态)执行时间的占比,Tring0为样本进程的ring 0(用户态)的执行时间,Tring3为样本进程的ring 3(内核态)的执行时间,将该占比与预设比值进行对比判断。
S508,判断沙箱中当前执行的样本是否为花指令。通过对比进程处于内核态的时间和进程处于用户态的时间的比值是否大于预设比值,若该占比值高于预设比值,则确定当前执行的代码样本为花指令;若该占比值不高于预设比值,则确定当前执行的代码样本不是花指令,继续执行样本。
S510,暂停在沙箱中执行花指令,并记录当前调用的指令寄存器。在判断出当前在沙箱中执行的样本是花指令时,暂停在沙箱中执行花指令,并记录当前调用的指令寄存器。
S512,确定属于花指令的指令序列。从当前调用的指令寄存器开始对花指令进行虚拟执行(此时沙箱已经暂停执行花指令)。由于花指令是高循环次数的循环,花指令会循环执行,当再次执行到记录的指令寄存器时,确定花指令完成一次循环,也就确定了属于花指令的指令序列。
S514,停止对花指令的虚拟执行。再次调用指令寄存器时,将相邻两次调用的指令寄存器之间的指令序列确定为为属于花指令的指令序列,同时停止对花指令的虚拟执行。
S516,查找条件跳转指令。确定了属于花指令的指令序列后,在该指令序列中查找条件跳转指令,花指令内的跳转指令所指向的目的地址可以是在花指令内,也可以在花指令以外,由于恶意代码在花指令以外,在执行恶意代码时也要跳出花指令的循环,因此,本实施例需要查找的是目的地址在花指令以外的条件跳转指令,这样目的地址的样本才有可能是恶意代码,在目的地址有多个的情况下,得到目的地址列表。
S518,跳出花指令。在确定目的地址后,可以采取以下两种方式跳出属于花指令:
第一种:设置指令寄存器的地址。在判断出当前在沙箱中执行的样本是花指令时,暂停在沙箱中执行花指令,沙箱中执行花指令的进程暂停在该指令寄存器处,当继续执行花指令时将从该指令寄存器处继续执行,可选地,将指令寄存器的地址设置为目的地址或目的地址列表,当在沙箱中继续执行花指令并且调用指令寄存器时,进程跳转到目的地址来执行在目的地址的代码样本。
第二种:修改条件跳转指令。由于花指令是高循环次数的循环,花指令的条件跳转指令指示在A条件下跳转到目的地址,在非A条件下不跳转到目的地址,继续执行花指令的循环,通常花指令为了进行循环,都会重复出现非A条件。可选地,将条件跳转指令修改为目标指令,其中,目标指令的条件与条件跳转指令的条件相反:将“在A条件下跳转到目的地址,在非A条件下不跳转到目的地址”修改为“在非A条件下跳转到目的地址,在A条件下不跳转到目的地址”。那么,在沙箱中执行花指令时,将执行目标指令所指示的条件来跳出花指令,并跳转到目的地址来执行在目的地址的代码样本。
S520,执行目的地址的样本。从花指令跳出后,执行一个或者多个目的地址的代码样本,在一个或者多个目的地址的代码样本中,至少有一个是恶意代码,因此,实现了在沙箱中执行代码样本时,无需等待花指令执行完成,就可以执行恶意代码。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品关联在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
根据本发明实施例,还提供了一种用于实施上述样本的执行方法的样本的执行装置,该样本的执行装置主要用于执行本发明实施例上述内容所提供的样本的执行方法,以下对本发明实施例所提供的样本的执行装置做具体介绍:
图4是根据本发明实施例的样本的执行装置的示意图,如图4所示,该样本的执行装置主要包括:第一执行单元10、判断单元20、确定单元30、查找单元40和第二执行单元50。
第一执行单元10用于在沙箱中执行样本。
判断单元20用于判断当前在沙箱中执行的样本是否为花指令。
确定单元30用于在判断出当前在沙箱中执行的样本是花指令时,确定当前在沙箱中执行的样本中属于花指令的指令序列。
查找单元40用于在属于花指令的指令序列中查找条件跳转指令,其中,条件跳转指令所指向的目的地址在属于花指令的指令序列以外。
第二执行单元50用于跳出指令序列,并根据目的地址执行样本。
在本实施例中,先判断沙箱中当前执行的样本是否为花指令,如果不是花指令则继续在沙箱中运行样本,如果当前执行的样本是花指令,则暂停执行花指令并确定属于花指令的指令序列。由于恶意事件在执行完花指令后再执行,且花指令是高循环次数的循环,跳出花指令的循环所执行的事件才有可能是恶意事件,因此,查找目的地址在属于花指令的指令序列以外的条件跳转指令。
在一些实施例中,目的地址为多个的情况下,执行目的地址的样本时,多个目的地址中至少一个地址的样本是恶意事件,执行这多个目的地址的样本就能实现执行恶意事件;在目的地址为一个的情况下,该目的地址的样本即为恶意事件,在执行目的地址的样本时该恶意事件就能够被执行。即在本实施例中,本应在花指令执行完成后再执行的恶意事件提前被执行,避免了在沙箱超时后还无法执行恶意事件的问题,达到了执行恶意事件的技术效果。
在本实施例中,在沙箱中执行恶意事件后,可以对反动态分析对抗进行分析,克服恶意事件感知动态分析沙箱而进行躲避查杀的行为,从而提高了恶意事件查杀的准确度。进一步地,由于在此过程中并没有增加沙箱的规定的超时时间,因此,也不会降低沙箱的使用效率。
可选地,判断单元包括:监控模块,用于在确定属于花指令的指令序列之前,监控执行样本的进程的用户态和内核态;判断模块,用于判断进程处于内核态的时间和进程处于用户态的时间的比值是否大于预设比值;第二确定模块,用于在判断出进程处于内核态的时间和进程处于用户态的时间的比值大于预设比值时,确定沙箱中当前执行的样本为花指令。
当一个任务(进程)执行系统调用而陷入内核代码中执行时,就称进程处于内核态。处于内核态时,执行的内核代码会使用当前进程的内核栈。当进程在执行用户自己的代码时,则称其处于用户态。在CPU的设计中,用户态下执行的代码被硬件限定,不能进行某些操作,比如写入其他进程的关联空间,以防止给操作系统带来安全隐患。在操作系统的设计中,内核禁止此状态下的代码进行潜在危险的操作,比如写入系统配置文件、杀掉其他用户的进程、重启系统等。
在本实施例中,花指令的特点是超高的CPU占用,并且对其他操作系统资源的需求几乎没有,为了使花指令有较好的通用性,花指令代码几乎不去调用操作系统API,而仅仅进行无用的寄存器操作。而一个正常的可执行程序,会频繁的调用操作系统接口,陷入内核。根据此特点,本实施例监控样本进程的ring 0(用户态)和ring 3(内核态)执行时间的占比来感知花指令的执行。
因此,当执行样本的进程处于内核态的时间和进程处于用户态的时间的比值大于预设比值时,确定沙箱中当前执行的样本为花指令。预设比例可以是普通应用程序的进程的处于内核态的时间和进程处于用户态的时间的比值,也就是说,当执行样本的进程处于内核态的时间和进程处于用户态的时间的比值高于正常值时,确定沙箱中当前执行的样本为花指令。
在一个具体的例子中,上述的样本为代码样本,上述的恶意事件为恶意代码,花指令为高CPU消耗型花指令。在沙箱中执行代码样本,该代码样本中包括花指令和恶意代码,恶意代码在花指令执行完毕后执行
可选地,确定单元包括:记录模块,用于在判断出当前在沙箱中执行的样本是花指令时,记录当前调用的指令寄存器;第一执行模块,用于从指令寄存器开始对花指令进行虚拟执行;第一确定模块,用于在对花指令进行虚拟执行的过程中再次调用指令寄存器时,将两次调用指令寄存器之间的指令序列作为属于花指令的指令序列。
挂起沙箱中执行花指令的进程,暂停执行花指令,并记录当前调用的指令寄存器。从当前调用的指令寄存器开始对花指令进行虚拟执行(此时沙箱已经暂停执行花指令)。由于花指令是高循环次数的循环,花指令会循环执行,当再次执行到记录的指令寄存器时,确定花指令完成一次循环,也就确定了属于花指令的指令序列,即两次调用指令寄存器之间的所虚拟执行的指令序列就是属于花指令的指令序列。在确定花指令的指令寄存器再次被调用时,停止对花指令的虚拟执行。
花指令内的指令所指向的目的地址可以是属于花指令的指令序列,也可能是不属于花指令的指令序列,由于恶意代码在花指令以外,在执行恶意代码时也要跳出花指令的循环,因此,本实施例需要查找的是目的地址不属于花指令的条件跳转指令,这样目的地址关联的代码才有可能是恶意代码,因此需要记录目的地址。在目的地址有多个的情况下,得到目的地址列表。在查找条件跳转指令的过程中,沙箱中的花指令还处于暂停执行的状态。
可选地,第二执行单元包括:设置模块,用于将指令寄存器的地址设置为目的地址;跳转模块,用于在沙箱中执行花指令并且调用指令寄存器时,跳转到目的地址来执行在目的地址的样本。
在确定属于花指令的指令序列时,挂起沙箱中执行花指令的进程,暂停执行花指令,并记录了指令寄存器。也就是说,沙箱中执行花指令的进程暂停在该指令寄存器处,当继续执行花指令时从该指令寄存器处继续执行。因此,将指令寄存器的地址设置为目的地址,在沙箱中继续执行花指令时,就会执行目的地址的样本,就实现了跳出花指令。
通常情况下,花指令中有一个条件跳转指令指向属于花指令的指令序列以外的一个目的地址,该目的地址的样本就是恶意代码,在跳出花指令执行目的地址的样本时就不需要执行耗时长且没有意义的花指令,直接执行恶意代码,从而避免了沙箱的时间限制所导致的恶意代码无法被执行的技术问题。
在某些情况下,花指令中有多个条件跳转指令指向属于花指令的指令序列以外的多个目的地址,这些目的地址中的至少一个地址的样本是恶意代码,因此,多次将指令寄存器的地址设置为多个目的地址,从而执行多个目的地址的样本时恶意代码就会执行,也可以实现跳过花指令来执行恶意代码。
例如,多个目的地址分别为目的地址1、目的地址2和目的地址3。先将指令寄存器的地址设置为目的地址1,在目的地址1关联的代码执行完毕后再将指令寄存器的地址设置为目的地址2,在目的地址2的样本执行完毕后再将指令寄存器的地址设置为目的地址3。
可选地,第二执行单元包括:修改模块,用于将条件跳转指令修改为目标指令,其中,目标指令的条件与条件跳转指令的条件相反;第二执行模块,用于在沙箱中执行花指令时执行目标指令所指示的条件来跳出花指令,并跳转到目的地址来执行在目的地址的样本。
由于花指令是高循环次数的循环,花指令的条件跳转指令指示在A条件下跳转到目的地址,在非A条件下不跳转到目的地址,在不出现A条件的情况下继续执行花指令的循环。因此,可以将条件跳转指令的条件进行修改,将“在A条件下跳转到目的地址,在非A条件下不跳转到目的地址”修改为“在非A条件下跳转到目的地址,在A条件下不跳转到目的地址”。通常花指令为了进行循环,都会重复出现非A条件,那么在修改为“在非A条件下跳转到目的地址”时,就会跳出花指令,跳转到目的地址来执行目的地址的样本。
相对多次设置指令寄存器的地址,直接将条件跳转指令的条件修改为相反的条件,提高了跳出花指令并跳转到目的地址的效率。
根据本发明实施例,还提供了一种用于实施上述样本的执行方法的终端,如图5所示,该终端主要包括处理器401、显示器403、数据接口405、存储器407和网络接口409,其中:
显示器403主要用于显示执行恶意事件后得到的结果。
数据接口405则主要通过数据传输的方式将第三方工具获取到的样本传输给处理器401。
存储器407主要用于存储样本。
网络接口409主要用于与服务器进行数据通信。
处理器401主要用于执行如下操作:在沙箱中执行样本;判断当前在所述沙箱中执行的样本是否为花指令;在判断出当前在所述沙箱中执行的样本是所述花指令时,确定当前在所述沙箱中执行的样本中属于所述花指令的指令序列;在所述指令序列中查找条件跳转指令,其中,所述条件跳转指令指向的目的地址在所述指令序列以外;跳出所述指令序列,并根据所述目的地址执行所述样本。
处理器401用于在判断出当前在所述沙箱中执行的样本是所述花指令时,记录当前调用的指令寄存器;从所述指令寄存器开始对所述花指令进行虚拟执行;在对所述指令序列进行虚拟执行的过程中再次调用所述指令寄存器时,将相邻两次调用的所述指令寄存器之间的指令序列作为所述属于花指令的指令序列。
处理器401用于在再次调用所述指令寄存器之后,停止对所述指令序列进行虚拟执行。
将所述指令寄存器的地址设置为所述目的地址;
处理器401还用于在所述沙箱中执行所述指令序列并且调用所述指令寄存器时,跳转到所述目的地址来执行所述样本。
处理器401还用于将所述条件跳转指令修改为目标指令,其中,所述目标指令的条件与所述条件跳转指令的条件相反;在所述沙箱中执行所述花指令时执行所述目标指令所指示的条件来跳出所述花指令,并跳转到所述目的地址来执行在所述目的地址的样本。
处理器401还用于监控执行所述样本的进程的用户态和内核态;判断所述进程处于内核态的时间和所述进程处于所述用户态的时间的比值是否大于预设比值;当判断出所述进程处于内核态的时间和所述进程处于所述用户态的时间的比值大于所述预设比值时,确定当前在所述沙箱中执行的样本是所述花指令。
处理器401还用于在所述沙箱中当前执行的样本为所述花指令时,并且在确定属于花指令的指令序列之前,所述方法还包括:暂停在所述沙箱中执行所述花指令。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于关联本发明实施例的样本的执行方法的程序代码。
可选地,在本实施例中,上述存储介质可以位于移动通信网络、广域网、城域网或局域网的网络中的多个网络设备中的至少一个网络设备。
可选地,在本实施例中,存储介质被设置为关联用于执行以下步骤的程序事件:
S1,在沙箱中执行样本。
S2,判断当前在沙箱中执行的样本是否为花指令。
S3,在判断出当前在所述沙箱中执行的样本是所述花指令时,确定当前在所述沙箱中执行的样本中属于所述花指令的指令序列。
S4,在所述指令序列中查找条件跳转指令,其中,所述条件跳转指令指向的目的地址在所述指令序列以外。
S5,跳出所述指令序列,并根据所述目的地址执行所述样本。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读关联器(ROM,Read-Only Memory)、随机存取关联器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以关联程序事件的介质。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以关联在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品关联在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。