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