誤入陷阱
夜黑風高,兩個不速之客又一次來到了一片新的土地。web
「老二,總算進來了,我們依計行事,你去掃描硬盤上的文件,看看有沒有有價值的,我去修改開機啓動項,把我們加進去」算法
「等一下,老大,我感受有點不對勁」編程
「哪裏不對勁了?」,老大問到。安全
「咱們去過的其餘地方都很熱鬧,這裏怎麼這麼安靜?你看,連QQ、微信這些進程都沒有!」,老二說到。微信
老大環顧四周,也察覺到了一絲異常。app
稍等了一小會兒,老大忽然驚呼:「很差!這裏是個虛擬機,我們掉入虛擬機中了!」編程語言
「你怎麼看出這是一個虛擬機的?」,老二不解的問到。編輯器
「你看,那裏有個vmware的進程,註冊表裏還有一堆vmware的標記」flex
![](http://static.javashuo.com/static/loading.gif)
「那怎麼辦?完蛋了,我們要被人扒的乾乾淨淨了~」,老二一臉焦急。雲計算
老大眉頭緊鎖,來回踱步,忽然面露喜色說到:「彆着急,臨行前,主人偷偷給了我一個錦囊,叮囑我在緊急時候打開」
「那還等什麼?趕忙拿出來啊!」
老大從兜裏掏出了錦囊,裏面有一紙信,兩人認真的看了起來。
片刻以後,老大大聲笑道:「老弟!穩了!」
老二一臉問號,沒太明白,「大哥,恕我眼拙,這怎麼就穩了?」
「你看這裏,主人交代了虛擬機逃逸大法,告訴咱們如何從虛擬機中逃離」
![](http://static.javashuo.com/static/loading.gif)
「大哥,小聲一點,當心被發現了。我們快開始行動吧,晚了說不定就來不及了」
「別急,讓我仔細研究一下」
信紙上密密麻麻寫了一大堆,看起來有些複雜的樣子,兩我的剛剛放鬆的眉頭又慢慢皺了起來。
沒一下子,老二失去了耐心,「大哥,這也太複雜了,我是看不懂了,靠你了」
「我明白了,虛擬機會和外面的真實世界通訊,我們只要抓住通訊過程當中的漏洞,把咱們的指令代碼參雜在通訊數據中,讓外面世界負責通訊的一端執行這些指令代碼,我們就能傳輸過去,逃逸到外面的真實世界去!」
![](http://static.javashuo.com/static/loading.gif)
「原來如此,可咱上哪裏去找這樣的漏洞呢?」
「有了,看這裏,主人給咱們找了好幾個漏洞,真是太貼心了!」
CVE-2016-7461 CVE-2017-4901 CVE-2019-14378
「這一串串字符和數字是什麼意思?」,老二問到。
「這個呀,叫漏洞編號,CVE就Common Vulnerabilities and Exposures
,公共漏洞披露的意思,第二個是年份,第三個就是具體的漏洞編號了。這每一年有那麼多軟件被發現漏洞,爲了管理方便就給它們統一分配了編號。」
「那趕忙的,選一個來開幹吧!」
「讓我看看,就選第二個吧,這是屬於VMware的漏洞,版本也合適,尚未被修復,二弟,我們的機會來了!」
說完,老大按照信紙上的描述,開始忙活起來,準備起一下子要用的數據和代碼。
「老大,這個漏洞的原理是什麼啊,趁着你準備的功夫,你給我講講唄~」
「主人的信上說了,VMware有一個backdoor的通訊接口,能夠用來虛擬機內部操做系統和外面系統進行通訊,複製和拖放就是使用它來傳輸文件的。而這個backdoor的代碼寫的有漏洞,我們只要精心構造好數據,它在拷貝的時候就會形成堆溢出,就有機會執行咱們的指令代碼啦!」
「牛皮!主人真牛皮」,老二感嘆道!
「快別閒着了,快來幫我準備數據吧!」
新世界
又過了一下子。
「大哥,都準備好了嗎?」
「已經按照信上的方法都準備穩當了,二弟,來吧,我們就要出去了,抓緊我」
老大拿出了剛纔將精心準備的代碼,當心翼翼的點擊執行,只聽一陣電流的嘶嘶聲響,二人化成一串比特流傳輸到了外面的VMware進程中。
正如計劃的通常,漏洞成功的觸發!執行了他們提早編寫的指令代碼,二人成功的來到外面計算機的文件目錄下。
稍等了一下子,兩人慢慢從剛纔的眩暈中緩了過來。
「老大,我們成功了!」
「哈哈!總算出來了」
兩個傢伙高興的牢牢抱在了一塊兒。
「好了,這下我們開始幹正事吧,已經耽誤了很多時間了,主人還在等咱們的消息呢」
「好嘞,開始幹活」
兩人開始忙活起來,爭分奪秒地實行他們的計劃,然而,很快他們又發現了不對勁。
「老大,這裏怎麼仍是有vmware的進程啊?我們不是逃出來了嗎?」
「廢話,剛纔咱就從那裏面跑出來的啊」
「不對,你快過來看看」
老大聞訊趕了過去,仔細查看後,再一次環顧四周,倒吸了一口涼氣。
「二弟,完了,這裏好像仍是一個虛擬機···」
![](http://static.javashuo.com/static/loading.gif)
故事靈感
這個故事的靈感來自於知乎上的一個提問:操做系統可否知道本身處於虛擬機中?
下面是個人回答:
虛擬化技術通過了大概三個時期的發展:
從早期的二進制指令翻譯技術(以早期VMware爲表明) 經過修改操做系統代碼中的特殊指令調用(以XEN爲表明) CPU支持的硬件虛擬化(VT-x技術爲表明) 尤爲是硬件虛擬化技術的出現讓虛擬化技術出現了井噴之勢,VirtualBox、VMWare(新)、KVM紛紛涌現,必定程度上加速了雲計算時代的到來。 關於虛擬化技術的發展,能夠參考個人這篇文章:
說到問題自己,經歷三個時期的發展,虛擬化能力愈來愈逼近於一個真實的硬件環境,但即使如此,操做系統想要知道本身是否是在一個虛擬機中仍然是易如反掌。
說操做系統可能不那麼容易理解。我們換一個場景:一個木馬病毒開發者想要知道攻擊目標是否是一臺虛擬機?
這個問題是更具備現實意義的,病毒木馬若是處於虛擬機中,則大機率是正在被安全研究人員進行分析,一個好的開發者,這個時候是要懂得隱藏意圖的,不能被看穿。
這就是病毒木馬經常使用的反虛擬機技術。
具體的檢測手段有不少,但核心思想就是不一樣的虛擬機會有不一樣的特徵,你須要作的就是去找到這些特徵。好比特殊的IO設備、特殊的文件目錄、特殊的註冊表項、特殊的進程名稱等等。
固然,說了這麼多仍是經過一些表面現象來判斷是否是在虛擬機中,那倘若這些都沒有,如何作到真正的「感知」呢?
仍是有辦法。
真正的物理機和虛擬機總歸是有不一樣的,這個方向能夠從「側信道」來作一些思考,如執行一段算法花費的時間,執行一段特殊代碼形成的硬件波動等等。
虛擬機並非絕對安全的,要知道,虛擬機中的程序代碼和真實主機上的程序們同樣,都是被物理CPU在執行,只不過被硬件、軟件等機制進行了「強制隔離」罷了。
而一旦這些機制出現了紕漏,惡意程序也就有機會從虛擬機中逃出來了!
故事的結尾,他倆好不容易從虛擬機裏逃了出來,卻發現仍然處在另外一個虛擬機中。
這樣的情節有沒有以爲很熟悉呢?猜一部電影,歡迎你們評論區留言~
往期TOP5文章
![](http://static.javashuo.com/static/loading.gif)
本文分享自微信公衆號 - 編程技術宇宙(xuanyuancoding)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。