导读 | 设备年年新,内核永不换。早该被淘汰的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社区不可能无限期更新老版内核,于是,最有可能的情况,是新漏洞永远不会被修复。这种情况下,更新内核的责任就落到了设备制造商身上。然而,针对特定漏洞手动修复内核,比简单下载最新版受支持的内核,要复杂得多。
有些厂商订阅第三方服务提供内核补丁,其他可能自己修复。
或者,如调查发现的,大多数设备就这么干脆不更新了,甚至上周刚买的全新路由器,都有可能运行的是漏成筛子的老旧内核。
对路由器内核版本来个现场抽样速查。时下4种型号的固件镜像中,3个跑的是过时内核,其中一个的内核还是2009年发布的;最新的内核(新发布的设备上的)倒是挺新,但也是在下个月就不再支持了。
内核版本真的很重要!内核是操作系统的心脏,管理着包括硬件、内存、应用和用户权限在内的所有东西。如果内核存在漏洞,设备就有可能被黑。内核漏洞经常被发现,但只有当前内核版本才会被更新和修复。
落实到设备上,制造商和开发者,是提供维护良好的安全操作系统的最终责任人。最近,技术巨头华硕才与美国联邦贸易委员会就不安全路由器和云服务达成了和解。对很多制造商来说,该案件传达的消息似乎尚未落地。可能还需更多法律诉讼,甚或立法,才能迫使制造商严肃对待设备安全问题。
随着联网设备的激增,技术产业的每个人,都应将眼光投注在安全上。推出令人激动的新技术,却沿用已知漏洞肆虐的老旧内核,太不应该!
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/102812.html