Intel處理器爆出重大安全漏洞
用英特爾處理器的產(chǎn)品有了大麻煩!幾乎所有過去10年中生產(chǎn)的英特爾( INTC-US )處理器被發(fā)現(xiàn)有個(gè)重要的安全漏洞,可以允許「普通用戶只需啟動(dòng)某些程序,或透過Web瀏覽器中的JavaScript,就能在某種程度上辨識(shí)原應(yīng)受保護(hù)的內(nèi)核記憶體內(nèi)的內(nèi)容」,《Register》周二報(bào)導(dǎo)了這項(xiàng)發(fā)現(xiàn)。
從本質(zhì)上講,當(dāng)代英特爾處理器有一個(gè)設(shè)計(jì)缺陷,可能允許惡意程序讀取設(shè)備內(nèi)核記憶體受保護(hù)的區(qū)域,這塊區(qū)域?qū)iT用于保護(hù)操作系統(tǒng)最重要的核心組件以及與系統(tǒng)硬件交動(dòng)的內(nèi)存記憶體。這個(gè)漏洞可能會(huì)暴露受保護(hù)的信息,像是密碼。
那就意味著程序可以無視權(quán)限控制,隨意讀取本程序虛擬內(nèi)存內(nèi)的數(shù)據(jù),由于Linux和Windows的內(nèi)存模型設(shè)計(jì)(內(nèi)核與程序共享一個(gè)虛擬地址空間,通過權(quán)限控制阻止程序訪問內(nèi)核),這意味著任何程序都可以讀取內(nèi)核,包括諸如加密文件系統(tǒng)的密鑰之類的數(shù)據(jù)。
由于這個(gè)漏洞是被嵌入Intel x86-64韌體里,因此需要用操作系統(tǒng)等級(jí)的覆寫才能改正,這些主要的操作系統(tǒng)包括Windows、Linux和macOS。
在這個(gè)問題被發(fā)現(xiàn)后,開發(fā)者急于在接下來的幾周內(nèi)修補(bǔ)系統(tǒng),所以這個(gè)設(shè)計(jì)缺陷的確切細(xì)節(jié)以及用戶容易受到攻擊的程度現(xiàn)在依然在保密狀態(tài),但情況可能非常糟。在最壞的情況下,像在網(wǎng)頁或云端托管的惡意軟件上啟動(dòng)JavaScript 那樣簡(jiǎn)單的事情,都可能刺探以Intel 設(shè)備為主干最敏感的內(nèi)部工作。
由于修復(fù)需要將內(nèi)核記憶體完全從用戶操作流程中分離出來,修補(bǔ)后的操作系統(tǒng)可能會(huì)出現(xiàn)「5% 到30% 的運(yùn)作遲緩,程度取決于工作和處理器型號(hào)」。
5% 到30% 是一個(gè)令人驚嚇的數(shù)字,但由于現(xiàn)在一切都仍在保密中,很難判定它們對(duì)消費(fèi)者的影響究竟有多明顯,不過可能對(duì)企業(yè)級(jí)的云端計(jì)算系統(tǒng)可能是沖擊最大的。對(duì)于普通用戶而言,影響可能可以被忽略不計(jì),只要未來的修復(fù)版本能實(shí)現(xiàn)解決方案,就可能降低沖擊。
《Gizmodo》網(wǎng)站引述《Python Sweetness》博客指出,「解決軟件的緊急開發(fā)已公開化,近日將在Linux 內(nèi)核中試行」,「而在11 月類似的解決措施也開始出現(xiàn)在NT 內(nèi)核中?!埂冈谧钤愕那闆r下,軟件修復(fù)會(huì)導(dǎo)致基本工作負(fù)載的大幅降速...... 許多線索都顯示這會(huì)影響到常見的虛擬化環(huán)境,包括Amazon EC2 和Google Compute Engine?!?/p>
《Gizmodo》網(wǎng)站報(bào)導(dǎo),整件事唯一讓人欣慰的是,即使這個(gè)漏洞埋得如此之深,得花上10 年的時(shí)間才能找到它,但發(fā)現(xiàn)者并沒有隱而不談。而唯一的獲利者可能是市占率極小的AMD 處理器,它大概會(huì)在一旁偷笑。
英特爾股價(jià)周三下跌3.5% 至45.22 美元,Advanced Micro Devices(AMD) 股價(jià)則上漲。
根據(jù)the Register 網(wǎng)站的一份報(bào)告指出,Linux 與微軟的視窗作業(yè)系統(tǒng)若使用英特爾芯片,速度將減慢5% 至30%。
該報(bào)告并指出,AMD 芯片不會(huì)受到影響。AMD 股價(jià)上漲7.2% 至11.77 美元。
關(guān)于此漏洞的相關(guān)評(píng)價(jià)
知乎用戶Allen Leung表示,此漏洞會(huì)導(dǎo)致低權(quán)限應(yīng)用訪問到內(nèi)核內(nèi)存;此漏洞是硬件設(shè)計(jì)導(dǎo)致的,無法使用microcode修復(fù),只能進(jìn)行OS級(jí)的修復(fù);OS級(jí)的修復(fù)會(huì)導(dǎo)致嚴(yán)重的性能問題,將會(huì)導(dǎo)致5%-30%的性能下降。
他進(jìn)一步指出,目前phoronix已對(duì)此進(jìn)行了測(cè)試,IO性能幾乎下降了50%,編譯性能下降了接近30%,postgresql和redis也有差不多20%的性能下跌。
用戶魚羊鮮則指出,此漏洞最早由某404公司研究機(jī)構(gòu)發(fā)現(xiàn),目前還不清楚有沒有人利用。
早在17年中就被發(fā)現(xiàn)了,各大芯片和OS廠互相通氣一起研究辦法 因?yàn)榈讓拥挠布脑O(shè)計(jì)漏洞 很難修復(fù)了 只能靠os方面打補(bǔ)丁,突破口就是speculative execution , 用的某種side channel attack.發(fā)現(xiàn)者估計(jì)也是硬件+架構(gòu)+os大牛了...總之能獲取內(nèi)核的數(shù)據(jù) 。
speculative execution算是很普遍的優(yōu)化方式,基本現(xiàn)代復(fù)雜一點(diǎn)的核都會(huì)用到,intel 就更不用說了. 修復(fù)完加上限制后會(huì)有較大的影響. 但具體怎樣無從得知。
至于修復(fù)方式,知乎用戶樓群指出了以下幾點(diǎn):
1)芯片微碼更新不足以修復(fù)漏洞,必須修改系統(tǒng)或者購買新設(shè)計(jì)的 CPU
2)目前 Linux 內(nèi)核的解決方案是重新設(shè)計(jì)頁表(KPTI 技術(shù),前身為 KAISER)。之前普通程序和內(nèi)核程序共用頁表,靠 CPU 來阻止普通程序的越權(quán)訪問。新方案讓內(nèi)核使用另外一個(gè)頁表,而普通程序的頁表中只保留一些必要的內(nèi)核信息(例如調(diào)用內(nèi)核的地址)。這個(gè)方案會(huì)導(dǎo)致每次普通程序和內(nèi)核程序之間的切換(例如系統(tǒng)內(nèi)核調(diào)用或者硬件中斷)都需要切換頁表,引起 CPU 的 TLB 緩存刷新。TLB 緩存刷新相對(duì)來說是非常耗時(shí)的,因此會(huì)降低系統(tǒng)的效率。
3)KAISER 技術(shù)對(duì)系統(tǒng)性能的影響一般是 5%,最高可達(dá) 30%。一些高級(jí)的芯片功能(例如 PCID)可以支持其他技術(shù),從而減少性能影響。Linux 已經(jīng)在 4.14 版本的開發(fā)過程中添加了對(duì) PCID 的支持。
4)在 Linux 系統(tǒng)中,KPTI 只有在英特爾芯片上才會(huì)啟用,因此 AMD 芯片不受影響,且用戶可以通過手動(dòng)修改開關(guān)的方式關(guān)閉 KPTI
英特爾稱其他公司芯片也存在問題 正與AMD、ARM合作
據(jù)CNBC北京時(shí)間1月4日?qǐng)?bào)道,英特爾當(dāng)?shù)貢r(shí)間星期三表示,正在與AMD、ARM和軟件廠商合作,解決媒體報(bào)道的一個(gè)安全問題。英特爾稱,媒體有關(guān)安全問題是由缺陷造成的,以及只有其產(chǎn)品存在相關(guān)安全問題的報(bào)道是不準(zhǔn)確的,其他公司的芯片也存在相同問題。
此前,the Register刊文稱,修正英特爾芯片中一處嚴(yán)重安全缺陷的補(bǔ)丁軟件會(huì)影響到芯片性能。由于這一報(bào)道在市場(chǎng)上產(chǎn)生廣泛影響,今天常規(guī)交易中,英特爾股價(jià)一度下跌6%,AMD股價(jià)則一度上漲逾8%。媒體報(bào)道稱AMD芯片不會(huì)受到這一問題影響。
英特爾表示,其他公司芯片也存在相同問題。英特爾在一份聲明中說,“最近媒體報(bào)道稱這一安全問題是由一處‘缺陷’引起的,而且只影響英特爾芯片的說法是不正確的。根據(jù)目前的分析,許多類型的計(jì)算設(shè)備——配置多家不同公司處理器、運(yùn)行不同操作系統(tǒng)——也會(huì)受到這些安全問題的影響。”
聲明稱,英特爾的計(jì)劃是“迅速和建設(shè)性”地解決這一問題。
據(jù)the Register稱,除影響PC外,該安全問題還影響公共云服務(wù)提供商,例如亞馬遜Web Services、微軟Azure和谷歌Cloud Platform。它們使用戶能租借英特爾芯片,在Windows和Linux上運(yùn)行自己的應(yīng)用。
據(jù)測(cè)試過Linux版補(bǔ)丁軟件的Phoronix高管邁克爾·拉拉貝爾(Michael Larabel)指出,補(bǔ)丁軟件會(huì)使系統(tǒng)性能“下降1至2位數(shù)”。在PC上運(yùn)行游戲的性能似乎不受補(bǔ)丁軟件影響,運(yùn)行PostgreSQL和Redis等數(shù)據(jù)庫的性能會(huì)有適度下降。
英特爾在聲明中也提到了性能問題,“與部分媒體報(bào)道截然不同的是,任何性能下降都取決于負(fù)載,對(duì)于普通用戶而言,性能下降并不嚴(yán)重,隨著時(shí)間推移,對(duì)性能的影響將得到緩解。”
英特爾稱,它計(jì)劃下周討論這一安全問題,“屆時(shí)會(huì)有更多軟件和固件更新包發(fā)布”。
這一事件會(huì)給英特爾帶來費(fèi)用甚至訴訟,市場(chǎng)研究公司Bernstein分析師斯塔西·拉斯岡(Stacy Rasgon)在星期三發(fā)表的報(bào)告中也提及了這一點(diǎn)。
AppleInsider刊文稱,蘋果一直在忙于修正影響macOS的漏洞;the Register刊文稱,微軟已經(jīng)在對(duì)修正該問題的Windows更新包進(jìn)行測(cè)試。
谷歌、亞馬遜、蘋果和微軟未就此置評(píng)。
英特爾建議用戶,“與操作系統(tǒng)開發(fā)商或系統(tǒng)制造商接洽,盡可能快地安裝它們發(fā)布的補(bǔ)丁軟件。”
附:基本知識(shí)科普
首先,我們需要了解一下現(xiàn)在的CPU的基本工作方式:
指令解碼:
將指令翻譯成微代碼(是,x86處理器基本上都已經(jīng)是硬件級(jí)JIT引擎了……)
將微代碼丟進(jìn)執(zhí)行隊(duì)列
調(diào)度執(zhí)行:
調(diào)度器檢查隊(duì)列中的微代碼,依據(jù)現(xiàn)有資源和微代碼間的依賴關(guān)系,選出可以執(zhí)行的微代碼
調(diào)度器將這些微代碼(可能有多個(gè))發(fā)送給相應(yīng)的執(zhí)行器執(zhí)行
執(zhí)行器將執(zhí)行結(jié)果丟回調(diào)度器(結(jié)果、異常、狀態(tài)位之類的)
調(diào)度器檢查緩存里最舊的指令的微代碼是否已經(jīng)全部執(zhí)行完畢,如果沒有完成執(zhí)行,回到第2.1步
將最舊的指令的微代碼移出隊(duì)列
結(jié)果提交:
按指令的執(zhí)行結(jié)果更新架構(gòu)狀態(tài)(寫入寄存器、產(chǎn)生中斷等)
如果發(fā)生了需要特殊操作的事件(比如異常、中斷等),清空整個(gè)流水線并按流程處理
注意除了3可以清空掉1、2之外,這三塊基本上是互相獨(dú)立工作的
如果我們?cè)L問了不能訪問的內(nèi)存,這個(gè)異常是在3.2這一步里引發(fā)的,此時(shí)整個(gè)流水線都會(huì)被清空
但!是!2.2這一步可能已經(jīng)訪問了這部分內(nèi)存,只是因?yàn)?.2引發(fā)異常而丟棄了結(jié)果
所以說如果有辦法能觀測(cè)到2這一塊對(duì)內(nèi)存的使用情況的話……
比如這段匯編:
CLFLUSH [用戶地址]
CLFLUSH [用戶地址 + 1]
MOV AX, [內(nèi)核地址]
AND AX, 1
MOV BL, [用戶地址 + AX]
顯然,在第3條就會(huì)發(fā)生異常。
但是,萬一,萬一在清空流水線前,調(diào)度執(zhí)行階段執(zhí)行到了第5條會(huì)怎么樣!
如果這個(gè)內(nèi)核地址的最低位是0,那么我們會(huì)訪問用戶地址 ,但是如果是1的話,我們會(huì)訪問用戶地址+1
如果我們把這個(gè)地址放在緩存頁的邊界上 ,那么根據(jù)這個(gè)內(nèi)核地址上最低位值的不同,被加載進(jìn)緩存的頁也會(huì)不同,后續(xù)訪問兩個(gè)頁的延遲會(huì)存在區(qū)別
所以說……我們就能推斷這個(gè)內(nèi)核地址上的值了?
哦對(duì),以上這段是確認(rèn)不能用了我才發(fā)出來的(真要能用早三五年就被人報(bào)了好么)
估計(jì)這次的東西可能是類似的原因,調(diào)度執(zhí)行階段會(huì)忽略訪問控制,以致在后續(xù)執(zhí)行中可以通過其他間接方式觀測(cè)/推測(cè)這個(gè)不可訪問的值。
其次我們需要知道,以前常見的虛擬內(nèi)存結(jié)構(gòu)怎樣的。
以32位Linux為例,我們知道2^32 Bytes = 4GB,從應(yīng)用程序的眼中來看,我擁有4個(gè)G的內(nèi)存。但是,這4個(gè)G的內(nèi)存并不完全屬于應(yīng)用程序——高地址那邊的1GB大小的映射是屬于內(nèi)核的。比如,假設(shè)內(nèi)核有一段代碼在虛擬地址0xCCCCCCCC這個(gè)位置上,應(yīng)用程序也是無法直接調(diào)用的。換句話說,雖然這些地址普通程序不能訪問,但內(nèi)核程序、內(nèi)核棧等確實(shí)映射在這了。
看起來一切正常。接下來,假設(shè)我們發(fā)現(xiàn)了一個(gè)內(nèi)核漏洞,這個(gè)漏洞允許程序調(diào)用任意內(nèi)核級(jí)的代碼——也就是說,應(yīng)用程序通過這個(gè)漏洞可以調(diào)用內(nèi)核中0xCCCCCCCC地址的程序了,進(jìn)而對(duì)系統(tǒng)造成危害。
那么如何減輕發(fā)現(xiàn)內(nèi)核漏洞之后的危害呢?畢竟,有代碼的地方就會(huì)有bug。大佬們決定采用一種隨機(jī)的方法:你不是要調(diào)用0xCCCCCCCC這塊的代碼嗎?那我每次啟動(dòng)的時(shí)候,把內(nèi)核映射到一個(gè)隨機(jī)的地址上就好了嘛,比如這段代碼這次啟動(dòng)的時(shí)候它在0xCCCC0000,下次啟動(dòng)它就變成了0xCCCC8888,讓人摸不著頭腦。
這種機(jī)制就叫KASLR。它隨機(jī)化內(nèi)核在虛擬空間中的地址,只有內(nèi)核自己知道我在哪,別人休想知道。所以說,KASLR不是“修補(bǔ)”漏洞,而是提高了利用漏洞的成本——最好的情況是,雖然有人發(fā)現(xiàn)了漏洞,但卻難以利用。
但是,魔高一尺道高一丈。另一位大佬說,你這太弱了。我用一種方法,能探測(cè)出你究竟隨機(jī)到哪去了。這就是很多答主說的Time Based Attack。因?yàn)榉糯a的地址和沒放代碼的地址,在某些操作下時(shí)間長(zhǎng)短不一樣。
因此,這種Attack不是真正的漏洞攻擊,但他讓KASLR機(jī)制失效了。如果有人發(fā)現(xiàn)了可利用的內(nèi)核漏洞后,就可以用這種方式繞過KASLR。
大佬還說了,雖然KASLR不好使了,但我的新方法好使啊。這個(gè)新方法就是KAISER——內(nèi)核除了讓應(yīng)用程序知道必要的信息外,不再在應(yīng)用程序的眼中“可見”。但是代價(jià)也是有的,就是性能會(huì)有所下降。