湊個熱鬧,聊一下Meltdown and Spectre
作為非專業(yè)人士,就本著看熱鬧不嫌事兒大的態(tài)度Google看看好了,以下內(nèi)容本質(zhì)上都是來自搜索引擎,我自己理解或者翻譯了一下
總體介紹
Meltdown和Spectre是兩種不同的bug,但都可以被攻擊者用來在現(xiàn)代電腦處理器上非法竊取密碼等隱私數(shù)據(jù)。這里的現(xiàn)代電腦處理器目前被定義為來近20年來生產(chǎn)的所有處理器,包括Intel,AMD,以及基于ARM架構(gòu)的處理器
因為是比較嚴(yán)重的bug,當(dāng)然作為處理器生產(chǎn)廠家第一反應(yīng)就是站出來穩(wěn)定軍心,當(dāng)然牙膏廠沒啥好說的來,畢竟全線崩潰,Meltdown和Spectre都對其有影響,于是先站出來放了個大炸彈說不止Intel有這個危險,所有的處理器都有。于是AMD不開心了,站出來回懟說AMD是不會收到Meltdown影響,同時'near zero risk'被Spectre影響。這就是新聞熱鬧而眾說紛紜的原因
Meltdown
Meltdown會利用Intel處理器的預(yù)測執(zhí)行設(shè)計,破壞應(yīng)用程序和操作系統(tǒng)間的界限,攻擊程序有機(jī)會訪問到操作系統(tǒng)所使用的內(nèi)存空間,也就有機(jī)會從中獲取操作系統(tǒng)級別的數(shù)據(jù)
但是這個bug是可以進(jìn)行補丁修復(fù)的,而且各方已經(jīng)開始放出軟件進(jìn)行修復(fù)。雖然修復(fù)后對系統(tǒng)性能會有影響,但是具體有多大影響暫時不明,聽說對個人設(shè)備來說使用的影響不大,看了幾個測評,打完補丁前后玩瞎子信條以及跑大型Adobe或者Office軟件都沒有很大差別
Spectre
不得不說這Logo還挺萌。。。
Spectre會破壞應(yīng)用程序之間的隔離性,攻擊程序有機(jī)會訪問到其他應(yīng)用程序所使用的內(nèi)存空間,也就有機(jī)會獲取其他應(yīng)用程序的數(shù)據(jù)
Spectre相對于Meltdown更難以被利用,但是也更難以被通過軟件補丁的方式修復(fù),現(xiàn)在普遍認(rèn)為會在接下來很長時間內(nèi)作為一個隨時可能引爆的炸彈存在
重點,Spectre目前有兩種變體,AMD官方宣稱的對Spectre的'near zero risk'是指的Spectre的一種變體而非全部,這也是在Hacker News上面被嘲諷的一個點
危害群體
其實這兩個bug對普通用戶對影響不大,安裝下各自廠商發(fā)布的系統(tǒng)升級,繼續(xù)安全的使用自己的設(shè)備就好了。因為雖然這兩個bug在個人設(shè)備上也可以被利用,但是個人設(shè)備一般都是單人使用,也有比較迅速的系統(tǒng)更新和權(quán)限系統(tǒng)管理,以及殺毒軟件等,危害不會很大
重大危害主要針對的是云服務(wù)平臺,云平臺理論上可以視作一臺巨大的電腦,同時有無數(shù)的用戶在自己的實例上進(jìn)行操作,云平臺發(fā)展至今,無論個人還是公司或是政府都有自己的內(nèi)容在上面,其上存儲的隱私數(shù)據(jù)的重要程度大家都清楚,所以一旦發(fā)生用戶隱私數(shù)據(jù)泄露,影響要嚴(yán)重的多,而且攻擊者完全可以是一個正當(dāng)?shù)脑破脚_用戶,在掌握了bug的利用方式之后,其只需要在該平臺上運行攻擊程序就可以竊取其他用戶甚至操作系統(tǒng)級別信息的
利用方式
新聞?wù)f完了,Meltdown和Spectre這兩個bug是可以利用的,這個是概念驗證已經(jīng)通過的
利用的思路如下:
The core of this attack is extremely simple and elegant; use a value from a speculated-but-not-completed instruction as an index, causing one of a set of cachelines to be touched; then use a timing measurement on those cachelines to see which one was accessed, thus determining the value.
作為非專業(yè)人員,我覺得用形象生動的例子來理解一下這些高大上的內(nèi)容的原理就可以了:)
所以我們舉個例子
當(dāng)然先貼來源Reading privileged memory with a side-channel
想象有一家圖書館,里面的書都只有一個字母
現(xiàn)在圖書館有一些書你無權(quán)借出比如BookX。有一些書你有權(quán)借出比如BookY,BookY+1,。。。以此類推
你來到圖書館前臺,向圖書館管理員說你想借出BookX,但圖書館管理員不知道你有沒有權(quán)利借出BookX,于是讓查詢員幫自己去系統(tǒng)里查一下你是否有權(quán)利借出這本書。在你們等待查詢員回復(fù)的時候,你說“實際上,我并不大感興趣借出BookX,我實際想做的事情是:如果BookX里的內(nèi)容是字母'a',我就借出BookY;如果BookX里的內(nèi)容是字母'b',我想借出BookY+1。。。以此類推”
圖書館管理員現(xiàn)在正在等待查詢員回復(fù)你是否有權(quán)利借出BookX,但是閑著也是閑著,所以他就翻開BookX看了一下,然后發(fā)現(xiàn)里面的內(nèi)容是字母'b',于是就去書架上去了BookY+1到前臺來,以便一旦查詢員回復(fù)說你有權(quán)利借出BookX,那么圖書館管理員可以立刻把BookY+1給你,以提高效率(Intel預(yù)測執(zhí)行)
然后,查詢員回來了,告訴圖書館管理員說你無權(quán)利借出BookX,于是圖書館管理員對你說“對不起,你不能借出BookX。(然后我也不是傻子)我也不能把我剛剛拿到的那本你有權(quán)利借出的書給你因為如果這樣的話你就反推出來了你無權(quán)借出的BookX的內(nèi)容。”
你當(dāng)然表示理解,然后說你想借出BookY,圖書管理員去書架找了一會兒,比如花了5分鐘,然后把BookY拿給了你。然后你說你還想借出BookY+1,圖書館管理員立刻把手頭的BookY+1拿給了你。然后你說你還想借出BookY+2,圖書管理員去書架找了一會兒,比如花了5分鐘,然后把BookY+2拿給了你
于是,通過時間差,你推斷出,BookY+1極大可能是在你想借出你無權(quán)借出的BookX時,圖書館管理員拿到手里的那本書,也就推斷出BookX的內(nèi)容是字母'b'
完工,BookX就是系統(tǒng)進(jìn)程內(nèi)存或者其他程序所在內(nèi)存,其中的內(nèi)容就是內(nèi)存中的內(nèi)容,圖書館管理員就是處理器,你就是攻擊程序,圖書館管理員的手頭或者說前臺就是緩存
最后,如果BookX指的是系統(tǒng)進(jìn)程所在內(nèi)存,系統(tǒng)有亂序映射的處理來讓其他應(yīng)用不能輕易的知道自己的內(nèi)存地址,但是各種應(yīng)用程序所在的內(nèi)存地址可能就沒那么難獲得了:)