Gerg:Meltdown 和 Spectre 影響下的 Linux 內核狀況
現在(LCTT 譯註:本文發表於 1 月初),每個人都知道一件關乎電腦安全的「大事」發生了,真見鬼,等每日郵報報道的時候,你就知道什麼是糟糕了...
不管怎樣,除了告訴你這篇寫的及其出色的披露該問題的 Zero 項目的論文之外,我不打算去跟進這個問題已經被報道出來的細節。他們應該現在就直接頒布 2018 年的 Pwnie 獎,乾的太棒了。
如果你想了解我們如何在內核中解決這些問題的技術細節,你可以保持關注了不起的 lwn.net,他們會把這些細節寫成文章。
此外,這有一條很好的關於這些公告的摘要,包括了各個廠商的公告。
至於這些涉及的公司是如何處理這些問題的,這可以說是如何不與 Linux 內核社區保持溝通的教科書般的例子。這件事涉及到的人和公司都知道發生了什麼,我確定這件事最終會出現,但是目前我需要去關注的是如何修復這些涉及到的問題,然後不去點名指責,不管我有多麼的想去這麼做。
你現在能做什麼
如果你的 Linux 系統正在運行一個正常的 Linux 發行版,那麼升級你的內核。它們都應該已經更新了,然後在接下來的幾個星期里保持更新。我們會統計大量在極端情況下出現的 bug ,這裡涉及的測試很複雜,包括龐大的受影響的各種各樣的系統和工作任務。如果你的 Linux 發行版沒有升級內核,我強烈的建議你馬上更換一個 Linux 發行版。
然而有很多的系統因為各種各樣的原因(聽說它們比起「傳統」的企業發行版更多)不是在運行「正常的」 Linux 發行版上。它們依靠長期支持版本(LTS)的內核升級,或者是正常的穩定內核升級,或者是內部的某人打造版本的內核。對於這部分人,這篇介紹了你能使用的上游內核中發生的混亂是怎麼回事。
Meltdown – x86
現在,Linus 的內核樹包含了我們當前所知的為 x86 架構解決 meltdown 漏洞的所有修復。開啟 CONFIG_PAGE_TABLE_ISOLATION
這個內核構建選項,然後進行重構和重啟,所有的設備應該就安全了。
然而,Linus 的內核樹當前處於 4.15-rc6 這個版本加上一些未完成的補丁。4.15-rc7 版本要明天才會推出,裡面的一些補丁會解決一些問題。但是大部分的人不會在一個「正常」的環境里運行 -rc 內核。
因為這個原因,x86 內核開發者在 頁表隔離 代碼的開發過程中做了一個非常好的工作,好到要反向移植到最新推出的穩定內核 4.14 的話,我們只需要做一些微不足道的工作。這意味著最新的 4.14 版本(本文發表時是 4.14.12 版本),就是你應該運行的版本。4.14.13 會在接下來的幾天里推出,這個更新里有一些額外的修復補丁,這些補丁是一些運行 4.14.12 內核且有啟動時間問題的系統所需要的(這是一個顯而易見的問題,如果它不啟動,就把這些補丁加入更新排隊中)。
我個人要感謝 Andy Lutomirski、Thomas Gleixner、Ingo Molnar、 Borislav Petkov、 Dave Hansen、 Peter Zijlstra、 Josh Poimboeuf、 Juergen Gross 和 Linus Torvalds。他們開發出了這些修復補丁,並且為了讓我能輕鬆地使穩定版本能夠正常工作,還把這些補丁以一種形式融合到了上游分支里。沒有這些工作,我甚至不敢想會發生什麼。
對於老的長期支持內核(LTS),我主要依靠 Hugh Dickins、 Dave Hansen、 Jiri Kosina 和 Borislav Petkov 優秀的工作,來為 4.4 到 4.9 的穩定內核代碼樹分支帶去相同的功能。我同樣在追蹤討厭的 bug 和缺失的補丁方面從 Guenter Roeck、 Kees Cook、 Jamie Iles 以及其他很多人那裡得到了極大的幫助。我要感謝 David Woodhouse、 Eduardo Valentin、 Laura Abbott 和 Rik van Riel 在反向移植和集成方面的幫助,他們的幫助在許多棘手的地方是必不可少的。
這些長期支持版本的內核同樣有 CONFIG_PAGE_TABLE_ISOLATION
這個內核構建選項,你應該開啟它來獲得全方面的保護。
從主線版本 4.14 和 4.15 的反向移植是非常不一樣的,它們會出現不同的 bug,我們現在知道了一些在工作中遇見的 VDSO 問題。一些特殊的虛擬機安裝的時候會報一些奇怪的錯,但這是只是現在出現的少數情況,這種情況不應該阻止你進行升級。如果你在這些版本中遇到了問題,請讓我們在穩定內核郵件列表中知道這件事。
如果你依賴於 4.4 和 4.9 或是現在的 4.14 以外的內核代碼樹分支,並且沒有發行版支持你的話,你就太不幸了。比起你當前版本內核包含的上百個已知的漏洞和 bug,缺少補丁去解決 meltdown 問題算是一個小問題了。你現在最需要考慮的就是馬上把你的系統升級到最新。
與此同時,臭罵那些強迫你運行一個已被廢棄且不安全的內核版本的人,他們是那些需要知道這是完全不顧後果的行為的人中的一份子。
Meltdown – ARM64
現在 ARM64 為解決 Meltdown 問題而開發的補丁還沒有併入 Linus 的代碼樹,一旦 4.15 在接下來的幾周里成功發布,他們就準備階段式地併入 4.16-rc1,因為這些補丁還沒有在一個 Linus 發布的內核中,我不能把它們反向移植進一個穩定的內核版本里(額……我們有這個規矩是有原因的)
由於它們還沒有在一個已發布的內核版本中,如果你的系統是用的 ARM64 的晶元(例如 Android ),我建議你選擇 Android 公共內核代碼樹,現在,所有的 ARM64 補丁都併入 3.18、4.4 和 4.9 分支 中。
我強烈建議你關注這些分支,看隨著時間的過去,由於測試了已併入補丁的已發布的上游內核版本,會不會有更多的修復補丁被補充進來,特別是我不知道這些補丁會在什麼時候加進穩定的長期支持內核版本里。
對於 4.4 到 4.9 的長期支持內核版本,這些補丁有很大概率永遠不會併入它們,因為需要大量的先決補丁。而所有的這些先決補丁長期以來都一直在 Android 公共內核版本中測試和合併,所以我認為現在對於 ARM 系統來說,僅僅依賴這些內核分支而不是長期支持版本是一個更好的主意。
同樣需要注意的是,我合併所有的長期支持內核版本的更新到這些分支後通常會在一天之內或者這個時間點左右進行發布,所以你無論如何都要關注這些分支,來確保你的 ARM 系統是最新且安全的。
Spectre
現在,事情變得「有趣」了……
再一次,如果你正在運行一個發行版的內核,一些內核融入了各種各樣的聲稱能緩解目前大部分問題的補丁,你的內核可能就被包含在其中。如果你擔心這一類的攻擊的話,我建議你更新並測試看看。
對於上游來說,很好,現狀就是仍然沒有任何的上游代碼樹分支合併了這些類型的問題相關的修復補丁。有很多的郵件列表在討論如何去解決這些問題的解決方案,大量的補丁在這些郵件列表中廣為流傳,但是它們尚處於開發前期,一些補丁系列甚至沒有被構建或者應用到任何已知的代碼樹,這些補丁系列彼此之間相互衝突,這是常見的混亂。
這是由於 Spectre 問題是最近被內核開發者解決的。我們所有人都在 Meltdown 問題上工作,我們沒有精確的 Spectre 問題全部的真實信息,而四處散亂的補丁甚至比公開發布的補丁還要糟糕。
因為所有的這些原因,我們打算在內核社區里花上幾個星期去解決這些問題並把它們合併到上游去。修復補丁會進入到所有內核的各種各樣的子系統中,而且在它們被合併後,會集成並在穩定內核的更新中發布,所以再次提醒,無論你使用的是發行版的內核還是長期支持的穩定內核版本,你最好並保持更新到最新版。
這不是好消息,我知道,但是這就是現實。如果有所安慰的話,似乎沒有任何其它的操作系統完全地解決了這些問題,現在整個產業都在同一條船上,我們只需要等待,並讓開發者儘快地解決這些問題。
提出的解決方案並非毫不重要,但是它們中的一些還是非常好的。一些新概念會被創造出來來幫助解決這些問題,Paul Turner 提出的 Retpoline 方法就是其中的一個例子。這將是未來大量研究的一個領域,想出方法去減輕硬體中涉及的潛在問題,希望在它發生前就去預見它。
其他架構的晶元
現在,我沒有看見任何 x86 和 arm64 架構以外的晶元架構的補丁,聽說在一些企業發行版中有一些用於其他類型的處理器的補丁,希望他們在這幾周里能浮出水面,合併到合適的上游那裡。我不知道什麼時候會發生,如果你使用著一個特殊的架構,我建議在 arch-specific 郵件列表上問這件事來得到一個直接的回答。
結論
再次說一遍,更新你的內核,不要耽擱,不要止步。更新會在很長的一段時間裡持續地解決這些問題。同樣的,穩定和長期支持內核發行版里仍然有很多其它的 bug 和安全問題,它們和問題的類型無關,所以一直保持更新始終是一個好主意。
現在,有很多非常勞累、壞脾氣、缺少睡眠的人,他們通常會生氣地讓內核開發人員竭盡全力地解決這些問題,即使這些問題完全不是開發人員自己造成的。請關愛這些可憐的程序猿。他們需要愛、支持,我們可以為他們免費提供的他們最愛的飲料,以此來確保我們都可以儘可能快地結束修補系統。
via: http://kroah.com/log/blog/2018/01/06/meltdown-status/
作者:Greg Kroah-Hartman 譯者:hopefully2333 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive