Linux 內核開發很少吸引像華盛頓郵報這樣主流媒體的關注,內核社區在安全方面進展的冗長功能列表就更少人看了。所以當這樣一個專題發布到網上,就吸引了很多人的注意(LCTT 譯注:華盛頓郵報發表了一篇很長的專題文章,批評 Linux “沒有一個系統性的機制以在駭客之前發現和解決安全問題,或引入更新的防御技術”,“Linux 內核開發社區沒有一個首席安全官”等等)。關於這篇文章有不同的反應,很多人認為這是對 Linux 直接的攻擊。文章背後的動機很難知道,但是從歷史經驗來看,它也可以看作對我們早就該前進的方向的一次非常必要的推動。
回顧一件昏暗遙遠過去的事件 - 確切地說是在 1999 年 4 月。一家叫 Mindcraft 的分析公司發布了一份報告顯示 Windows NT 在 Web 服務器開銷方面完勝 Red Hat Linux 5.2 加 Apache。Linux 社區,包括當時還很年輕的 LWN,對此反應很迅速而且強烈。這份報告是微軟資助的 FUD 的一部分,用來消除那些全球壟斷計劃的新興威脅。報告中所用的 Linux 系統有意配置成低性能,同時選擇了當時 Linux 並不能很好支持的硬件,等等。
在大家稍微冷靜一點後,盡管如此,事實很明顯:Mindcraft 的人,不管什麼動機,說的也有一定道理。當時 Linux 確實在性能方面存在一些已經被充分認識到的問題。然後社區做了最正確的事情:我們坐下來解決問題。比如,單獨喚醒的調度器可以解決接受連接請求時的驚群問題。其他很多小問題也都解決了。在差不多一年裡,內核在這類開銷方面的性能已經有了非常大的改善。
這份 Mindcraft 的報告,某種意義上來說,往 Linux 屁股上踢了很有必要的一腳,推動整個社區去處理一些當時被忽略的事情。
華盛頓郵報的文章明顯以負面的看法看待 Linux 內核以及它的貢獻者。它隨意地混淆了內核問題和其他根本不是內核脆弱性引起的問題(比如,AshleyMadison.com 被黑)。不過供應商沒什麼興趣為他們的客戶提供安全補丁的事實,就像一頭在房間裡巨象一樣明顯。還有謠言說這篇文章後面的黑暗勢力希望打擊一下 Linux 的勢頭。這些也許都是真的,但是也不能掩蓋一個簡單的事實,就是文章說的確實是真的。
我們會合理地測試並解決問題。而這些問題,不管是不是安全相關,能很快得到修復,然後再通過穩定更新的機制將這些補丁發布給內核用戶。比起外面很多應用程序(自由的和商業的),內核的支持工作做的非常好。但是指責我們解決問題的能力時卻遺漏了關鍵的一點:解決安全問題終究來說是一個打鼹鼠游戲。總是會出來更多的鼹鼠,其中有一些在攻擊者發現並利用後很長時間我們都還不知道(所以沒法使勁打下去)。盡管 Linux 的商業支持已經非常努力地在將補丁傳遞給用戶,這種問題還是會讓我們的用戶很受傷 - 只是這並不是故意的。
關鍵是只是解決問題並不夠,一些關心安全性的開發者也已經開始嘗試做些什麼。我們必須認識到,缺陷永遠都解決不完,所以要讓缺陷更難被發現和利用。這意思就是限制訪問內核信息,絕對不允許內核執行用戶空間內存中的指令,讓內核去偵測整形溢出,以及 Kee Cook 在十月底內核峰會的講話中所提出的其他所有事情。其中許多技術被其他操作系統深刻理解並采用了;另外一些需要我們去創新。但是,如果我們想充分保護我們的用戶免受攻擊,這些改變是必須要做的。
為什麼內核還沒有引入這些技術?華盛頓郵報的文章堅定地指責開發社區,特別是 Linus Torvalds。內核社區的傳統就是相對安全性更側重於性能和功能,在需要犧牲性能來改善內核安全性時並不願意折衷處理。這些指責一定程度上是對的;好的一面是,因為問題的范圍變得清晰,態度看上去有所改善。Kee 的演講都聽進去了,而且很明顯讓開發者開始思考和討論這些問題了。
而被忽略的一點是,並不僅僅是 Linus 在拒絕有用的安全補丁。而是就沒有多少這種補丁在內核社區裡流傳。特別是,在這個領域工作的開發者就那麼些人,而且從沒有認真地嘗試把自己的工作整合到上游。要合並任何大的侵入性補丁,需要和內核社區一起工作,為這些改動編寫用例,將改動分割成方便審核的碎片,處理審核意見,等等。整個過程可能會有點無聊而且讓人沮喪,但這卻是內核維護的運作方式,而且很明顯只有這樣才能在長時間的開發中形成更有用更可維護的內核。
幾乎沒有人會走這個流程來將最新的安全技術引入內核。對於這類補丁可能收到的不利反應,有人覺得也許會導致“寒蟬效應”,但是這個說法並不充分:不管最初的反應有多麻煩,多年以來開發者已經合並了大量的改動。而少數安全開發者連試都沒試過。
他們為什麼不願意嘗試?一個比較明顯的答案是,幾乎沒有人會因此拿到報酬。幾乎所有引入內核的工作都由付費開發者完成,而且已經持續多年。公司能看到利潤的領域在內核裡都有大量的工作以及很好的進展。而公司覺得和它們沒關系的領域就不會這樣了。為實時 Linux 的開發找到贊助支持的困難就是很明顯的例子。其他領域,比如文檔,也在慢慢蕭條。安全性很明顯也屬於這類領域。可能有很多原因導致 Linux 落後於防御式安全技術,但是其中最關鍵的一條是,靠 Linux 賺錢的公司沒有重視這些技術的開發和應用。
有跡象顯示局面已有所轉變。越來越多的開發人員開始關注安全相關問題,盡管對他們工作的商業支持還仍然不夠。對於安全相關的改變已經沒有之前那樣的下意識反應了。像內核自我保護項目這樣,已經開始把現有的安全技術集成進入內核了。
我們還有很長的路要走,但是,如果能有一些支持以及正確的觀念,短期內就能有很大的進展。內核社區在確定了自己的想法後可以做到很讓人驚歎的事情。幸運的是,華盛頓郵報的文章將有助於提供形成這種想法的必要動力。以歷史的角度看,我們很可能會把這次事件看作一個轉折點,我們最終被倒逼著去完成之前很明確需要做的事情。Linux 不應該再繼續講述這個安全不合格的故事了。
作者:Jonathan Corbet 譯者:zpl1025 校對:wxy