迅维网

查看: 2562|回复: 20
打印 上一主题 下一主题

操作系统为什么都有无数的漏洞?是故意留下的还是技术上无法达到完美?

[复制链接]
跳转到指定楼层
1#
发表于 2018-1-16 10:34:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 �

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x
就目前而言,几乎所有的操作系统都有无数的漏洞。是故意留下的还是技术上无法控制?是给自己的员工方便使用吗?还是真的达到了人类的极限,面对复杂系统没有能力达到完美?

2#
发表于 2018-1-16 10:34:31 | 只看该作者 �
因为bug是一个不可计算的概念。什么是bug,跟你脑子想的不一样的就是bug。就算你写出了需求文档,需求文档也可能跟你的意图有差别,不同的人看这份需求文档的理解也不一样,文字还有起义,还有一群傻逼写出来的代码跟他们本来要写的东西也不一样,最后测试对需求文档的理解也跟开发不一样,于是最后就变成了屎。

如果你能把需求文档用某种数学语言来写,严格定义什么是对,什么是错,不要有undefined behavior,行文自洽,而且用这种语言来写这种语言的虚拟机,配套证明,肯定0漏洞。

然而最终你就会发现,没有漏洞的技术可以实现的东西的集合的势,小于C++可以实现的东西的集合的势,于是作用为0(逃

回复 支持 反对

使用道具 举报

3#
发表于 2018-1-16 10:34:31 | 只看该作者 �
先把概念搞清楚。如果是故意留下的,那叫后门,不叫漏洞。自己员工要超常规使用的话,用的是内部工具、非公开sdk等,犯不着用后门和漏洞。

另外,这个不是操作系统的特例,所有软硬件都是这个情况。

我在别的帖子也回答过漏洞出现的三大原因。
1. 不小心:比如用错变量。这个最常见。
2. 不知道:比如对一个函数或库的使用条件和功能了解不够,错调用了。
3. 故意:面对一个没法修复的bug,比如没有源代码的组件里的,这时候有可能你需要“制造”一个bug用法来绕开它。但需要保证这个不会影响到别的东西。

第三条,我具体亲身经历的栗子。在开发Halo3的时候,我打算用xbox 360的float tessellation,那就需要把index buffer拿来作为tessellation factor。为了速度,所有tessellation factor都是在gpu算了之后用mem export导出到index buffer。

好,这时候发现了一个api设计的bug。mem export的参数接受的是一个vertex buffer和一个内存地址。不能给它index buffer。接着我又发现了一个实现上的bug,它其实不验证两者是否来自同一个buffer。所以我就用了一个空的vertex buffer和一个来自index buffer的内存地址实现了这件事情。从代码上被认为是个bug,但解释清楚就知道是有意而为之。

后来,xbox sdk更新了,两个bug都修好了,我也不必再那么做。

至于为什么在我之前没人遇到这个问题?估计我是头一个敢这么用的。好几年后才有xbox游戏用tessellation。

回复 支持 反对

使用道具 举报

4#
发表于 2018-1-16 10:34:31 | 只看该作者 �
我一直觉得,计算机科学与工程的发展相比于其它行业还处于非常原始的阶段。大型的软件工程,像是用火柴棍搭摩天大楼。即使耗费大量人力物力,用各种手段进行验证与测试,也很难保证其可靠性和稳定性。发展和进步需要时间嘛。

回复 支持 反对

使用道具 举报

5#
发表于 2018-1-16 10:34:31 | 只看该作者 �
我们要相信题主一定没写过错别字

回复 支持 反对

使用道具 举报

6#
发表于 2018-1-16 10:34:31 | 只看该作者 �
人有没有漏洞?进化了几万年,还是被病毒找到漏洞攻击。操作系统是人造的(概念),人无完人,操无完操,扯犊子模式开启,用老毛子的思想,发展的眼光看待问题,人的自身系统和思想的不完善导致了目前的操作系统百般漏洞。比如人的懒惰,人的粗心,人的固执,人的疲劳,人的局限都会导致操作系统的不完善,个体人的种种缺点,组成的组织的各种不完善,不可避免的造成操作系统的漏洞。另一个方面,还是符合人类社会发展的历程,对于欲望的追求,计算机诞生之际,受到硬件的局限,那时的操作系统如此简单,也漏洞百出,却不怎么考虑安全,能用就行;随着计算机和互联网的普及和应用的增多,为了这个系统的运行的能公平公正,安全就变得越来越重要,漏洞才当做漏洞,所以漏洞是社会或者计算机发展的产物。
简单点说,我们没有进化到完美的高度,社会没有到达共产社会之后的社会,漏洞只是整个进化过程中的一道亮丽的风景线。

回复 支持 反对

使用道具 举报

7#
发表于 2018-1-16 10:34:31 | 只看该作者 �
以上多只是从技术的视角去分析这个问题,以下从多个视角去分析这件事情:

工程构建的视角分析,

  • 操作系统是要完成资源计算,存储,管理的系统,这些需求本身具备复杂性
  • 在如此复杂度的需求下,设计一个操作系统是一件相当困难的事情
  • 设计一个低耦合,高内聚,高并发,低能耗,高可用的软件需要绞尽脑汁
  • 操作系统软件不是普通的软件,是一种基础性的,平台级的软件,代码量可能是百万,千万级
  • 如此,操作系统的写手不可能是常人,而是人精:人精不多,找到人精不简单
  • 这种人精具备的能力不仅仅体现在对软件和硬件的理解上,更重要的是一种对宏观和微观世界的抽象和建模能力
  • 工程构建需要一个长期的过程,会有不同背景的人,进行着对前期迭代版本的不同思考,最后产出不同但基本符合要求的结果

数学逻辑的视角分析,

  • 哥德尔证明了任何一个形式系统,只要包括了简单的初等数论描述,而且是自洽的,它必定包含某些系统内所允许的方法既不能证明真也不能证伪的命题。
  • 第一不完备性定理
任意一个包含一阶谓词逻辑与初等数论的形式系统,都存在一个命题,它在这个系统中既不能被证明也不能被否定。

  • 第二不完备性定理
如果系统S含有初等数论,当S无矛盾时,它的无矛盾性不可能在S内证明。

商业行为的视角分析,

  • 对于商业产品来说,它需要有人用,即有需求
  • 考虑到时间成本,人力成本,利益因素,事情就会变得复杂
  • 推广,传播,长期盈利是很重要的,操作系统是一个基础平台软件,写操作系统的人必须具备持久的价值
  • 操作系统被划归为不同模块,它们的目标是自身最终能够各司其职,又相互协作,对用户友好,对外系统上的开发人员提供商业逻辑对外提供的一个深思熟虑后的API,大型科技公司无不如此:苹果(Mac OS ,iOS,itunes),微软(PC,企业操作系统),甲骨文(数据库操作系统),腾讯微信(万能app,移动类操作系统?!),即面向不同类型用户的community
  • 有漏洞,可以打补丁嘛,补丁可以赚钱嘛
  • 开源软件和商用软件其实具备微妙的内在关系
  • 伸展商业触角,创造不同level的运维部门和售后部门,对公司是有益的,对社会创造就业也是有益的

生物科学的视角分析,

  • 操作系统的构建过程就像一个婴儿的成长过程,从0到1,从1到99...
  • 一开始追求具备完美的能歌善舞,文武双全的婴儿不太可能,必须后天持续训练他(先天缺陷的情况不谈),18岁才成年吧。。
  • 操作系统有漏洞,可以使得商业生态更繁荣:有人去修补漏洞,有人去攻击漏洞
  • 具备“生物多样性”的系统才是健康的动态平衡的系统:软件要为人类商业社会使用,普及多少用户,哪种类型的用户取决于软件设计初衷和商业生态的设计,而商业生态问题很像一个生物多样性的问题,比如阿里系的天猫,神马,虾米,。。又比如Hadoop云生态等。

遗言:

  • 从一个高纬度空间去突破低纬度空间是妥妥的事,漏洞算个鸟 ~
  • 降维攻击

总结,
以上任何一点不具备或做出妥协或根本性冲突,漏洞必将发生。还有其它没考虑到的的情况。

:)

回复 支持 反对

使用道具 举报

8#
发表于 2018-1-16 10:34:31 | 只看该作者 �
你为什么有那么多不懂?老师故意不教?

回复 支持 反对

使用道具 举报

9#
发表于 2018-1-16 10:34:31 | 只看该作者 �
其实每个系统发布时都可能没有bug,只到用户发现了一个。

回复 支持 反对

使用道具 举报

10#
发表于 2018-1-16 10:34:31 | 只看该作者 �
是人在写代码,而不是神。再说就算是神也有不少bug,比如pi是个无理数。。。

回复 支持 反对

使用道具 举报

11#
发表于 2018-1-16 10:34:31 | 只看该作者 �
只要是人写的代码,怎么能没有漏洞。何况你看看这些操作系统代码有多老了,那时候一直遗留下来的代码出现很多问题也很正常。
C/C++相对于JAVA之类更先进的语言而言出问题的概率要大得多。

回复 支持 反对

使用道具 举报

12#
发表于 2018-1-16 10:34:31 | 只看该作者 �
公交系统,地铁系统,供电系统,供水系统出点纰漏是在所难免的,好像人人都能理解。

但是操作系统的设计难度不在这些之下。

回复 支持 反对

使用道具 举报

13#
发表于 2018-1-16 10:34:31 | 只看该作者 �
It's not a bug, it's a feature.

回复 支持 反对

使用道具 举报

14#
发表于 2018-1-16 10:34:31 | 只看该作者 �
微软本身知道漏洞,技术上【自身】实现。用来干嘛?三战、情报、各种资料... ...
不鸣则已,一鸣惊人!
在这之前被黑客挖掘出来 。
微软: 开会! 加班!  修复!
后门?不不不,这本身就是漏洞~
@叛逆者 慨念这种东西由人定的 你说是吗?
它们存在的本质都是为了获得一定甚至所有操作权限 这就够了。
我是做逆向破解的 这些弯弯道道再清楚也不过了。

回复 支持 反对

使用道具 举报

15#
发表于 2018-1-16 10:34:31 | 只看该作者 �
肯定是微软故意留下的,他在下一盘很大的棋,第三次世界大战原子弹神马的弱爆了,杀伤力最强的是微软。帝国主义亡我之心不灭。
一连串的阴谋浮出水面,,,
(深度好文,转不转看你,我爱国,我转了)

回复 支持 反对

使用道具 举报

16#
发表于 2018-1-16 10:34:31 | 只看该作者 �
系统是一条船,软件是货物,货物与货物混合会发生什么谁也不知道。
问题的关键不是货物问题,而是你设计的这条船,没有把货物单独存放。
就像船的隔离仓一样,没有隔离仓的船,会因为一个货物而导致沉船。
真正好的操作系统是应该与运用程序隔离的,而生产制作安全的操作系统似乎会损害某些人的利益,有权决定是否推广安全系统的人,似乎不希望系统安全,比如某国。

回复 支持 反对

使用道具 举报

头像被屏蔽
17#
发表于 2018-1-16 10:34:31 | 只看该作者 �
操作系统是由软件工程师完成的,所以其中的漏洞是工程层面的问题。和科学与技术不同,工程师更关心的是交付时间和可用性。事实上操作系统有漏洞只可证实而无法证伪。即便是在理论层面上,使用形式化工具也只能证明操作系统满足给定的性质,或是在一定抽象级别上不存在某些漏洞。因此开发团队的职责更多的是在给定的时间约束下尽可能地控制漏洞的危害,即所谓的best effort。当然系统上线后对已知bug的快速修复能力也很重要。关于这方面的理论和工程的方法论在软件工程中有较详尽的讨论。

操作系统极高的复杂度使得部分bug的重现都相对困难,更不要说修复。另外操作系统打patch和更新的难度高于一般互联网服务的后端系统。所以很多时候操作系统的bug看上去更难修复,也更容易被利用。

漏洞会有的,补丁也会有的,一切都会有的-只是时间问题。

回复 支持 反对

使用道具 举报

18#
发表于 2018-1-16 10:34:31 | 只看该作者 �
达成做饭吃饭的目的:在自己家做饭吃饭很容易,做饭 吃饭ok
开个小饭馆,同样是做饭吃饭,除了做出来还要处理很多事情,例如找个合适的厨子(设计师)
开个连锁饭馆就要更多的员工,涉及安全,卫生,管理等。
开个世界型连锁餐馆就要有各个部门应付各种事情。比如如何应对客户(黑客)故意往饭里(系统内)扔苍蝇(植入病毒等)就是十分复杂麻烦的事。
达成一个目的很容易,防止捣乱达成目的就很难了。

回复 支持 反对

使用道具 举报

19#
发表于 2018-1-16 10:34:31 | 只看该作者 �
正如有江湖的地方就有纷争,有代码的地方就有BUG。
如果没有BUG,只是想象力不够没想到更多的测试输入而已。

回复 支持 反对

使用道具 举报

20#
发表于 2018-1-16 10:34:31 | 只看该作者 �
数学研究表明,任何一个公理系,都不能自洽。所以程序当然也不能完美。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图


芯片搜索

快速回复