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