科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道应用安全复杂的危害:代码越多漏洞越多

复杂的危害:代码越多漏洞越多

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在我们试图了解当前软件安全方面面临的悲惨状况时,传统利用代码行数来判断程序员效率的方法可能会提供帮助。

作者:ZDNet安全频道 来源:ZDNet安全频道【原创】 2010年4月21日

关键字: 代码 微软 漏洞

  • 评论
  • 分享微博
  • 分享邮件
ZDNet安全频道原创翻译 转载请注明作者以及出处

  在我们试图了解当前软件安全方面面临的悲惨状况时,传统利用代码行数来判断程序员效率的方法可能会提供帮助。

  -------------------------------------------------------------------------------------------------------

  安东尼·德·圣-埃克苏佩里曾经说过,“完美的实现,不在于有更多的可以补充,而在于没有任何可以去除的部分。”他生活在1900年至1944年,是“软件工程师”这个令人注目的职位出现以前的时代。除了作为作家,出版了包括《小王子》在内一系列鼓舞人心的作品之外,他也是一名飞行员和工程师,这可能有助于解释他是怎样说出这条与今天的软件开发世界如此密切相关的永恒箴言的。

  艾兹格·W·迪杰斯特拉在这方面的观点更明确专业:“对于今天的情况,我的观点是,如果我们希望计算代码行数的话,就不应该将它们看做‘开发出的行数’,而应该看做‘消耗的行数’:目前的传统做法是错误的,就象在帐簿的错误位置进行分类一样。”

  最近对源代码行(SLOC)进行的审查和预测表明,对于最新的软件来说,即使非常注意安全方面细节的源代码,每一千行出现一个漏洞也是很保守的估计。大部分软件在开发的时间都不能作到这么完善,我相信自己的错误率都比这样保守的估计更高。

  开发补丁代码的目的是修复漏洞,帮助减少系统中漏洞的数量,但对于大多数系统来说,每年都添加更多的代码是为了增加新功能,而不是消除漏洞。消除漏洞会帮助人们保持对软件当前版本的满意程度,而增加新功能可以帮助新版本的销售。更糟糕的情况是,修复补丁中也不能幸免于存在错误。一些预测显示,百分之十到十五的安全补丁实际上是引入了新的漏洞。这种情况实在是太可怕了。

  如果你曾经想知道每年会在软件中发现多少错误的话,不用再想了。2003年,计算机应急响应小组收到了超过5000份关于新漏洞的报告,而且在此后的每年这一数字都呈现出增长的势头。我们每年都能找到这么多漏洞的原因很简单:全球最流行软件中的一部分是非常大的。

  并且情况变得越来越坏了。软件不仅仅呈现变得非常非常大的趋势,而且扩大的速度也越来越惊人。从表一中,我们就可以看出采用了NT内核的微软Windows操作系统多年来的增长速度:

复杂的危害:代码越多漏洞越多

  如果我们对数据仔细研究的话,可以发现下面的信息:

  Ø 微软Windows服务器版本是一个包含了五千万行代码的庞然大物。五千万行代码意味着你从一开始数的话,即使每秒数一行(实际上这是不太可能的,你看47777777读起来要花费多长时间),不吃不喝不睡觉,甚至不深呼吸,也需要超过一年半的时间。并且,即使对NT 3.1的五百万行代码这样做的话,也要花费四个月的时间。

  Ø 根据每千行代码出现一处漏洞这样非常保守的估计,NT 3.1中存在的安全漏洞也有五千处之多,更不用说Server 2003的漏洞数量将有十倍之多。

  Ø 使用NT内核的微软Windows操作系统正在以惊人的速度增长。对表中的增长速度进行平均,我们会发现,每年的增长速度超过了450万,更精确的数字是每年增加4550000行代码。

  Ø 即使按照我给出非常保守的每千行代码产生一处漏洞的预测,所有这些额外增加的代码也扩大了基于NT内核微软Windows系统的漏洞数量。这意味着微软Windows正在以每年4550个的速度增加新的漏洞。换句话说,仅仅微软Windows系统增加的漏洞数量,已经和CERT在2003年收到关于所有软件漏洞的报告数量基本相同了。实际上,考虑到微软Windows系统在CERT漏洞总数据库占据的部分相当小,这样的后果是令人沮丧的。在CERT数据库中以“Windows”为关键字搜索2008年的情况,得到的结果是65,这就意味着,以2008年为代表的话,它们被发现的速度增加了65倍。

  任何时间都可以在软件中发现漏洞也似乎不再是奇怪的事情了。现在让人觉得吃惊的是没有经常发现漏洞。

  如果你希望开发安全的软件,就应该关注安东尼·德·圣-埃克苏佩里和艾兹格·W.迪杰斯特拉等人提出的建议。在所有其它条件相同的时间,如果能找到一种方法,在不影响软件功能的前提下,降低软件代码行数的话,就可以大大提高软件的安全性。由于使用高级语言在同样的代码行中可以完成更多的工作,所以结论可能是用一种高级语言完成手头的工作是不错的选择。

  有时,将更多的代码添加到应用程序是不可避免的。但应该尽量保持在最低限度。当涉及到应用安全性时,复杂就意味着完蛋。

  注释:这些数字来源于维基百科中关于代码行数的文章。在某些方面,维基百科的数字更模糊。实际上,在这里使用的数字更具体,而不是更精确,目的是为了方便进行估计计算。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章