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