三、基于社會工程學的技巧
1.檢測電腦中常用軟件的使用情況
名為 Intelligent Software Solutions Inc.doc 的惡意軟件樣本文件使用了下面的反虛擬機技巧,SHA256值為048fc07fb94a74990d2d2b8e92c099f3f986af185c32d74c857b07f7fcce7f8e。
RecentFiles對象表示系統最近打開過的歷史文檔。
通常,安裝了word程序的用戶可能會打開超過2個或更多數量的文檔。然而,當該惡意軟件植入到新創建的虛擬機和word環境中后,總是狀況不斷,不能正常運行。每次測試時手動打開一兩次,總是出現程序異常。即使是保存了虛擬機鏡像狀態,重啟調試分析后,惡意程序仍然不能正常執行。
從DKTxHE函數功能可以看出,惡意軟件以RecentFiles數量來判斷是否身處VM環境中,如果在VM環境中,它將不會執行任何惡意行為。之后,隨意創建了3個不同名稱的word文檔,逐一打開并關閉,讓歷史文檔數量為3,最終成功運行并檢測到了惡意軟件。
2. 探測殺毒軟件公司相關的IP地址
同樣是上面的惡意軟件,它在另一個子程序中使用了下面的反虛擬機技巧。
首先,它通過向遠程地址 https://www.maxmind.com/geoip/v2.1/city/me 發出某種認證請求,之后設置請求信息中的HTTP Refer屬性和User-Agent值,訪問鏈接 https://www.maxmind.com/en/locate-my-ip-address 以此獲取宿主系統的地址信息。
獲取信息封裝于JSON格式文件中,包含國家、城市、或者與IP相關的組織機構等信息。IP信息的organization字段顯示為美國Comcast寬帶網絡供應商。
惡意軟件發出訪問請求后,獲取到宿主系統的相關信息將存儲于某個數組中。如果獲取到的組織機構名稱與JSON文件中的任何機構字符串匹配,惡意軟件將發生異常并停止運行。當然,列表中的機構名稱在代碼中是經過混淆的。
四、虛擬機逃逸
VMware等軟件中或多或少都存在一些安全漏洞,可以利用這些漏洞使宿主操作系統崩潰或者是在宿主操作系統中運行代碼。當主機系統被感染后,一些公開可用的工具可以用來對VMware等軟件進行攻擊。
五、總結
當遇到的惡意代碼似乎不能運行時,在使用調試或反匯編惡意代碼搜索其反虛擬機探測代碼之前,應該考慮使用一個卸載了VMware Tools的虛擬機。VMware中有一些未文檔化的功能可以幫助減輕反虛擬機技術的探測。將下面的代碼放到VMware的.vmx文件中,以減輕虛擬機被探測的可能。
isolation.tools.getPtrLocation.disable = "TRUE"
isolation.tools.setPtrLocation.disable = "TRUE"
isolation.tools.setVersion.disable = "TRUE"
isolation.tools.getVersion.disable = "TRUE"
monitor_control.disable_directexec = "TRUE"
monitor_control.disable_chksimd = "TRUE"
monitor_control.disable_ntreloc = "TRUE"
monitor_control.disable_selfmod = "TRUE"
monitor_control.disable_reloc = "TRUE"
monitor_control.disable_btinout = "TRUE"
monitor_control.disable_btmemspace = "TRUE"
monitor_control.disable_btpriv = "TRUE"
monitor_control.disable_btseg = "TRUE"
參數directexec可以使用戶模式下的代碼被模擬執行而不是直接在硬件上運行,因此它可以挫敗一些反虛擬機技術。
前四條設置被VMware后門命令使用,它們的作用是使得運行在Guest系統中的VMware Tools不能獲取宿主系統的信息。這些設置會禁用VMware Tools的一些有用功能,并可能對虛擬機性能有嚴重負面影響。所以,僅當其他技術無效時再添加這些選項。當然,也可以將惡意代碼在其他虛擬環境或者物理主機上運行。
同反調試技術一樣,要想發現惡意代碼中的反虛擬機技術需要在長期調試過程中積累更多經驗。例如,看到一個代碼在一個條件跳轉處過早終止,這可能就是反虛擬機技術造成的結果。一如既往地警惕這種類型的問題,然后查看其之前的代碼,來確定它到底執行了什么操作。
和反調試技術一樣,通過修改條件跳轉指令或者使用NOP指令覆蓋來繞過相關探測。
最后讓我們總結一下提到的內容:
騰訊2016游戲安全技術競賽有一道題,大概意思就是給一個exe,要求編寫一個Tencent2016C.dll,并導出多個接口函數 CheckVirtualPCX、CheckVMWareX、CheckVirtualBoxX。X為1-100之間的數字。函數功能是檢測自己是否處于相應的虛擬機中,是返回TRUE,否則返回FALSE。函數的原型都是 typedef BOOL (WINAPI* Type_CheckXXXXXX)();。
編譯好dll之后,放在Tencent2016C.exe的同目錄,運行Tencent2016C.exe,點擊檢測按鈕,在物理機中運行時函數接口輸出為0,在VMware虛擬機、VirtualBox虛擬機和VirtualPC虛擬機中運行時,相關的接口輸出1。我們把提到的知識綜合一下完成這道題目。
解題的參考代碼和題目相關信息:https://github.com/houjingyi233/test-virtual-machine/
1.《惡意代碼分析實戰》第17章反虛擬機技術(本文的主體框架)
2.這個惡意軟件“奇葩”的反虛擬機技巧
3.天樞戰隊官方博客(本文大部分代碼的來源)
4.虛擬機檢測技術剖析
-
Mac
+關注
關注
0文章
1110瀏覽量
51706 -
惡意代碼
+關注
關注
0文章
12瀏覽量
7657 -
虛擬機
+關注
關注
1文章
940瀏覽量
28427
發布評論請先 登錄
相關推薦
評論