扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
由于我们的计算环境日益变得更加复杂起来,所以安全情况受到了很大的影响。现在是时间对图形用户界面环境进行简化了。
--------------------------------------------------------------------------------------------
目前来说,图形用户界面环境属于非常复杂的软件项目。可能需要数千乃至上百万行的代码才能为软件建立一个基本的图形用户界面环境。就以非常流行的桌面环境Ubuntu为例子,由X.Org组织提供的X Window系统图形用户界面环境包含了大约200万行代码。X.Org组织提供的GNU网络对象模型环境,则在这个基础上又增加了1300万行代码。而新的桌面特效软件Compiz Fusion可以对用来建构属于自己的图形用户界面环境,并且不象其它软件项目那样复杂,实际上,它只有大约20万行代码。ZDNet安全频道原创翻译 转载请注明作者以及出处
当然,1500万行代码是一个很大的数字。X.Org的使用也不是什么简单的事情,这也从某种程度上说明了安装在计算机上的软件是多么的复杂。如果你希望在自己的类Unix系统中使用一个现代化的图形用户界面环境,也可以这样进行粗步的评估和分析。不过,以另一个极端高的桌面环境GNOME为例,仅仅激活桌面窗口管理(DWM)这样的功能就需要至少2000行的C语言代码,并且你还需要X Window系统的运行。这就意味着整体代码数量将达到1300万到2000万的水平。
但所有这些和其他一些图形用户界面环境比起来,就象小巫见大巫一样。某些商业操作系统的图形用户界面环境甚至更大,更复杂。举例来说,苹果MacOS X操作系统的Aqua环境以及微软Windows Vista操作系统的Aero Glass环境都是现实的例子。由于它们采用的是封闭源代码的开发方式,代码的具体情况被公司所保密,所以不容易得知代码的详细情况。但作为图形用户界面环境,其大体情况是可以猜测的,我们可以估计它们处于数千万行代码的这样一个数量级上。ZDNet安全频道原创翻译 转载请注明作者以及出处
不幸的是,复杂性是安全性的敌人之一。每当系统的复杂性开始上升的时间,也就意味着出现错误设计的机会上升。系统使用的代码越多,出现Bugs缺陷的可能就越大;出现Bugs缺陷的机会越大,安全系统出现漏洞的可能性也就越高。根据维基百科中关于代码长度和安全关系的文章,从代码统计工具SLOC的数据中我们可以发现这样的趋势:
有些专家认为错误和代码行数之间是存在对应关系的。这种对应关系并不简单,尽管和使用的语言类型、程序的质量以及测试的水平等方面都存在联系,但它似乎是肯定存在的。更重要的是,程序中存在的错误可能导致安全方面出现问题。
这种情况反应到操作系统的设计上,会有可能对系统安全性造成重要的影响。首先,由于越来越多行代码的增加导致更复杂的系统很可能会是更不安全这样情况的出现,使得与Windows和Linux等操作系统相比,以安全为重点的操作系统如OpenBSD的代码增长速度非常缓慢。其次,包括OpenBSD和许多基于Linux的变种操作系统在内软件,采取了将系统代码分割成为不同的部分,运行在不同的安全环境(举例来说通过不同的系统模式进行控制)下,并通过小型化和认真审查来确保最关键部分的安全性。
但实际上Bugs错误不是软件安全漏洞的唯一来源。软件本身设计上的问题也有可能导致安全问题的出现。举例来说,缓冲区溢出错误会产生一个可以执行任意代码的漏洞,因此拥有管理权限的用户运行shell脚本的时间可能导致黑客成功的攻击。这就是通常情况下,Unix系统为什么不容许在SUID的权限下使用shell脚本。ZDNet安全频道原创翻译 转载请注明作者以及出处
恩诺·博兰是suckless.org(负责对wmii进行开发和维护)的代码开发者中的一员,他认为X Window系统的设计存在问题,而我也同意这一点。我知道创建和维护一个基本架构对于一个现代的图形用户界面环境来说,并不是一件容易的事情,而且我也相信在这一点上,我不可能比X.Org项目做的更好。但这不能改变这样一个事实,这个项目中存在一些不良的设计,作为一个影响非常广泛的项目,它缺乏一些必须的东西。
就象Aqua和Aero Glass等图形用户界面环境一样,X Window系统试图在一个统一的架构下面实现太多的事情。这样会导致复杂性的日益上升,从而反过来影响到系统安全性,并且可能带来了其它方面的缺陷,为黑客攻击的成功提供了更多的机会。对于大多数现代图形用户界面环境来说,看起来有一件事情是正确的选择;利用窗口管理器将窗口系统的底层和组件的实际接口分隔开。这样可以保证每一部分的简单,减少冲突,提供性能稳定的应用程序编程接口,为尽量减少作为系统组成部分的窗口管理器本身的复杂性提供帮助。尽管X.Org本身就意味着1300万行的代码。
越小就意味着越安全,来自suckless.org卓越的程序设计方法已经充分地证明了这一点,下面就是具体的内容:
复杂的代码不仅是软件臃肿的根源,还会导致软件非常难于使用,而且可能导致软件功能与设计要求不符。代码越来越复杂,会导致宝贵资源被无休止地耗费,软件性能逐步下降甚至最终崩溃,漏洞的出现成为司空见惯的事情,并且丧失了解决问题的最佳方式。这种情况下,唯一的解决办法就是取消整个项目并且从零开始重新设计。
这种情况经常在象微软Windows操作系统等软件项目中出现。Unix和Linux操作系统的用户,特别是认为击败微软Windows操作系统解决问题的唯一途径就是将所有解决方法加入代码库中的人也开始陷入了这种情况。从最新操作系统Windows 7项目的早期报告中,我们似乎可以发现,微软开始在一定程度上认识到这个问题。我们可以很容易的理解为什么微软可能会抵制这种剧烈的手段:毕竟完全重写可以让你不会再犯曾经发生过的错误,如果没有再犯类似的错误而对象微软Windows操作系统这样的项目进行了完整的重新开发,所有的向后兼容性都被破坏了,一些事情将被终结。如果你是完全诚实的话,甚至不能将这个项目称做“Windows操作系统”。ZDNet安全频道原创翻译 转载请注明作者以及出处
有人提出,对于X Window系统来说应该是和微软Windows操作系统得到相同的对待的时间了。但实际上,即使是恩诺·博兰在公共场合中对X Window系统的非unix设计的抱怨中,我也没有发现任何对Unix操作系统的窗口系统框架进行完全重新开发并更换的明确要求。但,从长远来看,如果我们希望大幅度提高类Unix系统桌面的平均安全性的话,这可能正是我们所需要的。ZDNet安全频道原创翻译 转载请注明作者以及出处
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者