随着现代软件工业的发展,软件规模不断扩大,软件内部的逻辑也变得异常复杂。为了保证软件的质量,测试环节在软件生命周期中所占的地位已经得到了普遍重视。在一些著名的大型软件公司中,测试环节(QA)所耗费的资源甚至已经超过了开发。即便如此,不论从理论上还是工程上都没有任何人敢声称能够彻底消灭软件中所有的逻辑缺陷——bug。
    在形形×××的软件逻辑缺陷中,有一部分能够引起非常严重的后果。例如,网站系统中,如果在用户输入数据的限制方面存在缺陷,将会使服务器变成SQL注入***和XSS(Cross Site Script,跨站脚本)***的目标;服务器软件在解析协议时,如果遇到出乎预料的数据格式而没有进行恰当的异常处理,那么就很可能会给***者提供远程控制服务器的机会。
    我们通常把这类能够引起软件做一些“超出设计范围的事情”的bug称为漏洞(vulnerability)。
    (1)功能性逻辑缺陷(bug):影响软件的正常功能,例如,执行结果错误、图标显示错误等。
    (2)安全性逻辑缺陷(漏洞):通常情况下不影响软件的正常功能,但被***者成功利用后,有可能引起软件去执行额外的恶意代码。常见的漏洞包括软件中的缓冲区溢出漏洞、网站中的跨站脚本漏洞(XSS)、SQL注入漏洞等。

 

本文节选自电子工业出版社2008年4月出版的
《0day安全:软件漏洞分析技术》一书。