在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

反虛擬機(jī)技術(shù)合集3

jf_78858299 ? 來(lái)源:看雪社區(qū) ? 作者:houjingyi ? 2023-02-14 13:45 ? 次閱讀

二、查找漏洞指令

虛擬機(jī)監(jiān)視器監(jiān)視虛擬機(jī)的運(yùn)行,它運(yùn)行在宿主操作系統(tǒng),并為客戶機(jī)操作系統(tǒng)提供一個(gè)完整的虛擬平臺(tái)。與此同時(shí),虛擬機(jī)監(jiān)視器也存在一些可以被惡意代碼探測(cè)到虛擬化的安全缺陷。

在內(nèi)核模式下,VMware使用二進(jìn)制翻譯技術(shù)進(jìn)行指令的模擬。運(yùn)行于內(nèi)核態(tài)的某些特權(quán)指令被解釋和模擬,所以它們不在物理處理器上運(yùn)行。

相反,在用戶模式下,代碼直接在處理器上運(yùn)行,幾乎所有與硬件交互的指令,要么是特權(quán)指令,要么會(huì)產(chǎn)生內(nèi)核態(tài)陷阱指令或中斷指令。

VMware截獲所有中斷并處理它們,以便虛擬機(jī)仍然認(rèn)為這是一個(gè)正常機(jī)器。然而在x86體系結(jié)構(gòu)中,一些指令在獲取硬件相關(guān)的信息時(shí)并不產(chǎn)生異常,如sidt、sgdt、sldt、cpuid等等。為了正確虛擬這些指令,VMware需要在所有指令上進(jìn)行二進(jìn)制翻譯,因此造成巨大的性能損失。

為了避免執(zhí)行全指令模擬造成的巨大性能損失,VMware允許一些特定指令在沒(méi)有正確虛擬化的前提下運(yùn)行。最終,這意味著某些指令序列在VMware虛擬機(jī)而不是在物理機(jī)中運(yùn)行時(shí)返回不同的結(jié)果。處理器使用某些關(guān)鍵的結(jié)構(gòu)與表,它們會(huì)被加載與真實(shí)系統(tǒng)不同的偏移量,而這正是未進(jìn)行全虛擬化的副作用。

中斷描述表(IDT)是CPU內(nèi)部的一個(gè)數(shù)據(jù)結(jié)構(gòu),操作系統(tǒng)使用它來(lái)確保正確響應(yīng)中斷和異常。在x86體系結(jié)構(gòu)下,所有的內(nèi)存獲取,或是通過(guò)全局描述表(GDT)獲得,或是通過(guò)本地描述表(LDT)獲得。這些表中包含段描述符,它們提供每一個(gè)段的詳細(xì)存取信息,其中包含段基地址類型、長(zhǎng)度,以及存取權(quán)限等等。

IDT、GDT和LDT是CPU內(nèi)部的寄存器,它們分別存放著各自表的基地址和大小。有三條敏感指令(sidt、sgdt和sldt)可以讀取這些表的位置,并且將相應(yīng)的寄存器存入內(nèi)存地址。因?yàn)檫@些指令可以隨時(shí)被用戶態(tài)代碼調(diào)用,且不會(huì)產(chǎn)生陷阱,也未被VMware正確虛擬化,所以這些異常都可能被用來(lái)探測(cè)VMware的存在。

1.使用Red Pill反虛擬機(jī)技術(shù)

Red Pill通過(guò)運(yùn)行sidt指令獲取IDTR寄存器的值。虛擬機(jī)監(jiān)視器必須重新定位Guest系統(tǒng)的IDTR,來(lái)避免與Host系統(tǒng)的IDTR沖突。因?yàn)樵谔摂M機(jī)中運(yùn)行sidt指令時(shí),虛擬機(jī)監(jiān)視器不會(huì)得到通知,所以會(huì)返回虛擬機(jī)的IDTR。

Red Pill通過(guò)測(cè)試這種差異來(lái)探測(cè)Vmware的使用。這種方法存在一個(gè)缺陷,由于IDT的值只針對(duì)處于正在運(yùn)行的處理器而言,在單CPU中它是個(gè)常量,但當(dāng)它處于多CPU時(shí)就可能會(huì)受到影響了,因?yàn)槊總€(gè)CPU都有其自己的IDT,這樣問(wèn)題就自然而然的產(chǎn)生了。

針對(duì)此問(wèn)題,Offensive Computing組織成員提出了兩種應(yīng)對(duì)方法:

其中一種方法就是利用Red Pill反復(fù)地在系統(tǒng)上循環(huán)執(zhí)行任務(wù),以此構(gòu)造出一張當(dāng)前系統(tǒng)的IDT值變化統(tǒng)計(jì)圖,但這會(huì)增加CPU負(fù)擔(dān);

另一種方法就是windows API函數(shù)SetThreadAffinityMask()將線程限制在單處理器上執(zhí)行,當(dāng)執(zhí)行此測(cè)試時(shí)只能準(zhǔn)確地將線程執(zhí)行環(huán)境限制在本地處理器,而對(duì)于將線程限制在VM處理器上就可能行不通了,因?yàn)閂M是計(jì)劃在各處理器上運(yùn)行的,VM線程在不同的處理器上執(zhí)行時(shí),IDT值將會(huì)發(fā)生變化,因此此方法也很少被使用。

2.使用No Pill反虛擬機(jī)技術(shù)

sgdt和sldt指令探測(cè)VMware的技術(shù)通常被稱為No Pill。

BOOL CheckVMWare()  
{  
   ULONG xdt = 0 ;  
   ULONG InVM = 0;  
   __asm  
   {  
       push edx  
       sidt [esp-2]  
       pop edx  
       nop  
       mov xdt , edx  
   }  
   if (xdt > 0xd0000000)  
   {  
   
       InVM = 1;  
   }  
   else  
   {  
       InVM = 0;  
   }  
   __asm  
   {  
       push edx  
       sgdt [esp-2]  
       pop edx  
       nop  
       mov xdt , edx  
   }  
   if (xdt > 0xd0000000)  
   {  
       InVM += 1;  
   }  
   if (InVM == 0)  
   {  
       return FALSE;  
   }  
   else  
   {  
       return TRUE;  
   }  
}

通過(guò)禁用VMware加速可以防止No Pill技術(shù)的探測(cè)。

3.查詢I/O端口

VMware使用虛擬化的I/O端口完成宿主系統(tǒng)與虛擬機(jī)之間的通信,以便支持諸如復(fù)制和粘貼功能。這個(gè)端口可以被查詢,然后與一個(gè)magic數(shù)比較,以確定VMware的使用。

這種技術(shù)成功的關(guān)鍵在于x86體系結(jié)構(gòu)中的in指令,它從一個(gè)源操作數(shù)指定的端口復(fù)制數(shù)據(jù)到目的操作數(shù)指定的內(nèi)存地址。VMware會(huì)監(jiān)視in指令的執(zhí)行,并捕獲目的通信端口為0x5668(VX)的I/O。

VMware會(huì)檢查第二個(gè)操作數(shù)是否是VX,在這種情況發(fā)生時(shí),EAX寄存器載入的值是0x564D5868(VMXh),ECX寄存器必須被載入你希望在端口上執(zhí)行相應(yīng)操作的值,值0xA表示 get VMware version type,0x14代表 get the memory size。

它們都可以被用來(lái)探測(cè)VMware,但0xA更受歡迎,因?yàn)樗艽_定VMware的版本。如代碼所示setz指令在magic數(shù)與VMXh匹配時(shí)設(shè)置返回值rc為1,如果在真實(shí)的機(jī)器上運(yùn)行會(huì)觸發(fā)EXCEPTION_EXECUTE_HANDLER 異常,在異常處理中設(shè)置返回值rc為0。

BOOL CheckVMWare()  
{  
   bool rc = true;  
   __try  
   {  
       __asm  
       {  
           push   edx  
           push   ecx  
           push   ebx    
           mov    eax, 'VMXh'  
           mov    ebx, 0    
           mov    ecx, 10  
           mov    edx, 'VX'  
           in     eax, dx  
           cmp    ebx, 'VMXh'  
           setz   [rc]  
           pop    ebx  
           pop    ecx  
           pop    edx  
       }  
   }  
   __except(EXCEPTION_EXECUTE_HANDLER)    
   {  
       rc = false;  
   }  
   return rc;  
}

對(duì)付這種反虛擬化技術(shù)的最簡(jiǎn)單方法是使用NOP指令替換in指令,或修補(bǔ)條件跳轉(zhuǎn),使得它不論比較結(jié)果如何,都執(zhí)行到未探測(cè)到虛擬機(jī)的程序分支。

4.使用str指令

在保護(hù)模式下運(yùn)行的所有程序在切換任務(wù)時(shí),對(duì)于當(dāng)前任務(wù)中指向TSS的段選擇器將會(huì)被存儲(chǔ)在任務(wù)寄存器中,TSS中包含有當(dāng)前任務(wù)的可執(zhí)行環(huán)境狀態(tài),包括通用寄存器狀態(tài)、段寄存器狀態(tài)、標(biāo)志寄存器狀態(tài)、EIP寄存器狀態(tài)等等,當(dāng)此項(xiàng)任務(wù)再次被執(zhí)行時(shí),處理器就會(huì)其原先保存的任務(wù)狀態(tài)。

每項(xiàng)任務(wù)均有其自己的TSS,而我們可以通過(guò)STR指令來(lái)獲取指向當(dāng)前任務(wù)中TSS的段選擇器。這里STR指令是用于將任務(wù)寄存器(TR)中的段選擇器存儲(chǔ)到目標(biāo)操作數(shù),目標(biāo)操作數(shù)可以是通用寄存器或內(nèi)存位置,使用此指令存儲(chǔ)的段選擇器指向當(dāng)前正在運(yùn)行的任務(wù)的任務(wù)狀態(tài)段(TSS)。

在虛擬機(jī)和真實(shí)主機(jī)之中,通過(guò)STR讀取的地址是不同的,當(dāng)?shù)刂返扔?x0040xxxx時(shí),說(shuō)明處于虛擬機(jī)中,否則為真實(shí)主機(jī)。

BOOL CheckVMWare()  
{  
   unsigned char mem[4] = {0};  
   __asm str mem;  
   if ((mem[0] == 0x00) && (mem[1] == 0x40))  
   {  
       return TRUE;  
   }  
   else  
   {  
       return FALSE;  
   }  
}

在IDA PRO中,可以使用下面的腳本查找我們前面提到的指令。

from idautils import *  
from idc import *  
 
heads = Heads(SegStart(ScreenEA()), SegEnd(ScreenEA()))  
antiVM = []  
for i in heads:  
   if (GetMnem(i) == "sidt" or GetMnem(i) == "sgdt" or GetMnem(i) == "sldt" or GetMnem(i) == "smsw" or GetMnem(i) == "str" or GetMnem(i) == "in" or GetMnem(i) == "cpuid"):  
       antiVM.append(i)  
 
print "Number of potential Anti-VM instructions: %d" % (len(antiVM))  
 
for i in antiVM:  
   SetColor(i, CIC_ITEM, 0x0000ff)  
   Message("Anti-VM: %08x\\n" % i)

要在IDA PRO中運(yùn)行腳本,選擇File->Script File,可以看到下面的輸出。

圖片

這個(gè)輸出表明腳本檢測(cè)到了三條漏洞指令類型。滾動(dòng)到IDA PRO的反匯編窗口,我們看到三條紅色高亮顯示的指令sidt、str和sldt。

5.使用無(wú)效的操作碼

每臺(tái)機(jī)器都有一組定義的指令,通常稱為指令集架構(gòu)(Instruction Set Architecture)。

當(dāng)遇到無(wú)效指令(不存在于ISA中)時(shí),機(jī)器引發(fā)無(wú)效操作碼異常。軟件可以處理異常(使用通常的try/catch機(jī)制),也可以讓操作系統(tǒng)處理異常,或者在最壞的情況下崩潰機(jī)器。

VirtualPC使用一堆無(wú)效指令來(lái)允許虛擬機(jī)和VirtualPC之間連接。當(dāng)VirtualPC的虛擬機(jī)想要與VirtualPC通信時(shí),程序設(shè)置異常處理程序(try/catch塊),在調(diào)用VM軟件之前設(shè)置所需的參數(shù),發(fā)出特殊的無(wú)效操作碼指令。

VM軟件將識(shí)別此無(wú)效操作碼并相應(yīng)地操作,如果VirtualPC存在則不引起異常,并且如果VirtualPC不存在則產(chǎn)生異常。

最后,程序的catch塊將處理異常并檢查返回的VM軟件的參數(shù)。總之,VirtualPC使用無(wú)效的操作碼機(jī)制作為后門。

DWORD IslnsideVPC_exceptionFilter(LPEXCEPTION_POINTERS ep)  
{  
   PCONTEXT ctx=ep->ContextRecord;  
   ctx->Ebx = -1; //未運(yùn)行在VPC中  
   ctx->Eip += 4; //跳過(guò)”call VPC”操作  
   return EXCEPTION_CONTINUE_EXECUTION;  
}
BOOL CheckVirtualPC()  
{  
   bool rc = TRUE;  
   __try  
   {  
       __asm  
       {  
           push ebx  
           mov ebx, 0  
           mov eax, 1  
           __emit 0fh  
           __emit 3fh  
           __emit 07h  
           __emit 0bh  
           test ebx, ebx  
           setz[rc]  
           pop ebx  
       }  
   }  
   __except(IslnsideVPC_exceptionFilter(GetExceptionInformation()))  
   {  
       rc = FALSE;  
   }  
   return rc;  
}

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Mac
    Mac
    +關(guān)注

    關(guān)注

    0

    文章

    1117

    瀏覽量

    52660
  • 惡意代碼
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    7724
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    962

    瀏覽量

    29069
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么是虛擬機(jī)虛擬機(jī)真的那么好用嗎?

    在日新月異的科技世界中,虛擬技術(shù)如同一座橋梁,連接著現(xiàn)實(shí)與數(shù)字的鴻溝,為我們打開(kāi)了全新的計(jì)算維度。虛擬機(jī),這一概念,自其誕生以來(lái),就以其獨(dú)特的魅力和強(qiáng)大的功能,深深地影響了軟件開(kāi)發(fā)、系統(tǒng)測(cè)試和云
    的頭像 發(fā)表于 07-06 08:05 ?463次閱讀
    什么是<b class='flag-5'>虛擬機(jī)</b>?<b class='flag-5'>虛擬機(jī)</b>真的那么好用嗎?

    有關(guān)虛擬機(jī)虛擬技術(shù)的幾點(diǎn)詮注

    虛擬機(jī)虛擬技術(shù)給計(jì)算機(jī)應(yīng)用注入了新的研究與開(kāi)發(fā)點(diǎn),同時(shí)也存在諸多不利因素。本文綜述了虛擬機(jī)虛擬
    發(fā)表于 06-22 18:04 ?36次下載

    虛擬機(jī)虛擬技術(shù)

    虛擬機(jī)虛擬技術(shù)給計(jì)算機(jī)應(yīng)用注入了新的研究與開(kāi)發(fā)點(diǎn),同時(shí)也存在諸多不利因素。本文綜述了虛擬機(jī)虛擬
    發(fā)表于 09-07 10:15 ?13次下載

    基于虛擬機(jī)技術(shù)的DSC仿真系統(tǒng)設(shè)計(jì)

    提出了基于虛擬機(jī)技術(shù)的DCS仿真系統(tǒng)的實(shí)現(xiàn)方式,描述了虛擬控制器的具體實(shí)現(xiàn)方法及虛擬機(jī)技術(shù)的其他應(yīng)用。
    發(fā)表于 12-03 17:26 ?27次下載
    基于<b class='flag-5'>虛擬機(jī)</b><b class='flag-5'>技術(shù)</b>的DSC仿真系統(tǒng)設(shè)計(jì)

    基于虛擬機(jī)技術(shù)的DCS仿真系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    提出了基于虛擬機(jī)技術(shù)的DCS仿真系統(tǒng)的實(shí)現(xiàn)方式,描述了虛擬控制器的具體實(shí)現(xiàn)方法及虛擬機(jī)技術(shù)的其他應(yīng)用。
    發(fā)表于 01-16 15:04 ?2384次閱讀
    基于<b class='flag-5'>虛擬機(jī)</b><b class='flag-5'>技術(shù)</b>的DCS仿真系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    虛擬機(jī):QEMU虛擬機(jī)和主機(jī)無(wú)線網(wǎng)絡(luò)通訊設(shè)置

    虛擬機(jī):QEMU虛擬機(jī)和主機(jī)無(wú)線網(wǎng)絡(luò)通訊設(shè)置
    的頭像 發(fā)表于 06-22 10:19 ?5728次閱讀
    <b class='flag-5'>虛擬機(jī)</b>:QEMU<b class='flag-5'>虛擬機(jī)</b>和主機(jī)無(wú)線網(wǎng)絡(luò)通訊設(shè)置

    KVM虛擬機(jī)管理和基本使用

    KVM — 全稱是基于內(nèi)核的虛擬機(jī)(Kernel-based Virtual Machine)是一個(gè)開(kāi)源軟件,基于內(nèi)核的虛擬技術(shù),實(shí)際是嵌入系統(tǒng)的一個(gè)虛擬化模塊,通過(guò)優(yōu)化內(nèi)核來(lái)使用
    的頭像 發(fā)表于 02-07 09:20 ?1619次閱讀

    虛擬機(jī)技術(shù)合集1

    惡意代碼編寫(xiě)者經(jīng)常使用虛擬機(jī)技術(shù)逃避分析,這種技術(shù)可以檢測(cè)自己是否運(yùn)行在虛擬機(jī)中。如果惡意代碼探測(cè)到自己在
    的頭像 發(fā)表于 02-14 13:45 ?1484次閱讀

    虛擬機(jī)技術(shù)合集2

    惡意代碼編寫(xiě)者經(jīng)常使用虛擬機(jī)技術(shù)逃避分析,這種技術(shù)可以檢測(cè)自己是否運(yùn)行在虛擬機(jī)中。如果惡意代碼探測(cè)到自己在
    的頭像 發(fā)表于 02-14 13:45 ?852次閱讀
    <b class='flag-5'>反</b><b class='flag-5'>虛擬機(jī)</b><b class='flag-5'>技術(shù)</b><b class='flag-5'>合集</b>2

    虛擬機(jī)技術(shù)合集4

    惡意代碼編寫(xiě)者經(jīng)常使用虛擬機(jī)技術(shù)逃避分析,這種技術(shù)可以檢測(cè)自己是否運(yùn)行在虛擬機(jī)中。如果惡意代碼探測(cè)到自己在
    的頭像 發(fā)表于 02-14 13:46 ?1311次閱讀
    <b class='flag-5'>反</b><b class='flag-5'>虛擬機(jī)</b><b class='flag-5'>技術(shù)</b><b class='flag-5'>合集</b>4

    linux虛擬機(jī)使用教程

    引言:Linux虛擬機(jī)是一種方便且常用的技術(shù),它允許用戶在現(xiàn)有操作系統(tǒng)的基礎(chǔ)上創(chuàng)建和運(yùn)行另一個(gè)獨(dú)立的操作系統(tǒng)。在本篇文章中,我們將提供一份詳盡的教程,幫助你了解如何安裝、配置和使用Linux虛擬機(jī)
    的頭像 發(fā)表于 11-17 10:06 ?2046次閱讀

    Docker與虛擬機(jī)的區(qū)別

    Docker和虛擬機(jī)是兩種不同的虛擬技術(shù),它們?cè)趯?shí)現(xiàn)方式、資源消耗、運(yùn)行性能等方面存在許多差異。本文將會(huì)詳細(xì)介紹它們的區(qū)別。 一、實(shí)現(xiàn)方式 1.1 虛擬機(jī)
    的頭像 發(fā)表于 11-23 09:37 ?1.1w次閱讀

    怎么安裝linux虛擬機(jī)

    在計(jì)算機(jī)領(lǐng)域,虛擬機(jī)是一種軟件程序,它允許在主操作系統(tǒng)上運(yùn)行多個(gè)虛擬操作系統(tǒng)。Linux虛擬機(jī)在開(kāi)發(fā)、測(cè)試和學(xué)習(xí)等環(huán)境中得到廣泛應(yīng)用。本文將詳細(xì)介紹如何安裝Linux虛擬機(jī),并提供一個(gè)
    的頭像 發(fā)表于 11-23 10:50 ?1384次閱讀

    虛擬機(jī)ubuntu怎么聯(lián)網(wǎng)

    虛擬機(jī)ubuntu怎么聯(lián)網(wǎng)? 虛擬機(jī)(Virtual Machine)是運(yùn)行在物理機(jī)(Host Machine)上的虛擬操作系統(tǒng)環(huán)境。在虛擬機(jī)
    的頭像 發(fā)表于 12-27 16:51 ?1335次閱讀

    虛擬機(jī)數(shù)據(jù)恢復(fù)—KVM虛擬機(jī)被誤刪除的數(shù)據(jù)恢復(fù)案例

    :EXT4 主要數(shù)據(jù):MySQL數(shù)據(jù)庫(kù) 虛擬機(jī)2:備份數(shù)據(jù)庫(kù)服務(wù)器 虛擬磁盤(pán):系統(tǒng)盤(pán)(qcow2)+數(shù)據(jù)盤(pán)(raw) 文件系統(tǒng):EXT4 主要數(shù)據(jù):MySQL數(shù)據(jù)庫(kù) 虛擬機(jī)
    的頭像 發(fā)表于 08-07 13:33 ?721次閱讀
    <b class='flag-5'>虛擬機(jī)</b>數(shù)據(jù)恢復(fù)—KVM<b class='flag-5'>虛擬機(jī)</b>被誤刪除的數(shù)據(jù)恢復(fù)案例
    主站蜘蛛池模板: 濑亚美莉vs黑人欧美视频 | 日日操日日射 | 色爱综合网欧美 | 欧美成人性色区 | hdhdhd69日本xxx| 日本三级香港三级人妇99 | 日本特黄特色aaa大片免费欧 | 精品综合久久久久久98 | 一 级 黄 色 片生活片 | 毛片录像| 日本夜夜操 | 五月激情网站 | 天天摸天天看 | 国产日韩欧美一区二区 | 特级黄 | 伊在线视频 | 精品亚洲成a人片在线观看 精品亚洲大全 | 久久久99精品免费观看精品 | 欧美日韩精品一区二区在线线 | 黑人性xx| 色综合天天综合网国产国产人 | 国产精品夜夜春夜夜爽 | youjizz国产 | 久久99久久精品免费思思6 | 国产在视频线精品视频2021 | 国产免费播放一区二区三区 | 欧美人与物另类 | 国产精品资源网 | 久操资源在线 | 五月激情综合婷婷 | 免费观看视频在线 | 亚洲第一免费播放区 | 亚洲特黄大黄一级毛片 | 女人69xxx| 中文在线 | 中文 | 91极品视频在线观看 | 开心激情五月网 | 亚洲免费黄色网址 | 亚洲成综合人影院在院播放 | 美欧毛片| 迅雷www天堂在线资源 |