NEUZZ: Efficient Fuzzing with Neural Program Smoothing

Abstract

Fuzzing已经成为发现软件漏洞的事实上的标准技术。然而,即使是最先进的模糊器也不能很有效地找到难以触发的软件错误。最流行的模糊器使用进化指导来生成可以触发不同错误的输入。这种进化算法虽然快速且易于实现,但常常陷入无效的随机突变序列中。梯度引导优化是进化指导的有前途的替代方案。梯度引导技术已经被证明通过有效利用基础函数的梯度或高阶导数来解决机器学习等领域中的高维结构优化问题,从而显着优于进化算法。然而,梯度引导方法不能直接应用于模糊测试,因为真实世界的程序行为包含许多不连续性,平台和脊,其中基于梯度的方法经常被卡住。我们观察到这个问题可以通过创建一个近似于目标程序的离散分支行为的平滑代理函数来解决。在本文中,我们提出了一种新的程序平滑技术,使用替代神经网络模型,可以逐步学习复杂的,真实世界的程序的分支行为的平滑近似。我们进一步证明,这种神经网络模型可以与梯度引导输入生成方案一起使用,以显着提高模糊测试过程的效率。我们的广泛评估表明,NEUZZ在发现新漏洞和实现更高边缘覆盖率方面,在10个流行的真实世界节目中明显优于10个最先进的灰盒模糊器。 NEUZZ发现31个先前未知的错误(包括两个CVE),其他模糊测试器在10个真实世界的程序中找不到,并且比24小时运行的所有测试的灰盒模糊器实现了3倍的边缘覆盖。此外,NEUZZ在LAVA-M和DARPA CGC bug数据集上也优于现有的模糊器。

阅读更多

HVLearn: Automated Black-box Analysis of Hostname Verification in SSL/TLS Implementations

Abstract

SSL / TLS是用于保护网络通信的最常用的协议系列。 SSL / TLS的安全保证严重依赖于在SSL / TLS协议的握手阶段期间提供的X.509服务器证书的正确验证。主机名验证是证书验证过程的关键组件,它通过检查服务器的主机名是否与X.509证书中存在的任何名称相匹配来验证远程服务器的标识。主机名验证是一个非常复杂的过程,因为存在许多功能和角落情况,例如通配符,IP地址,国际域名等。因此,测试主机名验证实现是一项具有挑战性的任务。在本文中,我们介绍了HVLearn,一种用于分析SSL / TLS主机名验证实现的新型黑盒测试框架,它基于自动机学习算法。 HVLearn使用许多证书模板,即具有设置为特定模式的公用名(CN)的证书,以便测试来自相应规范的不同规则。对于每个证书模板,HVLearn使用自动机学习算法来推断确定性有限自动机(DFA),该自适应有限自动机描述与给定证书的CN匹配的所有主机名的集合。一旦为证书模板推断出模型,HVLearn就会通过查找来自其他实现的推断模型的差异或通过检查从规范派生的基于正则表达式的规则来检查模型中的错误。我们的方法背后的关键见解是,给定证书模板的可接受主机名形成了常规语言。因此,我们可以利用自动机学习技术来有效地推断接受相应常规语言的DFA模型。我们使用HVLearn来分析许多流行的SSL / TLS库中的主机名验证实现,以及用C,Python和Java等多种语言编写的应用程序。我们证明HVLearn可以比现有的黑/灰盒模糊技术实现更高的代码覆盖率11.21%。通过比较HVLearn推断的DFA模型,我们在测试的主机名验证实现中发现了8个唯一违反RFC规范的行为。其中一些违规行为至关重要,可能会使受影响的实施容易受到主动的中间人攻击。

阅读更多

A Reinforcement Learning Based Approach to Automated Testing of Android Applications

Abstract

近年来,研究人员积极提出了自动化Android应用程序测试的工具。然而,他们的技术仍然遇到重大困难。首先是实现高代码覆盖率的困难,因为应用程序通常有大量的业务和转换的可能的组合,这使得在测试大型系统场景时会非常的耗时和无效。其次是实现广泛的应用功能的困难,因为某些功能只能通过特定的事件序列来实现。因此,在随机测试中,它们的测试频率较低。面对这些问题,我们应用称为Q学习的强化学习算法,以利用随机和基于模型的测试。 Q-learning代理与Android应用程序交互,逐步构建行为模型并基于模型生成测试用例。代理以最佳方式探索应用程序,尽可能多地显示应用程序的功能。与随机和基于模型的测试相比,使用Q学习的探索提高了代码覆盖率,并且能够检测被测应用程序中的故障

阅读更多

Skyfire: Data-Driven Seed Generation for Fuzzing

Abstract

对于输入格式是高度结构化文件的程序来说,其处理流程一般是:语法解析–语义检查–程序执行。程序深层次的漏洞一般隐藏在程序执行阶段,而对于自动化的模糊测试(Fuzzing)来说很难触发该类漏洞。该论文提出了一种数据驱动的种子生成方法,叫做Skyfire。Skyfire通过从大量的已知样本中学习而生成覆盖良好的种子作为Fuzzing的输入对处理高度结构化输入的程序进行测试。Skyfire接收输入样本集合和文法,通过自动化学习PCSG(Probabilistic context-sensitive grammar,一种带概率的上下文有关文法,包含语义规则和语法特征),并利用其生成种子文件。本文利用收集的样本和Skyfire生成的种子作为AFL的seed对开源的XSLT、XML等引擎进行测试,证明skyfire生成的种子文件分布(提高了20%行覆 盖率和%15的函数覆盖率)和发现漏洞能力。同时也对闭源的IE11的JavaScript引擎测试。其发现了19个新的内存破坏型bug(其中16个新的漏洞)和32个拒绝服务bug。

阅读更多

Learn to Accelerate Identifying New Test Cases in Fuzzing

Abstract

模糊测试是一种有效的测试技术,可以在bug转变为漏洞之前及早发现漏洞。如果没有复杂的程序分析,它可以通过稍微改变输入并发现程序中的潜在错误来生成有趣的测试用例。然而,以前的模糊器要么无法探索更深层次的错误,要么其中一些受到严重时间复杂性的影响,因此我们不能在实际应用中依赖它们。在本文中,我们通过结合实用和轻量级的深度学习方法,专注于减少模糊测试的时间复杂度,从根本上加速识别新测试用例和发现错误的过程。为了实现预期的模糊覆盖,我们通过使用深度学习方法扩展最先进的模糊AFL来实现我们的方法,并在几个广泛使用的开源可执行程序上进行评估。在所有这些计划中,我们可以看到我们方法的效率,并产生明显更好的结果。

阅读更多

Improving Fitness Function for Language Fuzzing with PCFG Model

Abstract

在本文中,我们建议使用机器学习技术来模拟语言解释器的错误模糊,并开发基于遗传编程的语言模糊测试的适应度函数。基本思想是错误触发脚本通常包含不常见的用法,这些用法在日常开发中不太可能被程序员使用。我们通过使用概率上下文无关语法模型和马尔可夫模型来计算脚本的概率,以便错误触发脚本将获得更低的概率和更高的适应值,从而捕获不常见。我们选择ROC(接收器操作特性)曲线来评估适应度函数在从正常脚本中识别错误触发脚本时的性能。我们使用来自Github的大量JavaScript脚本和来自SpiderMonkey的bugzilla的错误报告的POC测试用例进行评估。实验中的ROC曲线表明,我们的方法可以提供更好的能力来排序前K个元素中的错误触发脚本。

阅读更多

ExploitMeter: Combining Fuzzing with Machine Learning for Automated Evaluation of Software Exploitability

Abstract

可利用的软件漏洞对其信息安全和隐私构成严重威胁。尽管已经投入大量精力来提高软件安全性,但量化软件可利用性的研究仍处于起步阶段。在这项工作中,我们提出了ExploitMeter,这是一个基于模糊的软件可利用性量化框架,可以促进软件保障和网络保险的决策。 ExploitMeter设计为动态,高效和严谨,它以贝叶斯方式集成了基于机器学习的预测和动态模糊测试。使用100个Linux应用程序,我们进行了大量实验,以评估ExploitMeter在动态环境中的性能。

阅读更多

Experimenting machine learning techniques to predict vulnerabilities

Abstract

软件度量标准可用作软件漏洞存在的指示器。这些指标已用于机器学习,以预测容易包含漏洞的源代码。虽然无法找到缺陷的确切位置,但模型可以显示在检查和测试期间哪些组件需要更多关注。每种新技术都使用他自己的评估数据集,该数据集多次具有有限的大小和代表性。在此体验报告中,我们使用大型且具有代表性的数据集来评估几种最先进的漏洞预测技术。该数据集是使用来自五个广泛使用的开源项目的2186个漏洞的信息构建的。结果表明,数据集可用于区分哪种是最佳技术。还表明,一些技术可以预测几乎所有数据集中存在的漏洞,尽管精度非常低。最后,准确性,精确度和召回率并不是表征这种工具有效性的最有效方法。
关键词 - 机器学习,软件度量,软件安全,漏洞

阅读更多

如何做科研

内容主要分为四个部分:1.科学研究的内涵与外延。2.科学研究的方法与手段。3.博士生如何开展科学工作。4.其它。该内容为上课中从王俊峰教授PPT中记录而来。主要介绍了博士生在读博期间如何做科研的相关问题。

阅读更多

A Review of Machine Learning in Software Vulnerability Research

Abstract

搜索和识别计算机软件中的漏洞具有悠久而丰富的历史,可用于预防或恶意目的。在本文中,我们研究了机器学习(ML)技术在软件漏洞研究(SVR)中的应用,讨论了以前和当前的工作,以说明学术界和工业界如何利用ML。我们发现,主要关注的不仅仅是发现新方法,而是通过简化和自动化流程来帮助SVR从业者。考虑到已经证明的各种应用,我们相信ML将在未来继续为SVR提供帮助,因为探索了新的使用领域,并且可以使用改进的算法来增强现有功能。

阅读更多