新聞中心
[[379712]]

成都創(chuàng)新互聯(lián)是一家網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì),提供網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),網(wǎng)站制作,建網(wǎng)站,按需網(wǎng)站策劃,網(wǎng)站開發(fā)公司,從2013年成立是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶品牌價(jià)值為核心業(yè)務(wù),全程參與項(xiàng)目的網(wǎng)站策劃設(shè)計(jì)制作,前端開發(fā),后臺(tái)程序制作以及后期項(xiàng)目運(yùn)營并提出專業(yè)建議和思路。
幾周前,Microsoft Security Intelligence發(fā)現(xiàn)有個(gè)攻擊者論壇正在討論如何利用惡意ISO文件進(jìn)行各種惡意軟件活動(dòng)。根據(jù)分析,惡意軟件活動(dòng)也開始使用ISO文件,例如Phobos勒索軟件,ZLoader,LokiBot和Nanocore。其實(shí)這些攻擊已經(jīng)沒有什么新鮮的了,因?yàn)閻阂釯SO文件的使用已有相當(dāng)長(zhǎng)的一段時(shí)間了。但是,據(jù)我所知,還沒有任何研究者發(fā)現(xiàn)過任何示例代碼。
準(zhǔn)確地演示如何成功地將ISO文件武器化,而不是使用相當(dāng)舊的關(guān)于ISO感染的SPTH文件。其實(shí)這也不奇怪,因?yàn)閃indows操作系統(tǒng)直到2009年10月22日才對(duì)虛擬化本身提供支持。
如果你想研究如何以編程方式安裝ISO映像,你將會(huì)非常失望。因?yàn)檫@個(gè)StackOverflow答案中顯示的代碼是錯(cuò)誤的。函數(shù)調(diào)用是準(zhǔn)確的,但是,它使最終需要完成的操作過于復(fù)雜。無論如何,我寫這篇文章不是為了bash StackOverflow問題和答案,關(guān)鍵在于該代碼。
目前網(wǎng)上關(guān)于如何安裝ISO或VHD映像的方法都存在一定的誤導(dǎo)性,因此我希望找到這個(gè)問題的真正答案。
本文將說明如何正確安裝要用于惡意目的的ISO文件,我們的目標(biāo)是在不建立用戶可見路徑或分配驅(qū)動(dòng)器號(hào)的情況下安裝ISO。本文還將簡(jiǎn)要回顧一下ISO與VHD/VHDX。
需要注意的是,本文將不會(huì)介紹如何以編程方式生成ISO / VHD映像。其實(shí)可以使用WINAPI以編程方式執(zhí)行此操作,但這不是我的目標(biāo),我想研究的更深入一點(diǎn)。此外,本文不會(huì)針對(duì)不同的殺毒軟件廠商對(duì)該技術(shù)進(jìn)行基準(zhǔn)測(cè)試,這僅僅是一個(gè)概念驗(yàn)證。
與本文相關(guān)的代碼使用的是C WINAPI,如果你不熟悉C或WINAPI,則可能難以理解。另外,我選擇C是因?yàn)槲也幌矚gC#.NET或Python來開發(fā)惡意軟件。
ISO文件,VHD文件和虛擬存儲(chǔ)API
ISO文件和VHD文件有什么區(qū)別?答案是一個(gè)ISO文件反映光盤驅(qū)動(dòng)器的數(shù)字副本,例如CD / DVD,而VHD是實(shí)際的虛擬硬盤驅(qū)動(dòng)器。兩者都可以由Windows操作系統(tǒng)虛擬化和安裝,都利用相似的API調(diào)用,都必須通過Windows虛擬存儲(chǔ)API中的相同API轉(zhuǎn)發(fā)。如Will Dormann在卡耐基梅隆大學(xué)(Carnegie Mellon University)的論文“VHD和VHDX文件的危險(xiǎn)”中指出的那樣,ISO文件在惡意軟件活動(dòng)方面處于更大的劣勢(shì)。他證明了許多殺毒軟件可能無法以編程方式安裝VHD / VHDX文件,盡管看上去它們能夠在某種程度上解析ISO映像,但是本文并不打算深入研究這個(gè)話題。
為什么使用ISO文件而不是VHD/VHDX?本文旨在專門解決攻擊者使用的方法。與VHD/ VHDX文件相比,隱藏ISO映像也容易得多, VHD文件的最小大小為2MB。
盡管2MB大小的Windows報(bào)告是一個(gè)誤導(dǎo),指定2MB將返回ERROR_INVALID_PARAMETER或以下映像:
指定3MB結(jié)果如下:
我能夠分配的最小VHD文件是5MB GUID分區(qū)表(GPT)。
相反,如果我們使用一些通用的ISO制作器,在這個(gè)特殊的情況下,我使用MagicISO制作器,可以制作出一個(gè)更小的文件:
關(guān)于隱身性及其與小型文件的相關(guān)性,與VHD文件相比,ISO文件具有很多優(yōu)勢(shì)。
你可能想知道ISO文件和VHD文件有什么共同點(diǎn),因?yàn)楸疚闹赜贗SO文件安裝。ISO文件以及VHD/VHDX文件都使用相同的虛擬存儲(chǔ)API。此外,乍一看,在虛擬存儲(chǔ)API文檔中甚至沒有提到ISO文件,直到你開始閱讀通過AttachVirtualDisk安裝虛擬磁盤映像時(shí),才會(huì)看到以下內(nèi)容:附加虛擬硬盤(VHD)或CD或DVD。
映像文件(ISO),方法是找到合適的VHD提供程序以完成附件,此時(shí)你就可以了解ISO文件和VHD可以在其API省略中互換使用。
OpenVirtualDisk的調(diào)用定義如下:
第一個(gè)參數(shù)VirtualStorageType,必須是指向VIRTUAL_STORAGE_TYPE結(jié)構(gòu)的有效指針,該結(jié)構(gòu)定義為:
成員DeviceId必須設(shè)置為VIRTUAL_STORAGE_TYPE_DEVICE_ISO。另外,VendorId必須設(shè)置為VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT。
如果成功完成此操作,那么其他所有內(nèi)容實(shí)際上都將與VHD/VHDX文件相同。
代碼
我的概念驗(yàn)證包含很多通用編程,例如驗(yàn)證我們是否在Windows 10上運(yùn)行,獲取放置ISO文件的位置以及確保我們擁有適當(dāng)?shù)臋?quán)限。以下是代碼的功能概述:
1.獲取PEB,確保我們的代碼在Windows 10上運(yùn)行。
2.使用USERPROFILE變量調(diào)用GetEnvironmentVariable以獲取當(dāng)前用戶。
3.如果成功調(diào)用了GetEnvironmentVariable,則連接“\\Desktop\\Demo.iso”。
4.檢查我們的安全令牌,如果我們沒有SeManageVolumePrivilege,請(qǐng)?zhí)岢鲆韵抡?qǐng)求。
5.使用正確初始化的VIRTUAL_STORAGE_TYPE結(jié)構(gòu)調(diào)用OpenVirtualDisk。
6.調(diào)用AttachVirtualDisk,將ATTACH_VIRTUAL_DISK_FLAG設(shè)置為ATTACH_VIRTUAL_DISK_FLAG_READ_ONLY和ATTACH_VIRTUAL_DISK_FLAG_NO_DRIVE_LETTER。
7. GetVirtualDiskPhysicalPath會(huì)檢索到我們已安裝的ISO的物理路徑。
8.如果成功調(diào)用了GetVirtualDiskPhysicalPath,請(qǐng)連接“\\Demo.exe”。
9.調(diào)用CreateProcess。
10.確保成功或失敗后,所有句柄和堆都要關(guān)閉,然后退出。
本文翻譯自:
https://vxug.fakedoma.in/papers/VXUG/Exclusive/WeaponizingWindowsVirtualization.pdf如若轉(zhuǎn)載,請(qǐng)注明原文地址。
分享題目:Windows虛擬技術(shù)的武器化嘗試
分享網(wǎng)址:http://m.fisionsoft.com.cn/article/dhpdjos.html


咨詢
建站咨詢
