王晨昊 勵家磊 應俊 薛義博 尚中義
摘要:虛擬機是指通過軟件模擬的具有完整硬件系統功能的、運行在一個完全隔離環境中的完整計算機系統,在實體計算機中能夠完成的工作在虛擬機中都能夠實現。該文介紹利用IDT基址檢測虛擬機和通過執行特權指令來檢測虛擬機。
關鍵字:攻防檢測,虛擬機技術,IDT基址檢測
0前言
在個人計算機上模擬出虛擬機,體驗不同版本的操作系統,如Linux、Mac還可以進行其他操作。虛擬機技術在如今的信息安全領域得到了廣泛的運用,尤其是惡意軟件分析中。然而虛擬機技術的使用使得攻擊者為了提高破壞真實主機的成功率,在惡意程序中加入了檢測虛擬機的代碼,用于判斷當前程序處于哪一種環境。當其發現程序處于虛擬機時,會立刻改變甚至中斷執行,讓反病毒人員分析惡意軟件行為變得困難。
1利用IDT基址檢測虛擬機
1.1技術介紹
利用IDT基址檢測虛擬機的方法是一種通用方式,對VMware和Virtual?PC均適用。中斷描述符表IDT(Interrupt?Descriptor?Table)用于查找處理中斷時所用的軟件函數,它是一個由256項組成的數據,其中每一中斷對應一項函數。讀取IDT基址,我們需要通過SIDT指令來讀取IDTR(中斷描述符表寄存器,用于IDT在內存中的基址),格式為如下:
IDTR只有一個,而操作系統有虛擬機和主機系統兩個。為了防止發生沖突,VMM需要修改虛擬機中的IDT地址,依靠虛擬機環境中執行sidt指令和主機的差別來檢測虛擬機是否存在。
1.2案例測試
在VMware上發現虛擬機系統上的IDT地址通常0xFFXXXXXX,而Virtual?PC一般位于0xE8XXXXXX,主機都位于0x80XXXXXX。Redpill只是通過判斷執行SIDT指令后返回的第一字節是否大于0xD0來判斷是否處于虛擬機。其代碼是否簡練,源碼如下:
1.3測試結果:
2通過執行特權指令來檢測虛擬機
2.1技術介紹
VMware提供了主機和虛擬機互相溝通的通訊機制,即“IN”指令來讀取特定端口的數據以進行兩機通訊,但由于IN指令屬于特權指令,在處于保護模式下的真機上執行此指令時,需要權限允許,否則會出發異常。而在虛擬機中并不會有異常發生。VMDetect正是利用前一種方法來檢測VMware的存在。
核心代碼:
2.2測試結果
3結論
IDT檢測技術相對簡單易懂,也有其缺陷,IDT的值是對于當前正在運行的處理器,在單個CPU中是常量,但當其在多個CPU時可能會受到影響,原因是每一個CPU都是有自己的IDT。通過執行特權指令來檢測虛擬機時用主機和虛擬機自身差別來識別。
參考文獻:
[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).
資助項目:國家級大學生科技創新項目(項目編號:201911488010,Q20x034)