利用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. 进入虚拟机,系统停住

利用Intel VT实现进程保护_第1张图片

 

3. 启动64位ida

利用Intel VT实现进程保护_第2张图片

 

4. 连接端口

利用Intel VT实现进程保护_第3张图片利用Intel VT实现进程保护_第4张图片利用Intel VT实现进程保护_第5张图片


 

5. 会断在这个地址

利用Intel VT实现进程保护_第6张图片

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

利用Intel VT实现进程保护_第7张图片

利用Intel VT实现进程保护_第8张图片利用Intel VT实现进程保护_第9张图片

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

 利用Intel VT实现进程保护_第10张图片

6. 加载驱动

利用Intel VT实现进程保护_第11张图片

记录下基址

 

7. ida加载符号

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

利用Intel VT实现进程保护_第12张图片

利用Intel VT实现进程保护_第13张图片

提示符号加载成功

利用Intel VT实现进程保护_第14张图片

断点可以成功断下

 利用Intel VT实现进程保护_第15张图片

二、从用户态到内核态

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

}

 利用Intel VT实现进程保护_第16张图片

 

 

三、利用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中。

利用Intel VT实现进程保护_第17张图片

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

 

3. 启动vm

   __vmx_vmlaunch

4. 设置hook函数

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

利用Intel VT实现进程保护_第18张图片

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

 利用Intel VT实现进程保护_第19张图片

5. 初始化HookTable

利用Intel VT实现进程保护_第20张图片


利用Intel VT实现进程保护_第21张图片

禁止结束notepad进程。

利用Intel VT实现进程保护_第22张图片

无法结束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

 

你可能感兴趣的:(利用Intel VT实现进程保护)