CN109388948A - 一种基于虚拟化技术的潜在恶意软件分析方法及相关装置 - Google Patents
一种基于虚拟化技术的潜在恶意软件分析方法及相关装置 Download PDFInfo
- Publication number
- CN109388948A CN109388948A CN201811307879.9A CN201811307879A CN109388948A CN 109388948 A CN109388948 A CN 109388948A CN 201811307879 A CN201811307879 A CN 201811307879A CN 109388948 A CN109388948 A CN 109388948A
- Authority
- CN
- China
- Prior art keywords
- hook
- abnormal
- code page
- interrupt
- page
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Debugging And Monitoring (AREA)
- Storage Device Security (AREA)
Abstract
本申请公开了一种基于虚拟化技术的潜在恶意软件分析方法及相关装置,该方法包括:当运行在虚拟化环境中的程序出现异常中断时,判断异常中断是否为挂钩异常中断;若是,则确定挂钩异常中断的异常行为类型;当异常行为类型为读写权限异常时,将挂钩异常中断对应的EPT项替换为正常代码页,以便对正常代码页进行完整性检查;当异常行为类型为执行异常时,根据挂钩代码页的目标函数执行对应的代理函数得到程序数据,以便根据程序数据进行恶意软件分析。通过挂钩异常中断的类型将正常代码页替换回挂钩代码页,以便通过完整性检查,当执行挂钩代码页对应的代理函数时获取到程序数据,在完整性检查下实现了恶意软件分析,提高了分析效率。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种基于虚拟化技术的潜在恶意软件分析方法、潜在恶意软件分析装置、服务器以及计算机可读存储介质。
背景技术
随着信息技术的不断发展,恶意软件在网络安全领域中是一个巨大的威胁。每当恶意软件通过网络传播造成大爆发时,造成无数信息被泄漏与数据毁损。在与恶意软件的对抗过程中,大量的恶意软件采用了加密、混淆以及虚拟机保护技术进行逻辑代码的加密与反调试,为二进制分析人员带来了很大的弊端。
当前技术中,对系统中的系统描述符表进行挂钩操作,当程序运行到一些敏感函数时获取该程序的信息,通过这些程序信息可以实现对恶意程序的流程分析和函数调用分析。
但是,当前系统中引进了系统完整性检查,当对系统描述符表进行挂钩操作时,被挂钩的函数会被发现,造成软件退出或不运行需要分析的代码,无法对软件进行分析操作。现有技术中,还可以对系统完整性检查进行破解,但是会导致安全性隐患以及存在不稳定问题,在不同版本上KPP保护的算法都是不一致的很难做到通用性,由此极有可能引发对应的蓝屏问题。最终后果均是无法对软件的目标函数进行分析,换言之就是无法分析出恶意执行的软件程序。
因此,如何在系统完整性检查的情况下进行恶意软件分析是本领域技术人员关注的重点问题。
发明内容
本申请的目的是提供一种基于虚拟化技术的潜在恶意软件分析方法、潜在恶意软件分析装置、服务器以及计算机可读存储介质,通过挂钩异常中断的类型将正常代码页替换回挂钩代码页,以便通过完整性检查,当执行挂钩代码页对应的代理函数时获取到程序数据,在完整性检查下实现了恶意软件分析,提高了分析效率。
为解决上述技术问题,本申请提供一种基于虚拟化技术的潜在恶意软件分析方法,包括:
当运行在虚拟化环境中的程序出现异常中断时,判断所述异常中断是否为挂钩异常中断;其中,挂钩异常中断为对挂钩代码页设置的中断;
若是,则确定所述挂钩异常中断的异常行为类型;
当所述异常行为类型为读写权限异常时,将所述挂钩异常中断对应的EPT项替换为正常代码页,以便对所述正常代码页进行完整性检查;
当所述异常行为类型为执行异常时,根据所述挂钩代码页的目标函数执行对应的代理函数得到程序数据,以便根据所述程序数据进行恶意软件分析。
可选的,根据所述挂钩代码页的目标函数执行对应的代理函数得到程序数据之后,还包括:
获取执行所述代理函数的跳转偏移量;
根据所述跳转偏移量将代码执行指针跳转到所述目标函数,以便执行所述程序的正常流程。
可选的,当出现异常中断之前还包括:
根据所述目标函数所在的原代码页创建只具有读写权限的代码页,作为所述正常代码页。
可选的,当出现异常中断之前还包括:
根据所述目标函数所在的原代码页创建只具有执行权限的代码页,作为所述挂钩代码页;
对所述挂钩代码页的所述目标函数设置执行异常断点;
将所述目标函数所在的原代码页对应的EPT项替换为所述挂钩代码页。
可选的,将所述挂钩异常中断对应的EPT项替换为正常代码页之后,还包括:
当单步执行完一条代码后,将所述挂钩异常中断对应的EPT项替换为挂钩代码页。
本申请还提供一种基于虚拟化技术的潜在恶意软件分析装置,包括:
异常中断判断模块,用于当运行在虚拟化环境中的程序出现异常中断时,判断所述异常中断是否为挂钩异常中断;
异常行为类型获取模块,用于当所述异常中断为挂钩异常中断时,确定所述挂钩异常中断的异常行为类型;
检测规避模块,用于当所述异常行为类型为读写权限异常时,将所述挂钩异常中断对应的EPT项替换为正常代码页,以便对所述正常代码页进行完整性检查;
挂钩分析模块,用于当所述异常行为类型为执行异常时,根据所述挂钩代码页的目标函数执行对应的代理函数得到程序数据,以便根据所述程序数据进行恶意软件分析。
可选的,还包括:
跳转偏移获取模块,用于当根据所述挂钩代码页的目标函数执行对应的代理函数得到所述程序数据之后,获取执行所述代理函数的跳转偏移量;
原函数跳转模块,用于根据所述跳转偏移量将代码执行指针跳转到所述目标函数,以便执行所述程序的正常流程。
可选的,还包括:
挂钩页恢复模块,用于当对应的EPT项被替换为正常代码页并单步执行完一条代码后,将所述挂钩异常中断对应的EPT项替换为挂钩代码页。
本申请还提供一种服务器,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上所述的潜在恶意软件分析方法的步骤。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的潜在恶意软件分析方法的步骤。
本申请所提供的一种基于虚拟化技术的潜在恶意软件分析方法,包括:当运行在虚拟化环境中的程序出现异常中断时,判断所述异常中断是否为挂钩异常中断;其中,挂钩异常中断为对挂钩代码页设置的中断;若是,则确定所述挂钩异常中断的异常行为类型;当所述异常行为类型为读写权限异常时,将所述挂钩异常中断对应的EPT项替换为正常代码页,以便对所述正常代码页进行完整性检查;当所述异常行为类型为执行异常时,根据所述挂钩代码页的目标函数执行对应的代理函数得到程序数据,以便根据所述程序数据进行恶意软件分析。
通过对在虚拟化环境中运行的程序的挂钩代码页设置相应的挂钩异常中断,当程序运行到该挂钩异常中断时,跳出虚拟机环境并判断该挂钩异常中断的异常行为类型是读写权限异常,还是执行异常,如果是读写权限异常就将页面替换为正常代码页,将挂钩代码页进行隐藏,以便使检查结果正常,避免触发软件或系统的防护机制,如果是执行异常那么就可以直接执行相应的代理函数,获取到对应的程序数据,以便根据程序数据对该程序进行分析,实现了在系统完整性检查的情况下对程序进行挂钩分析,避免了对防护机制进行破解操作,提高了挂钩分析的使用范围,提高了恶意软件分析的效率。
本申请还提供一种基于虚拟化技术的潜在恶意软件分析装置、服务器以及计算机可读存储介质,具有以上有益效果,在此不做赘述。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例所提供的一种基于虚拟化技术的潜在恶意软件分析方法的流程图;
图2为本申请实施例所提供的另一种潜在恶意软件分析方法的流程图;
图3为本申请实施例所提供的还一种潜在恶意软件分析方法的流程图;
图4为本申请实施例所提供的一种基于虚拟化技术的潜在恶意软件分析装置的结构示意图。
具体实施方式
本申请的核心是提供一种基于虚拟化技术的潜在恶意软件分析方法、潜在恶意软件分析装置、服务器以及计算机可读存储介质,通过挂钩异常中断的类型将正常代码页替换回挂钩代码页,以便通过完整性检查,当执行挂钩代码页对应的代理函数时获取到程序数据,在完整性检查下实现了恶意软件分析,提高了分析效率。
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
当前的技术中,面对系统的完整性检查或者是软件自身的完整性检查的防护机制,一般都是对该防护机制进行破解使其失效,再进行正常的挂钩操作进行软件分析。但是,对防护机制进行破解很都可能带来不稳定的情况,例如,如果对内核代码完整性校验进行破解,会造成系统蓝屏等严重问题,如果是对软件级别的防护机制进行破解,有可能是软件退出或不运行需要分析的代码。以上情况无论大小均会造成挂钩分析操作的失败,导致无法对目标软件进行分析,换言之就是无法分析出恶意执行的软件程序。
因此,本申请实施例提供一种基于虚拟化技术的潜在恶意软件分析方法,通过对在虚拟化环境中运行的程序的挂钩代码页设置相应的挂钩异常中断,当程序运行到该挂钩异常中断时,跳出虚拟机环境并判断该挂钩异常中断的异常行为类型是读写权限异常,还是执行异常,如果是读写权限异常就将页面替换为正常代码页,将挂钩代码页进行隐藏,以便使检查结果正常,避免触发软件或系统的防护机制,如果是执行异常那么就可以直接执行相应的代理函数,获取到对应的程序数据,以便根据程序数据对该程序进行分析,实现了在系统完整性检查的情况下对程序进行挂钩分析,避免了对防护机制进行破解操作,提高了挂钩分析的使用范围,提高了恶意软件分析的效率。
请参考图1,图1为本申请实施例所提供的一种基于虚拟化技术的潜在恶意软件分析方法的流程图。
该方法可以包括:
S101,当运行在虚拟化环境中的程序出现异常中断时,判断异常中断是否为挂钩异常中断;其中,挂钩异常中断为对挂钩代码页设置的中断;若是,则执行S102,若否,则执行S105;
本步骤旨在当虚拟化环境中运行的程序出现异常中断时,判断该异常中断是否为挂钩异常中断。由于虚拟化环境中运行的程序有可能在各种情况下出现异常中断情况,有可能是程序本身的异常中断请求,因此当产生异常中断时需要判断是否为预先设置的与挂钩代码页相关的中断,换句话说就是判断是否为执行挂钩分析需要的中断。
其中,判断方法可以是根据预存的挂钩异常中断表中的地址和该异常中断的地址进行对比,如果挂钩异常中断表中存在相同的,那么则表示该异常中断为挂钩异常中断。由于挂钩异常中断是为挂钩代码页设置的,那么当运行到该挂钩异常中断时就代表接下来要运行挂钩代码页。
因此,本步骤中主要是当程序运行到挂钩代码页时,从虚拟机环境中跳到实体机环境中,判断此时是因为代码检查而触发挂钩异常中断,还是因为正常执行代码而触发挂钩异常中断,也就是该挂钩异常中断的不同异常行为类型,再根据不同的异常行为类型执行对应的操作,以避免触发防护机制。换句话说就是当程序检查到或运行到被修改的代码页,也就是被挂钩的代码时,从虚拟机环境中跳到实体机环境中,再进行检查规避操作或执行代理函数。由于实体机环境对于虚拟环境中的程序来说是完全隐藏的,所以在实体机环境中对程序的代码页进行修改可以避免被虚拟环境中的防护机制发现,从而实现对程序运行的分析。
可见,本实施例中的软件需要运行在虚拟化环境中。因此,该软件可以是直接运行的在虚拟化环境中的,还可以是未运行在虚拟化环境中,那么就是构建虚拟换环境从而让该软件运行在该环境中。
S102,确定挂钩异常中断的异常行为类型;
在步骤S101的基础上,本步骤旨在当该异常中断为挂钩异常中断时确定该挂钩异常中断的异常行为类型。其中,在本实施例中对挂钩代码页设置的挂钩异常中断的异常行为类型可以有两种,一种是当防护机制检查到该挂钩代码页触发的中断,对应的异常行为类型是读写权限异常,还有一种是当执行到该挂钩代码页触发的中断,对应的异常行为类型是执行异常。
本实施例中为了达到以上两种异常行为类型,可以有不同的异常设置方式,只要可以区分以上两种挂钩异常中断的设置方式,都可以作为本步骤中的设置方式,在此不做具体限定。
具体的,本实施例可以提供一种具体的设置方式,如下:
第一个异常行为类型,通过在挂钩代码页中的目标函数上设置执行异常断点,例如int3断点,当执行到该int3断点时,出现执行异常(异常代码一般为#BP),引发挂钩异常中断,并且可以通过断点的类型判断该挂钩异常中断的异常行为类型,即执行异常。
第二个异常行为类型,通过将挂钩代码页在EPT中的页面属性设置的权限设置为只能执行,当对该挂钩代码页进行完整性检查的读写操作时,就会出现读写权限异常(异常代码一般为EptVolation),从而引发挂钩异常中断。并且,在系统或软件中进行的完整性检查都会对代码页进行读写操作,因此就可以通过对代码页的权限控制,而判断出此时的程序运行是完整性检查还是执行操作。
S103,当异常行为类型为读写权限异常时,将挂钩异常中断对应的EPT项替换为正常代码页,以便对正常代码页进行完整性检查;
在步骤S102的基础上,本步骤旨在当异常行为类型为读写权限异常时,将挂钩异常中断对应的EPT项替换为正常代码页,以便对正常代码页进行完整性检查,避免触发防护机制。换句话说,本步骤的主要目的就是绕过虚拟化环境中的防护机制。其中,将对应的EPT项替换为正常代码页,具体是将该挂钩异常中断的地址所指的页面对应的EPT项替换为正常代码页。
其中,在虚拟化环境中将同一个物理内存为多个虚拟机共享,为了虚拟机中的系统和程序运行正常,不能让虚拟机直接访问物理地址,因此,就对虚拟机采用了虚拟地址,其中,EPT(Extended Page Tables扩展页表)就是在于加速从虚拟机中的地址到主机物理地址的转换过程,节省传统软件处理方式的开销。换句话说,相当于EPT记录了虚拟机地址到主机物理地址的关系,可以通过替换EPT中的地址,而改变所执行的函数。
因此,本步骤中当确定异常行为类型为读写权限异常时,将该挂钩异常中断对应的EPT项替换为正常代码页,从而使在虚拟化环境中的检测过程对正常代码页进行检测,从而避免了触发虚拟机环境中无论是系统还是程序的防护机制,使得系统或软件可以正常运行。
其中,正常代码页是复制的挂钩异常中断地址所指的原代码页,也就是需要进行挂钩分析的目标函数所在的原代码页。为了防止该正常代码页被执行,而需要挂钩的代码页无法被执行,通常在EPT中将其的权限设置为只能读写。当该正常代码页被执行时,会出现执行权限异常,引发相应的中断,而从虚拟环境中跳出到实体机环境中,对此可以修改对应的EPT项,替换为挂钩代码页,从而实现对程序的挂钩分析。
S104,当异常行为类型为执行异常时,根据挂钩代码页的目标函数执行对应的代理函数得到程序数据,以便根据程序数据进行恶意软件分析;
在步骤S102的基础上,本步骤旨在当异常行为类型为执行异常时,根据挂钩代码页的目标函数执行对应的代理函数得到程序数据,以便根据程序数据进行恶意软件分析。
需要说明的是,本步骤中的挂钩异常中断是对应的EPT项被替换挂钩代码页中的执行异常断点所引发的。因此,本实施例中在程序运行时,程序中的目标函数所在的页面对应的EPT项就被替换为了对应的挂钩代码页,再通过对挂钩代码页设置执行异常断点和页面权限,实现在执行和检查过程中的不同的异常中断,进而再在实体机环境针对不同的异常中断进行处理,实现规避检查和挂钩分析。
其中,挂钩代码页是在正常代码页的基础上,添加执行异常断点和设置页面权限后得到的。通过执行异常断点就可以跳出虚拟环境,进而执行代理函数获取到程序数据,以便进行恶意软件分析。其中,获取挂钩代码页的方法可以参考现有技术提供的任意一种函数挂钩方法,在此不做具体限定。
可选的,一般执行完代理函数后还需要返回原函数,因此本步骤还可以包括:
步骤1、获取执行代理函数的跳转偏移量;
步骤2、根据跳转偏移量将代码执行指针跳转到目标函数,以便执行程序的正常流程。
本可选方案主要是通过执行代理函数所跳转的跳转偏移量,将代码执行指针跳转回原函数,也就是目标函数,以便继续执行该程序的正常流程。
S105,执行异常中断。
在步骤S101判断该异常中断不是挂钩异常中断的基础上,说明目前执行的代码不是被挂钩修改后的代码,可以继续执行中断,不需要做其他操作。
综上所述,本实施例提供一种基于虚拟化技术的潜在恶意软件分析方法,通过对在虚拟化环境中运行的程序的挂钩代码页设置相应的挂钩异常中断,当程序运行到该挂钩异常中断时,跳出虚拟机环境并判断该挂钩异常中断的异常行为类型是读写权限异常,还是执行异常,如果是读写权限异常就将页面替换为正常代码页,将挂钩代码页进行隐藏,以便使检查结果正常,避免触发软件或系统的防护机制,如果是执行异常那么就可以直接执行相应的代理函数,获取到对应的程序数据,以便根据程序数据对该程序进行分析,实现了在系统完整性检查的情况下对程序进行挂钩分析,避免了对防护机制进行破解操作,提高了挂钩分析的使用范围,提高了恶意软件分析的效率。
在上一实施例的基础上,本实施例主要是对上一实施例的前期准备做补充说明。本实施例通过构建虚拟化环境,将程序运行在虚拟化环境中并且对想要挂钩的函数构建正常代码页和挂钩代码页,以便利用正常代码页规避完整性检查,通过挂钩代码页对程序进行分析。
请参考图2,图2为本申请实施例所提供的另一种潜在恶意软件分析方法的流程图。
该方法可以包括:
S201,构建虚拟化环境,将程序运行在虚拟化环境中;
S202,根据目标函数所在的原代码页创建只具有读写权限的代码页,作为正常代码页;
S203,根据目标函数所在的原代码页创建只具有执行权限的代码页,作为挂钩代码页;
S204,对挂钩代码页的目标函数设置执行异常断点;
S205,将目标函数所在的原代码页对应的EPT项替换为挂钩代码页;
S206,当运行在虚拟化环境中的程序出现异常中断时,判断异常中断是否为挂钩异常中断;若是,则执行S207;若否,则执行S210;
S207,确定挂钩异常中断的异常行为类型;
S208,当异常行为类型为读写权限异常时,将挂钩异常中断对应的EPT项替换为正常代码页,以便对正常代码页进行完整性检查;
S209,当异常行为类型为执行异常时,根据挂钩代码页的目标函数执行对应的代理函数得到程序数据,以便根据程序数据进行恶意软件分析;
S210,执行异常中断。
本实施例主要是补充说明可以执行的前期准备过程,主要是包括构建虚拟化环境,创建正常代码页和挂钩代码页,以及将挂钩代码页设置到目标函数页面对应的EPT项中。
其中,S201主要是设置虚拟化环境,S202主要是创建正常代码页,S203至S205主要是创建挂钩代码页并对挂钩代码页进行设置。需要说明的是,不对S202与S203至S205执行的先后进行限定,也就是说执行顺序可以是任意一种执行顺序,在此不做具体限定。
其中,S201还可以具体如下:
1、首先测试平台是否支持安装虚拟化与操作系统和CPU硬件是否支持虚拟化;
2、分配初始化一个sharedata(共享数据对象名称)共享数据结构体:
a)其中包括初始化msr(寄存器名称)寄存器;
b)初始化IO(输入输出)位图;
3、获取MTRR(Memory Type Range Register存储区域类型寄存器)内存类型范围寄存器值:
a)读取所有的MTRR寄存器并且保存;
b)读取MTRR基地址并且计算该MTRR管理器范围;
4、虚拟化CPU(Central Processing Unit中央处理器):
a)获取所有物理CPU数量;
b)切换到每一个物理核心上并且设置线程亲和性;
c)为每一个核心设置虚拟化;
d)为当前核心分配一个guest(虚拟机)虚拟机堆栈;
e)填充vmm(Virtual Machine Monitor虚拟机监控器)数据结构体;
f)构建EPT页表并且映射到物理内存中;
g)进入VMX(Virtual-Machine Extensions虚拟机扩展)领域并且设置初始化VMCS(VIrtual Machine Structure虚拟机控制结构);
h)设置需要关注的异常比如(#BP)并且激活VMCS;
i)启动虚拟化。
本实施例通过在程序运行前,将程序中的目标函数所在的页面对应的EPT项就替换为了对应的挂钩代码页,再通过对挂钩代码页设置执行异常断点和页面权限,实现在执行和检查过程中的不同的异常中断,进而再在实体机环境针对不同的异常中断进行处理,实现规避检查和挂钩分析。
在以上所有实施例的基础上,本实施例主要是提高图1所示的实施例的可复用性。通过本实施例在触发MTF标志位后,再将EPT表项替换为挂钩代码页,实现下一次执行到该位置时可以继续根据异常行为类型选择执行挂钩代码页或规避检查,对规避过程可以实现复用。
请参考图3,图3为本申请实施例所提供的还一种潜在恶意软件分析方法的流程图。
该方法可以包括:
S301,当运行在虚拟化环境中的程序出现异常中断时,判断异常中断是否为挂钩异常中断;若是,则执行S302;若否,则执行S306;
S302,确定挂钩异常中断的异常行为类型;
S303,当异常行为类型为读写权限异常时,将挂钩异常中断对应的EPT项替换为正常代码页,以便对正常代码页进行完整性检查;
S304,当单步执行完一条代码后,将挂钩异常中断对应的EPT项替换为挂钩代码页;
S305,当异常行为类型为执行异常时,根据挂钩代码页的目标函数执行对应的代理函数得到程序数据,以便根据程序数据进行恶意软件分析;
S306,执行异常中断。
本实施例通过S304在单步执行完一条代码后,将对应的EPT项替换为挂钩代码页,使得当对该正常代码页检查完毕后可以对挂钩代码页进行执行,进而实现对程序的挂钩分析。并且,将对应的RPT项替换回挂钩代码页,可以使后续再执行到此处时,还可以引发异常中断并执行对应的操作,无论在什么时间点执行,循环执行多少次,在该目标函数都可以出现异常中断,相当于保持了挂钩代码页的挂钩。
在以上所有实施例的基础上,本实施例提供一种更加具体的潜在恶意软件分析方法,如下:
步骤1、获取内核基地址;
步骤2、根据基地址分析模块PE(Portable Executable可执行文件)结构从而获取导出表;
步骤3、对比导出表中的函数地址与想要挂钩的地址看是否命中;
步骤4、如果命中,则执行:a)判断该地址在之前保存的链表中有没有记录,如果已经被HOOK就直接复用之前创建的页面;b)如果没有,则创建一个只有读写权限的页面和一个只有执行权限的页面,并且保存下来;c)获取原有需要被补丁地址的长度并且在之后设置跳板函数;d)设置具有执行权限的页面上该函数地址为0xCC int3断点;
步骤5、调用VMCall(引发VMExit的事件)退出VMM状态,将HOOK(挂钩)函数所在页面的EPT项替换为shadow_exec(挂钩代码页、可执行页面)
步骤6、当函数被调用时就会触发#BP,相应的VM_EXIT(退出事件)退回VMM状态时就可以修改虚拟机代码执行指针,替换到被挂钩函数(代理函数)上,当挂钩函数执行完再调用原函数;
步骤7、当进行读或者写时就会触发EptVolation(异常代码),VM_EXIT到VMM状态,那么这个时候将函数所在的EPT项替换为读写页面(可读可写可执行,代码没有被挂钩过),以便规避完整性检查;
步骤8、所以在替换只有读写权限的的物理页的同时,还设置了VmcsField::kCpuBasedVmExecControl(指令名称)域里面的一个标志位叫做MTF(Monitor Trap Flag标志位),这个标志位的作用是单步执行完一条代码之后触发一次VM_EXIT(reason:MonitorTrapFlag),既可以在该VMM执行事件中将HOOK点所在的读写页面替换为只有写权限的0xcc所在物理页(挂钩代码页),以便保持该HOOK点。
步骤9、挂钩函数将会记录调用栈以及调用者信息并且保存下来,通过记录的信息就可以整理得到被分析目标程序对于函数的调用流程,以便进行恶意软件分析。
本实施例提供一种基于虚拟化技术的潜在恶意软件分析方法,通过对在虚拟化环境中运行的程序的挂钩代码页设置相应的挂钩异常中断,当程序运行到该挂钩异常中断时,跳出虚拟机环境并判断该挂钩异常中断的异常行为类型是读写权限异常,还是执行异常,如果是读写权限异常就将页面替换为正常代码页,将挂钩代码页进行隐藏,以便使检查结果正常,避免触发软件或系统的防护机制,如果是执行异常那么就可以直接执行相应的代理函数,获取到对应的程序数据,以便根据程序数据对该程序进行分析,实现了在系统完整性检查的情况下对程序进行挂钩分析,避免了对防护机制进行破解操作,提高了挂钩分析的使用范围,提高了恶意软件分析的效率。
下面对本申请实施例提供的一种基于虚拟化技术的潜在恶意软件分析装置进行介绍,下文描述的一种基于虚拟化技术的潜在恶意软件分析装置与上文描述的一种基于虚拟化技术的潜在恶意软件分析方法可相互对应参照。
请参考图4,图4为本申请实施例所提供的一种基于虚拟化技术的潜在恶意软件分析装置的结构示意图。
该装置可以包括:
异常中断判断模块100,用于当运行在虚拟化环境中的程序出现异常中断时,判断异常中断是否为挂钩异常中断;
异常行为类型获取模块200,用于当异常中断为挂钩异常中断时,确定挂钩异常中断的异常行为类型;
检测规避模块300,用于当异常行为类型为读写权限异常时,将挂钩异常中断对应的EPT项替换为正常代码页,以便对正常代码页进行完整性检查;
挂钩分析模块400,用于当异常行为类型为执行异常时,根据挂钩代码页的目标函数执行对应的代理函数得到程序数据,以便根据程序数据进行恶意软件分析。
可选的,该装置还可以包括:
跳转偏移获取模块,用于当根据挂钩代码页的目标函数执行对应的代理函数得到程序数据之后,获取执行代理函数的跳转偏移量;
原函数跳转模块,用于根据跳转偏移量将代码执行指针跳转到目标函数,以便执行程序的正常流程。
可选的,该装置还可以包括:
挂钩页恢复模块,用于当对应的EPT项被替换为正常代码页并单步执行完一条代码后,将挂钩异常中断对应的EPT项替换为挂钩代码页。
本申请实施例还提供一种服务器,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如以上实施例所述的潜在恶意软件分析方法的步骤。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如以上实施例所述的潜在恶意软件分析方法的步骤。
该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本申请所提供的一种基于虚拟化技术的潜在恶意软件分析方法、潜在恶意软件分析装置、服务器以及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
Claims (10)
1.一种基于虚拟化技术的潜在恶意软件分析方法,其特征在于,包括:
当运行在虚拟化环境中的程序出现异常中断时,判断所述异常中断是否为挂钩异常中断;其中,挂钩异常中断为对挂钩代码页设置的中断;
若是,则确定所述挂钩异常中断的异常行为类型;
当所述异常行为类型为读写权限异常时,将所述挂钩异常中断对应的EPT项替换为正常代码页,以便对所述正常代码页进行完整性检查;
当所述异常行为类型为执行异常时,根据所述挂钩代码页的目标函数执行对应的代理函数得到程序数据,以便根据所述程序数据进行恶意软件分析。
2.根据权利要求1所述的潜在恶意软件分析方法,其特征在于,根据所述挂钩代码页的目标函数执行对应的代理函数得到程序数据之后,还包括:
获取执行所述代理函数的跳转偏移量;
根据所述跳转偏移量将代码执行指针跳转到所述目标函数,以便执行所述程序的正常流程。
3.根据权利要求1所述的潜在恶意软件分析方法,其特征在于,当出现异常中断之前还包括:
根据所述目标函数所在的原代码页创建只具有读写权限的代码页,作为所述正常代码页。
4.根据权利要求1所述的潜在恶意软件分析方法,其特征在于,当出现异常中断之前还包括:
根据所述目标函数所在的原代码页创建只具有执行权限的代码页,作为所述挂钩代码页;
对所述挂钩代码页的所述目标函数设置执行异常断点;
将所述目标函数所在的原代码页对应的EPT项替换为所述挂钩代码页。
5.根据权利要求1至4任一项所述的潜在恶意软件分析方法,其特征在于,将所述挂钩异常中断对应的EPT项替换为正常代码页之后,还包括:
当单步执行完一条代码后,将所述挂钩异常中断对应的EPT项替换为挂钩代码页。
6.一种基于虚拟化技术的潜在恶意软件分析装置,其特征在于,包括:
异常中断判断模块,用于当运行在虚拟化环境中的程序出现异常中断时,判断所述异常中断是否为挂钩异常中断;
异常行为类型获取模块,用于当所述异常中断为挂钩异常中断时,确定所述挂钩异常中断的异常行为类型;
检测规避模块,用于当所述异常行为类型为读写权限异常时,将所述挂钩异常中断对应的EPT项替换为正常代码页,以便对所述正常代码页进行完整性检查;
挂钩分析模块,用于当所述异常行为类型为执行异常时,根据所述挂钩代码页的目标函数执行对应的代理函数得到程序数据,以便根据所述程序数据进行恶意软件分析。
7.根据权利要求6所述的潜在恶意软件分析装置,其特征在于,还包括:
跳转偏移获取模块,用于当根据所述挂钩代码页的目标函数执行对应的代理函数得到所述程序数据之后,获取执行所述代理函数的跳转偏移量;
原函数跳转模块,用于根据所述跳转偏移量将代码执行指针跳转到所述目标函数,以便执行所述程序的正常流程。
8.根据权利要求6或7所述的潜在恶意软件分析装置,其特征在于,还包括:
挂钩页恢复模块,用于当对应的EPT项被替换为正常代码页并单步执行完一条代码后,将所述挂钩异常中断对应的EPT项替换为挂钩代码页。
9.一种服务器,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至5任一项所述的潜在恶意软件分析方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至5任一项所述的潜在恶意软件分析方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811307879.9A CN109388948B (zh) | 2018-11-05 | 2018-11-05 | 一种基于虚拟化技术的潜在恶意软件分析方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811307879.9A CN109388948B (zh) | 2018-11-05 | 2018-11-05 | 一种基于虚拟化技术的潜在恶意软件分析方法及相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109388948A true CN109388948A (zh) | 2019-02-26 |
CN109388948B CN109388948B (zh) | 2021-02-26 |
Family
ID=65428355
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811307879.9A Active CN109388948B (zh) | 2018-11-05 | 2018-11-05 | 一种基于虚拟化技术的潜在恶意软件分析方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109388948B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111259379A (zh) * | 2020-01-13 | 2020-06-09 | 中孚安全技术有限公司 | 一种沙盒分析恶意程序的方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101114323A (zh) * | 2006-07-28 | 2008-01-30 | 上海山丽信息安全有限公司 | 监控键盘钩子的装置 |
US20140195791A1 (en) * | 2013-01-08 | 2014-07-10 | Symantec, Inc. | Methods and systems for instant restore of system volume |
CN103955438A (zh) * | 2014-05-21 | 2014-07-30 | 南京大学 | 基于硬件辅助虚拟化技术的进程内存保护方法 |
CN104809401A (zh) * | 2015-05-08 | 2015-07-29 | 南京大学 | 一种操作系统内核完整性保护方法 |
CN107203716A (zh) * | 2017-05-03 | 2017-09-26 | 中国科学院信息工程研究所 | 一种Linux内核轻量级结构化保护方法及装置 |
CN107797895A (zh) * | 2017-05-08 | 2018-03-13 | 中国人民解放军国防科学技术大学 | 一种虚拟机安全监控方法及系统 |
-
2018
- 2018-11-05 CN CN201811307879.9A patent/CN109388948B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101114323A (zh) * | 2006-07-28 | 2008-01-30 | 上海山丽信息安全有限公司 | 监控键盘钩子的装置 |
US20140195791A1 (en) * | 2013-01-08 | 2014-07-10 | Symantec, Inc. | Methods and systems for instant restore of system volume |
CN103955438A (zh) * | 2014-05-21 | 2014-07-30 | 南京大学 | 基于硬件辅助虚拟化技术的进程内存保护方法 |
CN104809401A (zh) * | 2015-05-08 | 2015-07-29 | 南京大学 | 一种操作系统内核完整性保护方法 |
CN107203716A (zh) * | 2017-05-03 | 2017-09-26 | 中国科学院信息工程研究所 | 一种Linux内核轻量级结构化保护方法及装置 |
CN107797895A (zh) * | 2017-05-08 | 2018-03-13 | 中国人民解放军国防科学技术大学 | 一种虚拟机安全监控方法及系统 |
Non-Patent Citations (2)
Title |
---|
吴晨: "一种虚拟化恶意程序检测系统的实现", 《西安邮电学院学报》 * |
李湘宁: "基于虚拟化的恶意代码检测技术研究与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111259379A (zh) * | 2020-01-13 | 2020-06-09 | 中孚安全技术有限公司 | 一种沙盒分析恶意程序的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109388948B (zh) | 2021-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
ES2732876T3 (es) | Sistemas y métodos para proporcionar como salida un resultado de una instrucción de procesador vigente tras su salida de una máquina virtual | |
Cheng et al. | ROPecker: A generic and practical approach for defending against ROP attack | |
Kemerlis et al. | {kGuard}: Lightweight kernel protection against {Return-to-User} attacks | |
CN109923546B (zh) | 虚拟机安全性应用程序的事件过滤 | |
US7996836B1 (en) | Using a hypervisor to provide computer security | |
Dolan-Gavitt et al. | Virtuoso: Narrowing the semantic gap in virtual machine introspection | |
CN105393229B (zh) | 虚拟机中的页面错误注入 | |
JP2016526730A (ja) | 仮想マシンにおけるマルウェア検出のためのプロセス評価 | |
Wu et al. | System call redirection: A practical approach to meeting real-world virtual machine introspection needs | |
CN106970823B (zh) | 高效的基于嵌套虚拟化的虚拟机安全保护方法及系统 | |
CN106897121B (zh) | 一种基于虚拟化技术的无代理客户机进程防护方法 | |
US20170103206A1 (en) | Method and apparatus for capturing operation in a container-based virtualization system | |
CN106201872A (zh) | 一种Android系统的运行环境检测方法 | |
CN104715202B (zh) | 一种虚拟机中的隐藏进程检测方法和装置 | |
More et al. | Virtual machine introspection: towards bridging the semantic gap | |
Ding et al. | HyperVerify: A VM-assisted architecture for monitoring hypervisor non-control data | |
CN107368739B (zh) | 一种内核驱动的监视方法和装置 | |
Wang et al. | Rsds: Getting system call whitelist for container through dynamic and static analysis | |
CN109388948A (zh) | 一种基于虚拟化技术的潜在恶意软件分析方法及相关装置 | |
CN115292708A (zh) | 基于字节码的执行权限分析方法及装置 | |
WO2019237863A1 (zh) | 一种非立即数跳转的保护方法及对应计算装置 | |
Ahmed et al. | Rule-based integrity checking of interrupt descriptor tables in cloud environments | |
Moriyama et al. | Performance improvement and evaluation of function for tracing diffusion of classified information on KVM | |
Chyłek | Emulation based software reliability evaluation and optimization | |
Qiang et al. | CloudController: a writable and heterogeneous-adaptive virtual machine introspection for cloud management |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |