一种基于虚拟化高效HASH的可配置函数API监测方法技术

技术编号:21686702 阅读:22 留言:0更新日期:2019-07-24 14:49
本发明专利技术公开了一种基于虚拟化高效HASH的可配置函数API监测方法,其步骤包括:实时快速更新当前进程结构信息;实时快速更新当前进程的当前模块结构信息;基于当前模块结构信息及“HOOK信息HASH表”快速检测HOOK点;命中HOOK点之后根据配置提取并输出HOOK点所需的结构信息。本方法通过配置监控的模块名称及相应指令的偏移地址以及需要提取的信息数据,能够在函数起始、中间指令、函数结束等任意位置实现程序信息的按需提取,具备可扩展能力以及函数API的批量监控能力。

A Configurable Function API Monitoring Method Based on Virtualized and Efficient HASH

【技术实现步骤摘要】
一种基于虚拟化高效HASH的可配置函数API监测方法
本专利技术属于计算机科学与
,具体涉及一种在虚拟化平台上,基于高效HASH映射,实践可配置的批量函数API监测方法,提取程序分析过程中函数API关键参数,支持函数开始、中间位置、结尾任意执行位置关键参数的提取。
技术介绍
函数API监测是二进制程序动态代码分析的重要技术手段之一,目前基于程序动态行为的恶意代码检测分析均需要通过监测程序敏感API函数提取相应参数,基于API函数语义及其对应的参数建立关联行为;此外,基于API函数特征进行漏洞的分析检测也需要对高危函数(如字符串操作函数)进行监测。随着程序功能、规模、复杂度的不断升级,API的数量规模越来越多,涉及的模块、API函数类别也逐渐增加,包括:进程操作函数、文件读写操作函数、网络收发数据函数、注册表操作函数、系统信息、硬件信息采集函数等。传统的API监测方法已经难以满足API更新迭代的监测需求,具体表现在恶意代码具有APIHOOK的检测对抗能力,同时大量的API监控需求需要适配不同的应用场景,传统的监测能力固化到了程序代码,难以满足动态的可配置需求。当前的API动态监控技术,通常使用如下的几种方法:1.基于动态DLL代码注入的APIHOOK监控基于动态DLL代码注入的APIHOOK监控是一种传统的API监测方案,通过编写HOOK目标函数的替代函数到动态库,注入动态库到目标进行,修改函数导入、导出表,或者修改函数的头部字节进行跳转,使得原来调用目标函数的操作转而先去执行了替代函数,替代函数可以提取参数再去执行原目标函数,或者先执行目标函数再提取返回结果,提取所需的监测信息。这种方法虽然形成了以Detour为代表的windows平台下的APIHOOK框架,但其需要对每个被HOOK的目标函数编写替代函数,编辑参数信息提取代码,并且只能监测函数执行前、执行后的数据,难以满足大规模的API监控和在函数中间位置提取数据的需求,同时恶意代码对其有检测对抗能力。2.基于PinTools代码插桩的API监控基于PinTools代码插桩的API监控是通过函数级的代码插桩,在回调函数中编写监控代码实现,同时支持函数执行前和函数执行后的回调函数编写,回调函数的参数与API参数个数一致,同样需要对每个监测的API编写回调函数,存在只能监测函数执行前、执行后的数据,难以满足大规模的API监控和在函数中间位置提取数据需求的缺陷。3.基于Panda架构的API监控基于Panda架构的API监控是在虚拟化平台上运行目标操作系统,通过系统调用监控的方式监测部分API信息,同样需要对每个API编写回调函数,存在只能监测函数执行前、执行后的数据,批量监测大规模API函数工作量大,难以满足大规模的API监控和在函数中间位置提取数据需求的缺陷。综上,目前程序API行为监控信息提取方法的主要缺陷在于:仅支持函数执行前、函数执行后属性参数的提取,难以满足在函数执行中间位置提取所需的属性参数;需要对每一个监控的目标函数编写参数提取代码,可扩展能力差,难以实现可扩展的批量程序API参数信息提取。
技术实现思路
针对现有APIHOOK技术需要对每个监控的API对象逐一编写HOOK代码,难以实现可扩展的化的批量API参数信息提取问题,本专利技术的目的在于提供一种基于虚拟化高效HASH的可配置函数API监测方法,该方法通过配置监控的模块名称及相应指令的偏移地址以及需要提取的信息数据,能够在函数起始、中间指令、函数结束等任意位置实现程序信息的按需提取,具备可扩展能力以及函数API的批量监控能力。一种基于虚拟化高效HASH的可配置函数API监测方法,其步骤包括:·实时快速更新当前进程结构信息;·实时快速更新当前进程的当前模块结构信息;·基于当前模块结构信息及“HOOK信息HASH表”快速检测HOOK点;·命中HOOK点之后根据配置提取并输出HOOK点所需的结构信息。进一步地,所述实时快速更新当前进程结构信息是基于虚拟化进行指令动态插装分析,在指令动态插装分析过程中动态维护系统运行进程结构,并以HASH表存储进程结构信息,同时维护当前进程结构信息,通过检测指令地址空间变化识别用户态和内核态切换,在内核态切换到用户态的情况下更新当前进程结构信息。进一步地,所述进程结构信息包括:进程结构地址、CR3、进程名、模块结构信息HASH列表、进程当前模块结构指针。进一步地,所述以HASH表存储进程结构信息是指建立一组HASH表,每个HASH表项对应一组HASH值相同的进程结构信息,进程结构信息以进程结构地址或CR3计算HASH值得到,相同HASH值的进程结构信息组成队列,映射到对应的HASH表项,以提高进程结构信息的检索速度。进一步地,所述维护当前进程结构信息是指使用一个进程结构信息指针,指向了当前执行指令所属的进程对应的进程结构信息对象。进一步地,所述通过检测指令地址空间变化识别用户态和内核态切换是指内核态指令地址空间和用户态指令地址空间范围有一个界限值,通过该界限值可以判定当前指令所属的状态,同时记录了上一条指令所属的状态,通过前后状态的对比来判定状态的切换。进一步地,所述在内核态切换到用户态的情况下更新当前进程结构信息是由于系统指令如果持续处于用户态不可能发生进程切换,当前执行进程不会改变,另外,HOOK的对象仅考虑用户态,因此只有在发生内核态切换到用户态才有必要更新当前进程结构信息。进一步地,所述模块结构信息HASH列表是将进程的模块结构信息,以基地址计算HASH值,将相同HASH值的模块结构信息组成队列,映射到对应的HASH表项,提高模块结构信息的检索速度,所述模块结构信息包括:模块基地址、模块尾地址、模块名称、模块的HookHash表。进一步地,所述实时快速更新当前进程的当前模块结构信息是指进程代码包括主程序模块和其加载的多个动态库模块(windows下的dll或者linux下的so),而当前执行的指令只能属于其中的一个模块而不可能属于多个模块,进程结构信息中的当前模块结构指针指向了当前指令所属程序或动态库模块对应的模块结构信息,当前模块结构信息的维护是通过检测当前指令超出当前模块范围的情况下,根据HASH值到可能的模块结构信息HASH列表项检索所属的模块,如检索失败重新提取当前进程的模块结构信息,更新到模块结构信息HASH表中再重新检索;进一步地,所述基于当前模块结构信息及“HOOK信息HASH表”快速检测HOOK是指:提取当前指令所属模块的HOOK表,通过当前指令地址计算HASH值,取出对应的HOOK表中的HASH项,在HASH项范围内检测当前指令是否为HOOK点;进一步地,所述HOOK信息HASH表是指将用户配置的HOOK项信息按照进程模块分类管理,同时在同一模块以HOOK地址计算HASH值,分散到HASH表中的不同组,相同HASH值的HOOK项组成一组,映射到对应的HOOK信息HASH表项,提高HOOK点的检测效率。进一步地,所述HOOK项信息包括:指令相对模块基地值的偏移量RVA、模块基地值、模块名称、函数名称、需要提取输出的参数组描述。进一步地,所述提取并输出HOOK点配置的结构信息是指当检测到执行的指令匹配配置的HOOK点时,根据配置本文档来自技高网
...

【技术保护点】
1.一种基于虚拟化高效HASH的可配置函数API监测方法,其特征在于,包括以下步骤:基于虚拟化进行指令动态插装分析,在指令动态插装分析过程中动态维护系统运行进程结构,并以HASH表存储进程结构信息,同时维护当前进程结构信息,该进程结构信息包括模块结构信息HASH列表;通过检测指令地址空间变化识别用户态和内核态切换,在内核态切换到用户态的情况下更新当前进程结构信息,以实时快速更新当前进程结构信息;通过检测到当前指令超出当前模块范围,根据HASH值在模块结构信息HASH列表项检索所属的模块,如检索失败,则重新提取当前进程的模块结构信息,更新到模块结构信息HASH表中再重新检索,以实时快速更新当前进程的当前模块结构信息;提取当前指令所属模块的HOOK表,通过当前指令地址计算HASH值,取出对应的HOOK表中的HASH项,在HASH项范围内检测当前指令是否为HOOK点;当检测到执行的指令匹配配置的HOOK点时,根据配置规则解析提取HOOK点所需的结构信息,按照配置规则描述输出该结构信息。

【技术特征摘要】
1.一种基于虚拟化高效HASH的可配置函数API监测方法,其特征在于,包括以下步骤:基于虚拟化进行指令动态插装分析,在指令动态插装分析过程中动态维护系统运行进程结构,并以HASH表存储进程结构信息,同时维护当前进程结构信息,该进程结构信息包括模块结构信息HASH列表;通过检测指令地址空间变化识别用户态和内核态切换,在内核态切换到用户态的情况下更新当前进程结构信息,以实时快速更新当前进程结构信息;通过检测到当前指令超出当前模块范围,根据HASH值在模块结构信息HASH列表项检索所属的模块,如检索失败,则重新提取当前进程的模块结构信息,更新到模块结构信息HASH表中再重新检索,以实时快速更新当前进程的当前模块结构信息;提取当前指令所属模块的HOOK表,通过当前指令地址计算HASH值,取出对应的HOOK表中的HASH项,在HASH项范围内检测当前指令是否为HOOK点;当检测到执行的指令匹配配置的HOOK点时,根据配置规则解析提取HOOK点所需的结构信息,按照配置规则描述输出该结构信息。2.如权利要求1所述的方法,其特征在于,所述进程结构信息还包括:进程结构地址、CR3、进程名、进程当前模块结构指针。3.如权利要求2所述的方法,其特征在于,所述以HASH表存储进程结构信息,是指建立一组HASH表,每个HASH表项对应一组HASH值相同的进程结构信息,进程结构信息通过进程结构地址或CR3计算HASH值得到,相同HASH值的进程结构信息组成队列,映射到对应的HASH表项。4.如权利要求1所述的方法,其特征在于,所述维护当前进程结构信息,是指使用一个进程结构信息指针,指向当前执行指令所属的进程对应的进程结构信息对象。5.如权利要求1所述的方法,其特征在于,所述通过检...

【专利技术属性】
技术研发人员:黄桦烽闫佳杨轶苏璞睿
申请(专利权)人:中国科学院软件研究所
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1