本文來(lái)自微信公眾號(hào):編程技術(shù)宇宙 (ID:xuanyuancoding),作者:軒轅之風(fēng) O
誤入陷阱
夜黑風(fēng)高,兩個(gè)不速之客又一次來(lái)到了一片新的土地。
“老二,總算進(jìn)來(lái)了,咱們依計(jì)行事,你去掃描硬盤上的文件,看看有沒(méi)有有價(jià)值的,我去修改開(kāi)機(jī)啟動(dòng)項(xiàng),把咱們加進(jìn)去”
“等一下,老大,我感覺(jué)有點(diǎn)不對(duì)勁”
“哪里不對(duì)勁了?”,老大問(wèn)到。
“我們?nèi)ミ^(guò)的其他地方都很熱鬧,這里怎么這么安靜?你看,連 QQ、微信這些進(jìn)程都沒(méi)有!”,老二說(shuō)到。
老大環(huán)顧四周,也察覺(jué)到了一絲異常。
稍等了一小會(huì)兒,老大突然驚呼:“不好!這里是個(gè)虛擬機(jī),咱們掉入虛擬機(jī)中了!”
“你怎么看出這是一個(gè)虛擬機(jī)的?”,老二不解的問(wèn)到。
“你看,那里有個(gè) vmware 的進(jìn)程,注冊(cè)表里還有一堆 vmware 的標(biāo)記”
“那怎么辦?完蛋了,咱們要被人扒的干干凈凈了~”,老二一臉焦急。
老大眉頭緊鎖,來(lái)回踱步,突然面露喜色說(shuō)到:“別著急,臨行前,主人偷偷給了我一個(gè)錦囊,叮囑我在緊急時(shí)候打開(kāi)”
“那還等什么?趕緊拿出來(lái)??!”
老大從兜里掏出了錦囊,里面有一紙信,兩人認(rèn)真的看了起來(lái)。
片刻之后,老大大聲笑道:“老弟!穩(wěn)了!”
老二一臉問(wèn)號(hào),沒(méi)太明白,“大哥,恕我眼拙,這怎么就穩(wěn)了?”
“你看這里,主人交代了虛擬機(jī)逃逸大法,告訴我們?nèi)绾螐奶摂M機(jī)中逃離”
“大哥,小聲一點(diǎn),小心被發(fā)現(xiàn)了。咱們快開(kāi)始行動(dòng)吧,晚了說(shuō)不定就來(lái)不及了”
“別急,讓我仔細(xì)研究一下”
信紙上密密麻麻寫了一大堆,看起來(lái)有些復(fù)雜的樣子,兩個(gè)人剛剛放松的眉頭又慢慢皺了起來(lái)。
沒(méi)一會(huì)兒,老二失去了耐心,“大哥,這也太復(fù)雜了,我是看不懂了,靠你了”
“我明白了,虛擬機(jī)會(huì)和外面的真實(shí)世界通信,咱們只要抓住通信過(guò)程中的漏洞,把我們的指令代碼參雜在通信數(shù)據(jù)中,讓外面世界負(fù)責(zé)通信的一端執(zhí)行這些指令代碼,咱們就能傳輸過(guò)去,逃逸到外面的真實(shí)世界去!”
“原來(lái)如此,可咱上哪里去找這樣的漏洞呢?”
“有了,看這里,主人給我們找了好幾個(gè)漏洞,真是太貼心了!”
CVE-2016-7461
CVE-2017-4901
CVE-2019-14378
“這一串串字符和數(shù)字是什么意思?”,老二問(wèn)到。
“這個(gè)呀,叫漏洞編號(hào),CVE 就 Common Vulnerabilities and Exposures,公共漏洞披露的意思,第二個(gè)是年份,第三個(gè)就是具體的漏洞編號(hào)了。這每年有那么多軟件被發(fā)現(xiàn)漏洞,為了管理方便就給它們統(tǒng)一分配了編號(hào)?!?/p>
“那趕緊的,選一個(gè)來(lái)開(kāi)干吧!”
“讓我看看,就選第二個(gè)吧,這是屬于 VMware 的漏洞,版本也合適,還沒(méi)有被修復(fù),二弟,咱們的機(jī)會(huì)來(lái)了!”
說(shuō)完,老大按照信紙上的描述,開(kāi)始忙活起來(lái),準(zhǔn)備起一會(huì)兒要用的數(shù)據(jù)和代碼。
“老大,這個(gè)漏洞的原理是什么啊,趁著你準(zhǔn)備的功夫,你給我講講唄~”
“主人的信上說(shuō)了,VMware 有一個(gè) backdoor 的通信接口,可以用來(lái)虛擬機(jī)內(nèi)部操作系統(tǒng)和外面系統(tǒng)進(jìn)行通信,復(fù)制和拖放就是使用它來(lái)傳輸文件的。而這個(gè) backdoor 的代碼寫的有漏洞,咱們只要精心構(gòu)造好數(shù)據(jù),它在拷貝的時(shí)候就會(huì)造成堆溢出,就有機(jī)會(huì)執(zhí)行我們的指令代碼啦!”
“牛皮!主人真牛皮”,老二感嘆道!
“快別閑著了,快來(lái)幫我準(zhǔn)備數(shù)據(jù)吧!”
新世界
又過(guò)了一會(huì)兒。
“大哥,都準(zhǔn)備好了嗎?”
“已經(jīng)按照信上的方法都準(zhǔn)備妥當(dāng)了,二弟,來(lái)吧,咱們就要出去了,抓緊我”
老大拿出了剛才將精心準(zhǔn)備的代碼,小心翼翼的點(diǎn)擊執(zhí)行,只聽(tīng)一陣電流的嘶嘶聲響,二人化成一串比特流傳輸?shù)搅送饷娴?VMware 進(jìn)程中。
正如計(jì)劃的一般,漏洞成功的觸發(fā)!執(zhí)行了他們提前編寫的指令代碼,二人成功的來(lái)到外面計(jì)算機(jī)的文件目錄下。
稍等了一會(huì)兒,兩人慢慢從剛才的眩暈中緩了過(guò)來(lái)。
“老大,咱們成功了!”
“哈哈!總算出來(lái)了”
兩個(gè)家伙高興的緊緊抱在了一起。
“好了,這下咱們開(kāi)始干正事吧,已經(jīng)耽誤了不少時(shí)間了,主人還在等我們的消息呢”
“好嘞,開(kāi)始干活”
兩人開(kāi)始忙活起來(lái),爭(zhēng)分奪秒地實(shí)行他們的計(jì)劃,然而,很快他們又發(fā)現(xiàn)了不對(duì)勁。
“老大,這里怎么還是有 vmware 的進(jìn)程???咱們不是逃出來(lái)了嗎?”
“廢話,剛才咱就從那里面跑出來(lái)的啊”
“不對(duì),你快過(guò)來(lái)看看”
老大聞?dòng)嵹s了過(guò)去,仔細(xì)查看后,再一次環(huán)顧四周,倒吸了一口涼氣。
“二弟,完了,這里好像還是一個(gè)虛擬機(jī)???”
【完】
故事靈感
這個(gè)故事的靈感來(lái)自于知乎上的一個(gè)提問(wèn):操作系統(tǒng)能否知道自己處于虛擬機(jī)中?
下面是我的回答:
虛擬化技術(shù)經(jīng)過(guò)了大概三個(gè)時(shí)期的發(fā)展:
從早期的二進(jìn)制指令翻譯技術(shù)(以早期 VMware 為代表)
通過(guò)修改操作系統(tǒng)代碼中的特殊指令調(diào)用(以 XEN 為代表)
CPU 支持的硬件虛擬化(VT-x 技術(shù)為代表)尤其是硬件虛擬化技術(shù)的出現(xiàn)讓虛擬化技術(shù)出現(xiàn)了井噴之勢(shì),VirtualBox、VMWare(新)、KVM 紛紛涌現(xiàn),一定程度上加速了云計(jì)算時(shí)代的到來(lái)。
關(guān)于虛擬化技術(shù)的發(fā)展,可以參考我的這篇文章:
懂了!VMware、KVM、Docker 原來(lái)是這么回事兒
說(shuō)到問(wèn)題本身,經(jīng)歷三個(gè)時(shí)期的發(fā)展,虛擬化能力越來(lái)越逼近于一個(gè)真實(shí)的硬件環(huán)境,但即便如此,操作系統(tǒng)想要知道自己是不是在一個(gè)虛擬機(jī)中仍然是易如反掌。
說(shuō)操作系統(tǒng)可能不那么容易理解。咱們換一個(gè)場(chǎng)景:一個(gè)木馬病毒開(kāi)發(fā)者想要知道攻擊目標(biāo)是不是一臺(tái)虛擬機(jī)?
這個(gè)問(wèn)題是更具有現(xiàn)實(shí)意義的,病毒木馬如果處于虛擬機(jī)中,則大概率是正在被安全研究人員進(jìn)行分析,一個(gè)好的開(kāi)發(fā)者,這個(gè)時(shí)候是要懂得隱藏意圖的,不能被看穿。
這就是病毒木馬常用的反虛擬機(jī)技術(shù)。
具體的檢測(cè)手段有很多,但核心思想就是不同的虛擬機(jī)會(huì)有不同的特征,你需要做的就是去找到這些特征。比如特殊的 IO 設(shè)備、特殊的文件目錄、特殊的注冊(cè)表項(xiàng)、特殊的進(jìn)程名稱等等。
當(dāng)然,說(shuō)了這么多還是通過(guò)一些表面現(xiàn)象來(lái)判斷是不是在虛擬機(jī)中,那假若這些都沒(méi)有,如何做到真正的“感知”呢?
還是有辦法。
真正的物理機(jī)和虛擬機(jī)總歸是有不同的,這個(gè)方向可以從“側(cè)信道”來(lái)做一些思考,如執(zhí)行一段算法花費(fèi)的時(shí)間,執(zhí)行一段特殊代碼造成的硬件波動(dòng)等等。
虛擬機(jī)并不是絕對(duì)安全的,要知道,虛擬機(jī)中的程序代碼和真實(shí)主機(jī)上的程序們一樣,都是被物理 CPU 在執(zhí)行,只不過(guò)被硬件、軟件等機(jī)制進(jìn)行了“強(qiáng)制隔離”罷了。
而一旦這些機(jī)制出現(xiàn)了紕漏,惡意程序也就有機(jī)會(huì)從虛擬機(jī)中逃出來(lái)了!
故事的結(jié)尾,他倆好不容易從虛擬機(jī)里逃了出來(lái),卻發(fā)現(xiàn)仍然處在另一個(gè)虛擬機(jī)中。
廣告聲明:文內(nèi)含有的對(duì)外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。