從原理到范例:關(guān)于Intel芯片“漏洞門”的最全總結(jié)
來源:內(nèi)容由半導(dǎo)體行業(yè)觀察整理自NGA、鳳凰科技和Intel等,謝謝。
日前,有關(guān)英特爾芯片漏洞的討論遍及整個IT圈。有關(guān)英特爾芯片漏洞細節(jié)的報告最先發(fā)布在由谷歌公司、美國賓夕法尼亞大學(xué)、馬里蘭大學(xué)、奧地利格拉茨技術(shù)大學(xué)、澳大利亞阿德萊德大學(xué)等機構(gòu)研究人員聯(lián)合設(shè)計的網(wǎng)站上。這份報告披露,包括英特爾在內(nèi)的各主流芯片,其底層技術(shù)都采用了一種叫“推測性執(zhí)行”的方法。
在這份報告影響下截至周四,英特爾股價在兩日內(nèi)下跌5.2%,市值蒸發(fā)113億美元。同時,AMD股價累計上漲10.4%。
多位華爾街分析師預(yù)計,AMD將利用英特爾出現(xiàn)的安全問題。瑞穗證券分析師維賈伊·拉克什(Vijay Rakesh)在一份報告中稱,鑒于AMD使用了不同的架構(gòu),目前尚未發(fā)現(xiàn)漏洞,AMD可能會把它作為一項營銷優(yōu)勢。
拉克什指出,英特爾目前在數(shù)據(jù)中心市場占據(jù)高達99%的份額,這對AMD來說是一個重大機遇。金融信息提供商FactSet的數(shù)據(jù)顯示,分析師預(yù)計,2017年,英特爾數(shù)據(jù)中心集團將創(chuàng)造185億美元收入,74億美元營業(yè)利潤。
“長期客戶可能更希望把AMD,甚至是ARM作為替代選擇,以減低架構(gòu)風(fēng)險,”美銀美林分析師維維克·阿雅(Vivek Arya)周四在報告中稱,“AMD似乎有望成為最直接受益者?!?
AMD在服務(wù)器市場份額的大幅增長并不是沒有出現(xiàn)過,該公司在2006年的份額一度達到26%。如果AMD能夠在數(shù)據(jù)中心業(yè)務(wù)中拿下10%或15%的份額,那么它的營收可能就會增加數(shù)十億美元。
究竟Intel芯片碰到了啥問題?
芯片組是負責(zé)聯(lián)系中央處理器和周邊設(shè)備運作的計算機主板核心組成部分。使用該方法的絕大多數(shù)中央處理器為提高性能,會根據(jù)被假設(shè)為真實的判斷,推測性地執(zhí)行指令。執(zhí)行期間,中央處理器會驗證假設(shè),如假設(shè)有效,則執(zhí)行繼續(xù),反之則解除執(zhí)行。但“推測性執(zhí)行”可能在執(zhí)行解除后產(chǎn)生無法消除的副作用,從而導(dǎo)致計算機信息泄露。
針對英特爾芯片的設(shè)計缺陷,谷歌“零點項目”團隊介紹了3種不同攻擊方式,前兩種方式被稱為“崩潰”,后一種被稱作“幽靈”。
該團隊認為,這個設(shè)計缺陷具有3個特點:首先,沒有任何一個補丁可以同時抵御3種攻擊方式;其次,與傳統(tǒng)病毒不同,攻擊不會留下痕跡,計算機無法在被攻擊時發(fā)現(xiàn);第三,惡意攻擊者可以從一臺虛擬設(shè)備上發(fā)起攻擊,侵入主機的物理內(nèi)存,“借道”獲取其他虛擬設(shè)備信息?!傲泓c項目”研究員詹·霍恩解釋說,“黑客”可以利用該方法讀取設(shè)備內(nèi)存,獲得密碼、密鑰等敏感信息。
“零點項目”是2014年7月由谷歌公司啟動的互聯(lián)網(wǎng)安全項目,成員主要由谷歌內(nèi)部頂尖安全工程師組成,專門負責(zé)找出網(wǎng)絡(luò)系統(tǒng)安全漏洞。該團隊原定9日發(fā)布英特爾芯片安全漏洞的相關(guān)報告,科技網(wǎng)站《紀(jì)事》搶先報道這個發(fā)現(xiàn)后,該團隊緊急公布了研究結(jié)果,完整報告仍將于9日發(fā)布。
波及面廣 修補困難
芯片被稱為計算機的“大腦”。分析人士認為,英特爾1995年后生產(chǎn)的絕大多數(shù)芯片都暴露在風(fēng)險之中,漏洞波及了大量設(shè)備,帶來的問題主要體現(xiàn)在幾個方面:
第一,波及面廣?;谟⑻貭栃酒\行的微軟“視窗”、Linux、蘋果macOS和安卓等主流操作系統(tǒng),以及谷歌、亞馬遜等公司提供的大型云計算服務(wù)都可能受到影響。
第二,修復(fù)有難度。盡管谷歌、微軟、亞馬遜等公司正在陸續(xù)推出補丁,但這些補丁主要針對被稱為“崩潰”的兩種攻擊方法,防范“幽靈”攻擊則需對硬件進行升級,而更換全球大多數(shù)計算設(shè)備難度巨大。
第三,或存后遺癥。業(yè)內(nèi)人士稱,現(xiàn)有防護補丁將增加中央處理器負荷,漏洞即使得到修復(fù),也可能導(dǎo)致全球個人電腦性能明顯下降。英特爾基于Linux開源操作系統(tǒng)的開發(fā)者戴夫·漢森認為,補丁將使芯片運轉(zhuǎn)效率降低約5%,對聯(lián)網(wǎng)功能的影響甚至高達30%。但英特爾否認類似說法,認為補丁對芯片影響會隨時間減弱。
第四,產(chǎn)業(yè)關(guān)切深。英特爾的芯片在物聯(lián)網(wǎng)、無人駕駛、5G、人工智能、深度學(xué)習(xí)等新興領(lǐng)域廣泛應(yīng)用,安全漏洞對這些領(lǐng)域造成的威脅可能從網(wǎng)絡(luò)向現(xiàn)實世界延伸。而云計算等服務(wù)對芯片計算能力的需求呈指數(shù)級提升,修補漏洞對芯片計算效率造成的影響可能拖慢整個行業(yè)發(fā)展。
英特爾關(guān)于安全研究結(jié)果的回應(yīng)
對于這件事,英特爾做出了回應(yīng),他們表示,英特爾和其他技術(shù)公司對最近媒體報道的一項安全研究已經(jīng)了解。這一研究中描述的軟件分析方法,當(dāng)被用于惡意目的時,有可能從被操縱的計算設(shè)備中不當(dāng)?shù)厥占舾袛?shù)據(jù)。英特爾認為,這些攻擊沒有可能損壞、修改或刪除數(shù)據(jù)。
最近的報道還稱,這些破壞是由“漏洞”或“缺陷”造成的,并且是英特爾產(chǎn)品所獨有的——這是不正確的。根據(jù)迄今的分析,許多類型的計算設(shè)備(有來自許多不同供應(yīng)商的處理器和操作系統(tǒng))都會容易受到類似攻擊。
英特爾致力于為產(chǎn)品和客戶安全提供保障,并與許多其他技術(shù)公司(包括 AMD、ARM 控股和多個操作系統(tǒng)供應(yīng)商)密切合作,以制定用于全行業(yè)的方法,迅速、有建設(shè)性地解決這一問題。英特爾已開始提供軟件和固件更新來抵御這些破壞。與某些報道中指出的恰恰相反,不同負載受影響程度不同。對于一般的計算機用戶來說影響并不顯著,而且會隨著時間的推移而減輕。
英特爾致力于提供業(yè)界最佳實踐,負責(zé)任地披露潛在的安全問題,這就是英特爾和其他供應(yīng)商原本計劃在下周發(fā)布更多軟件和固件更新的原因。但由于當(dāng)前媒體不準(zhǔn)確的報道,英特爾今天特此發(fā)表聲明。
請與您的操作系統(tǒng)供應(yīng)商或系統(tǒng)制造商聯(lián)系,并盡快采納任何可用的更新。日常遵循抵御惡意軟件的安全操作,也有助于在應(yīng)用更新之前防止可能的破壞。
英特爾相信其產(chǎn)品在世界上是最安全的,并且在合作伙伴的支持下,當(dāng)前對這一問題的解決方案,能為客戶提供最佳的安全保障。
與此同時,英特爾也發(fā)布了相關(guān)的更新:
英特爾方面指出,他們已經(jīng)為基于英特爾芯片的各種計算機系統(tǒng)(包括個人電腦和服務(wù)器)開發(fā)了更新,并且正在快速發(fā)布這些更新,以保護這些系統(tǒng)免受谷歌Project Zero所報告的兩種潛在攻擊隱患(被稱為Spectre和Meltdown)。英特爾與其產(chǎn)業(yè)伙伴在部署軟件補丁和固件更新方面已取得重要進展。
英特爾已經(jīng)針對過去5年中推出的大多數(shù)處理器產(chǎn)品發(fā)布了更新。到下周末,英特爾發(fā)布的更新預(yù)計將覆蓋過去5年內(nèi)推出的90%以上的處理器產(chǎn)品。此外,許多操作系統(tǒng)供應(yīng)商、公共云服務(wù)提供商、設(shè)備制造商和其他廠商也表示,他們正在或已對其產(chǎn)品和服務(wù)提供更新。
英特爾相信,這些更新對不同工作負載的性能影響會有不同。對于一般的計算機用戶來說,影響并不顯著,而且會隨著時間的推移而減輕。雖然對于某些特定的工作負載,軟件更新對性能的影響可能一開始相對較高,但隨著采取進一步后續(xù)的優(yōu)化工作,包括更新部署后的識別、測試和軟件更新改進,應(yīng)該可以減輕這種影響。
系統(tǒng)更新程序可通過系統(tǒng)制造商、操作系統(tǒng)提供商和其他相關(guān)廠商獲得。
英特爾將與其產(chǎn)業(yè)伙伴和其他廠商一起繼續(xù)合作以解決這些問題,也感謝他們的支持和協(xié)助。英特爾鼓勵所有計算機用戶啟用操作系統(tǒng)以及其他計算機軟件的自動更新功能,以確保其系統(tǒng)是最新版本。
他們強調(diào),近日公布的安全更新在實際部署中并不會影響性能。
具體測試結(jié)果包括:
蘋果:“我們的GeekBench 4基準(zhǔn)測試以及Speedometer、JetStream和ARES-6等常見的Web瀏覽基準(zhǔn)測試表明,2017年12月的更新沒有顯著降低macOS和iOS設(shè)備的性能?!?
微軟:“絕大多數(shù)Azure客戶不會感受到此次更新對性能的影響。我們已經(jīng)優(yōu)化了CPU和磁盤I/O路徑,在采納更新后沒有看到對性能產(chǎn)生明顯的影響。”
亞馬遜:“我們沒有觀察到這對絕大多數(shù)EC2工作負載的性能有產(chǎn)生實際的影響?!?
谷歌:“在包括云基礎(chǔ)設(shè)施在內(nèi)的大多數(shù)工作負載上,我們看到對性能的影響可以忽略不計。”
英特爾相信,這些更新對性能的影響在很大程度上取決于于具體的工作負載。對于一般的計算機用戶來說影響并不顯著,并會隨著時間的推移而減輕。
背后的原理和分析
首先我們先要明白這次的漏洞是啥,我們先從機制說起來。這次曝光的漏洞一組三個,基本原理都是一樣的。
而在具體解析之前,我們需要搞清楚幾個概念:
一是緩存(Cache):
CPU執(zhí)行指令,最大的速度瓶頸不在計算,而在于內(nèi)存訪問。為了降低內(nèi)存訪問需要的時間,現(xiàn)代CPU全部都設(shè)計了緩存。通俗地說,就是把曾經(jīng)讀過的內(nèi)存,備一份在速度更快的緩存里。下次再讀同一塊數(shù)據(jù)的時候就可以直接從緩存里取,就會更快;
另一個亂序執(zhí)行(OOO):
因為有訪存瓶頸,指令之間的執(zhí)行時間差距可能非常大。一條普通的計算指令1拍結(jié)束。一條訪存指令如果緩存命中,需要10到100拍;如果緩存不命中,到內(nèi)存里取,需要上萬拍甚至更多。如果上一條指令被訪存卡了十萬拍,后面其他的指令只能等著嗎?不可能的,所以現(xiàn)代CPU全部都設(shè)計了亂序執(zhí)行的特性。把指令比做人的話,
順序執(zhí)行就是排隊入場,先來后到,一直保持同一個順序。前邊的人停下了,后邊所有人都必須跟著停。亂序執(zhí)行就好象逛超市,大家排著隊進場每人發(fā)個編號,之后自由亂逛,到結(jié)賬的地方如果你前邊編號的還有人沒出去,你就在出口坐著等會兒,最終實現(xiàn)大家出去的時候仍然按進入的順序排成一隊。坐著等前邊人回來的那個地方,你可以想象有幾排椅子的等候區(qū),有個保安看著給大家排號,這個機構(gòu)學(xué)名叫做ROB。
還有個概念叫做異常:
計算機只有一塊內(nèi)存,這塊內(nèi)存上既存著某個不知名應(yīng)用的運行信息,也存著你的支付寶密碼。怎么樣防止不知名小程序看到你的支付寶密碼呢?當(dāng)程序讀內(nèi)存的時候,CPU會幫忙檢查讀的地址是否屬于這個程序。如果不屬于,就是非法訪問,CPU會在這條指令上產(chǎn)生一個異常,報操作系統(tǒng)槍斃。
操作系統(tǒng)為了處理異常,有一個要求:如果出現(xiàn)異常,那么異常指令之前的所有指令都已經(jīng)執(zhí)行完,異常指令之后的所有指令都尚未執(zhí)行。
但是我們已經(jīng)亂序執(zhí)行了啊,怎么辦?所以ROB承擔(dān)起這個責(zé)任。指令亂序執(zhí)行的時候,要修改什么東西都暫且記著,不真正修改。只有在從ROB里排隊出去的時候,才真正提交修改,維持指令之間的順序關(guān)系。
如果一條指令產(chǎn)生了異常,那么它會帶著異常來到ROB排隊。ROB按順序把之前的正常指令全部提交了,看到這條指令帶有異常之后就封鎖出口,異常指令和其后其他指令會被拋棄掉,不予提交。
還需要了解一下投機執(zhí)行:
分支指令是最討厭的。例如“如果x<3,則執(zhí)行a-b-c;否則,就執(zhí)行d-e-f”。CPU大超市的入口保安,遇到正常指令只管按順序放進場,控制下超市里的人流量就OK。但遇到分支指令就會傻掉,因為不等這個分支指令執(zhí)行完,就不知道該放abc進場,還是放def進場。
能傻傻的等分支出來再繼續(xù)放人嗎?不可能的?,F(xiàn)代CPU都設(shè)計有投機執(zhí)行的特性。
入口保安會根據(jù)歷史上這條分支取過哪邊,來猜測這一次會取哪邊。比如以前一百次分支都取的是abc那邊,那這一次我肯定猜它還會取abc那邊,我就直接放abc跟著進去。
萬一猜錯了?讓出口那的ROB把abc取消掉不讓他們提交就行了,我這邊再放def進去。
再來了解一下微結(jié)構(gòu)側(cè)面效應(yīng):
被取消掉的指令不會得到提交,所以它們修改不了任何東西,也不會產(chǎn)生異常。所以我大可以隨意去投機執(zhí)行指令,不會有任何危險,因為大不了我取消掉他們就萬事大吉了?!w系結(jié)構(gòu)設(shè)計者如是想。這次的全部幾個BUG就都出在這里。被取消掉的指令,雖然不會造成結(jié)構(gòu)上的影響,但在微結(jié)構(gòu)上會留下可以觀測的影響——就是緩存。
這些被取消掉的指令不受異常的控制,可以訪問任何東西,比如你的支付寶密碼,然后借口自己執(zhí)行錯了被取消掉,就不會被操作系統(tǒng)管。體系結(jié)構(gòu)設(shè)計者認為被取消掉的指令看到你的支付寶密碼不會產(chǎn)生問題,因為它們留不下任何痕跡,但它們還是留下了:它們曾訪問過哪些內(nèi)存,哪些內(nèi)存的后續(xù)訪問就會變快。
我們來做一下攻擊示例:
執(zhí)行這樣一句代碼:
if (x < array1_size)
y = array2[array1[x] * 4096];
看起來這程序好像非常正經(jīng),對array1的訪問甚至有邊界檢查,不讓下標(biāo)x超過array1的大小。
這邊界檢查很重要,因為要訪問任何地址,比如你的支付寶密碼的第一位(假設(shè)為k),存儲在地址v的話,令x=v-array1,array1[x]就是在訪問地址v了。
不過這種赤裸裸的越界訪問一定會觸發(fā)異常,然后被操作系統(tǒng)槍決罷了。我們不能那么露骨。
if (x < array1_size)
y = array2[array1[x] * 4096];
開始執(zhí)行的第一步,CPU首先會遇到一條分支指令,判斷x和array1_size誰大。假設(shè)array1_size沒在緩存里,CPU需要跑去內(nèi)存里取。
在把array1_size取回來之前沒人知道x和array1_size誰大,于是有一萬拍的時間內(nèi)CPU都不知道這個邊界檢查是成功了還是失敗了,這個時間窗口內(nèi)CPU將繼續(xù)投機執(zhí)行。
CPU猜測可能是x更小,投機執(zhí)行下面的語句。你會發(fā)現(xiàn)這種猜測是可以被攻擊者誤導(dǎo)的,攻擊者可以在開始之前先用x=0多次執(zhí)行這句代碼,讓CPU誤以為x大多數(shù)時候都很小。
但實際上,這次的x突然暗藏殺機,因為x=v-array1,而可愛的CPU就這樣被騙過去了。
if (x < array1_size)
y = array2[array1[x] * 4096];
投機執(zhí)行的第一步,就是array1[x],試圖訪問你的支付寶密碼。CPU說不可以,于是給這條指令的臉上貼了一張異常罰單,但仍然允許它帶著密碼的真實值k到ROB那里去排隊。 口嫌體正 。
如果這條指令沒有被撤銷,操作系統(tǒng)就會槍斃這個犯規(guī)的程序;如果撤銷了,那么體系結(jié)構(gòu)設(shè)計者相信你絕對沒辦法活著把k帶走。
if (x < array1_size)
y = array2[k * 4096];
投機執(zhí)行的第二步。攻擊者嘗試讓投機指令把k留下,而這些最終將被撤銷的指令,唯一能留下的信息就是緩存。
第二條投機指令以k作為地址去訪問array2。k被乘以一個較大的數(shù)值,例如頁大小4096,這是出于一個技術(shù)細節(jié)原因。
假設(shè)array2的所有內(nèi)容都不在緩存中,那么這條指令執(zhí)行后,將僅有一個位置被加載到緩存上,這個位置的訪問速度將明顯快于其他位置,這個位置就標(biāo)明了k的值。
if (x < array1_size)
y = array2[array1[x] * 4096];
隨后,array1_size的值讀取到了,CPU后知后覺發(fā)現(xiàn)投機執(zhí)行錯了,于是上面投機執(zhí)行的犯罪指令全部被取消。
然而這時被取消的指令已經(jīng)留下了一條緩存項,出賣了密碼k。
攻擊者只需要讀取array2的每一個位置,測量讀取花費的時間,然后找到讀取最快的那個位置對應(yīng)著k是多少,就這樣攻破了你支付寶密碼的第一位。
之后攻擊者讀取一些其他數(shù)據(jù),將array1_size和array2再次擠出緩存,使用x=0反復(fù)執(zhí)行這段代碼欺騙CPU的分支預(yù)測,就可以故伎重施,取出你支付寶密碼的下一位,以至于每一位。
2017-01-06 來源:半導(dǎo)體行業(yè)觀察