
上QQ阅读APP看书,第一时间看更新
1.2.2 安全缺陷
软件工程很早就关注软件瑕疵(software defect)的消除问题。软件瑕疵是人类思维错误(包括疏忽)被编码到软件中的结果。功能缺陷可能在软件研发周期中的任何时刻产生。例如,一个已部署的产品中的瑕疵可能源于讹传的需求或对需求的误解。
安全缺陷(security flaw)
指会导致潜在安全风险的软件瑕疵。
并非所有软件瑕疵都有安全风险,只有那些确实有安全风险的软件瑕疵才称为安全缺陷。如果我们认同安全缺陷就是软件瑕疵的说法,那我们也必须认同只要消除软件中的所有瑕疵,就可以消除所有安全缺陷。这个前提是软件工程和安全程序设计之间关系的基础。伴随着软件质量(可以用每千行代码中所包含的瑕疵的数量进行度量)的提高,软件的安全性也随之提高。因此,很多设计用来消除软件瑕疵的工具、技术和过程也可以用来消除安全缺陷。
尽管如此,仍然有很多安全缺陷得不到检测,因为传统的软件开发方法很少假定攻击者的存在。举个例子,软件测试通常仅验证对于合理范围内的用户输入应用程序是否有正确的行为。遗憾的是,攻击者从来不按常理出牌,他们通常会花费大量的时间寻找能够危害系统的输入条件。要想按照漏洞可能导致的风险对安全缺陷进行评估并将其按优先级排序,就必须对现有的工具和方法进行扩展或补充,以假设攻击者的存在。