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实现进程保护利用Intel VT实现进程保护

 利用Intel VT实现进程保护

3. 启动64位ida

利用Intel VT实现进程保护
利用Intel VT实现进程保护

 

4. 连接端口

利用Intel VT实现进程保护

利用Intel VT实现进程保护利用Intel VT实现进程保护利用Intel VT实现进程保护利用Intel VT实现进程保护

利用Intel VT实现进程保护

 

5. 会断在这个地址

利用Intel VT实现进程保护利用Intel VT实现进程保护

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

利用Intel VT实现进程保护

利用Intel VT实现进程保护利用Intel VT实现进程保护

利用Intel VT实现进程保护利用Intel VT实现进程保护利用Intel VT实现进程保护

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

利用Intel VT实现进程保护

 利用Intel VT实现进程保护

6. 加载驱动

利用Intel VT实现进程保护利用Intel VT实现进程保护

记录下基址

 

7. ida加载符号

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

利用Intel VT实现进程保护

利用Intel VT实现进程保护

利用Intel VT实现进程保护

利用Intel VT实现进程保护

提示符号加载成功

利用Intel VT实现进程保护利用Intel VT实现进程保护

断点可以成功断下

利用Intel VT实现进程保护

 利用Intel VT实现进程保护

二、从用户态到内核态

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实现进程保护 利用Intel VT实现进程保护

 

 

三、利用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实现进程保护利用Intel VT实现进程保护

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

 

3. 启动vm

   __vmx_vmlaunch

4. 设置hook函数

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

利用Intel VT实现进程保护利用Intel VT实现进程保护

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

利用Intel VT实现进程保护

 利用Intel VT实现进程保护

5. 初始化HookTable

利用Intel VT实现进程保护利用Intel VT实现进程保护

利用Intel VT实现进程保护

利用Intel VT实现进程保护

禁止结束notepad进程。

利用Intel VT实现进程保护利用Intel VT实现进程保护

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

 

相关文章:

  • 2021-12-23
  • 2022-01-08
  • 2022-12-23
  • 2021-10-29
  • 2021-11-14
  • 2021-06-18
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-12-10
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-30
相关资源
相似解决方案