設備年年新,內核永不換。早該被淘汰的Linux內核版本,依然陰魂不散地扎根在各種各樣的設備中,驅動著這些設備如同《行尸走肉》的喪尸游蕩在世界各地。
Linux內核安全漏洞是新聞頭條常客。最近又有一個隱身十年之久的嚴重內核漏洞被曝光了。但是,這到底代表著什么現實意義呢?為什么Linux內核安全很重要?老舊內核上的漏洞在眾多設備中茍延殘喘到底有什么影響?
Linux是操作系統的王者
毋庸置疑,Linux系操作系統的流行度無人能出其右:3/4的IoT設備運行Linux;2/3的在線服務器用Linux;70%的平板基于安卓系統(修改版Linux內核)——Linux簡直無處不在!
這里面有部分是因為Linux是開源系統,開發者不用付授權費,很樂于取用。Linux是電子芯片生產商常會附帶的軟件開發包(SDK)。這為開發者提供了工作參考平臺,以及硬件能力演示平臺。
有了參考開發平臺,制造商便只需操起該操作系統和SDK,編譯自有應用程序,然后就可以準備發售新產品了。然而,不幸的是,這些超方便的樣例和操作系統往往十分老舊,而且通常早就不被支持了。
但是,為什么老舊內核問題大大呢?IoT烤箱或者車載娛樂系統不是最先進科技又何妨嘛?
2015年的一份研究論文揭示:家用和小型辦公室路由器中,有3/4都裝的是過時Linux內核固件。其中大多數設備漏洞密布,很多漏洞都沒打補丁,也就是說,這些設備很容易被漏洞利用。
我們可以深入探討一下Linux內核基礎。為什么它很重要?它到底是做什么的?當內核不再受支持,會發生什么?為什么老舊內核會對設備和網絡安全造成嚴重影響?
內核是操作系統的心臟
我們很容易就會忘了,全功能操作系統其實不僅僅局限在桌面電腦和服務器上;操作系統根本就是到處都是。車載衛星導航系統能用,聯網冰箱會發來郵件,機上娛樂系統還能追美劇,這一切似乎都太自然了。
但是,即便家里的路由器只有個Web界面和幾盞小燈閃個不停,IoT兒童玩具就是唱唱搖籃曲和監視孩子狀況,它們依然有很多共性,比如全都運行有操作系統,而且很大可能是基于Linux的操作系統。幾乎所有這些設備都可以運行其他軟件,至于這“其他”軟件的功能,那可就包羅萬象沒有做不到只有想不到了。
您設備上操作系統的心臟當然就是內核了。它是掌管一切的看門人。硬件、用戶許可、權限、內存、軟件和接口,統統由它掌控。內核是操作系統的核心,其安全性至關重要。
內核的作用就是讓事情易于操作。它讓組件間交互變得抽象,比如,軟件開發者不用知道硬件或RAM內部運行機制就可以讀寫文件。
無論用哪種編程語言,保存文本文件的步驟基本一致:
以寫權限打開“芝士蛋糕配方.txt”將配方寫入文件關閉“芝士蛋糕配方.txt”這背后的動作其實很復雜。如果你想的是CPU實際執行的指令和所有設備間交互操作,那真是相當、非常、極度復雜。有板磚厚的教科書專門詳解內核驅動,也有一整學期的大學課程帶你淺嘗操作系統。
黑盒
就保存文件這個例子,寫文件的過程就涉及到管理內存分配的內核組件和驅動、文件系統結構、硬盤驅動、字符驅動、塊驅動、芯片驅動等等等等。內核管理著所有這些交互,這樣程序員才能方便地打開文件,并保存他們的芝士蛋糕配方……
如果這些內核組件中有哪個出了問題,黑客就能以此為橋頭堡,侵入你的系統。舉個例子,如果文件系統驅動處理不了超長文件名,黑客就可利用該漏洞來突破系統。
只要內核某部分出了漏洞,很多安全因素就會粉墨登場了。突然之間,你的整個操作系統和設備,都有可能因為這個似乎不起眼的問題,而淪為漏洞利用的獵物。
內核的問題在于版本過多
Linux內核可不止一個,內核也不過是個軟件,與其他任何軟件應用一樣,它也是有很多版本的。事實上,官方Linux內核版本就不下幾十個,非官方版本更是不計其數。開源,就意味著任何設備工程師、程序員或業余黑客,都可以下載、鼓搗和打造自己的定制版內核。
仔細觀察,你就發現,Linux內核編號也跟其他軟件一樣,是有規律的。有內核版本、主版本、次版本和補丁版本。當然,也可以加其他字母和數字,標識是貝塔版還是預發行版,或者定制版內核。
編譯Linux內核的過程并不特別復雜。業余玩家在讀幾個小時指南,指天咒地一番,順帶干掉幾杯咖啡之后,也是能從源代碼編譯出一個Linux內核的(軟件大神圣光普照)。
但很不幸,也正是這個容易的過程,為漏洞和配置問題洞開了大門。
既然也是軟件,漏洞是免不了的。常見的“長期支持”內核版本是 2.6.32,路由器、IoT設備,甚至某些寶馬車載娛樂系統中都能找到。
對 2.6.32 版Linux內核來個快速漏洞掃描,你會發現182個已知漏洞,其中數十個都相當嚴重。
但是,首先,別緊張,這些漏洞并非總是應用到所有內核配置上的。比如說,如果你的設備不用藍牙,那么藍牙組件中的漏洞就不會影響到你(雖然有時候很難知道內核組件交互情況)。
然后,你需要謹記的,是哪些內核版本已經打上了已知漏洞補丁。比如說,Linux網卡驅動組件里發現了L2TP相關漏洞。但只要我們查閱受影響內核版本列表,就會看到 2.6.32.20 已經是最后一個脆弱版本了。這意味著,官方維護的Linux內核 2.6.32.21 及其以后版本,均不受該漏洞影響。
修補漏洞成為老大難
受影響內核自然要被更新。但是,內核 2.6.32 身上發生了什么呢?官方宣布它已“壽終正寢”。也就是說,該版本內核不再受支持,而最新的官方更新,是在2016年年中。
想象一下,“壽終正寢”對于新發現的漏洞是個什么意思?Linux社區不可能無限期更新老版內核,于是,最有可能的情況,是新漏洞永遠不會被修復。這種情況下,更新內核的責任就落到了設備制造商身上。然而,針對特定漏洞手動修復內核,比簡單下載最新版受支持的內核,要復雜得多。
有些廠商訂閱第三方服務提供內核補丁,其他可能自己修復。
或者,如調查發現的,大多數設備就這么干脆不更新了,甚至上周剛買的全新路由器,都有可能運行的是漏成篩子的老舊內核。
2015年來的研究發現:制造商并未對所生產設備進行合理的維護
對路由器內核版本來個現場抽樣速查。時下4種型號的固件鏡像中,3個跑的是過時內核,其中一個的內核還是2009年發布的;最新的內核(新發布的設備上的)倒是挺新,但也是在下個月就不再支持了。
制造商和開發者是最終責任人
內核版本真的很重要!內核是操作系統的心臟,管理著包括硬件、內存、應用和用戶權限在內的所有東西。如果內核存在漏洞,設備就有可能被黑。內核漏洞經常被發現,但只有當前內核版本才會被更新和修復。
落實到設備上,制造商和開發者,是提供維護良好的安全操作系統的最終責任人。最近,技術巨頭華碩才與美國聯邦貿易委員會就不安全路由器和云服務達成了和解。對很多制造商來說,該案件傳達的消息似乎尚未落地。可能還需更多法律訴訟,甚或立法,才能迫使制造商嚴肅對待設備安全問題。
隨著聯網設備的激增,技術產業的每個人,都應將眼光投注在安全上。推出令人激動的新技術,卻沿用已知漏洞肆虐的老舊內核,太不應該!