當前位置:
首頁 > 最新 > 基礎協議漏洞不好修補?因特爾牙膏擠破了,慢30%要吃雞請上九代

基礎協議漏洞不好修補?因特爾牙膏擠破了,慢30%要吃雞請上九代

據外媒報道,英特爾公司日前爆出了一個處理器的嚴重漏洞,該漏洞可導致本來單獨用於保護密碼等重要信息的存儲區,可能會讓一些軟體程序獲取許可權,這使得過去十年間所有使用英特爾晶元的電腦都受到影響,包括微軟公司的 Windows 和蘋果公司的 OS X 操作系統。Windows和Linux都正在接受重要的安全更新,這一漏洞修補過程可能導致全球個人電腦性能下降,在最壞的情況下性能可能會下降30%,以抵禦尚未完全披露的問題。

在過去的幾個星期里,修補Linux內核的補丁已經在不斷的進行。而從11月份以來,微軟也一直在測試Insider程序中的Windows更新,預計下周二Patch Tuesday將會將這些更新納入主流Windows版本。據 The Verge 報道,微軟目前正式回應表示,將於美國東部時間 1 月 3 日 17 時(北京時間 1 月 4 日早上 6 時)發布緊急更新,並將自動應用於 Windows 10 系統。

從追蹤定址說起

系統中每個位元組的內存都是隱含編號的,這些編號就是每個位元組的地址。而使用物理內存地址操作系統是最早的操作系統。但物理內存地址由於許多原因而不方便;例如:在地址中經常存在間隙,並且(特別是在32位系統上)物理地址難於操作,需要36位數字者甚至更大的數字。

虛擬內存系統允許程序和內核本身在簡單、乾淨、統一的環境中運行。每個程序和內核本身都使用虛擬地址來訪問內存,而不是使用物理地址來彌補缺陷和其他問題。這些虛擬地址是連續的,不需要擔心間隙,並且可以方便地調整大小以方便操作。即使物理地址需要36位或更多的編號,32位程序也只能看到32位地址。因此,現代的操作系統都依賴於被稱為虛擬內存的廣義概念。

雖然虛擬定址對於幾乎每一個軟體都是透明的,但是處理器最終還是需要知道虛擬地址指向哪個物理存儲器。所以得有一個從虛擬地址到物理地址的映射,並存儲在一個稱為頁表的大型數據結構中。操作系統使用由處理器確定的布局來構建頁表,而只要處理器和操作系統需要在虛擬地址和物理地址之間進行轉換,他們就會結合使用頁表。

整個映射過程對於現代操作系統和處理器來說是非常重要的,所以處理器具有專用的緩存 – 轉換後備緩衝區(TLB),它存儲一定數量的虛擬到物理映射,以避免每一次使用滿頁表。TLB並不是非常大 – 通常是幾百個映射。系統使用的頁表越多,TLB包含任何特定的虛擬 – 物理轉換的可能性就越小。

虛擬內存的使用為我們提供了超越定址的許多簡單而又有用功能。其中最主要的是每個單獨的程序都有自己的一組虛擬地址,並且有自己的虛擬到物理映射。這是用來提供「受保護的記憶」的基本技術。因為另一個程序的內存不是第一個程序的映射的一部分,所以一個程序不能破壞或篡改另一個程序的內存。

考慮到這一點,如果映射頁面是被保護的,那麼在做出決定之前,還需要有一些機制來解除保護,以允許代碼分支的預測性執行。但從理論上講,一旦做出決定,分支機構不予採取的結果就應該被廢棄,以致所收集的信息不能被使用。也許在預測執行和指令重新排序(尚未提及)的組合中有一些東西允許從管道中稍後提取數據。

這也許就是問題的所在了,但如果是這樣的話,那麼這就可能是一個設計缺陷,而不是一個bug。

設計缺陷?

為了充分利用TLB,每個主流操作系統都將虛擬地址範圍分為兩部分:每個程序使用一半的地址; 另一半用於內核。在進程之間切換時,只有一半的頁面表項改變——屬於程序的項目。而內核的一半對每個程序都是通用的(因為只有一個內核),所以它可以對每個進程使用相同的頁表映射。雖然仍然需要丟棄屬於進程內存地址一半的映射,但是可以保留內核一半的映射,這對於TLB是一個極大地幫助。

然而這個設計並不完全是一成不變的。在Linux上完成了這個工作,以便為32位進程提供整個地址範圍,內核頁表和每個程序之間就不共享。雖然這給了程序更多的地址空間,但是卻帶來了性能成本,因為每次需要運行內核代碼時,TLB都必須重新載入內核的頁表項。因此,這種方法在x86系統上從未被廣泛使用。

在內核和每個程序之間分配虛擬地址空間有一個缺點,就是內存保護功能被削弱了。如果內核擁有自己的一組頁表和虛擬地址,那麼它將得到與不同程序相同的保護,內核的內存將是簡單的不可見的。但是通過拆分定址,用戶程序和內核使用相同的地址範圍,原則上用戶程序是能夠讀寫內核內存的。

為了防止這種明顯不利的情況,處理器和虛擬定址系統就有了「rings」或「modes」的概念。x86處理器有很多rings,但是對於這個問題,只有兩個是與之相關的,分別是:「用戶」(ring 3)和「管理員(也稱為內核模式)」(ring 0)。在運行常規用戶程序時,處理器進入就用戶模式(ring 3)。運行內核代碼時,處理器則處於管理員模式(ring 0)。

這些 ring 主要用於保護內核內存不受用戶程序的影響。頁表不僅僅是從虛擬地址到物理地址的映射,它們還包含關於這些地址的元數據,包括有關哪些ring可以訪問地址的信息。內核的頁表項全部被標記為只能訪問ring 0; 該程序的條目被標記為可以從任何ring訪問。如果在ring 3中嘗試訪問ring 0存儲器,則處理器阻止訪問併產生異常。這樣做的結果是,在ring 3中運行的用戶程序應該無法獲知有關內核及其ring 0內存的任何信息。

內核內存映射到用戶模式進程上,就可以允許系統調用(訪問硬體/內核服務的請求)執行,而不必切換到另一個虛擬地址空間。如果每個進程都在自己的虛擬地址空間中運行,那麼在它們之間切換就是一件相當費勁的事情了;因為它涉及到刷新CPU的轉換後備緩衝區(TLB,用於快速查找虛擬內存地址的物理位置)以及其他一些事情。

訪問未在TLB中緩存的內存頁大約需要200個CPU周期,對緩存項的訪問通常少於一個周期。這意味著,對於每一個系統調用,CPU將需要切換虛擬內存上下文,沖洗該TLB將花費相當長的時間。

如果可以在「真實的受保護」模式下運行內核的關鍵部分(即根本沒有虛擬地址轉換,但通過使用鍵或限制寄存器的某種形式的存儲器保護),那麼可能是合理的。如果沒有足夠的物理內存來容納一個內核,那將不會取得太多的進展,而這只是其中許多方面之一,通過這種或那種緩存提高性能會導致潛在的具體執行異常。

漏洞甚至可能不是數據,它可能小到從spec-ex路徑的時間變化需要更長的時間或更長的時間,允許攻擊者探測內核空間尋找不是/有效的頁面 。更糟糕的是,spec-ex分支可能會影響時序的規格化讀取秘密數據,而不會直接暴露數據本身。

至少,理論上是這樣的。

這個安全漏洞怎麼會被濫用?

眾所周知的是每個處理器都執行著一定的預測執行。例如,添加一些給定的兩位數字,然後將結果存儲在內存中的指令,處理器可能會對確定內存中的目標,在是否實際可訪問和可寫入之前預測性地執行添加。在通常情況下,如果位置是可寫的,處理器會設法節省一些時間,就像計算並行演算法一樣,計算出內存中的目標是什麼。如果發現該位置不可訪問(例如,試圖寫入沒有映射且完全沒有物理位置的地址的程序)就會產生一個異常,並且預測執行也會被浪費。

英特爾處理器允許預測性地執行寫入ring 0存儲器的ring 3代碼。處理器做了正確地阻止寫操作,但是預測性的執行很快地干擾了處理器狀態,因為某些數據將被載入到緩存和TLB中以確定是否允許寫入。這反過來意味著一些操作將會快幾個周期,或者幾個周期較慢,這取決於它們的數據是否仍然在緩存中。除此之外,英特爾的處理器還具有一些特殊功能,例如Skylake處理器中引入的軟體防護擴展(SGX),稍微改變了如何處理訪問內存的嘗試。同樣,處理器仍然保護ring 0內存不受ring 3程序的影響,但是它的緩存和其他內部狀態又一次被改變,這樣就造成了可測量的差異。

但是我們不知道的是內核信息有多少可以泄露給用戶程序,或者泄露的程度如何。哪些英特爾處理器受到影響?再次說明:這一點並不完全清楚,但有跡象表明,每一個預測性執行的英特爾晶元(這是自1995年以來推出的所有主流處理器)都可能以這種方式泄漏信息。

這個問題的首先來自奧地利格拉茨技術大學的研究人員。他們發現的信息泄露足以破壞內核模式地址空間布局隨機化(內核ASLR或KASLR)。ASLR是防止緩衝區溢出的最後努力。使用ASLR,程序及其數據被放置在隨機存儲器地址中,這使攻擊者難以利用安全漏洞。KASLR將相同的隨機化應用於內核,以便內核的數據(包括頁表)和代碼是隨機定位的。(格拉茨的研究人員開發了KAISER,一組Linux內核補丁來防禦這個問題)

如果問題只是使得ASLR的去隨機化,那麼這可能不會成為一個巨大的災難。ASLR雖然是已知不完善的,但它是一個很好的保護,這就意味著成為攻擊者的障礙,但不是一個不可逾越的障礙。行業反應 :Windows和Linux的一個相當重大的改變,是在一些秘密的情況下開發的;表明ASLR不僅被打敗,而且更廣泛的內核泄漏信息的能力已經被開發出來。

事實上,研究人員已經開始發出警告,說他們可以泄漏並讀取任意內核數據。另一種可能性是該漏洞可能被用來逃離虛擬機並損害管理程序。Windows和Linux開發人員選擇的解決方案基本上是相同的,並且源自KAISER的工作:內核頁表項不再與每個進程共享。在Linux中,這被稱為內核頁面表隔離(KPTI)。

有了這些補丁,內存地址仍然分成兩部分,這只是內核的一半幾乎是空的。這並不完全是空的,因為一些內核部分需要永久映射,無論處理器是在ring 3 還是在ring 0中運行,而是接近於空。真正的內核頁表僅在內核本身運行時使用,這意味著,即使一個惡意的用戶程序試圖探測內核內存和泄漏信息,它也會失敗。

這是首先破壞了拆分地址空間的原因。TLB現在需要在每次切換到用戶程序時清除與真實內核頁表相關的任何條目,從而結束啟用分割的性能節省。這種影響會因工作量而異。每當一個程序調用內核時(從磁碟讀取數據,發送數據到網路,打開一個文件等等),這個調用將會更加昂貴,因為這會迫使TLB被刷新並載入真正的內核頁表。那些不使用內核的程序可能會遇到2-3%的打擊,但仍然有一些開銷,因為內核總是偶爾運行,以處理諸如多任務之類的事情。

但是調入內核的工作負載將會有更多的性能下降。在一個基準測試中,除了調用內核之外,其他任何事情都沒有什麼影響,它的性能下降了大約50%。換句話說,每次調用內核的時間比修補程序長兩倍。

英特爾回應安全研究調查結果

英特爾和其他技術公司已經意識到新的安全研究,描述了軟體分析方法,當用於惡意目的時,有可能不正確地收集來自運行設計的計算設備的敏感數據。英特爾相信這些漏洞利用不會破壞,修改或刪除數據。

最近有報道稱,這些漏洞是由「錯誤」或「缺陷」引起的,對於英特爾產品來說是獨一無二的。基於迄今為止的分析,許多類型的計算設備(具有許多不同的供應商的處理器和操作系統)容易受到這些攻擊。

英特爾致力於產品和客戶安全,並正與包括AMD,ARM Holdings和多家操作系統供應商在內的許多其他技術公司緊密合作,制定行業範圍的方法,以及時和建設性地解決此問題。英特爾已經開始提供軟體和固件更新以減輕這些漏洞。與一些報告相反,任何性能影響都取決於工作負載,對於普通計算機用戶來說,不應該是顯著的,並且會隨著時間的推移而被緩解。

英特爾致力於採取行業最佳做法,負責披露潛在的安全問題,這就是為什麼英特爾和其他供應商計劃在下周公布更多軟體和固件更新時披露此問題的原因。不過,由於目前媒體報道不準確,英特爾今天發表這個聲明。

請與您的操作系統供應商或系統製造商聯繫,並儘快應用所有可用的更新。遵循良好的安全措施來防止惡意軟體通常也將有助於防止可能的利用,直到可以應用更新。

英特爾相信其產品是世界上最安全的產品,在合作夥伴的支持下,目前解決方案可以為客戶提供最好的安全性。

當然,英特爾的老對頭 AMD 肯定不會放過這次機會,雖然沒有發聲明,但是 AMD 官方指出他們安全研究團隊已經發現了三個針對推測執行的變體。他們認為,AMD 的處理器並不會受其影響。由於 AMD 處理器的不同架構,這次的安全漏洞對他們的產品來說影響幾乎為零。

CPU 數據高速緩存時間可能會被濫用,這無疑加速泄漏了錯誤推測的執行信息,將導致(最壞的情況下)在各種語境下任意虛擬內存跨本地安全邊界的讀取漏洞。這個已經被證實不是Intel CPU爆出底層設計漏洞,只要CPU帶有預測執行功能就都存在此漏洞,包括但不限於X86、ARM。

可以這麼說,這個漏洞是相當嚴重的,不在於危害,而在於波及範圍。至於AMD所說的架構設計不同所以風險接近零,只能說他們還沒搞清楚狀況就回應了。

寫在最後:

目前來說,有些平台(如SPARC和IBM的S390)可以避免這個問題,因為它們的處理器內存管理不需要拆分地址空間和共享內核頁表; 這些平台上的操作系統總是將它們的核心頁面表與用戶模式分開。但就已知的情況來看,這個問題的變種已經影響到了包括英特爾、AMD 和 ARM 的某些處理器。這說明了什麼?無論英特爾,還是 AMD,還是 ARM,大家的處理器都有問題,一個都別想跑!後續相關問題的細節,還是坐等英特爾、AMD 等企業發布關於設計缺陷的技術紕漏以及安全細節聲明。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 零鏡網 的精彩文章:

三星正式發布Exynos 9810最高2.9GHz 單核性能翻倍 直追蘋果A11
華為榮耀4年發展迅猛 小米似乎一直扮演重要角色
ROG Day遊戲狂歡夜,EDG的「吃雞」戰隊和SKT的FAKER都來了!
國內首例自動駕駛法規來了!以後自動駕駛吃罰單還會少嗎?
華為暢享7S發布 1499元起 各方面競不如自家榮耀

TAG:零鏡網 |