呃,无意冒犯,但是这篇文章读完之后,感觉就是两个没有相关背景的人在一边现查资料一边扯闲篇啊。聊一样东西,起码应该拉上至少一个碰过这东西的人吧?
我觉得问题最大的是下面这段,如果我没理解错的话,两个人聊了一会儿之后,很快认定微内核解决的就是个“内核稳定性”或者说“驱动稳定性”的问题,并且觉得这个问题很好解决,在语言层去掉“指针”这个概念,或者让全行业的生产商一起做一套标准化驱动就可以了。
LD:现在的 OS 的问题,就是内核微小的错误,都是让整个系统挂掉。这和我们写软件应该用多进程还是多线程。同样的问题。
IAN:应该从硬件底层彻底抛弃现在的进程切换方式。保存的上下文太多。
LD:现在 OS 不是分成 user 和 kernel 保护级别么。 我觉得再增加一个两个保护级别,专门针对设备驱动程序似乎是更好的选择。
IAN:我以前设想一个办法可以完全不需要保护级别。而且不需要虚拟内存。
LD:怎么办? 编译器静态分析搞定?Rust?
IAN:完全使用实地址,但是代码无法访问对象外面的内存。
LD:靠编译器保证?
IAN:不需要多先进的编译器。语言里面没有指针这东西就行,这样你没法访问不是给你的对象。嗯,需要抛弃 C 语言……
LD:Rust!
......(跳过部分对话)......
LD:换个思路。其实 OS 最容易出问题的是硬件驱动,所以尽量让硬件标准化,别每个硬件都搞一套自己的驱动。让一套驱动支持多种硬件,问题就解决了。比如 usb 驱动。完全可以做到一类硬件都用一个设备驱动。
IAN:我还是觉得驱动程序 bug 其实可以不导致当机。用内核线程行不行?共享地址空间,但是异步执行。
LD:Linux 似乎就是这样。tasklet,可以被调度的。
IAN:所以驱动程序要是当掉,可以不死对吗?我回去查一下。
LD:看啥错误了。不小心修改了其它模块的内存就完蛋了。其它错误最多硬件本身不能用了。
IAN:所以就是为什么你说再多一个保护级别。
LD:嗯,别碰了内核关键的代码。但是驱动之间还是可以互相干扰的。
IAN:是个不错的折中方案。所以微内核解决了一个不是那么关键的问题。
LD:是的。这个问题不重要。哦,对了,Windows 是微内核的。好像从 2000 开始。
这个对话怎么说呢……完全跑偏了,从现在 OS 最大的问题是稳定性开始就跑偏了。
现在 OS 最大的问题不是稳定性,而是每年层出不穷的各种重大安全漏洞,尤其是各种溢出漏洞。其中不少漏洞被曝光的时候,都是潜伏了五年、十年的老漏洞,我们根本不知道过去几年有没有发生过在野攻击,只能捂着耳朵假装没问题。
这种惨状有一个很重要的成因,那就是宏内核把太多代码塞在了最高权限的内核态里面。以 Linux 为例,Linux 内核有将近两千万行代码,其中有一千多万是各种硬件驱动,有不少还是停止维护的驱动。这两千万行代码里面随便出一个 RCE,立马就能拿到内核态的执行权限,根本防不胜防。
更恶心人的是,这种规模的内核不仅很难查出漏洞,还很难保证不重新触发。
我们以2016年闹得沸沸扬扬的 DirtyCow 漏洞为例,漏洞曝光的时候,Linus 很尴尬地解释道,这个漏洞他11年前就已经修复过一遍了(commit 4ceb5db9757a)。但是后来 IBM S390 平台上 get_user_pages 函数出了问题,有人修复它的时候又把 DirtyCow 重新加了回来(commit f33ea7f404e5)。
之后,包括 Linus 在内,所有开发者都把这件事忘在角落了。这个漏洞就这样藏在上千万行代码里生存了11年,直到2016年才重新被人挖掘出来。
相似的问题,放到微内核里面又会是怎样一副场景呢?
首先,微内核就不会把两千万行代码都塞在内核态里。整个内核态作为系统的最高权限,应该存放最低限度的代码。比如 seL4,一共就8700行代码,即使存在 DirtyCow 这样的漏洞,在短短8000多行代码里面也会非常显眼。
其次,宏内核下的各个部件,本来就应该只拿到和自己工作相关的最低权限,而不是每个部件都自动拿到最高权限。比如驱动,只要拿到跟驱动相关的接口访问权限就够了,有什么操作都调接口交给内核来做。这样一来即使黑客在驱动里找到了 RCE 漏洞,拿到的也只有比人类用户还低的权限,不可能用来提权攻击。
说到这里,各位读者应该也看明白我的意思了:微内核的本质,其实就是把原本的宏内核拆分、降权,把宏内核偷懒没有做的安全工作全都补回来。它跟现在 Google 等公司倡导的 rootless 其实是异曲同工的,就是废止危险的万能权限,把各个部件根据需要降权到应有的层级上去。
这套思路在我看来是完全合理的,也是势在必行的。原本的宏内核架构,就相当于是一家公司为了偷懒,直接给所有员工 CEO 的权限,连刚来的实习生都能拿着 CEO 的公章批合同。这家公司能撑到现在都不倒闭,主要还是因为同行都是这个水平,所以大家谁也没脸笑话谁。现在业界开始试水微内核架构之后,这家公司还能撑几年就难说了。
觉得本文有价值的话,欢迎点个赞支持一下。对信息安全感兴趣的同学,也欢迎阅读我写的其他信息安全科普类文章: