利用Intel VT实现进程保护

    Intel VT即Intel公司的Virtualization Technology虚拟化技术, 在硬件级别上完成计算机的虚拟化。为实现硬件虚拟化 ,VT增加了12条新的 VMX指令。VT可以让一个CPU工作起来像多个CPU在并行运行,从而使得在一部电脑内同时运行多个操作系统成为可能。在安全领域,利用VT技术,64位系统的防护可以做到跟32位同级别的强度。

一、vt调试方法

1. 修改vmx文件

debugStub.listen.guest32.remote = "TRUE"

debugStub.listen.guest64.remote = "TRUE"

monitor.debugOnStartGuest64 = "TRUE"

debugStub.hideBreakpoints = "TRUE"

bios.bootDelay = "3000"

 

2. 进入虚拟机,系统停住

 

3. 启动64位ida

 

4. 连接端口

 

 

 

 

 

5. 会断在这个地址

 

明显错误的地址,修正地址:

 

 

 

F9继续运行,进入windows,再次暂停,即会断在内核空间。

 

 

6. 加载驱动

 

记录下基址

 

7. ida加载符号

sys和pdb需要放在真实机同一目录

 

 

提示符号加载成功

 

断点可以成功断下

 

 

二、从用户态到内核态

SYSENTER/SYSEXIT指令从 Pentium® II 处理器开始提供的,用于用户级到特权级的堆栈以及指令指针的转换。并有一组特殊寄存器来辅助实现,这类特殊寄存器在IA-32中称为MSR(Model Specific Register)。

MSR是CPU 的一组64位寄存器,可以分别通过RDMSR和WRMSR两条指令进行读和写的操作,前提要在ECX中写入MSR的地址。对于RDMSR指令,将会返回相应的MSR中64bit信息到(EDX:EAX)寄存器中;对于WRMSR 指令,把要写入的信息存入(EDX:EAX)中,执行写指令后,即可将相应的信息存入ECX指定的MSR中。

获取KiFastCalllEntry地址:

_asm

{

   movecx,0x176

   rdmsr

   movKiFastCalllEntryAddr,eax

}

 

 

 

 

三、利用vt实现”ssdt hook”

1. 设置MSR bitmap: 

PUCHARbitMapReadLow = g_Data->MSRBitmap; 

RtlInitializeBitMap(&bitMapReadHighHeader, (PULONG)bitMapReadHigh, 1024 * 8 );

RtlSetBit(&bitMapReadHighHeader, MSR_LSTAR - 0xC0000000 );

__vmx_vmwrite(MSR_BITMAP, MmGetPhysicalAddress( g_Data->MSRBitmap ).QuadPart );

2. 设置vm entry

   __vmx_vmwrite(HOST_RIP, (ULONG_PTR)VmxVMEntry );

2.1 VmxpExitHandler,使用 __vmx_vmread(VM_EXIT_REASON, &FieldData ),获取vm exit reason。

2.2 当为EXIT_REASON_MSR_READ时,根据参数,获取GuestState->GpRegs->Rcx,值为MSR_LSTAR时,将原始LSTAR函数地址写入GuestState->GpRegs->Rax/Rdx中。

 

最后实现的目的: PatchGuard、安全软件等__readmsr( MSR_LSTAR )时,返回给它原始值,用来躲避检测。

 

3. 启动vm

   __vmx_vmlaunch

4. 设置hook函数

发送__vmx_vmcall自定义退出事件,事件处理函数里面用__writemsr( MSR_LSTAR,GuestState->GpRegs->Rdx ),将Kisystemcall_Emulate写入msr寄存器

 

Kisystemcall64_Emulate的写法: 判断index是否为hook的函数,如果不是的话,走原来的Kisystemcall64函数,如果是的话,走KiSystemCall64_Emulate -> KiSystemServiceStart_Emulate->KiSystemServiceRepeat_Emulate

 

 

5. 初始化HookTable

 

 

禁止结束notepad进程。

 

无法结束notepad,且pchunter检测不出”ssdt”被动手脚。

 

 

四、参考文献

1.Linux kerneldebugging with IDA pro and VMware    http://dorgamza.tistory.com/1

2.MinimalisticVT-x hypervisor with hooks   https://github.com/DarthTon/HyperBone

 

qq交流群: 733612635

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值