加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

【硬件假造化】阔别kernel的抱负乡

发布时间:2018-12-07 09:51:25 所属栏目:站长百科 来源:三寸法师
导读:简介 这个故事描写了怎样行使硬件假造化(HVM)使得本身的一些hook代码阔别内核不轻易被其他内核hook所影响而且较难被检测。本文的思绪来历于某学校的动态linux内核更新的玩意,代码大量抄自bluepill。 第一章 (Avalon) 阿瓦隆的黎明 因为驱动牛人越来越多系
副问题[/!--empirenews.page--]

 简介

这个故事描写了怎样行使硬件假造化(HVM)使得本身的一些hook代码阔别内核不轻易被其他内核hook所影响而且较难被检测。本文的思绪来历于某学校的动态linux内核更新的玩意,代码大量抄自bluepill。

【硬件假造化】阔别kernel的抱负乡

第一章 (Avalon) 阿瓦隆的黎明

因为驱动牛人越来越多体系节制权的争夺愈演愈烈,内核之中险些无一块净土。inline hook、ssdt hook等等各类hook充斥着我们幼小的内核。他们有些布局伟大,有些彼此关联,有些检测监督,想要从头得到那些节制点的节制权必需花些实力研究那些hook,使得原本很简朴的hook变得牵一发而动满身。

此刻有硬件假造化技能,我们可以换个思绪来办理那些题目了…

一、(Avalon)阿瓦隆的组成

(Avalon) 阿瓦隆的本体为以下几个部门:

1、Avlboot.sys(用于生涯刚初始化后还没被hook污染的体系内核利便之后行使)

2、Avalon.sys(用于读取伪内核信息,开启硬件假造化加载伪内核)

3、XXX.sys(用户操作Avlboot.sys中所提供的信息举办详细hook操纵的措施)

【硬件假造化】阔别kernel的抱负乡

二、(Avalon)阿瓦隆的实情

本文所先容的(Avalon) 阿瓦隆是一个基于假造化的内核加载框架。其操作硬件假造化(HVM)和一块没有被hook污染的内核内存,使得PC中同时运行着两个内核。而且Avalon通过节制sysenter_eip和idt中指向伪内核的响应地点来得到节制权。

简而言之,(Avalon)阿瓦隆就是操作硬件假造化(HVM)加载本身的内核排斥原内核,使得本身能在不被检测的情形下得到内核的节制权。

实现道理如下图所示:


【硬件假造化】阔别kernel的抱负乡

本身的hook措施在得到伪内核的基地点后,可以通过hookport来处理赏罚ssdt,shadow ssdt(strongod必要备份其所hook的ssdt轻微贫困点,agp什么的只要把地点偏移一下就能用了)。

三、(Avalon)阿瓦隆的应用

着实我们可以把(Avalon)阿瓦隆当作是一种变相的sysenter hook+idt hook。

因为(Avalon)阿瓦隆基于硬件假造化(HVM)使得我们可以排斥整个内核,使得内核可以在运行时可以及时的替代。

由于伪内核的地址内存范畴不受内存监控,此外措施也无法直接会见,使得我们的伪内核就成了不消思量其他滋扰题目,可以随意hook的安详的抱负乡。

这种方法的hook和传统的一些hook对比有着以下利益:

1、不在传统的内存监控的范畴,较难检测。

2、不滋扰体系华夏有的hook代码,兼容性较高。

可是同样有一些弱点:

1、无法直接过问干与object hook,irp hook等不依靠于内核内存的hook代码

2、整个体系依靠于硬件假造化(HVM),对硬件装备有必然要求。

第二章 梦想具现化

一、纯洁的初始化

起首我们来实现(Avalon)阿瓦隆的初始化,初始化由4个部门构成:内核信息获取、伪内核结构、IDT信息生涯、原始SYSENTER_EIP获取。

实当代码如下:

  1. NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)  
  2. {  
  3.  
  4. ... 
  5.  
  6. KrnlCopy(); 
  7. IDTCopy(); 
  8. ReadMsrSysenter(); 
  9.  
  10. ... 
  11.  
  12.  
  13. /* 
  14.  
  15.   内核拷贝 
  16.  
  17. */ 
  18.  
  19. VOID KrnlCopy() 
  20. PVOID Buffer; 
  21. ULONG Size; 
  22. ULONG RetSize; 
  23. PSYSTEM_MODULE_INFORMATION InfoBuffer; 
  24. NTSTATUS Status; 
  25. PVOID ModuleBase; 
  26. ULONG ModuleSize; 
  27.  
  28. Size=0x1000; 
  29.  
  30.  
  31. do { 
  32.  Buffer=ExAllocatePool(NonPagedPool,Size); 
  33.  Status=ZwQuerySystemInformation(SystemModuleInformation,Buffer,Size,&RetSize); 
  34.  if (Status == STATUS_INFO_LENGTH_MISMATCH) 
  35.        { 
  36.            ExFreePool(Buffer); 
  37.            Size = RetSize; 
  38.        }   
  39. }while(Status == STATUS_INFO_LENGTH_MISMATCH); 
  40.  
  41. InfoBuffer = (PSYSTEM_MODULE_INFORMATION)Buffer; 
  42.  
  43.  
  44. ModuleBase=(PVOID)(InfoBuffer->ModuleInfo[0].Base); 
  45. Orig_krnl=(ULONG)ModuleBase; 
  46.  
  47. DbgPrint("AvlBoot:Orig_krnl Base=%xn",ModuleBase); 
  48. ModuleSize=InfoBuffer->ModuleInfo[0].Size; 
  49. makeKernelCopy((ULONG)ModuleBase,ModuleSize); 
  50. DbgPrint("AvlBoot:Avl_krnl Base=%xn",Avl_krnl); 
  51. ExFreePool(Buffer); 

等初始化之后,其他部件就可以通过会见Avlboot.sys来得到伪内核的信息和内核原始信息。

二、抄来的假造化

这里先简朴的向各人先容下,Intel vt硬件假造化的步调:

1、搜查vt情形

2、开启vt成果

3、添补vt,存储假造机状态

4、设定必要拦截项目

5、设定从假造机中退出时返回的地点

6、启动假造机,,守候拦截项目触发

7、拦截项目被触发,进入相干项目标处理赏罚例程

8、规复假造机继承运行

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读