您的位置:首頁>科技>正文

全球最大晶片漏洞並非偶然?當前科技行業體制是根本原因!

編者按:Ben Thomposn最近在博客上發表文章, 對幽靈與熔毀背後的機制進行了詳細的解釋。 並指出幽靈與熔毀的出現並不是偶然, 而是當前科技行業的體制下必然會出現的一種現象。 文章由36氪編譯。

你應該聽過這樣一句格言:“一切都是1和0”, 但這不是一個比喻:電晶體是電腦的基本組成部分, 它只是一個開關, 要麼打開(“1”), 要麼關閉(“0”)。 然而, 事實證明, 正如克裡斯·迪克森(Chris Dixon )在一篇題為《亞里斯多德如何創造電腦》的精彩文章中所寫的, 通過數學邏輯和電晶體的組合, 1和0是你所需要的全部:

電腦的歷史通常被認為是一個實物的歷史, 從算盤到巴貝奇差分機, 再到二戰時的密碼分析機。 實際上, 把它理解為思想史會更好, 那些思想主要誕生自數理邏輯——一門形成於19世紀, 晦澀難懂、像邪教一樣的學科。

迪克森的文章——我之前提到過——很值得一讀, 但這篇文章的相關觀點也許是令人驚訝的:

電腦真的很愚蠢, 它們之所以有用, 是因為它們非常愚蠢。

處理器漏洞的問題

上周, 科技行業因為現代處理器中的兩個漏洞被披露而震驚了:熔毀(Meltdown)和幽靈(Spectre)。 由於人們對這個漏洞性質的普遍猜測(可能是由Linux內核的更新引起的), 以及熔毀和幽靈在某些方面是相似的, 但在其他方面卻有所不同。 所以披露日期提前了一個星期。

從相似點開始:兩個漏洞的結果都是一樣的——非特權用戶可以訪問他們不應該訪問的電腦上的資訊, 比如金鑰、密碼或其他使用者擁有的任何其他類型的資料。 對於AWS這樣的雲服務來說, 這是一個特別大的問題。 在AWS上, 多個“租戶”使用的是相同的物理硬體:

這種多租戶架構是通過使用虛擬機器實現的:在一台物理電腦上運行的專用軟體, 可以讓每一個用戶都像擁有自己的電腦一樣操作, 而實際上它們是共用的。 這是一種雙贏的做法:在絕大多數情況下, 單個使用者的電腦都處於閒置狀態(它們很快就會變得愚蠢), 如果多個使用者使用一台電腦,

那麼硬體的使用效率將會大大提高。 而且, 在雲服務領域, 同樣的概念可以擴展到數百萬台物理電腦, 共用更多的基礎設施, 比如冷卻、網路、管理等。

不過, 整個體系的建立基於一個基本假設:一台虛擬機器的用戶不能訪問另一台虛擬機器的資料。 這一假設的擴展依賴於對虛擬機器軟體的完整性的信任, 這種信任依賴於對底層作業系統完整性的信任, 最終依賴於對伺服器核心處理器的信任。 來自熔毀的白皮書(強調是作者加的):

為了將資料從主記憶體載入到寄存器中, 主記憶體中的資料就要通過虛擬位址來引用。 在將虛擬位址轉換為物理位址的同時, CPU還會檢查虛擬位址的許可權位元,
也就是說, 這個虛擬位址使用者是否能夠訪問, 或者只能由內核訪問。 正如在第2.2節中已經討論過的, 這種通過許可權位元的基於硬體的隔離被認為是安全的, 並且是由硬體供應商推薦的。 因此, 現代作業系統總是將整個內核映射到每個使用者進程的虛擬位址空間。 因此, 所有內核位址在翻譯它們時都會產生一個有效的物理位址, 並且CPU可以訪問這些位址的內容。 訪問用戶空間位址的唯一不同之處在於, CPU會引發異常, 因為當前許可權級別不允許訪問這樣的位址。 因此, 用戶空間不能簡單地讀取這樣一個位址的內容。

內核是作業系統的核心部分, 正常使用者應該無法訪問, 它有自己的記憶體, 不僅存儲核心系統資料, 還存儲來自所有使用者的資料(例如,必須將其寫入或從永久存儲中讀取)。不過,即使在這裡,系統也依賴於虛擬化——記憶體是使用者在應用程式中使用的實體記憶體,這取決於CPU,以便跟蹤記憶體的哪些部分屬於誰,而這正是漏洞所在之處。

SPECULATIVE_EXECUTION

我剛剛只是提到了電腦的三個關鍵部分:處理器、記憶體和永久存儲。事實上,存儲資料的架構比這更複雜:

寄存器是最快的記憶體形式,每個時鐘週期都可以訪問(也就是說,2.0 GHz的處理器每秒可以訪問寄存器20億次)。它們也是最小的,通常只包含當前計算的輸入和輸出。

然後有各種各樣的緩存(L1、L2等),它們的速度越來越慢,而且在另一方面,越來越大,也越來越便宜。這種緩存位於一個層次結構中:例如,立即需要的資料將會從寄存器移到L1緩存;稍微不那麼必要的資料將位於L2,然後是L3等等。

記憶體層次結構的下一個主要部分是主存,即系統RAM。雖然緩存的數量取決於處理器模型,但記憶體的總量取決於整個系統生成器。這種記憶體比快取記憶體慢得多,但它也比緩存大得多,而且便宜得多。

記憶體層次結構的最後一部分,至少在一台電腦上是永久存儲——硬碟驅動器。固態硬碟(SSD硬碟)在這裡的速度有很大的不同,但即便如此,永久存儲的速度也比主記憶體慢得多,但也存在同樣的問題:你可以以更低的價格獲得更多的存儲空間。

雖然不屬於傳統的記憶體層次結構的一部分,但雲應用程式通常在同一網路上的獨立物理伺服器上擁有永久的記憶體,通常的折衷方案是——非常緩慢的訪問以換取其他好處,在這種情況下,將資料與應用程式分開。

可以肯定的是,“非常慢”是相對的——我們在這裡討論的是納秒。

傑夫·阿特伍德(Jeff Atwood)的這篇文章用人類的語言來描述就是:

在我們人類的感覺中,無限空間是電腦花費所有時間的地方。這是一個完全不同的時間跨度。系統性能:企業和雲計算有一個很好的表格,說明了這些時間差異有多麼巨大。只要把計算機時間轉換成任意的秒鐘即可:

已故的吉姆·格雷(Jim Gray)也有一種有趣的解釋方式。如果CPU寄存器是你從你的大腦獲取資料需要的時間,那麼進入磁片就相當於從冥王星獲取資料。

格雷在微軟的演講中展示了這張幻燈片,給出了“華盛頓,奧林匹亞”的背景資訊。讓我把他的類比擴展一下:

假設你是一名大學生,在微軟實習,當時你在奧林匹亞的家裡收拾衣服。現在,西雅圖的夏天可能非常挑剔——可能是狂風大作、下雨的天氣,或者是炎熱和陽光的天氣。要想知道明天早上的天氣會是什麼樣子,通常是很難的。為了實現這一目標,謹慎的做法不是只打包一套衣服,而是為了兩種可能而打包衣服。畢竟,每次天氣變化,從行李箱裡換衣服要比開車回家要快得多。

這就是這個類比開始瓦解的地方:現代處理器為了減少獲取資料所需要的時間,不僅獲取了超出需要的資料,而且還會提前對這些資料進行計算。這就是所謂的Speculative_execution,也是這些漏洞的核心所在。用演算法的形式來類比:

檢查天氣(執行多個觸發感測器、中繼資料等的多個子進程)。

如果天氣晴朗,穿短袖和T恤其他的天氣,穿牛仔褲和運動衫

記住,電腦是愚蠢的,但速度很快:執行“穿短袖和T恤”或“穿牛仔和運動衫”需要納秒——需要時間就是等待天氣觀察的結果。所以為了節省時間,處理器會在它瞭解天氣之前幫你穿衣,這通常是基於歷史的——過去幾天的天氣是怎樣的?這意味著你可以在等待天氣觀察結果的同時,決定鞋子、配飾等。這是處理器的另一個特點:它們可以同時做很多事情。為了實現這一目標,最快的完成任務的方法就是猜測最終的結果是什麼,如果有必要,還會進行回溯。

熔毀

現在,想像一下這個演算法被修改成以下的內容:

檢查經理的日程表,看看他們是否在辦公室

如果他們在辦公室,穿寬鬆的褲子和襯衫如果他們不在辦公室,穿短褲和T恤

只有一個問題:你不應該接觸到你經理的日程表。請記住,電腦是愚蠢的:處理器不知道這一點,它必須檢查你是否有存取權限。所以在實踐中,這個演算法更像這樣:

檢查經理的日程表,看看他們是否在辦公室

檢查一下這個實習生是否能訪問他們經理的日程表如果實習生有許可權,可以訪問日程表 如果經理在辦公室,穿寬鬆的褲子和襯衫 如果他們不在辦公室,穿短褲和T恤如果實習生沒有許可權,就不要穿衣服了

不過請記住,電腦雖然很擅長同時處理大量的事情以及在查詢資料上並不是很擅長,在這種情況下,處理器會在特定條件下查看經理的日程表,並在它知道對方是否有許可權查看日程表之前,決定應該穿什麼。如果它後來意識到對方不應該有訪問日程表的許可權,它會毀掉一切,但是衣服可能會被弄得有點淩亂,這意味著你可以得到你不應該知道的答案。

我已經說過,這個類比已經瓦解了,它現在已經徹底崩潰了。但這在廣義的描述中:處理器會在它知道它是否有許可權的情況下,投機性地獲取和執行特權資料,這個過程在緩存中留下了痕跡,那些痕跡可以被非特權用戶捕捉到。

解釋幽靈

幽靈更加狡猾,但更難實現:記住,很多用戶都在使用相同的處理器——他們都是你的“室友”,如果你願意的話。假設我像你一樣打包行李箱,然後我“訓練”處理器,讓它一直期待晴天(也許我可以運行一個類比程式,讓每一天都充滿陽光)。處理器將會提前選擇短褲和T恤。然後,當你醒來的時候,處理器已經選擇了短褲和T恤,如果真的是雨天,它會把短褲和T恤放回去,但會顯得有點淩亂。

這個類比在這裡真的行不通。你的資料並不是簡單地從主記憶體中提取出來的,它會暫時保存在緩存中,而處理器會在錯誤的分支上運行,一旦處理器修復了錯誤,它就會被迅速刪除,但我仍然能弄清楚資料是什麼——這意味著我現在已經竊取了你的資料。

熔毀更容易解釋——英特爾的聲明恰恰與之相反(熔毀也會影響蘋果的處理器)——這是由於設計缺陷造成的。處理器負責檢查是否可以被訪問資料,並且檢查速度過慢,這樣資料就會被竊取,這是一個錯誤。這也解釋了為什麼熔毀可以在軟體中運行(基本上,在使用資料之前會有一個額外的步驟檢查許可權,這就是為什麼補丁會導致性能下降)。

幽靈完全是另外一回事:這是處理器的設計。電腦的基本運算速度快得令人難以理解,但是需要花費很長時間才能得到這些資料來進行這些計算:因此,在不等待瓶頸的情況下進行計算,基於最佳猜測,是利用這種基本不平衡的最佳方式。大多數情況下,你會更快地得到結果,如果你猜錯了,你的速度也不會比你按順序完成所有事情的情況慢。

這也解釋了為什麼幽靈會影響所有的處理器:利用現代處理器的並行度和執行速度帶來的快速增長是如此巨大,以至於Speculative_execution是一個顯而易見的選擇。分支預測器可能會被另一個用戶訓練,這樣緩存變化就可以被跟蹤,直到去年才被我們知道。

此外,幽靈黨不能通過軟體來修復:具體的實現可以被阻止,但漏洞是內置的,想要徹底解決,需要重新設計新的處理器,但這對已經在使用的數十億處理器不會有任何作用。我們將不得不勉強度日。

幽靈與科技現狀

面對一個根本性的不平衡(相對於執行資料來說,資料獲取非常緩慢),處理器工程師設計了一個專門針對性能進行優化的系統,但由於未能預見到不良行為者濫用系統的可能性,所以,每個人都變得脆弱不堪。

有個類比是顯而易見的:面對一個根本性的不平衡(相對於快速反覆運算與優化程式來說,獲取和保留用戶的難度非常大),互聯網公司設計出了加強使用者留存的巧妙系統,但未能預見到壞人濫用系統的可能性,每個人都很容易受到攻擊。

不過,幽靈有助於解釋這些問題為何如此令人煩惱:

我不相信有人會故意製造這種漏洞

這個漏洞可能是值得的——更快的處理器會帶來更大的好處

無論如何,過去的決定都是過去的:我們能做的最好的事情就是得過且過

因此,對Facebook、穀歌/Youtube等網站,以及互聯網帶來的廣泛負面影響的處理也會如此。權力來自於給予人們他們想要的東西——這個動機並不是壞的!而它帶來的好處,可能超過了其負面影響。無論如何,我們唯一的選擇就是繼續往前走。

(36氪編譯組出品,未經允許嚴禁轉載。編輯:郝鵬程)

還存儲來自所有使用者的資料(例如,必須將其寫入或從永久存儲中讀取)。不過,即使在這裡,系統也依賴於虛擬化——記憶體是使用者在應用程式中使用的實體記憶體,這取決於CPU,以便跟蹤記憶體的哪些部分屬於誰,而這正是漏洞所在之處。

SPECULATIVE_EXECUTION

我剛剛只是提到了電腦的三個關鍵部分:處理器、記憶體和永久存儲。事實上,存儲資料的架構比這更複雜:

寄存器是最快的記憶體形式,每個時鐘週期都可以訪問(也就是說,2.0 GHz的處理器每秒可以訪問寄存器20億次)。它們也是最小的,通常只包含當前計算的輸入和輸出。

然後有各種各樣的緩存(L1、L2等),它們的速度越來越慢,而且在另一方面,越來越大,也越來越便宜。這種緩存位於一個層次結構中:例如,立即需要的資料將會從寄存器移到L1緩存;稍微不那麼必要的資料將位於L2,然後是L3等等。

記憶體層次結構的下一個主要部分是主存,即系統RAM。雖然緩存的數量取決於處理器模型,但記憶體的總量取決於整個系統生成器。這種記憶體比快取記憶體慢得多,但它也比緩存大得多,而且便宜得多。

記憶體層次結構的最後一部分,至少在一台電腦上是永久存儲——硬碟驅動器。固態硬碟(SSD硬碟)在這裡的速度有很大的不同,但即便如此,永久存儲的速度也比主記憶體慢得多,但也存在同樣的問題:你可以以更低的價格獲得更多的存儲空間。

雖然不屬於傳統的記憶體層次結構的一部分,但雲應用程式通常在同一網路上的獨立物理伺服器上擁有永久的記憶體,通常的折衷方案是——非常緩慢的訪問以換取其他好處,在這種情況下,將資料與應用程式分開。

可以肯定的是,“非常慢”是相對的——我們在這裡討論的是納秒。

傑夫·阿特伍德(Jeff Atwood)的這篇文章用人類的語言來描述就是:

在我們人類的感覺中,無限空間是電腦花費所有時間的地方。這是一個完全不同的時間跨度。系統性能:企業和雲計算有一個很好的表格,說明了這些時間差異有多麼巨大。只要把計算機時間轉換成任意的秒鐘即可:

已故的吉姆·格雷(Jim Gray)也有一種有趣的解釋方式。如果CPU寄存器是你從你的大腦獲取資料需要的時間,那麼進入磁片就相當於從冥王星獲取資料。

格雷在微軟的演講中展示了這張幻燈片,給出了“華盛頓,奧林匹亞”的背景資訊。讓我把他的類比擴展一下:

假設你是一名大學生,在微軟實習,當時你在奧林匹亞的家裡收拾衣服。現在,西雅圖的夏天可能非常挑剔——可能是狂風大作、下雨的天氣,或者是炎熱和陽光的天氣。要想知道明天早上的天氣會是什麼樣子,通常是很難的。為了實現這一目標,謹慎的做法不是只打包一套衣服,而是為了兩種可能而打包衣服。畢竟,每次天氣變化,從行李箱裡換衣服要比開車回家要快得多。

這就是這個類比開始瓦解的地方:現代處理器為了減少獲取資料所需要的時間,不僅獲取了超出需要的資料,而且還會提前對這些資料進行計算。這就是所謂的Speculative_execution,也是這些漏洞的核心所在。用演算法的形式來類比:

檢查天氣(執行多個觸發感測器、中繼資料等的多個子進程)。

如果天氣晴朗,穿短袖和T恤其他的天氣,穿牛仔褲和運動衫

記住,電腦是愚蠢的,但速度很快:執行“穿短袖和T恤”或“穿牛仔和運動衫”需要納秒——需要時間就是等待天氣觀察的結果。所以為了節省時間,處理器會在它瞭解天氣之前幫你穿衣,這通常是基於歷史的——過去幾天的天氣是怎樣的?這意味著你可以在等待天氣觀察結果的同時,決定鞋子、配飾等。這是處理器的另一個特點:它們可以同時做很多事情。為了實現這一目標,最快的完成任務的方法就是猜測最終的結果是什麼,如果有必要,還會進行回溯。

熔毀

現在,想像一下這個演算法被修改成以下的內容:

檢查經理的日程表,看看他們是否在辦公室

如果他們在辦公室,穿寬鬆的褲子和襯衫如果他們不在辦公室,穿短褲和T恤

只有一個問題:你不應該接觸到你經理的日程表。請記住,電腦是愚蠢的:處理器不知道這一點,它必須檢查你是否有存取權限。所以在實踐中,這個演算法更像這樣:

檢查經理的日程表,看看他們是否在辦公室

檢查一下這個實習生是否能訪問他們經理的日程表如果實習生有許可權,可以訪問日程表 如果經理在辦公室,穿寬鬆的褲子和襯衫 如果他們不在辦公室,穿短褲和T恤如果實習生沒有許可權,就不要穿衣服了

不過請記住,電腦雖然很擅長同時處理大量的事情以及在查詢資料上並不是很擅長,在這種情況下,處理器會在特定條件下查看經理的日程表,並在它知道對方是否有許可權查看日程表之前,決定應該穿什麼。如果它後來意識到對方不應該有訪問日程表的許可權,它會毀掉一切,但是衣服可能會被弄得有點淩亂,這意味著你可以得到你不應該知道的答案。

我已經說過,這個類比已經瓦解了,它現在已經徹底崩潰了。但這在廣義的描述中:處理器會在它知道它是否有許可權的情況下,投機性地獲取和執行特權資料,這個過程在緩存中留下了痕跡,那些痕跡可以被非特權用戶捕捉到。

解釋幽靈

幽靈更加狡猾,但更難實現:記住,很多用戶都在使用相同的處理器——他們都是你的“室友”,如果你願意的話。假設我像你一樣打包行李箱,然後我“訓練”處理器,讓它一直期待晴天(也許我可以運行一個類比程式,讓每一天都充滿陽光)。處理器將會提前選擇短褲和T恤。然後,當你醒來的時候,處理器已經選擇了短褲和T恤,如果真的是雨天,它會把短褲和T恤放回去,但會顯得有點淩亂。

這個類比在這裡真的行不通。你的資料並不是簡單地從主記憶體中提取出來的,它會暫時保存在緩存中,而處理器會在錯誤的分支上運行,一旦處理器修復了錯誤,它就會被迅速刪除,但我仍然能弄清楚資料是什麼——這意味著我現在已經竊取了你的資料。

熔毀更容易解釋——英特爾的聲明恰恰與之相反(熔毀也會影響蘋果的處理器)——這是由於設計缺陷造成的。處理器負責檢查是否可以被訪問資料,並且檢查速度過慢,這樣資料就會被竊取,這是一個錯誤。這也解釋了為什麼熔毀可以在軟體中運行(基本上,在使用資料之前會有一個額外的步驟檢查許可權,這就是為什麼補丁會導致性能下降)。

幽靈完全是另外一回事:這是處理器的設計。電腦的基本運算速度快得令人難以理解,但是需要花費很長時間才能得到這些資料來進行這些計算:因此,在不等待瓶頸的情況下進行計算,基於最佳猜測,是利用這種基本不平衡的最佳方式。大多數情況下,你會更快地得到結果,如果你猜錯了,你的速度也不會比你按順序完成所有事情的情況慢。

這也解釋了為什麼幽靈會影響所有的處理器:利用現代處理器的並行度和執行速度帶來的快速增長是如此巨大,以至於Speculative_execution是一個顯而易見的選擇。分支預測器可能會被另一個用戶訓練,這樣緩存變化就可以被跟蹤,直到去年才被我們知道。

此外,幽靈黨不能通過軟體來修復:具體的實現可以被阻止,但漏洞是內置的,想要徹底解決,需要重新設計新的處理器,但這對已經在使用的數十億處理器不會有任何作用。我們將不得不勉強度日。

幽靈與科技現狀

面對一個根本性的不平衡(相對於執行資料來說,資料獲取非常緩慢),處理器工程師設計了一個專門針對性能進行優化的系統,但由於未能預見到不良行為者濫用系統的可能性,所以,每個人都變得脆弱不堪。

有個類比是顯而易見的:面對一個根本性的不平衡(相對於快速反覆運算與優化程式來說,獲取和保留用戶的難度非常大),互聯網公司設計出了加強使用者留存的巧妙系統,但未能預見到壞人濫用系統的可能性,每個人都很容易受到攻擊。

不過,幽靈有助於解釋這些問題為何如此令人煩惱:

我不相信有人會故意製造這種漏洞

這個漏洞可能是值得的——更快的處理器會帶來更大的好處

無論如何,過去的決定都是過去的:我們能做的最好的事情就是得過且過

因此,對Facebook、穀歌/Youtube等網站,以及互聯網帶來的廣泛負面影響的處理也會如此。權力來自於給予人們他們想要的東西——這個動機並不是壞的!而它帶來的好處,可能超過了其負面影響。無論如何,我們唯一的選擇就是繼續往前走。

(36氪編譯組出品,未經允許嚴禁轉載。編輯:郝鵬程)

Next Article
喜欢就按个赞吧!!!
点击关闭提示