1.1.2 基础科学
当提到软件时,人人都相信下面的这句咒语:“代码行越多,缺陷就越多”,但是直到现在,人们还只是凭直觉来理解它与安全之间的联系。感谢安全领域的天才Dan Geer,我们现在已经有一些支持这种说法的真实数字。Geer不懈地探求在计算机安全研究中引入科学分析的方法,在此过程中他广泛地发表自己对测量和衡量方法的意见。在那篇现在闻名遐迩的关于单一文化的论文中,Geer和其他的几位作者谴责了由于几乎完全依赖于缺陷极多的Microsoft 操作系统(参见这篇备受称赞的论文“CyberInsecurity: The Cost of Monopoly”[Geer等,2003])而导致的(国家的)安全风险。这个麻烦导致Geer从@stake被解雇,但也因此引起了他对安全缺陷和人们所创建的大量的软件的兴趣。这样就出现了一个重要的问题:存在缺陷的代码越多,在实际中导致的安全问题是否就越多呢?如果我们仔细研究数据,能够得到什么样的预测能力呢?
Geer与我之间进行过一次长谈,这次交谈在一定程度上促使了Geer进行一些与CERT弱点数量、主机数量和代码行有关的研究,他曾经多次谈到过这方面的工作。在耶鲁大学法学院(Yale Law School)所做的一次讲演中 , Geer提出了这些要素之间的一些关联性,值得在此转述一下。如果从基于CERT的数据和图1-2说明的代码行数据着手,就能规范这些曲线。
Geer把“机会”(opportunity)描述为主机数量(从Internet协会公开发表的数据中收集得到)与弱点数量(如图1-1所示)的规范乘积normalizedproduct,参见图1-3。其中的一个疑问是,在以这种形式来理解的系统中是否存在“未被利用的机会”。通过对实际的事件曲线和机会的比较,Geer认为存在这样的机会(这里没有显示)。简单地说,实际出现的事件比可能出现的要少。Geer认为,这表明累积的问题在不断增加。
通过用其自身的中值来规范化图1-2中的代码行曲线,然后对图1-3中的数据和关于特殊事件的数据(也来自CERT)进行相同的规范化,Geer就能将这三条曲线重叠在一起来分析它们之间的相关性(图1-4)。当代码行数据曲线向右平移两年时,这些曲线拟合得最好,这种扩散延迟可以得到很好的解释。其原因是,新的操作系统版本并非以大批量的统一替换的方式一下子投入到实用中,而是稳定地逐步扩散到实际使用的操作系统用户中。两年的扩散延迟似乎是合乎逻辑的。
图1-3 公开的漏洞(或者称为“机会”)的总数,等于主机
数量与弱点数量的规范乘积。(仿制Geer的图)
图1-4 百万行代码、弱点和事件数据之间关系的规整化版本。既然已经将这些曲
线放在一起,我们就能开始计算用于相关分析和预测的曲线。(仿制Geer的图)
下一步稍微复杂一点,需要计算移动平均数。第一条代码量曲线,Geer把它叫做MLOCs3(经过平滑处理的百万行代码),是对代码量三年移动平均值的计算而产生的。第二条这样的曲线,被称为MLOCs3^2+1,是代码量的三年移动平均值的平方向右平移一年。这里使用平方运算的依据来源于普遍承认的经验规则,即程序的复杂性与代码行数的平方成正比。得到了结果曲线(如图1-5所示)后,Geer指出:
软件缺陷是质量缺陷的一个子集,而文献上说质量缺陷是关于代码复杂性的函数,代码复杂性本身又与代码量的平方成正比。同样地,通过演绎推理可知,软件的平均复杂性应该是攻击能力的一个预测因子。将它向右移动一年是为了给攻击者留出一定的时间用以获取不断增长的代码库复杂性的知识和技术。这并不是一种已证实的因果关系——只是一种探索性的数据分析 。 
图1-5 计算两条代码量曲线(MLOCs3和MLOCs3^2+1,它们的定义
参见上述文字说明),得到具备预测能力的曲线。(仿制Geer的图)
Geer的分析说明,代码行数的增加与安全问题的增加之间存在联系——这种直觉观点实际上是符合逻辑的。
将这个观点归纳为一句话——更多的代码,会导致更多的缺陷,因而会导致更多的安全问题。
| 回书目 上一节 下一节 |