[发明专利]一种基于动态库的虚拟机进程行为监控方法与系统有效
申请号: | 201610050758.5 | 申请日: | 2016-01-26 |
公开(公告)号: | CN105740046B | 公开(公告)日: | 2019-01-29 |
发明(设计)人: | 羌卫中;金海;杨洁勇;邹德清 | 申请(专利权)人: | 华中科技大学 |
主分类号: | G06F9/455 | 分类号: | G06F9/455 |
代理公司: | 华中科技大学专利中心 42201 | 代理人: | 曹葆青 |
地址: | 430074 湖北*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 动态 虚拟机 进程 行为 监控 方法 系统 | ||
1.一种基于动态库的虚拟机进程行为监控方法,其特征在于,所述方法包括如下步骤:
(1)依据动态链接库的二进制内容格式和被监控的API函数名字,获取API函数在动态库被加载到进程时,API函数的入口地址相对于动态链接库装载地址的偏移;
(2)安全监控程序启动监控时,截获虚拟机的进程切换;
(3)设置钩子,截获到进程切换时,判断系统监控的API函数相应动态链接库此进程是否已经加载,依据步骤(1)获取的偏移地址和动态库在进程中的加载地址,对此进程相关的动态链接库内存空间设置钩子,并且设置内存保护,隐藏自身,保证对虚拟机内部透明不可知;
(4)截获API调用,当进程调用相应的API函数时,由于相应的函数入口被设置钩子,此时陷入虚拟机管理器,对进程行为进行截获,并且依据安全策略相做应处理;
(5)内存保护,当虚拟机系统或者虚拟机里的进程访问被设置的动态链接库空间时,由于内存保护机制,陷入到虚拟机管理器,对内存访问行为做相应处理,保证钩子对虚拟机内部的透明;
所述步骤(3)具体包括如下子步骤:
(3-1)截获进程切换行为后,判断监控的API函数相应动态链接库是否已经加载并且未设置钩子;
(3-2)如果相应动态链接库已经加载,依据动态链接库的加载地址和API函数的入口地址相对于动态链接库装载地址的偏移,获取API函数相应的内存地址;
(3-3)对API函数的入口地址设置钩子,并且设置EPT页表相应页表项为不可读写,对设置钩子的地址进行保护;
所述步骤(4)具体包括如下子步骤:
(4-1)进程调用API函数,由于cpuid指令的运行,陷入到虚拟机管理器,事件被截获;
(4-2)依据cpuid指令执行的地址,判断是相应API函数的调用地址,并且依据安全策略进行相应处理,处理完毕,模拟钩子处原来指令运行,并且返回虚拟机运行。
2.如权利要求1所述的方法,其特征在于,所述步骤(5)具体包括如下子步骤:
(5-1)由于安全监控程序对虚拟机地址相应的EPT页表进行了设置,当设虚拟机系统或者进程访问设置钩子的相应内存,会触发页错误陷入虚拟机管理器;
(5-2)此时将准确对内存保护地址进行判断和确认,并且依据对此地址发生的读写操作,返回相应原始的内容,做到对虚拟机完全透明。
3.一种基于动态库的虚拟机进程行为监控系统,其特征在于,包括地址偏移获取模块、进程切换获取模块、钩子设置模块、API调用截获模块以及内存保护模块,其中:
所述地址偏移获取模块,用于依据动态链接库的二进制内容格式和被监控的API函数名字,获取API函数在动态库被加载到进程时,API函数的入口地址相对于动态链接库装载地址的偏移;
所述进程切换获取模块,用于在安全监控程序启动监控时,截获虚拟机的进程切换;
所述钩子设置模块,用于在截获到进程切换时,判断系统监控的API函数相应动态链接库此进程是否已经加载,依据步骤(1)获取的偏移地址和动态库在进程中的加载地址,对此进程相关的动态链接库内存空间设置钩子,并且设置内存保护,隐藏自身,保证对虚拟机内部透明不可知;
所述API调用截获模块,用于在当进程调用相应的API函数时,由于相应的函数入口被设置钩子,此时陷入虚拟机管理器,对进程行为进行截获,并且依据安全策略相做应处理;
所述内存保护模块,用于在当虚拟机系统或者虚拟机里的进程访问被设置的动态链接库空间时,由于内存保护机制,陷入到虚拟机管理器,对内存访问行为做相应处理,保证钩子对虚拟机内部的透明;
所述钩子设置模块具体包括链接库加载判断子模块、内存地址判断子模块、钩子设置子模块,其中:
所述链接库加载判断模块,用于在截获进程切换行为后,判断监控的API函数相应动态链接库是否已经加载并且未设置钩子;
所述内存地址判断子模块,用于在相应动态链接库已经加载时,依据动态链接库的加载地址和API函数的入口地址相对于动态链接库装载地址的偏移,获取API函数相应的内存地址;
所述钩子设置子模块,用于对API函数的入口地址设置钩子,并且设置EPT页表相应页表项为不可读写,对设置钩子的地址进行保护;
所述API调用截获模块具体包括事件截获子模块和进程处理子模块,其中:
所述事件截获子模块,用于在进程调用API函数时,由于cpuid指令的运行,陷入到虚拟机管理器,事件被截获;
所述进程处理子模块,用于依据cpuid指令执行的地址,判断是相应API函数的调用地址,并且依据安全策略进行相应处理,处理完毕,模拟钩子处原来指令运行,并且返回虚拟机运行。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华中科技大学,未经华中科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201610050758.5/1.html,转载请声明来源钻瓜专利网。