CN113391873B - 基于虚拟机的行为采集方法、虚拟机、装置及存储介质 - Google Patents
基于虚拟机的行为采集方法、虚拟机、装置及存储介质 Download PDFInfo
- Publication number
- CN113391873B CN113391873B CN202010167031.1A CN202010167031A CN113391873B CN 113391873 B CN113391873 B CN 113391873B CN 202010167031 A CN202010167031 A CN 202010167031A CN 113391873 B CN113391873 B CN 113391873B
- Authority
- CN
- China
- Prior art keywords
- function
- breakpoint
- address
- virtual machine
- preset
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- 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/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45591—Monitoring or debugging support
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Health & Medical Sciences (AREA)
- Quality & Reliability (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于虚拟机的行为采集方法,包括以下步骤:获取待设置断点的预设函数对应的内存地址,在所述内存地址对预设函数设置断点回调函数,而后若检测到断点回调函数执行,确定当前进程是否为待监测进程,接下来若确定当前进程为待监测进程,获取预设函数的返回地址,在返回地址设置返回地址断点回调函数以及断点附属信息,最后若检测到返回地址断点回调函数执行,基于断点附属信息对预设函数进行解析并保存解析结果。本发明还公开了一种装置、虚拟机及存储介质。通过获取预设函数地址,进而设置断点,并通过在预设函数的返回地址设置断点,从而获取预设函数的输出结果,进而实现了对预设函数行为特征的采集。
Description
技术领域
本发明涉及机器学习技术领域,尤其涉及一种基于虚拟机的行为采集方法、虚拟机、装置及存储介质。
背景技术
随着移动办公、区块链、物联网的兴起,新病毒及其变种开始泛滥,极具破坏性。要解决新病毒及其变种的问题,不仅需要获知其静态特征,还需要对其行为等动态特征进行捕获。静态分析对病毒的检测,往往会遇到病毒文件加壳混淆的对抗问题,并且原始代码被加密,导致检测失败、查杀误报或者漏报较高。动态行为分析则可解决静态检测的不足。恶意软件具有特定的行为特征,沙箱技术通过模拟一个完整的执行环境,为程序提供隔离运行环境,可对恶意软件进行行为获取、特征提取,很好的解决了加壳混淆的问题。沙箱根据观测结果可判断一个程序或者文件是否为恶意的病毒、木马、漏洞攻击等恶意软件。
沙箱虽然已趋于成熟,但传统沙箱(基于容器)主要采用重定向技术(hook或者系统的重定向接口),在恶意样本对系统、第三方接口进行调用请求的时候拦截其操作,记录操作内容,并依据传递的参数与上下文运行环境,判断该行为是否合法。此类沙箱的安全性及检测效果会受到样本行为的影响。因为当前恶意软件已具备先进的反调试和监控能力,可轻易绕过沙箱的检测。例如,在样本检测到被监控时,则直接不执行恶意行为,或者检测到监控程序以后对监控程序进行绕过处理,然后对系统进程恶意攻击。恶意软件的反监控技术给行为提取和样本分析提出了巨大挑战。如果不能解决此问题,难以对样本进行行为特征的抽取。
上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
发明内容
本发明的主要目的在于提供一种基于虚拟机的行为采集方法、虚拟机、装置及存储介质,旨在解决现有沙箱技术无法对带反监控技术的恶意软件,进行行为特征抽取的技术问题。
为实现上述目的,本发明提供一种基于虚拟机的行为采集方法,所述的基于虚拟机的行为采集方法包括以下步骤:
获取待设置断点的预设函数对应的内存地址,在所述内存地址对所述预设函数设置断点回调函数;
若检测到所述断点回调函数执行,确定当前进程是否为待监测进程;
若确定所述当前进程为待监测进程,获取所述预设函数的返回地址,在所述返回地址设置返回地址断点回调函数以及返回地址断点附属信息;
若检测到所述返回地址断点回调函数执行,基于所述断点附属信息对所述预设函数进行解析并保存解析结果。
进一步地,在一实施方式中,所述预设函数为系统函数,所述获取待设置断点的预设函数对应的内存地址的步骤包括:
基于预设的内核符号表文件获取所述系统函数的偏移地址;
获取所述虚拟机的内核基址,基于所述内核基址以及所述偏移地址,计算得到所述预设函数对应的内存地址。
进一步地,在一实施方式中,所述预设函数为共享库的库函数,所述获取待设置断点的预设函数对应的内存地址的步骤包括:
获取所述当前进程对应的进程数据,基于所述进程数据确定共享库的库文件;
对所述共享库的库文件进行解析,基于解析结果确定所述库函数对应的内存地址。
进一步地,在一实施方式中,所述获取所述当前进程对应的进程数据的步骤包括:
基于预设的内核符号表文件获取所述当前进程的内存地址;
基于所述当前进程的内存地址获取所述进程数据。
进一步地,在一实施方式中,所述对所述共享库的库文件进行解析,基于解析结果确定所述库函数对应的内存地址的步骤包括:
获取所述库文件的程序头表信息,基于所述程序头表信息获取所述库函数的偏移地址;
基于当前进程对应的进程数据确定库地址,基于所述库地址以及所述库函数的偏移地址,确定所述库函数对应的内存地址。
进一步地,在一实施方式中,所述若检测到所述断点回调函数执行,基于所述断点附属信息对所述预设函数进行解析并保存解析结果的步骤包括:
若确定当前进程的地址和当前进程的ID与所述断点附属信息一致,获取预设函数的输出结果;
基于所述预设函数的输出结果生成日志记录。
进一步地,在一实施方式中,其特征在于,所述断点回调函数包括创建新进程的函数,所述获取待设置断点的预设函数对应的内存地址,在所述内存地址对所述预设函数设置断点回调函数的步骤之后,还包括:
若检测到所述创建新进程的函数执行,获取新进程信息,将所述新进程增加至预设的待监测进程列表中。
进一步地,在一实施方式中,所述基于虚拟机的行为采集装置包括:
第一设置模块,用于获取待设置断点的预设函数对应的内存地址,在所述内存地址对所述预设函数设置断点回调函数;
确定模块,用于若检测到所述断点回调函数执行,确定当前进程是否为待监测进程;
第二设置模块,用于若确定所述当前进程为待监测进程,获取所述预设函数的返回地址,在所述返回地址设置返回地址断点回调函数以及返回地址断点附属信息;
解析模块,用于若检测到所述返回地址断点回调函数执行,基于所述断点附属信息对所述预设函数进行解析并保存解析结果。
此外,为实现上述目的,本发明还提供一种虚拟机,所述虚拟机包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于虚拟机的行为采集程序,所述基于虚拟机的行为采集程序被所述处理器执行时实现上述任一项所述的基于虚拟机的行为采集方法的步骤。
此外,为实现上述目的,本发明还提供一种存储介质,所述存储介质上存储有基于虚拟机的行为采集程序,所述基于虚拟机的行为采集程序被处理器执行时实现上述任一项所述的基于虚拟机的行为采集方法的步骤。
本发明获取待设置断点的预设函数对应的内存地址,在所述内存地址对所述预设函数设置断点回调函数,而后若检测到所述断点回调函数执行,确定当前进程是否为待监测进程,接下来若确定所述当前进程为待监测进程,获取所述预设函数的返回地址,在所述返回地址设置返回地址断点回调函数以及返回地址断点附属信息,最后若检测到所述返回地址断点回调函数执行,基于所述断点附属信息对所述预设函数进行解析并保存解析结果。利用硬件虚拟化技术提供一个完全隔离的运行环境,通过虚拟机监控器进行监控,具备很强的隐蔽性和反绕过机制。通过获取预设函数地址,进而设置断点,并通过在预设函数的返回地址设置断点,从而获取预设函数的输出结果,进而实现了对预设函数行为特征的采集。
附图说明
图1是本发明实施例方案涉及的硬件运行环境中虚拟机的结构示意图;
图2为本发明基于虚拟机的行为采集方法第一实施例的流程示意图;
图3为本发明基于虚拟机的行为采集方法第二实施例的流程示意图;
图4为本发明基于虚拟机的行为采集装置实施例的功能模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,图1是本发明实施例方案涉及的硬件运行环境中虚拟机的结构示意图。
如图1所示,该虚拟机可以包括:处理器1001,例如CPU,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的目标检测系统结构并不构成对虚拟机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及基于虚拟机的行为采集程序。
在图1所示的虚拟机中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接用户端,与用户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的基于虚拟机的行为采集程序。
在本实施例中,虚拟机包括:存储器1005、处理器1001及存储在所述存储器1005上并可在所述处理器1001上运行的基于虚拟机的行为采集程序,其中,处理器1001调用存储器1005中存储的基于虚拟机的行为采集程序时,执行本申请各个实施例提供的基于虚拟机的行为采集方法的步骤。
本发明还提供一种基于虚拟机的行为采集方法,参照图2,图2为本发明基于虚拟机的行为采集方法第一实施例的流程示意图。
本发明实施例提供了基于虚拟机的行为采集方法的实施例,需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在本实施例中,该基于虚拟机的行为采集方法包括:
步骤S100,获取待设置断点的预设函数对应的内存地址,在所述内存地址对所述预设函数设置断点回调函数;
在本实施例中,沙箱是一个虚拟系统程序,沙箱提供的环境相对于每一个运行的程序都是独立的,而且不会对现有的系统产生影响,即沙箱提供一个限制该应用程序对系统资源的访问权限。由前所述,现有沙箱技术无法对带反监控技术的恶意软件,进行行为特征抽取,因此,本申请提出一种基于虚拟机的行为采集方法,利用硬件虚拟化技术提供一个完全隔离的运行环境,通过虚拟机监控器进行监控,具备很强的隐蔽性和反绕过机制。通过获取预设函数地址,进而设置断点,并通过在预设函数的返回地址设置断点,从而获取预设函数的输出结果,进而实现了对预设函数行为特征的采集。
具体地,本发明采用Linux虚拟机为例进行介绍,用户自定义待设置断点的预设函数,预设函数可以是系统函数或库函数,获取预设函数在内存中的地址,对该地址调用断点设置函数即可设置断点,在断点陷入后运行断点回调函数,同时将预设函数的函数信息作为断点的附属信息。其中,函数信息包括函数名、参数个数、参数类型、返回值类型、所属库名等。附属信息主要解决两个问题:①保证输出型参数的正确解析;②保证函数返回值的正确解析。
具体地,步骤S100包括:
步骤S110,基于预设的内核符号表文件获取所述系统函数的偏移地址;
步骤S120,获取所述虚拟机的内核基址,基于所述内核基址以及所述偏移地址,计算得到所述预设函数对应的内存地址。
在本实施例中,当预设函数为系统函数时,从内核符号表文件中获取系统函数偏移offset,并计算出因内核随机化导致的内核偏移的偏移量kaslr,计算方法为从内核符号表中获取“_text”字段的偏移,然后从libdrakvuf中获取当前虚拟机内核基址kernel_base,则kaslr=kernel_base-_text。对应系统函数在内存中最终位置为offset+kaslr,对该地址调用断点设置函数即可设置断点,同时将对应系统函数的函数信息作为断点的附属信息。
步骤S200,若检测到所述断点回调函数执行,确定当前进程是否为待监测进程;
在本实施例中,断点设置完毕后,当执行到预设函数的断点位置,均会跳出到断点回调处理函数,在该预设函数中需要对断点处进程进行过滤,以减少日志的生成量。首先获取断点处的当前进程信息,如果当前进程的PID或进程名与预设的待监测进程列表匹配,其中,预设的待监测进程列表由用户自定义。当预设的待监测进程列表中存在当前进程的PID或进程名时,则当前进程为待监测进程,反之,如果预设的待监测进程列表中不存在当前进程的PID或进程名时,则当前进程不是待监测进程。
步骤S300,若确定所述当前进程为待监测进程,获取所述预设函数的返回地址,在所述返回地址设置返回地址断点回调函数以及返回地址断点附属信息;
在本实施例中,当预设函数断点陷入时,由于需要对预设函数输出型参数进行解引用,为获取正确函数参数,需在预设函数断点陷入后,从栈中或寄存器中获取输出参数,对于输出型参数,由于函数体并未执行,所以输出型参数为无效值,其指向的内存空间还没有存放正确的数据,因此要向函数返回地址再次设置断点,待返回地址断点陷入后,再解析函数的输出型参数指向的内存空间。
当预设函数断点陷入时,当前栈顶为预设函数返回地址,即rsp寄存器保存的地址所指向的内存块。通过对该返回地址设置断点,并将rsp寄存器的值(break_addr)与当前进程ID作为该返回地址断点的附属信息。待返回地址断点陷入后,说明函数体已经执行完毕,即可从rax寄存器获取预设函数的返回值。
步骤S400,若检测到所述返回地址断点回调函数执行,基于所述断点附属信息对所述预设函数进行解析并保存解析结果。
具体地,步骤S400包括:
步骤S410,若确定当前进程的地址和当前进程的ID与所述断点附属信息一致,获取预设函数的输出结果;
步骤S420,基于所述预设函数的输出结果生成日志记录。
在本实施例中,当返回地址断点回调函数被调用时,为确保是同一进程执行到该返回地址处,首先需要确定返回地址断点附属信息(break_addr,进程ID)是否与当前返回地址断点处(rip寄存器的值,当前进程ID)对应相等,如果相等,说明当前进程的该函数行为即为待采集的函数行为,然后进行详细的函数行为解析。对函数输出型参数进行解引用,获取正确的输出型参数。对于输入型参数直接按其参数类型进行值解析。
将函数调用的时间、函数名、参数列表、参数值、返回值、函数调用地址、函数所在共享库名等信息保存到日志文件中,生成日志记录。可以定义日志文件命名规则为“进程名_进程ID.log”。
进一步地,在一实施例中,步骤S100之后,还包括:
步骤S500,若检测到所述创建新进程的函数执行,获取新进程信息,将所述新进程增加至预设的待监测进程列表中。
在实施例中,当断点函数的作用为创建新进程,那么需要将该函数执行结束后返回的新进程ID加入到待监测进程列表中。通过该方式,结合日志文件命名规则与创建进程的行为记录,即可展现进程间关系。具体方式为:
①在待监控进程的日志文件中存在一条创建进程的函数行为记录,获取该函数返回值,即新进程ID;
②在日志文件夹下查找文件名中‘进程ID’字段与新进程ID相等的文件,即为新进程的函数行为记录。
需要说明的是,由于动态链接库有动态加载的方式,对应Linux的dlopen调用(Windows的LoadLibrary系列调用),在此类函数调用之前相关的库文件并不会出现在该进程的VMA映射列表中。如果在自定义的函数断点列表中出现使用动态加载的动态链接库的场景,那么函数断点设置模块在设置断点的过程中会失败,因为此时内存中并没有加载相关的库。为提高行为采集的灵活性,在函数返回地址断点回调模块加入动态加载库函数的过滤。
以Linux中dlopen函数调用为例,如果出现监控中的进程调用dlopen等函数,那么首先解析dlopen函数的第一个参数,即待加载的库函数名称字符串,使用该字符串与待监控动态链接库的字符串列表进行字符串匹配,如果匹配成功,那么进入函数断点设置模块。
本实施例提出的基于虚拟机的行为采集方法,获取待设置断点的预设函数对应的内存地址,在所述内存地址对所述预设函数设置断点回调函数,而后若检测到所述断点回调函数执行,确定当前进程是否为待监测进程,接下来若确定所述当前进程为待监测进程,获取所述预设函数的返回地址,在所述返回地址设置返回地址断点回调函数以及返回地址断点附属信息,最后若检测到所述返回地址断点回调函数执行,基于所述断点附属信息对所述预设函数进行解析并保存解析结果。利用硬件虚拟化技术提供一个完全隔离的运行环境,通过虚拟机监控器进行监控,具备很强的隐蔽性和反绕过机制。通过获取预设函数地址,进而设置断点,并通过在预设函数的返回地址设置断点,从而获取预设函数的输出结果,进而实现了对预设函数行为特征的采集。
基于第一实施例,参照图3,提出本发明基于虚拟机的行为采集方法的第二实施例,在本实施例中,步骤S100包括:
步骤S130,获取所述当前进程对应的进程数据,基于所述进程数据确定共享库的库文件;
在实施例中,对于当前进程信息的获取,以Linux虚拟机为例:需要跟踪对应Linux32位内核中,系统处于内核态和用户态时获取内核栈地址的方式。对于Linux32位的系统函数,当操作系统运行到系统函数断点处时,CPU处于内核态,esp寄存器直接指向当前进程对应的内核栈;对于Linux32位的库函数,当运行到库函数断点时,CPU处于用户态,而进程相关信息需要从内核地址空间中取出,因此需要模拟内核,进行用户态切换到内核态的操作,来定位进程对应内核栈的位置。具体方案为:
①读取当前tr寄存器,访问TSS段内容;
②从TSS段中esp0字段获取进程内核栈的栈顶指针,在32位linux下,内核栈大小为8K,因此esp0&~0x1fff即可获得进程对应的thread_info,进而取得当前进程task_struct地址。
具体地,步骤S130包括:
步骤S131,基于预设的内核符号表文件获取所述当前进程的内存地址;
首先从内核符号表文件中可获得内核init_task的task_struct的地址,进而通过tasks变量在task_struct结构体中的偏移量与init_task的task_struct地址相加,即可读取该结构体中tasks链表,而tasks侵入式链表则存储了当前系统的所有进程task_struct的tasks。通过侵入式链表特定的扫描方式,即可扫描系统中所有进程的task_struct的comm变量,在task_struct结构体中comm字符串即为进程名,利用该字符串与待监测进程名进行匹配,若结果一致,则task_struct即为待监测进程地址。若无匹配进程,则说明虚拟机中不存在正在运行的对应名称的进程。
步骤S132,基于所述当前进程的内存地址获取所述进程数据。
步骤a,获取所述库文件的程序头表信息,基于所述程序头表信息获取所述库函数的偏移地址;
步骤b,基于当前进程对应的进程数据确定库地址,基于所述库地址以及所述库函数的偏移地址,确定所述库函数对应的内存地址。
获取待监测进程task_struct虚拟地址,从内核符号表文件中获取mm变量在结构体task_struct中的偏移,通过进程结构体task_struct的地址与偏移量相加即可获取对应task_struct的内存描述符mm变量,由内存描述符mm找到对应进程的VMA链表,对应着结构体mm_struct的mmap变量,在VMA链表中每一个节点对应着进程虚拟地址的一部分空间,节点的类型为vm_area_struct,在该结构体中存放着vm_file变量,该变量标识了映射到当前VMA区域的文件信息,对应着file结构体。进一步解析file结构体的变量f_path,该变量对应着path结构体,在path结构体中存储着dentry变量,类型为结构体dentry,而在该结构体中存储的d_name变量则对应了当前VMA映射文件的文件名,利用该变量保存的映射文件名与库名称进行匹配,如果字符串匹配,即找到对应库地址。
需要说明的是,由于一个库文件会对应多个VMA区域,因此需要针对名称匹配的VMA区域的标志位vm_flags进行筛选,当标志位同时具有读权限与执行权限,说明对应VMA区域为文本段;当标志位同时具有读写权限但无执行权限,则对应VMA区域为数据段。(以上结构体中变量的偏移均从内核符号表中获取)
步骤S140,对所述共享库的库文件进行解析,基于解析结果确定所述库函数对应的内存地址。
在本实施例中,直接从内存解析库文件对应的ELF文件,从ELF的加载视图定位函数偏移。具体方案为:首先根据库地址定位方案找到库文件的文本段在进程的虚拟地址空间加载地址,然后解析内存中ELF文件的文件头,定位到ELF的程序头表,依次扫描程序头表内容,匹配p_type为PT_DYNAMIC的段,一个PT_DYNAMIC类型的程序头项指向一个.dynamic节。而该节包含一个结构体数组,其中我们需要找出d_tag为DT_STRTAB,DT_SYMTAB,DT_SYMENT的数组元素,分别表示字符串表地址,符号表地址,符号表项的大小。符号表所包含的信息用于定位和重定位程序中的符号定义和引用,在内存中是一个以Elf32_Sym结构体(64位操作系统为Elf64_Sym结构体)为表项的数组。在该结构体中st_name为符号的名字,但它不是一个字符串,而是一个指向字符串表的索引值,因此获取该索引值之后,再与字符串表地址相加得到的地址即为对应符号的实际字符串值。之后使用该字符串与需要下断点的函数名称进行对比,如果名称一致,则符号表项中st_value对应的值即为库函数相对于库基址的偏移量,使用该地址加上库地址即为库函数地址。
本实施例提出的基于虚拟机的行为采集方法,获取所述当前进程对应的进程数据,基于所述进程数据确定共享库的库文件,而后对所述共享库的库文件进行解析,基于解析结果确定所述库函数对应的内存地址。通过进程定位,库地址定位,进而实现库函数地址定位,以便于在库函数对应的内存地址设置断点,实现对库函数行为特征的采集。
本发明进一步提供一种基于虚拟机的行为采集装置,参照图4,图4为本发明基于虚拟机的行为采集装置实施例的功能模块示意图。
第一设置模块10,用于获取待设置断点的预设函数对应的内存地址,在所述内存地址对所述预设函数设置断点回调函数;
确定模块20,用于若检测到所述断点回调函数执行,确定当前进程是否为待监测进程;
第二设置模块30,用于若确定所述当前进程为待监测进程,获取所述预设函数的返回地址,在所述返回地址设置返回地址断点回调函数以及返回地址断点附属信息;
解析模块40,用于若检测到所述返回地址断点回调函数执行,基于所述断点附属信息对所述预设函数进行解析并保存解析结果。
进一步地,所述第一设置模块10还用于:
基于预设的内核符号表文件获取所述系统函数的偏移地址;
获取所述虚拟机的内核基址,基于所述内核基址以及所述偏移地址,计算得到所述预设函数对应的内存地址。
进一步地,所述第一设置模块10还用于:
获取所述当前进程对应的进程数据,基于所述进程数据确定共享库的库文件;
对所述共享库的库文件进行解析,基于解析结果确定所述库函数对应的内存地址。
进一步地,所述第一设置模块10还用于:
基于预设的内核符号表文件获取所述当前进程的内存地址;
基于所述当前进程的内存地址获取所述进程数据。
进一步地,所述第一设置模块10还用于:
获取所述库文件的程序头表信息,基于所述程序头表信息获取所述库函数的偏移地址;
基于当前进程对应的进程数据确定库地址,基于所述库地址以及所述库函数的偏移地址,确定所述库函数对应的内存地址。
进一步地,所述解析模块40还用于:
若确定当前进程的地址和当前进程的ID与所述断点附属信息一致,获取预设函数的输出结果;
基于所述预设函数的输出结果生成日志记录。
进一步地,所述基于虚拟机的行为采集装置还包括:
检测模块,用于若检测到所述创建新进程的函数执行,获取新进程信息,将所述新进程增加至预设的待监测进程列表中。
在本实施例中,获取待设置断点的预设函数对应的内存地址,在所述内存地址对所述预设函数设置断点回调函数,而后若检测到所述断点回调函数执行,确定当前进程是否为待监测进程,接下来若确定所述当前进程为待监测进程,获取所述预设函数的返回地址,在所述返回地址设置返回地址断点回调函数以及返回地址断点附属信息,最后若检测到所述返回地址断点回调函数执行,基于所述断点附属信息对所述预设函数进行解析并保存解析结果。利用硬件虚拟化技术提供一个完全隔离的运行环境,通过虚拟机监控器进行监控,具备很强的隐蔽性和反绕过机制。通过获取预设函数地址,进而设置断点,并通过在预设函数的返回地址设置断点,从而获取预设函数的输出结果,进而实现了对预设函数行为特征的采集。
此外,本发明实施例还提出一种存储介质,所述存储介质上存储有基于虚拟机的行为采集程序,所述基于虚拟机的行为采集程序被处理器执行时实现上述各个实施例中基于虚拟机的行为采集方法的步骤。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台系统设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (9)
1.一种基于虚拟机的行为采集方法,其特征在于,应用于虚拟机,所述的基于虚拟机的行为采集方法包括以下步骤:
获取待设置断点的预设函数对应的内存地址,在所述内存地址对所述预设函数设置断点回调函数;
若检测到所述断点回调函数执行,确定当前进程是否为待监测进程;
其中,所述确定当前进程是否为待监测进程的步骤,包括:
获取所述断点回调函数处的当前进程,如果所述当前进程的PID或进程名与预设的待监测进程列表匹配,则确定所述当前进程为待监测进程;
若确定所述当前进程为待监测进程,获取所述预设函数的返回地址,在所述返回地址设置返回地址断点回调函数以及返回地址断点附属信息;
若检测到所述返回地址断点回调函数执行,基于所述断点附属信息对所述预设函数进行解析并保存解析结果;
当所述预设函数为系统函数,所述获取待设置断点的预设函数对应的内存地址的步骤包括:
当所述预设函数为系统函数时,从预设的内核符号表文件中获取所述系统函数的偏移地址,并计算出因所述虚拟机的内核随机化导致的内核偏移的偏移量,计算得到待设置断点的所述预设函数对应的内存地址为所述偏移地址与所述偏移量之间的和值。
2.如权利要求1所述的基于虚拟机的行为采集方法,其特征在于,所述预设函数为共享库的库函数,所述获取待设置断点的预设函数对应的内存地址的步骤包括:
获取所述当前进程对应的进程数据,基于所述进程数据确定共享库的库文件;
对所述共享库的库文件进行解析,基于解析结果确定所述库函数对应的内存地址。
3.如权利要求2所述的基于虚拟机的行为采集方法,其特征在于,所述获取所述当前进程对应的进程数据的步骤包括:
基于预设的内核符号表文件获取所述当前进程的内存地址;
基于所述当前进程的内存地址获取所述进程数据。
4.如权利要求2所述的基于虚拟机的行为采集方法,其特征在于,所述对所述共享库的库文件进行解析,基于解析结果确定所述库函数对应的内存地址的步骤包括:
获取所述库文件的程序头表信息,基于所述程序头表信息获取所述库函数的偏移地址;
基于当前进程对应的进程数据确定库地址,基于所述库地址以及所述库函数的偏移地址,确定所述库函数对应的内存地址。
5.如权利要求1所述的基于虚拟机的行为采集方法,其特征在于,所述若检测到所述断点回调函数执行,基于所述断点附属信息对所述预设函数进行解析并保存解析结果的步骤包括:
若确定当前进程的地址和当前进程的ID与所述断点附属信息一致,获取预设函数的输出结果;
基于所述预设函数的输出结果生成日志记录。
6.如权利要求1-5任一项所述的基于虚拟机的行为采集方法,其特征在于,所述断点回调函数包括创建新进程的函数,所述获取待设置断点的预设函数对应的内存地址,在所述内存地址对所述预设函数设置断点回调函数的步骤之后,还包括:
若检测到所述创建新进程的函数执行,获取新进程信息,将所述新进程增加至预设的待监测进程列表中。
7.一种基于虚拟机的行为采集装置,其特征在于,所述基于虚拟机的行为采集装置包括:
第一设置模块,用于获取待设置断点的预设函数对应的内存地址,在所述内存地址对所述预设函数设置断点回调函数;
当所述预设函数为系统函数,所述第一设置模块具体用于:
从预设的内核符号表文件中获取所述系统函数的偏移地址,并计算出因所述虚拟机的内核随机化导致的内核偏移的偏移量,计算得到待设置断点的所述预设函数对应的内存地址为所述偏移地址与所述偏移量之间的和值;
确定模块,用于若检测到所述断点回调函数执行,确定当前进程是否为待监测进程;
所述确定模块具体用于:获取所述断点回调函数处的当前进程,如果所述当前进程的PID或进程名与预设的待监测进程列表匹配,则确定所述当前进程为待监测进程;
第二设置模块,用于若确定所述当前进程为待监测进程,获取所述预设函数的返回地址,在所述返回地址设置返回地址断点回调函数以及返回地址断点附属信息;
解析模块,用于若检测到所述返回地址断点回调函数执行,基于所述断点附属信息对所述预设函数进行解析并保存解析结果。
8.一种虚拟机,其特征在于,所述虚拟机包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于虚拟机的行为采集程序,所述基于虚拟机的行为采集程序被所述处理器执行时实现如权利要求1至6中任一项所述的基于虚拟机的行为采集方法的步骤。
9.一种存储介质,其特征在于,所述存储介质上存储有所述基于虚拟机的行为采集程序,所述基于虚拟机的行为采集程序被处理器执行时实现如权利要求1至6中任一项所述的基于虚拟机的行为采集方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010167031.1A CN113391873B (zh) | 2020-03-11 | 2020-03-11 | 基于虚拟机的行为采集方法、虚拟机、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010167031.1A CN113391873B (zh) | 2020-03-11 | 2020-03-11 | 基于虚拟机的行为采集方法、虚拟机、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113391873A CN113391873A (zh) | 2021-09-14 |
CN113391873B true CN113391873B (zh) | 2023-03-24 |
Family
ID=77615359
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010167031.1A Active CN113391873B (zh) | 2020-03-11 | 2020-03-11 | 基于虚拟机的行为采集方法、虚拟机、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113391873B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8397242B1 (en) * | 2009-06-30 | 2013-03-12 | Symantec Corporation | System and method for managing operations within virtual machines |
CN103019865A (zh) * | 2012-12-28 | 2013-04-03 | 北京神州绿盟信息安全科技股份有限公司 | 虚拟机监控方法和系统 |
CN105550575A (zh) * | 2015-12-03 | 2016-05-04 | 北京神州绿盟信息安全科技股份有限公司 | 一种未导出的函数地址和数据结构偏移的获取方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10162966B1 (en) * | 2016-10-19 | 2018-12-25 | Trend Micro Incorporated | Anti-malware system with evasion code detection and rectification |
-
2020
- 2020-03-11 CN CN202010167031.1A patent/CN113391873B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8397242B1 (en) * | 2009-06-30 | 2013-03-12 | Symantec Corporation | System and method for managing operations within virtual machines |
CN103019865A (zh) * | 2012-12-28 | 2013-04-03 | 北京神州绿盟信息安全科技股份有限公司 | 虚拟机监控方法和系统 |
CN105550575A (zh) * | 2015-12-03 | 2016-05-04 | 北京神州绿盟信息安全科技股份有限公司 | 一种未导出的函数地址和数据结构偏移的获取方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113391873A (zh) | 2021-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9015814B1 (en) | System and methods for detecting harmful files of different formats | |
US9876812B1 (en) | Automatic malware signature extraction from runtime information | |
Zhang et al. | Dexhunter: toward extracting hidden code from packed android applications | |
Alazab et al. | Towards understanding malware behaviour by the extraction of API calls | |
US8850581B2 (en) | Identification of malware detection signature candidate code | |
Carmony et al. | Extract Me If You Can: Abusing PDF Parsers in Malware Detectors. | |
KR101246623B1 (ko) | 악성 애플리케이션 진단 장치 및 방법 | |
CN107247902B (zh) | 恶意软件分类系统及方法 | |
EP3262557A1 (en) | A method to identify known compilers functions, libraries and objects inside files and data items containing an executable code | |
CN111737692B (zh) | 应用程序的风险检测方法及装置、设备、存储介质 | |
CN109255235B (zh) | 基于用户态沙箱的移动应用第三方库隔离方法 | |
US10311233B2 (en) | Generic unpacking of program binaries | |
CN115659333A (zh) | 一种基于二进制插桩的沙箱、内存隔离方法及存储介质 | |
CN115062309A (zh) | 一种新型电力系统下基于设备固件仿真的漏洞挖掘方法及存储介质 | |
CN113391873B (zh) | 基于虚拟机的行为采集方法、虚拟机、装置及存储介质 | |
CN106911686B (zh) | WebShell检测方法及装置 | |
CN106372508B (zh) | 恶意文档的处理方法及装置 | |
CN111125701B (zh) | 文件检测方法、设备、存储介质及装置 | |
Patil et al. | Windows Physical Memory Analysis to Detect the Presence of Malicious Code | |
CN115221513A (zh) | 恶意文件的检测方法、装置、设备和存储介质 | |
CN114861187A (zh) | 漏洞固件的检测方法、装置、设备及存储介质 | |
CN116318946A (zh) | 一种内存式网页后门攻击的检测方法、装置及电子设备 | |
CN116881926A (zh) | 一种基于装置代码的风险扫描方法、系统和运算装置 | |
CN115270119A (zh) | 一种基于内存取证技术的代码注入攻击检测方式 | |
CN115840949A (zh) | 组件漏洞发现方法、装置、电子设备及计算机存储介质 |
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 |