<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 業(yè)界動態(tài) > 你用了高性能CPU,我就可以窺探你的密碼

          你用了高性能CPU,我就可以窺探你的密碼

          作者: 時間:2018-01-09 來源:果殼網(wǎng) 收藏

            電腦運行的時候,所有用到的數(shù)據(jù)都必須經(jīng)過內(nèi)存。這里面既有你至關(guān)重要的銀行密碼,也有你故意和非故意打開的莫名其妙小網(wǎng)站小程序。

          本文引用地址:http://www.ex-cimer.com/article/201801/374125.htm

            怎么讓這些外面來的野路子程序碰不到關(guān)鍵信息呢?

            今天的電腦設計了層層防線,其中至關(guān)重要的一層發(fā)生在電腦的計算核心——上。會負責檢查程序有沒有在不屬于自己的地盤上探頭探腦,如果發(fā)現(xiàn)它碰了別人的數(shù)據(jù),就會啟動槍斃流程。設計者認為,這樣就能豎起一堵高墻,把每個程序隔離在自己的小屋里。

            但是他們錯了。這堵高墻上有一個十分隱蔽的縫隙,剛剛被公開出來。整個行業(yè)為之震動。

            這個縫隙雖然隱蔽但是危害極大,研究者已經(jīng)成功通過它偷出來了瀏覽器保存的網(wǎng)站密碼。幸運的是偷密碼的過程十分復雜,壞人這幾天應該還來不及用它實際作惡;不幸的是堵上這個縫隙極度困難,而且看起來要付出電腦明顯變慢的重大代價。

            誰也沒想到,2018一開年就迎來了這么大的一個大新聞。

          事件經(jīng)過

            2018年開頭的這幾天里,系統(tǒng)核心的例行更新被發(fā)現(xiàn)在某些場合有巨大的性能衰退,這一反?,F(xiàn)象觸發(fā)了少量業(yè)內(nèi)人士的關(guān)注。核心被部署在大量的服務器生產(chǎn)環(huán)境中,對性能尤為注重,因此這一補丁的匆忙上線和微軟windows、蘋果Mac OS的曖昧反應加在一起,引發(fā)了越來越多的討論。

            著名科技新聞站點theregister在北京時間1月3日早上爆料稱[1],的這一補丁是為了修復某個巨大的硬件安全漏洞不得已而為之,并直指罪魁禍首是當今世界的CPU頭號霸主Intel,這一新聞張貼出來以后開始在IT圈內(nèi)廣泛流傳,由于這篇新聞具備相當?shù)募夹g(shù)背景并附上了實測數(shù)據(jù),具備比較高的說服力,使得相關(guān)的議論和猜測愈演愈烈。

            在北京時間1月4日早上,Intel終于按耐不住發(fā)表了一篇新聞稿[2],意指這些坊間傳聞有夸大其詞之嫌,但也沒有遮掩安全漏洞確實存在。幾個小時之后,谷歌的安全小組Project Zero正式公布了這兩個極具震撼力的新型漏洞,也就是大家現(xiàn)在看到的熔毀(meltdown)和幽靈(spectre)。

            這時候大家才知道,原來具體漏洞在2017年6月-7月份左右就已經(jīng)被多個團隊獨立發(fā)現(xiàn),相關(guān)研究人員在當時就已經(jīng)知會Intel、AMD、ARM等著名CPU設計(制造)公司和微軟、蘋果、linux kernel核心開發(fā)組等相關(guān)機構(gòu)和團體,并在所有知情人中間形成了默契的封口令[3],眾多參與者本來打算等到一兩周之后所有補丁和更新都準備好了再對外公布,沒想到并不知情的theregister網(wǎng)站從linux開源社區(qū)的郵件列表里發(fā)現(xiàn)了蛛絲馬跡,提前捅破觸發(fā)了公關(guān)危機,于是1月4號早上Intel也決定提前發(fā)布消息,隨后谷歌的研究者也打破沉默,上線了那個早已準備好的漏洞介紹網(wǎng)站和相關(guān)論文[4],于是一切被公諸于世。

          我們正在經(jīng)歷什么

            毫不夸張地說,截至目前爆出的漏洞實錘和原型演示來看,我們遇上了計算機體系結(jié)構(gòu)發(fā)展史上的最大硬件漏洞,并且很可能沒有之一。目前已經(jīng)可以確定的是,“熔毀”直接洞穿了Intel和微軟Windows、linux、蘋果Mac OS共同設下的重重安全防護,使用一段并不算特別復雜的代碼,運行在Intel處理器上,就可以做到竊取Firefox瀏覽器在內(nèi)存中保存的密碼、保存了網(wǎng)絡通信信息的HTTP報文頭等關(guān)鍵隱私,這不是聳人聽聞的推測,而是已經(jīng)被實現(xiàn)并通過視頻展示給全世界的事實,連源代碼都已開放下載[5]。而另一個漏洞“幽靈”則更加高深莫測,它同樣能悄無聲息地穿透操作系統(tǒng)內(nèi)核的自我保護,從用戶運行的空間里讀取到操作系統(tǒng)內(nèi)核空間的數(shù)據(jù),并且比“熔毀”更加恐怖的是,它在Intel/AMD/ARM這三大主流公司的CPU上都能起作用,可以說事實上所有的PC/手機/服務器都在受影響范圍內(nèi),并且難以通過軟件補丁修復也無法通過反病毒軟件對抗,再考慮到過去這些年中CPU數(shù)以億計的出貨量,已售出的芯片也無法通過微碼更新來完美解決問題,因此將會名副其實地成為一個籠罩在所有人頭頂許多年時間的安全隱患,大概“幽靈”的名字也就是這樣得來的。

          為什么之前沒有發(fā)現(xiàn)這個漏洞?

            這兩個漏洞都具有同一個特點,利用了現(xiàn)代高性能微處理器中的關(guān)鍵特性 - 推測執(zhí)行和亂序執(zhí)行,這兩項技術(shù)都是推動微處理器性能進步、讓大家的電腦、手機能夠高速運行越來越復雜應用的核心支柱。

            推測執(zhí)行技術(shù)是指,處理器為了提高性能,會去提前猜測接下去需要執(zhí)行什么動作,然后提前執(zhí)行,如果發(fā)現(xiàn)推測錯誤,則回滾至正常狀態(tài)。通常應用的推測執(zhí)行技術(shù)都能達到80%-90%以上的推測準確率。需要指出的是,推測執(zhí)行技術(shù)是一個大類技術(shù)的統(tǒng)稱,包括分支預測,預讀取,推測性內(nèi)存訪問,緩存缺失的重疊/亂序處理(MSHR)等等,幽靈漏洞就利用了分支預測、推測性內(nèi)存訪問和MSHR這三個特性。

            亂序執(zhí)行技術(shù)是指,當處理器遇到需要發(fā)生停頓的事件時(例如需要裝載的數(shù)據(jù)發(fā)生了緩存缺失,需要去高延遲的內(nèi)存中查找),處理器可以越過這個停頓事件,繼續(xù)超前執(zhí)行指令。同樣,如果超前執(zhí)行中發(fā)生了錯誤,也需要回滾至正常狀態(tài)。熔毀漏洞就利用了亂序執(zhí)行特性。

            亂序執(zhí)行技術(shù)最早出現(xiàn)在CDC 6600和IBM 360/91上,時間是上個世紀60年代,亂序執(zhí)行技術(shù)的兩位關(guān)鍵貢獻者James E. Thornton(1994)和Robert Tomasulo(1997)也因此拿到了計算機體系結(jié)構(gòu)學術(shù)界的最高榮譽Eckert–Mauchly Award,至于推測執(zhí)行的第一個范本,由于變種技術(shù)太多已經(jīng)無法考證,可考證最早的分支預測設計是James E. Smith于1981年公開的,他也對亂序執(zhí)行做出了卓越貢獻,于1999年榮獲Eckert–Mauchly Award[6]。

            可以看到,這些技術(shù)都是經(jīng)過數(shù)十年發(fā)展驗證的成熟技術(shù),此前爆出過的也只是程序運行錯誤的功能bug,并沒有如此嚴重的安全漏洞,而且推測執(zhí)行和亂序執(zhí)行對性能的提高都是成倍的影響力,例如在模擬器上的驗證表明,關(guān)閉亂序執(zhí)行大約會損失一半的性能,關(guān)閉推測執(zhí)行中的分支預測則會將處理器的最大指令吞吐的理論上限打回上世紀90年代的水平,因此這兩項技術(shù)已經(jīng)成為當之無愧的高性能微處理器的結(jié)構(gòu)頂梁柱。而根據(jù)推測執(zhí)行和亂序執(zhí)行的框架設計,其中有一個叫做重排序緩沖(ROB)的部件會負責樹立推測狀態(tài)和正常狀態(tài)之間的分界線,有了ROB的保護之后,推測執(zhí)行(分支預測)和亂序執(zhí)行的狀態(tài)信息就不會被上層感知,這是寫在每一本計算機體系結(jié)構(gòu)教科書里的內(nèi)容,被一代又一代的工程師沿用。

            現(xiàn)在,這個內(nèi)容被徹底改寫了。

          漏洞原理

            雖然指令可以不按順序執(zhí)行,為了確保亂序執(zhí)行的效果不對機器狀態(tài)發(fā)生影響,在亂序執(zhí)行過程中發(fā)生的異常錯誤和安全檢查違例,都要等到指令最后提交結(jié)果、并確認推測狀態(tài)無誤時才發(fā)起處理,如果發(fā)生錯誤,指令結(jié)果將被丟棄,異常處理進行完畢后回到正常狀態(tài)。如果在亂序執(zhí)行過程中就對指令進行異常處理,就會導致代碼發(fā)生異常的位置和實際執(zhí)行位置不匹配,打破了亂序執(zhí)行不得影響程序狀態(tài)的規(guī)則,從而破壞辛苦寫代碼的碼農(nóng)們所感知到的編程模型。如果指令通過了檢查,確認無誤,指令的操作結(jié)果才會更新到緩存與相關(guān)寄存器上,從而可以被軟件讀取。因此從指令執(zhí)行到進行最后的提交檢查之間存在一個可以利用的時間窗口,按照目前的亂序執(zhí)行窗口和處理器執(zhí)行頻率計算,大概有十幾個納秒到幾十個納秒的時間,可供繼續(xù)超前執(zhí)行大約幾十到一百多條指令。這個時間窗口成為了“熔毀”的攻擊點。

            在常規(guī)狀態(tài)下,訪問被保護的敏感區(qū)域會直接被權(quán)限鑒別的過程給拒絕,但是熔毀在這個小的時間窗口中,故意插入指令訪問了一些本該被保護的關(guān)鍵區(qū)域,這些敏感數(shù)據(jù)就會被提至處理器核心內(nèi)部的寄存器里參與運算。直到這一步,ROB仍然在維護超前執(zhí)行狀態(tài) - 正常狀態(tài)的分界線,整個系統(tǒng)仍然在保護之下,因為雖然敏感數(shù)據(jù)被提至處理器內(nèi)部,但是并未經(jīng)過安全檢查和異常檢查的確認,所以它的值只能用來作臨時運算,不能用來參與正常運算,不會被更新到架構(gòu)可見寄存器與緩存上,也就無法被上層軟件讀取,而等檢查進行到它所處位置的時候,CPU就會發(fā)現(xiàn)問題,然后及時制止,所以不會發(fā)生問題。但是這里出現(xiàn)了整個漏洞利用中最漂亮的一步:時間差分攻擊。

            既然敏感數(shù)據(jù)已經(jīng)被提取至CPU核心內(nèi)部可以參與臨時計算,那么就可以用它作為存儲器訪問的路標k,把內(nèi)存中的第k塊數(shù)據(jù)裝入緩存。這大概要花費上百個時鐘周期也就是大約幾十納秒,這個時間處在亂序執(zhí)行允許的窗口范圍內(nèi),如果窗口范圍不夠大了,還可以用其他手段再把這個窗口拉大一些。但終歸到最后,亂序執(zhí)行的指令要走到提交檢查的一步,CPU檢查發(fā)現(xiàn)這個敏感數(shù)據(jù)被訪問了,就會把對應指令的結(jié)果拋掉,k的值被扔掉以后,惡意代碼就無法讀取到k的值了。而這里遺漏了關(guān)鍵的一點,在亂序執(zhí)行中被裝入緩存的內(nèi)存第k塊數(shù)據(jù),并沒有被清理。于是后繼代碼就可以大大方方地把相關(guān)內(nèi)存地址都掃一遍,放在緩存里面的數(shù)據(jù)的訪問延遲與放在內(nèi)存里面的數(shù)據(jù)是不同的,如果掃描到第10塊內(nèi)存的時候發(fā)現(xiàn)它的響應速度特別快,就可以確定先前被讀取上來的k值是10。

            另一個幽靈漏洞的原理與此類似,但利用的是推測執(zhí)行(主要是分支預測)的指令,從執(zhí)行到進行安全檢查之間的時間差,在推測執(zhí)1行狀態(tài)下,利用此時觸發(fā)權(quán)限違例不會被立即掐死的特點,執(zhí)行一些惡意代碼把敏感數(shù)據(jù)裝入CPU寄存器參與臨時計算,隨后用這個敏感數(shù)據(jù)制作一個內(nèi)存地址裝入緩存,再觸發(fā)隨后的時間差分攻擊。

          效果與防護

            熔毀和幽靈利用亂序執(zhí)行和推測執(zhí)行,繞過了權(quán)限檢查等安全措施,可以訪問操作系統(tǒng)內(nèi)核乃至其他程序的內(nèi)容。其中熔毀更容易觸發(fā)利用,因此才有大家已經(jīng)看到的盜取瀏覽器密碼的實例,而幽靈漏洞需要受攻擊目標程序的分支入口點結(jié)構(gòu)滿足一定條件才能觸發(fā),難度相對較大,因此網(wǎng)上還沒有發(fā)現(xiàn)基于幽靈漏洞的信息泄露實例出來。需要指出的是,幽靈和熔毀漏洞都只能讀取敏感信息,不能修改(因為亂序執(zhí)行/推測執(zhí)行狀態(tài)下的修改在未通過檢查時一定會被拋棄),算是不幸中的萬幸。

            由于攻擊的是硬件漏洞,因此目前市面所有主流操作系統(tǒng),包括windows,linux,Mac OS都處在攻擊范圍內(nèi),隔離程度不夠高的眾多半虛擬化方案,Docker,LXC等,也在受影響范圍,因此這個漏洞將極大地影響云計算服務提供商。目前Google,Amazon,國內(nèi)的阿里,騰訊等大型云服務提供商都已宣布了補丁計劃。

            從業(yè)界廠商的角度看,盡管Intel,AMD,ARM各有說辭[7][8][9],但從專業(yè)從業(yè)人士的角度看,Intel妥妥地同時受到熔毀和幽靈兩個漏洞影響,而AMD和ARM在熔毀漏洞面前也只是暫時安全,熔毀的攻擊原理也適用于AMD和ARM,只是因為分支預測器結(jié)構(gòu)不同、流水線長度較短導致可利用的時間窗口不大等等因素,才沒有像Intel一樣被熔毀攻破。而幽靈則針對分支預測器進行注入攻擊,目前所有廠商的分支預測器部分都沒有做比較好的安全防護,因此Intel和ARM,AMD都會受到影響,而且分支預測器為了提高性能,天生就設計成部分地址哈希進行模糊匹配的模式,使得相關(guān)防御措施很難在不傷害性能的情況下修補漏洞。

            針對熔毀漏洞,目前已有的技術(shù)手段主要是通過軟件層次將內(nèi)核頁表與用戶頁表盡可能地隔離,這種技術(shù)的一個實現(xiàn)方案叫KAISER,其變種已經(jīng)被各大操作系統(tǒng)采用作為熔毀漏洞的臨時補救措施。這種技術(shù)方案會提高用戶態(tài)與內(nèi)核態(tài)的切換開銷,快速系統(tǒng)調(diào)用的初步測試證明,內(nèi)核系統(tǒng)調(diào)用的速度降低到了原先的42%,而利用現(xiàn)代處理器的PCID特性進行優(yōu)化后,能夠恢復到57%的水平[9]。具體的應用程序下降幅度取決于用戶程序與內(nèi)核交互的頻繁程度,linxu kernel開發(fā)人員的測試結(jié)果從10%~20%+不等,PCID能夠彌補大約5%-7%的性能。

            針對幽靈漏洞,目前沒有很好的防御方式,linux的發(fā)行版之一suse最近公開的一個安全更新顯示[10],AMD和Intel已經(jīng)向相關(guān)OS廠商推送了一個微碼更新,這個微碼更新會關(guān)閉分支預測來暫時封堵幽靈漏洞。由于分支預測對性能影響巨大,即便分支預測只被關(guān)閉一部分也很容易造成性能衰退二代左右的幅度,如果整個分支預測器都被關(guān)閉,CPU性能將退回2000年以前的水平。對于這個更新是否將被應用,相關(guān)從業(yè)人士正在持續(xù)跟進關(guān)注。

            下面是來自NGA用戶kprismk的一個比喻。注意這是比喻,省略了大量細節(jié):

            1.kfc里賣的有薯條、雞塊、漢堡、可樂。

            2.李小璐去kfc點了個漢堡,吃完走了。

            3.狗仔隊a狗仔排在李小璐后面的后面,和點餐小姐姐說:我要點和李小璐一樣的。

            4.點餐小姐姐說,不好意思您前面還有一位,稍等下,但是后廚聽到了,麻溜的做了個漢堡。

            5.輪到a狗仔點餐了,點餐小姐姐說。不能這樣點哦,侵犯人家隱私了,保安把這個狗仔ccq!

            6.b狗仔排在a狗仔后面,給小姐姐說:我薯條、雞塊、漢堡、可樂各點一份,餓死了餓死了,哪個快先把哪個給我!

            7.b狗仔先拿到了“漢堡”!

            8.b狗仔知道了李小璐今天在kfc買了個漢堡!



          關(guān)鍵詞: CPU linux

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();