论文部分内容阅读
当前,软件缺陷问题已经对我们的医疗、能源、国防、金融和其他等关键基础设施系统产生了重大威胁。软件中的缺陷源于多种原因,从代码中的人为错误、框架和操作系统中的设计、实现错误都有可能造成软件缺陷。此外,软件复杂性、不断变化的需求、通信方面的错误、请求不可获取及时间开销也被认为是导致软件缺陷的一些原因。例如,由于需要大量的假设性条件,软件项目调度就显得较为困难,容易导致缺陷的出现。很多软件缺陷往往会在最后软件上线之前才被发现,为了解决这些问题,缺陷检测已经成为软件质量维护的一个必经步骤,并且缺陷预测已经被证明可以通过发现软件系统中以前未知的缺陷来提高软件的可靠性。以前的研究已经提出了各种方法和技术来改进缺陷检测,一个最广泛和最有效的方法缺陷检测的方法是使用自动化静态分析技术(ASATs,Automated Static Analysis Techniques)。ASATs通过在不执行应用程序的情况下检测潜在的缺陷来帮助提高软件的安全性。同样,一些实证研究已经证明了使用自动化静态分析工具和技术来检测软件系统中的安全缺陷具有较好的效果。这些研究通常涉及对Java源代码文件的分析来检测和解析。为了提高漏洞检测和web应用程序的总体质量,学者们已经开发和研究了多种web漏洞扫描器(WVSs,Web Vulnerability Scanners),包括web应用程序攻击和审计框架、OWASP zed攻击代理、Skipfish,Arachni,Vega、Staller和IronWASP。其中WVS主要是通过浏览网页而不执行程序来执行渗透测试。尽管这些研究已经很大程度上对缺陷检测进行了提升,但是在Java软件中如何选择最合适的缺陷检测工具仍然是一个值得研究的领域。此外,这些研究通常把大量的时间花在分析工具的有效性及使用基于C/C++源代码的开源工具等方面,研究人员发现关于网络漏洞扫描器研究依然较少。同时,很少有研究去检验商业和开源扫描仪的有效性。为了解决上述问题,本文致力于研究商业和开源web漏洞扫描器的有效性。在本文的方法中,我们首先使用web应用程序安全联盟(Web Application Security Consortium)中确定应用最广泛的开源和商用web漏洞扫描器,然后扫描两个基准web应用程序,即Web Goat和DVWA(Damn Vulnerable Web Application),随后我们通过配置浏览器和选定的漏洞扫描器进行漏洞检测。此外,本文还提出了一个自动评估开源Web扫描程序漏洞严重性的框架,我们使用一个名为Zed-Attach-Proxy的Web漏洞检测程序来检测Web应用程序中的漏洞。我们采用排在前十的OWASP(Open Web Application Security Project)2017和优先排序方案作为严重性度量和排名的基准技术。关于自动化静态分析工具,我们注意到在Java软件中选择最适合的缺陷检测工具仍然是一个研究相对较少的领域。因此,本文尝试使用Juliet测试套件(testsuitev1.2)对应用最广泛的ASAT,即Findbug、PMD、YASCA、LAPSE+、JLint、Bandera、ESC/Java和Java-Pathfinder进行实证评估。此外,该研究还评估了这八种工具的检测能力,并采用了精确性、召回率、Youden指数和OWASP网络基准评估等稳健的性能指标。本文的主要贡献如下:(1)提出了一个有效的策略来评估和比较web漏洞扫描器,以检测web应用程序中的安全漏洞。在这种方法中,我们研究了一种新的方法来比较八个web漏洞扫描程序的效率,即Acunetix、HP Web Inspect、IBM App Scan、OWASP ZAP、Skip fish、Arachni、Vega和Iron WASP。我们通过多个评估指标来评估这些工具的性能,例如精度、召回率、Youden索引、OWASP web基准评估(WBE)和web应用程序安全扫描程序评估标准(WASSEC,Web Application Security Scanner Evaluation Criteria)。实验结果表明,商用扫描器能够有效地检测安全漏洞的同时,一些开源扫描器(如ZAP和Skipfish)同样能有效地检测安全漏洞。(2)提出了一种帮助安全专家选取最适合Java代码文件的缺陷检测工具方法,并使用开源工具来检查java框架的有效性。在这种方法中,我们使用Juliet测试套件(testsuitev1.2)对八种广泛使用的ASAT进行了实证评估,包括Findbug、PMD、YASCA、LAPSE+、JLint、Bandera、ESC/Java和Java Pathfinder。我们还通过使用精确度、召回率、Youden索引和OWASP Web基准评估(WBE)等常用的性能度量来评估这八种工具的检测性能。实验结果表明,基于所研究的数据集,该方法获得了83%~90.7%的精度值。具体来说,Java Pathfinder获得了90.7%的最佳精度分数,其次是YASCA和Bande,精度分数分别为88.7%和83%。同时,Bandera、ESC/Java和Java Pathfinder获得了0.8的Youden索引,这些分数表明了这些工具在检测Java源代码中的安全缺陷方面的有效性。(3)此外,提出了一种快速缺陷检测算法(FBDA,Fast Bug Detection Algorithm)来提高缺陷检测的效率。本研究的重点是在不影响准确率的前提下,减少待测代码和处理时间。因此,我们使用Juliet测试套件的指定子集来测试我们提出的框架的有效性,结果表明,我们的方法在检测性能上提升了66%,比现有的静态分析工具检测缺陷性能更好。此外,实验分析进一步表明,该框架的假阳性率为18.5%,远低于ASATs报告的假阳性率。(4)最后,提出了一个用以评估开源Web扫描器中漏洞严重程度的自动评估框架。这个框架使用了一个名为Zed-Attach-Proxy(ZAP)的Web漏洞检测工具,来检测易受攻击的Web应用(DVWA)中的缺陷。我们使用排在前十的OWASP和2017优先排序方案作为严重性度量和排名的基准。结果显示,Web应用程序中最常见的漏洞(如SQL注入和跨站点脚本)为中重度,严重性得分为8。综上所述,本文为基于静态分析和渗透测试的软件漏洞检测提供了理论基础。