百科问答小站 logo
百科问答小站 font logo



如何看待王垠的新文章:《关于微内核的对话》? 第1页

  

user avatar   Gh0u1L5 网友的相关建议: 
      

呃,无意冒犯,但是这篇文章读完之后,感觉就是两个没有相关背景的人在一边现查资料一边扯闲篇啊。聊一样东西,起码应该拉上至少一个碰过这东西的人吧?

我觉得问题最大的是下面这段,如果我没理解错的话,两个人聊了一会儿之后,很快认定微内核解决的就是个“内核稳定性”或者说“驱动稳定性”的问题,并且觉得这个问题很好解决,在语言层去掉“指针”这个概念,或者让全行业的生产商一起做一套标准化驱动就可以了。

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 的公章批合同。这家公司能撑到现在都不倒闭,主要还是因为同行都是这个水平,所以大家谁也没脸笑话谁。现在业界开始试水微内核架构之后,这家公司还能撑几年就难说了。


觉得本文有价值的话,欢迎点个赞支持一下。对信息安全感兴趣的同学,也欢迎阅读我写的其他信息安全科普类文章:




  

相关话题

  如何评价微软官宣将会在 6.24 发布下一代 Windows 操作系统的信息? 
  鸿蒙系统到底是不是安卓系统? 
  将 CPU 主频性能降到极低还能正常运行各种操作系统么?如果不能,会有哪些问题? 
  计算机windows7操作系统到底是属于多用户还是单用户? 
  假如当年微软继续开发DOS,今天的DOS会是怎样? 
  微软会继续改善 Windows 10 的更新策略吗? 
  Linux设备驱动开发 新手,创建第一个字符设备驱动时对一些代码的功能不是很了解,能解释一下吗? 
  鸿蒙 OS 预计 2021 年底连接设备将突破 3 亿台,意味着什么?将会带来哪些改变? 
  我们为什么不尽早施行国产 CPU+国产 Linux 系统战略呢? 
  为什么普及 Linux 桌面操作系统这么难呢? 

前一个讨论
如果鸿蒙系统成功,会复兴C/C++吗?
下一个讨论
如何看待推特脸书以对香港局势涉暴「假新闻」为由删除、停用近千中国内地创建账号事件?





© 2024-06-03 - tinynew.org. All Rights Reserved.
© 2024-06-03 - tinynew.org. 保留所有权利