日前,美國(guó)自由軟件基金會(huì)FSF刊文討伐Intel ME引擎會(huì)完全控制用戶電腦,而且用戶很可能完全不知情。
FSF在這篇文章中指出,Intel的ME程序?qū)嶋H上相當(dāng)于一個(gè)小型、低功耗的電腦系統(tǒng),它由一個(gè)或者多個(gè)內(nèi)核、內(nèi)存、系統(tǒng)時(shí)鐘、總線及用于加密引擎的保留內(nèi)存組成,還有自己的獨(dú)立操作系統(tǒng)及程序,可以讀取系統(tǒng)主內(nèi)存,可以通過Intel網(wǎng)絡(luò)控制器連接網(wǎng)絡(luò)。
此外,該文指出Intel ME程序可以完全控制用戶的電腦,它可以控制開機(jī)、關(guān)機(jī),讀取所有開放文件、檢查所有已運(yùn)行的程序、追蹤用戶的鍵盤、鼠標(biāo)動(dòng)作,甚至還能截屏?,F(xiàn)在,Intel安全部門的首席技術(shù)員Steve Grobman對(duì)此事進(jìn)行了回應(yīng),他表示所謂的“后門”子虛烏有。Steve Grobman稱,這個(gè)所謂的“后門”并不是大家想的那個(gè)樣子,只是Intel借助推送固件升級(jí)的接口而已。
此外,Steve Grobman還表示,及時(shí)推送固件生意有助于Intel和OEM廠商為處理器增強(qiáng)防護(hù),這樣反而更安全了。
詳細(xì)解讀:什么是CPU的后門
聽聽一位資深工程師告訴你,什么才是CPU的后門。
人們普遍認(rèn)為,任何一款軟件都可以通過后門被破壞。舉幾個(gè)比較有代表性的例子如:Sony/BMG的安裝程序,有個(gè)內(nèi)置的后門禁止用戶復(fù)制CD,這個(gè)后門也使得惡意的第三方能接管任何安裝了該軟件的機(jī)器;三星Galaxy,它有個(gè)后門允許調(diào)制解調(diào)器訪問設(shè)備的文件系統(tǒng),這也就允許了任何一個(gè)假基站來訪問設(shè)備上的文件;以及Lotus Notes,它有個(gè)后門能使加密失敗。
盡管后門多見于FPGA和網(wǎng)絡(luò)設(shè)備,但每當(dāng)有人提起CPU上的后門程序是否可能的時(shí)候,大部分情況下大家都會(huì)斷言這是不可能的。人們不會(huì)斷言CPU后門程序是存在的,但我會(huì)斷言,如果有正確的訪問權(quán)限,實(shí)現(xiàn)就很容易了。
比方說,你想制造出一個(gè)后門。你要怎么做呢?這要分三個(gè)環(huán)節(jié):一個(gè)CPU后門能做什么,要怎樣才能訪問這個(gè)后門,需要什么樣的讓步才能安裝該后門?
從第一個(gè)環(huán)節(jié)開始,后門能做什么?這就有很多很多的可能。最簡(jiǎn)單的就是提升權(quán)限:使CPU從ring3過渡到ring0或SMM,給正在運(yùn)行的進(jìn)程的內(nèi)核級(jí)別的權(quán)限。因?yàn)樗秦?fù)責(zé)運(yùn)行的CPU嘛,完全可以無視硬件和軟件虛擬化。你可以做很多更微妙或更具侵略性的事情,但權(quán)限提升不僅夠簡(jiǎn)單,而且夠強(qiáng)大,所以我就不再打算討論其他的選項(xiàng)。
現(xiàn)在你知道了你想要借后門做什么,那么究竟應(yīng)該如何觸發(fā)后門呢?理想情況下,它應(yīng)該既不會(huì)被人碰巧運(yùn)行到,也無法通過暴力尋找到。即使有這樣的限制,可能的觸發(fā)狀態(tài)空間仍舊是巨大的。
讓我們來看一個(gè)特定的指令,fyl2x。在正常操作下,它需要兩個(gè)浮點(diǎn)寄存器作為輸入,給您2*80=160位(bits)來隱藏一個(gè)觸發(fā)器。如果你通過一對(duì)特定值來觸發(fā)一個(gè)后門,可能相對(duì)于隨機(jī)篩選更安全些。如果你真的很擔(dān)心后門被人意外發(fā)現(xiàn)或暴力破解掉,你也可以檢查兩個(gè)正常輸入寄存器以外的值(畢竟,你控制著整個(gè)CPU啊)。
這個(gè)觸發(fā)器簡(jiǎn)單有效,但不足之處是要觸發(fā)它很可能需要運(yùn)行本機(jī)代碼,但你其實(shí)不可能讓Chrome或Firefox發(fā)出一個(gè)fyl2x指令。通過相對(duì)容易地令JavaScript引擎發(fā)出指令(像fadd),你可以嘗試變通地去解決這個(gè)問題。與此相對(duì)的問題是,如果你想要patch一條add指令,并對(duì)它添加一些檢查,它就會(huì)顯著地變慢(盡管如此,如果你可以改寫硬件,你應(yīng)該能夠無開銷地完成它)。通過patch一個(gè)rep字符串指令,做一些事情來設(shè)置恰當(dāng)?shù)?amp;ldquo;key”,接在塊拷貝(block copy)后面,或者idiv,也有可能可以創(chuàng)造一些難以檢測(cè)并可以通過JavaScript來觸發(fā)的后門?;蛘?,如果你已經(jīng)成功地得到了設(shè)計(jì)的副本,你也許可以想出一個(gè)辦法,當(dāng)任意一些JavaScript運(yùn)行的時(shí)候,來使用調(diào)試邏輯觸發(fā)器或性能計(jì)數(shù)器去引發(fā)一個(gè)后門。
好了,現(xiàn)在你已經(jīng)有一個(gè)后門了。那么你怎么植入該后門呢?在軟件方面,你可以編輯源代碼或二進(jìn)制文件。
在硬件方面,如果你有機(jī)會(huì)到訪問到源,你可以在跟在軟件中一樣容易進(jìn)行編輯。對(duì)硬件重編譯源代碼,建物理芯片,有著極高的固定成本;如果你試圖讓你的更改編入源代碼,你要么犧牲設(shè)計(jì),在一切被發(fā)送去生產(chǎn)之前就植入你的所有更改,要么犧牲生產(chǎn)過程,在最后一刻偷偷植入你的更改。
如果這聽起來太難了,你可以嘗試犧牲補(bǔ)丁機(jī)制。多數(shù)現(xiàn)代的CPU配備了一個(gè)內(nèi)置的補(bǔ)丁機(jī)制,允許事后的bug修復(fù)。你使用的CPU可能早就已經(jīng)被修補(bǔ)過,也許從第一天開始就是,以作為固件更新的一部分的名目。你CPU補(bǔ)丁機(jī)制的細(xì)節(jié)是嚴(yán)格保密的。這很有可能是CPU上被蝕刻了一個(gè)公共密鑰,這樣它就只能接受已經(jīng)簽署了正確私鑰的補(bǔ)丁。
這就是實(shí)際正在發(fā)生的事嗎?不知道。它可能發(fā)生嗎?當(dāng)然可能。有多大幾率呢?唔,主要的挑戰(zhàn)是非技術(shù)性的,所以我不是那個(gè)能給出這個(gè)問題答案的人。如果非要猜的話,我會(huì)說不是,如果沒有除了容易破壞其它設(shè)備以外的原因的話。
還沒有討論如何制作這樣一個(gè)后門:即使有人能夠訪問你用來觸發(fā)后門的軟件,也還是很難發(fā)現(xiàn)它。這更難,但是一旦芯片開始使用內(nèi)置TPM的話,它就應(yīng)該有可能了。
(審核編輯: 滄海一土)
分享