一种不触发系统保护的内核挂钩方法技术方案

技术编号:25914453 阅读:27 留言:0更新日期:2020-10-13 10:33
本发明专利技术公开了一种不触发系统保护的内核挂钩方法,包括读取并保存MSR中原始MSR_LSTAR函数地址,并将MSR_LSTAR地址写入到驱动程序的全局变量中;组织挂钩数据并调用VMCALL指令传入虚拟机管理器中;虚拟机管理器保存挂钩数据以及虚拟机管理器中原始MSR_LSTAR函数地址,并修改原始MSR_LSTAR函数地址为挂钩地址;SYSCALL指令切入到挂钩地址,判断参数和系统服务描述表索引是否为挂钩的系统服务描述表函数,不是则返回至全局变量中,否则执行挂钩函数。本发明专利技术能够对所有系统函数做挂钩操作,使系统内核防护监测不到内核挂钩,能够兼容所有具有vt‑x特性的intel CPU的系统,不限于32位还是64位操作系统。

【技术实现步骤摘要】
一种不触发系统保护的内核挂钩方法
本专利技术涉及计算机
,更具体的说是涉及一种基于Intelvt-x的不触发系统保护的内核挂钩方法。
技术介绍
在win732位系统及以前的操作系统上,做内核安全防护时,一般使用内核挂钩(SSDTHOOK)的方法实现,即通过内核基址找到系统的SSDT地址,并找到需要HOOKAPI的函数索引号(SSDTIndex),通过SSDT地址加上索引号偏移找到要HOOK函数的函数地址,通常直接修改SSDT[SSDTIndex]=HookFuncAddr就可以了。但在win764位系统及之后的操作系统上,微软新加入了一种系统保护手段PATCHGUARD(简称PG),使用内核挂钩方法的时候就会被PG监测到,并产生蓝屏,所以在win764位及以上的操作系统上,不能使用SSDTHOOK内核挂钩方式。因此,如何提供一种不触发系统保护的内核挂钩方法是本领域技术人员亟需解决的问题。
技术实现思路
有鉴于此,本专利技术提供了一种不触发系统保护的内核挂钩方法,能够对所有系统函数做挂钩操作,监测进程所有行为动作以及调用的系统函数,且使PG监测不到内核挂钩,可以兼容所有具有vt-x特性的intelCPU的系统,不限于32位还是64位操作系统。为了实现上述目的,本专利技术采用如下技术方案:一种不触发系统保护的内核挂钩方法,包括:步骤一:读取并保存MSR中原始MSR_LSTAR函数地址,并将MSR_LSTAR函数地址写入到驱动程序的全局变量KiSystemCall64Ptr中;步骤二:组织挂钩数据并调用VMCALL指令传入虚拟机管理器中;步骤三:虚拟机管理器保存挂钩数据以及虚拟机管理器中原始MSR_LSTAR函数地址,利用挂钩数据修改虚拟机管理器中原始MSR_LSTAR函数地址为挂钩地址;步骤四:SYSCALL指令切入到挂钩地址,此时传入参数和系统服务描述表索引,判断参数和SSDT索引是否为挂钩的系统服务描述表函数,如果不是,则返回至全局变量KiSystemCall64Ptr中,否则执行挂钩函数。进一步,执行挂钩函数的具体步骤为:步骤a:将系统服务描述表索引、HookFuncAdder函数以及HookFuncAdder函数的参数个数记录到全局变量挂钩函数映射表HookTable和函数参数表ArgTble中,并对全局变量HOOK开关HookEnabled[Index]置TRUE,此时开启对应索引的系统服务描述表函数的钩子;步骤b:当程序调用系统服务描述表中的函数时,通过调用全局变量挂钩函数映射表HookTable中对应的系统服务描述表索引的HookFuncAdder。进一步,HOOK函数保存在MSR中原始MSR_LSTAR函数地址内。进一步,包括VT框架,VT框架采用GitHub开源平台开放的工程HyperBone。进一步,VT框架包括VmExitMSRRead和VmExitMSRWrite退出动作。经由上述的技术方案可知,与现有技术相比,本专利技术公开提供了一种不触发系统保护的内核挂钩方法,将钩子的位置存在MSR寄存器的MSR_LSTAR中,SYSCALL指令直接切入到挂钩地址,因为不是在系统服务描述表中修改了系统函数地址,所以使用内核检测工具是无法检测到系统服务描述表中的系统函数被挂钩了,本专利技术能够对所有系统函数做挂钩操作,监测进程所有行为动作以及调用的系统函数,且使PG监测不到内核挂钩,可以兼容所有具有vt-x特性的intelCPU的系统,不限于32位还是64位操作系统。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。图1附图为本专利技术提供的一种不触发系统保护的内核挂钩方法流程图。图2附图为本专利技术提供的VT框架结构示意图。图3附图为本专利技术提供的PG监测过程原理图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。本专利技术利用开源的VT技术框架,实现了一套基于Intelvt-x特性的CPU上的不触发PG的SSDTHOOK方法,本专利技术通过使用VT技术可以做到欺骗系统PG,使PG监测不到内核挂钩,从而不会产生蓝屏,VT框架来自GitHub开源平台开放的工程HyperBone。其中,VT框架结构图如图2所示,通过实现VMM来接管GUEST的Ring0层和Ring3层的所有处理。使用VT框架挂钩SSDT要了解MSR(ModelSpecificRegister)的相关概念和MSR_LSTAR(#defineMSR_LSTAR0xC0000082)。MSR是CPU的一组64位寄存器,可以分别通过RDMSR和WRMSR两条指令进行读和写的操作,前提要在ECX中写入MSR的地址。对于RDMSR指令,将会返回相应的MSR中64bit信息到(EDX:EAX)寄存器中。对于WRMSR指令,把要写入的信息存入(EDX:EAX)中,执行写指令后,即可将相应的信息存入ECX指定的MSR中。MSR_LSTAR是MSR中记录SYSCALL(从应用层到内核层的系统调用)进入内核后的SyscallEntryPoint(程序由应用层到内核层后的第一站)内核地址的寄存器标号,而SyscallEntryPoint中就会调用SSDT中的内核函数。基于VT的SSDTHOOK就是替换MSR中MSR_LSTAR的SyscallEntryPoint内核地址,实现SyscallEntryPoint调用SSDT函数的过程,并在调用SSDT函数时替换需要挂钩的SSDT函数。VT实现挂钩不触发PG的原理:在VT框架下,程序都是GUEST角色,相当于跑在虚拟机中的,而系统及PG是跑在HOST角色下的,相当于把程序和系统分离了,GUEST-HOST这种模式下,HOST下跑的程序是无法读取到GUEST下的程序的内存的,利用VT的这上特性就可以规避PG的检测了。如图1所示,本专利技术具体包括以下步骤:步骤一:读取并保存MSR中原始MSR_LSTAR函数地址,并将MSR_LSTAR函数地址写入到驱动程序的全局变量KiSystemCall64Ptr中KiSystemCall64Ptr=__readmsr(MSR_LSTAR),用于退出VT框架进行恢复时使用;步骤二:组织挂钩数据并调用VMCALL指令传入VMM中;在VT框架里HOST和GUEST的数据传递比较繁琐,需要通过VMCALL指令操作,调用VMCALL指令传递挂钩数据到VMM中,把HO本文档来自技高网...

【技术保护点】
1.一种不触发系统保护的内核挂钩方法,其特征在于,包括:/n步骤一:读取并保存MSR中原始MSR_LSTAR函数地址,并将MSR_LSTAR函数地址写入到驱动程序的全局变量KiSystemCall64Ptr中;/n步骤二:组织挂钩数据并调用VMCALL指令传入虚拟机管理器中;/n步骤三:虚拟机管理器保存挂钩数据以及虚拟机管理器中原始MSR_LSTAR函数地址,利用挂钩数据修改虚拟机管理器中原始MSR_LSTAR函数地址为挂钩地址;/n步骤四:SYSCALL指令切入到挂钩地址,判断传入的参数和系统服务描述表索引是否为挂钩的系统服务描述表函数,如果不是,则返回至全局变量KiSystemCall64Ptr中,否则执行挂钩函数。/n

【技术特征摘要】
1.一种不触发系统保护的内核挂钩方法,其特征在于,包括:
步骤一:读取并保存MSR中原始MSR_LSTAR函数地址,并将MSR_LSTAR函数地址写入到驱动程序的全局变量KiSystemCall64Ptr中;
步骤二:组织挂钩数据并调用VMCALL指令传入虚拟机管理器中;
步骤三:虚拟机管理器保存挂钩数据以及虚拟机管理器中原始MSR_LSTAR函数地址,利用挂钩数据修改虚拟机管理器中原始MSR_LSTAR函数地址为挂钩地址;
步骤四:SYSCALL指令切入到挂钩地址,判断传入的参数和系统服务描述表索引是否为挂钩的系统服务描述表函数,如果不是,则返回至全局变量KiSystemCall64Ptr中,否则执行挂钩函数。


2.根据权利要求1所述的一种不触发系统保护的内核挂钩方法,其特征在于,执行挂钩函数的具体步骤为:
步骤a:将系统服务描述表索引、HookFuncAdder函数以及HookFuncAd...

【专利技术属性】
技术研发人员:段海卿
申请(专利权)人:云袭网络技术河北有限公司
类型:发明
国别省市:河北;13

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

1