王晨昊 勵家磊 應(yīng)俊 薛義博 尚中義
摘要:虛擬機是指通過軟件模擬的具有完整硬件系統(tǒng)功能的、運行在一個完全隔離環(huán)境中的完整計算機系統(tǒng),在實體計算機中能夠完成的工作在虛擬機中都能夠?qū)崿F(xiàn)。該文介紹利用IDT基址檢測虛擬機和通過執(zhí)行特權(quán)指令來檢測虛擬機。
關(guān)鍵字:攻防檢測,虛擬機技術(shù),IDT基址檢測
0前言
在個人計算機上模擬出虛擬機,體驗不同版本的操作系統(tǒng),如Linux、Mac還可以進(jìn)行其他操作。虛擬機技術(shù)在如今的信息安全領(lǐng)域得到了廣泛的運用,尤其是惡意軟件分析中。然而虛擬機技術(shù)的使用使得攻擊者為了提高破壞真實主機的成功率,在惡意程序中加入了檢測虛擬機的代碼,用于判斷當(dāng)前程序處于哪一種環(huán)境。當(dāng)其發(fā)現(xiàn)程序處于虛擬機時,會立刻改變甚至中斷執(zhí)行,讓反病毒人員分析惡意軟件行為變得困難。
1利用IDT基址檢測虛擬機
1.1技術(shù)介紹
利用IDT基址檢測虛擬機的方法是一種通用方式,對VMware和Virtual?PC均適用。中斷描述符表IDT(Interrupt?Descriptor?Table)用于查找處理中斷時所用的軟件函數(shù),它是一個由256項組成的數(shù)據(jù),其中每一中斷對應(yīng)一項函數(shù)。讀取IDT基址,我們需要通過SIDT指令來讀取IDTR(中斷描述符表寄存器,用于IDT在內(nèi)存中的基址),格式為如下:
IDTR只有一個,而操作系統(tǒng)有虛擬機和主機系統(tǒng)兩個。為了防止發(fā)生沖突,VMM需要修改虛擬機中的IDT地址,依靠虛擬機環(huán)境中執(zhí)行sidt指令和主機的差別來檢測虛擬機是否存在。
1.2案例測試
在VMware上發(fā)現(xiàn)虛擬機系統(tǒng)上的IDT地址通常0xFFXXXXXX,而Virtual?PC一般位于0xE8XXXXXX,主機都位于0x80XXXXXX。Redpill只是通過判斷執(zhí)行SIDT指令后返回的第一字節(jié)是否大于0xD0來判斷是否處于虛擬機。其代碼是否簡練,源碼如下:
1.3測試結(jié)果:
2通過執(zhí)行特權(quán)指令來檢測虛擬機
2.1技術(shù)介紹
VMware提供了主機和虛擬機互相溝通的通訊機制,即“IN”指令來讀取特定端口的數(shù)據(jù)以進(jìn)行兩機通訊,但由于IN指令屬于特權(quán)指令,在處于保護(hù)模式下的真機上執(zhí)行此指令時,需要權(quán)限允許,否則會出發(fā)異常。而在虛擬機中并不會有異常發(fā)生。VMDetect正是利用前一種方法來檢測VMware的存在。
核心代碼:
2.2測試結(jié)果
3結(jié)論
IDT檢測技術(shù)相對簡單易懂,也有其缺陷,IDT的值是對于當(dāng)前正在運行的處理器,在單個CPU中是常量,但當(dāng)其在多個CPU時可能會受到影響,原因是每一個CPU都是有自己的IDT。通過執(zhí)行特權(quán)指令來檢測虛擬機時用主機和虛擬機自身差別來識別。
參考文獻(xiàn):
[1] Fatma A. Hashim, Essam H. Houssein, Kashif Hussain, Mai S. Mabrouk, Walid Al-Atabany. Honey Badger Algorithm: New metaheuristic algorithm for solving optimization problems[J]. Mathematics and Computers in Simulation, 2021: 84-110.
[2] Yang, Y., Chen, H., Asghar Heidari, A., Gandomi, A.H., Hunger Games Search: Visions, Conception, Implementation, Deep Analysis, Perspectives, and Towards Performance Shifts, Expert Systems with Applications (2021).
資助項目:國家級大學(xué)生科技創(chuàng)新項目(項目編號:201911488010,Q20x034)