利用Intel VT實現進程保護

來源:互聯網
上載者:User

    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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.