论文目录
2019年
综述
Fuzzing-Art-Science-and-Engineering
Abstract 在当今可用的众多软件漏洞发现技术中,模糊测试由于其概念简单,部署的低屏障以及发现现实世界软件漏洞的大量经验证据而一直非常受欢迎。虽然近年来研究人员和从业人员都为改进模糊测试投入了大量不同的努力,但这项工作的激增也使得难以获得全面和一致的模糊测试观点。为了帮助保存并使大量的模糊测量文献保持连贯性,本文提出了一种统一的,通用的模糊测试模型以及当前模糊文献的分类。我们通过调查相关文献和艺术,科学和工程方面的创新,有条不紊地探索模型模糊器的每个阶段的设计决策,使现代模糊器有效。
研究性工作
SoK-Security-Evaluation-of-Home-Based-IoT-Deployments-S&P
Abstract 智能家居在安全方面一直表现得不尽人意,究其原因,在于IoT系统相对于传统的嵌入式系统,还引入了智能终端和网络,这就导致了其本身暴露了更多的攻击面。本文通过总结大量论文来帮助研究人员和从业者更好的理解针对智能家居的攻击技术,缓解措施,以及利益相关者应该如何解决这些问题。最后作者利用这些方法评估了45款智能家居设备,并将实验数据公布在https://yourthings.info%E3%80%82
NEUZZ: Efficient Fuzzing with Neural Program Smoothing-S&P
Abstract Fuzzing已经成为发现软件漏洞的事实上的标准技术。然而,即使是最先进的模糊器也不能很有效地找到难以触发的软件错误。最流行的模糊器使用进化指导来生成可以触发不同错误的输入。这种进化算法虽然快速且易于实现,但常常陷入无效的随机突变序列中。梯度引导优化是进化指导的有前途的替代方案。梯度引导技术已经被证明通过有效利用基础函数的梯度或高阶导数来解决机器学习等领域中的高维结构优化问题,从而显着优于进化算法。然而,梯度引导方法不能直接应用于模糊测试,因为真实世界的程序行为包含许多不连续性,平台和脊,其中基于梯度的方法经常被卡住。我们观察到这个问题可以通过创建一个近似于目标程序的离散分支行为的平滑代理函数来解决。在本文中,我们提出了一种新的程序平滑技术,使用替代神经网络模型,可以逐步学习复杂的,真实世界的程序的分支行为的平滑近似。我们进一步证明,这种神经网络模型可以与梯度引导输入生成方案一起使用,以显着提高模糊测试过程的效率。我们的广泛评估表明,NEUZZ在发现新漏洞和实现更高边缘覆盖率方面,在10个流行的真实世界节目中明显优于10个最先进的灰盒模糊器。 NEUZZ发现31个先前未知的错误(包括两个CVE),其他模糊测试器在10个真实世界的程序中找不到,并且比24小时运行的所有测试的灰盒模糊器实现了3倍的边缘覆盖。此外,NEUZZ在LAVA-M和DARPA CGC bug数据集上也优于现有的模糊器。
2018年
综述
From automation to intelligence Survey of research on vulnerability discovery techniques
摘要 近年来,随着软件规模和复杂度的日益增加,软件漏洞挖掘技术正逐渐向高度自动化和智能化演变,该文从传统漏洞挖掘技术和基于学习的智能化漏洞挖掘技术两方面深入调研和分析了相关的研究进展。首先,从静态和动态挖掘技术2方面详细介绍了传统漏洞挖掘技术的研究现状,涉及的技术包括模型检测、二进制比对、模糊测试、符号执行以及漏洞可利用性分析等,并分析了各项技术存在的问题,提出当前的研究难点是实现漏洞挖掘全自动化。然后,介绍了机器学习和深度学习技术在漏洞挖掘领域的应用,具体应用场景包括二进制函数识别、函数相似性检测、测试输入生成、路径约束求解等,并提出了其存在的机器学习算法不够健壮安全、算法选择依靠经验、数据样本不足、特征选择依赖专家知识等问题。最后,对未来研究工作进行了展望,提出应该围绕提高漏洞挖掘的精度和效率、提高自动化和智能化的程度这2方面展开工作。
研究性工作
Check-It-Again-Detecting-Lacking-Recheck-Bugs-in-OS-Kernels-CCS
Abstract 论文中,作者主要介绍分析操作系统内核中的LRC(lacking-recheck)类型bug。并介绍了自己设计的一个静态分析系统LRSan(在Linux上实现),用于检测操作系统内核中的LRC bug。本文的主要贡献: 1. 定义了LRC bugs,并第一次展示了关于LRC bug的深入研究。 2. 实现一个自动化的LRC bug检测系统(LRSan),基于LLVM,使用在Linux内核上,可以检测内核中的LRC bug。LRSan运用了很多新的程序静态分析技术。结果显示LRSan在Linux内核发现了2808个LRC case,检测耗时为4小时。并且作者会将它开源。 3. 识别Security check(SC)和相关Critical variable(CV)的方法。 4. 发现了Linux内核中的19个新的LRC bug。
Automated-Detection-Exploitation-and-Elimination-of-Double-Fetch-Bugs-Using-Modern-CPU-Features
Abstract Double-fetch bugs 是一种特殊的条件竞争,在高权限线程的time-of-check和time-of-use之间,低权限线程能够修改共享的内存,导致高权限线程访问的内存产生不一致。本文作者提出了一种检测,利用并消除double-fetch bugs的技术DECAF和Dropit。总体来说,贡献如下:1. 把cache attack与kernel fuzzing结合起来。2. 首个自动化的挖掘double-fetch bugs的方法。3. 利用的成功率高达97%。4.利用Hardware Transactional Memory的特性,消除double-fetch bugs。5.方法对fuzz TEE也有效。
Towards-Paving-the-Way-for-Large-Scale-Windows-Malware-Analysis-Generic-Binary-Unpacking-With-Orders-of-Magnitude-Performance-Boost-CCS
Abstract windows的软件脱壳本来已经在多年前已经被讨论得非常多了,目前安全学术会议上关于脱壳的论文非常少,然而这篇关于脱壳的论文还能在2018年被CCS所录取,足见他的方法之高效。此前关于脱壳的方法大多是跟踪脱壳时期的内存代码写入执行的变化,从而跟踪被加密代码的解密流程从而追溯到OEP。这也是对于分析脱壳的一个最为直观的方法,在这篇论文里作者提出来通过跟踪IAT(函数导入表)被恢复和引用的情况来追溯OEP,并且达到很理想的效果。作者将这款工具称为BinUnpack。
Using-Logic-Programming-to-Recover-C-Classes-and-Methods-From-Compiled-Executables-CCS
Abstract 随着计算机硬件的发展,计算机软件也变得越来越庞大、越来越复杂。而为了开发这些复杂的计算机软件,软件工程师们逐渐把方向转向了面向对象 OO(Object Oriented)的编程语言,例如 C++ 等高级开发语言。这些高级的编程语言,对于开发庞大、复杂的应用程序,它可以提供一种高级抽象的框架(Natural Framework),使得面向对象的编程语言更加适用于构造复杂的数据结构 — Class。类可以把相关的数据成员和一组对数据成员进行操作的方法绑定在一起,这样的绑定方式极大的方便了 C++ 代码的维护与管理,使得开发者更容易、更高效地开发复杂的应用程序。虽然类可以给开发者带来极大的便利,但是,万事万物总有两面性,类也一样,它给开发者带来便利的同时,也给软件逆向分析工程师带来了不便,使得分析师在分析 C++ 开发的程序的难度有所提高,特别是在分析恶意程序的时候,分析 C++ 开发的恶意程序变成了一项更高难度的挑战。因此,如何从恶意程序中恢复出代码的高级抽象特性(例如类等),成为了一项值得深究的工作。
Enforcing-Unique-Code-Target-Property-for-Control-Flow-Integrity-CCS
Abstract 在这篇文章中,作者主要介绍了一种准确率更高的确保CFI的应用方式:Unique Code Target(UCT)。对于每次间接跳转(ICT),作者们设计了一个叫μUCT的系统来确保这一特性的实施。在编译时,μCFI就识别那些可能影响ICT的指令并让程序去记录一些必要的执行环境;在运行时,μCFI在另一个进程中监视程序的运行,并且在一些关键性的指令上使用内存安全地记录着地运行环境来做一些对点分析,判断这些指令的跳转是否符合预期。作者将μCFI这套系统布置到SPEC benchmark和2个服务器程序(nginx和vsftpd)上测试性能和overhead。同时它们还用它来测试了5个真实世界中的案例、1个COOP的poc进行攻击的案例。μCFI在这些测试上表现得都非常好,展现了100%的检测率和仅不到10%的overhead
Angora-Efficient-Fuzzing-by-Principled-Search-S&P
Abstract Fuzzing是一种用于查找软件错误的流行技术。然而,最先进的模糊器的性能还有很多不足之处。基于符号执行的模糊器产生高质量输入但运行缓慢,而基于随机变异的模糊器运行速度快但难以产生高质量输入。我们提出了一种新的基于突变的模糊器Angora,它的性能远远超过了最先进的模糊器。Angora的主要目标是通过解决路径约束来增加分支覆盖率而无需符号执行。为了有效地解决路径约束,我们引入了几个关键技术:可扩展的字节级污点跟踪,上下文敏感的分支计数,基于梯度下降的搜索和输入长度探索。在LAVA-M数据集上,Angora发现了几乎所有注入的错误,发现了比我们比较的任何其他模糊器更多的错误,并且发现错误是程序中第二好的模糊器的8倍。Angora还发现了LAVA作者注射但却无法触发的103个错误。我们还在八个流行的,成熟的开源程序上测试了Angora。Angora分别在file,jhead,nm,objdump和size中发现了6,52,29,40和48个新错误。我们测量了Angora的覆盖范围,并评估了其关键技术如何促成其令人印象深刻的性能。
NAR-Miner-Discovering-Negative-Association-Rules-from-Code-ESEC/FSE
Abstract 从基于数据挖掘技术的源代码推断编程规则已被证明对检测软件错误是有效的。现有研究侧重于以A⇒B的形式发现积极规则,表明当操作A出现时,操作B也应该在这里。不幸的是,负面规则(A⇒¬B),表明程序元素之间的相互抑制或冲突关系,没有得到应有的重视。事实上,违反这些负面规则也会导致严重的错误。在本文中,我们提出了一种名为NAR-Miner的新方法,可以从大规模系统中自动提取负关联编程规则,并检测它们的违规行为来发现bug。然而,挖掘负面规则面临着比挖掘正面规则更严重的规则爆炸问题。大多数获得的负面规则都是无趣的,并且可能导致不可接受的错误警报。为了解决这个问题,我们设计了一个语义约束的挖掘算法,将规则挖掘集中在具有强语义关系的元素上。此外,我们引入信息熵来排列候选负面规则并突出有趣的规则。因此,我们有效地缓解了规则爆炸问题。我们实现NAR-Miner并将其应用于Linux内核(v4.12-rc6)。实验表明,不感兴趣的规则大大减少,检测到的17个违规行为已被确认为真正的错误并被内核社区修补。我们还将NAR-Miner应用于PostgreSQL,OpenSSL和FFmpeg,并发现了六个真正的错误。
A Reinforcement Learning Based Approach to Automated Testing of Android Applications-A-TEST
Abstract 近年来,研究人员积极提出了自动化Android应用程序测试的工具。然而,他们的技术仍然遇到重大困难。首先是实现高代码覆盖率的困难,因为应用程序通常有大量的业务和转换的可能的组合,这使得在测试大型系统场景时会非常的耗时和无效。其次是实现广泛的应用功能的困难,因为某些功能只能通过特定的事件序列来实现。因此,在随机测试中,它们的测试频率较低。面对这些问题,我们应用称为Q学习的强化学习算法,以利用随机和基于模型的测试。 Q-learning代理与Android应用程序交互,逐步构建行为模型并基于模型生成测试用例。代理以最佳方式探索应用程序,尽可能多地显示应用程序的功能。与随机和基于模型的测试相比,使用Q学习的探索提高了代码覆盖率,并且能够检测被测应用程序中的故障 KEYWORDS:Android, Test Input Generation, Reinforcement Learning, Q-Learning
Improving Fitness Function for Language Fuzzing with PCFG Mode-COMPSACl
Abstract 在本文中,我们建议使用机器学习技术来模拟语言解释器的错误模糊,并开发基于遗传编程的语言模糊测试的适应度函数。基本思想是错误触发脚本通常包含不常见的用法,这些用法在日常开发中不太可能被程序员使用。我们通过使用概率上下文无关语法模型和马尔可夫模型来计算脚本的概率,以便错误触发脚本将获得更低的概率和更高的适应值,从而捕获不常见。我们选择ROC(接收器操作特性)曲线来评估适应度函数在从正常脚本中识别错误触发脚本时的性能。我们使用来自Github的大量JavaScript脚本和来自SpiderMonkey的bugzilla的错误报告的POC测试用例进行评估。实验中的ROC曲线表明,我们的方法可以提供更好的能力来排序前K个元素中的错误触发脚本。
2017年
综述
A Review of Machine Learning in Software Vulnerability Research-DST
Abstract 搜索和识别计算机软件中的漏洞具有悠久而丰富的历史,可用于预防或恶意目的。在本文中,我们研究了机器学习(ML)技术在软件漏洞研究(SVR)中的应用,讨论了以前和当前的工作,以说明学术界和工业界如何利用ML。我们发现,主要关注的不仅仅是发现新方法,而是通过简化和自动化流程来帮助SVR从业者。考虑到已经证明的各种应用,我们相信ML将在未来继续为SVR提供帮助,因为探索了新的使用领域,并且可以使用改进的算法来增强现有功能。
Sofware Vulnerability Analysis and Discovery Using Machine-Learning and Data-Mining Techniques: A Survey-ACM Comput. Surv
Abstract 软件安全漏洞是计算机安全领域的关键问题之一。由于其潜在的高严重性影响,在过去几十年中已经提出了许多不同的方法来减轻软件漏洞的损害。机器学习和数据挖掘技术也是解决该问题的众多方法之一。在本文中,我们对利用机器学习和数据挖掘技术的软件漏洞分析和发现的许多不同工作进行了广泛的回顾。我们回顾了这个领域中不同类别的工作,讨论了优点和缺点,并指出了挑战和一些未知的领域。
研究性工作
VUzzer-Application-aware-Evolutionary-Fuzzing-NDSS
Abstract Fuzzing是一种有效的软件测试技术,用于查找错误。考虑到实际应用程序的大小和复杂性,现代模糊器往往是可扩展的,但在探索执行更深层次的错误或者能够在应用程序中深入渗透但不具有可扩展性方面无效。在本文中,我们提出了一种应用程序感知的进化模糊测试策略,它不需要任何有关应用程序或输入格式的先验知识。为了最大化覆盖范围并探索更深入的路径,我们利用基于静态和动态分析的控制和数据流特征来推断应用程序的基本属性。与应用程序无关的方法相比,这可以更快地生成有趣的输入。我们在VUzzer中实现我们的模糊测试策略并在三个不同的数据集上进行评估:DARPA Grand Challenge二进制文件(CGC),一组实际应用程序(二进制输入解析器)和最近发布的LAVA数据集。在所有这些数据集中,通过快速查找几个现有和新的错误,VUzzer产生的结果明显优于最先进的模糊器。
Digtool-A-Virtualization-Based-Framework-for-Detecting-Kernel-Vulnerabilities-USENIX
Abstract 发现操作系统(OS)内核中的漏洞并对其进行修补对于操作系统安全至关重要。但是,缺乏有效的内核漏洞检测工具,尤其是对于Microsoft Windows等封闭源操作系统。在本文中,我们介绍了Digtool,一个有效的,仅二进制代码的内核漏洞检测框架。 Digtool构建于我们设计的虚拟化监视器之上,成功捕获内核执行的各种动态行为,例如内核对象分配,内核内存访问,线程调度和函数调用。通过这些行为,Digtool已经确定了45个零日漏洞,例如最近版本的Microsoft Windows的内核代码和设备驱动程序中的out--bounds访问,free-after-free和check-time-of-use-of-use ,包括Windows 7和Windows 10。
HVLearn: Automated Black-box Analysis of Hostname Verification in SSL/TLS Implementations-S&P
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规范的行为。其中一些违规行为至关重要,可能会使受影响的实施容易受到主动的中间人攻击。
Skyfire: Data-Driven Seed Generation for Fuzzin-S&P
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-*SpaCCS
Abstract 模糊测试是一种有效的测试技术,可以在bug转变为漏洞之前及早发现漏洞。如果没有复杂的程序分析,它可以通过稍微改变输入并发现程序中的潜在错误来生成有趣的测试用例。然而,以前的模糊器要么无法探索更深层次的错误,要么其中一些受到严重时间复杂性的影响,因此我们不能在实际应用中依赖它们。在本文中,我们通过结合实用和轻量级的深度学习方法,专注于减少模糊测试的时间复杂度,从根本上加速识别新测试用例和发现错误的过程。为了实现预期的模糊覆盖,我们通过使用深度学习方法扩展最先进的模糊AFL来实现我们的方法,并在几个广泛使用的开源可执行程序上进行评估。在所有这些计划中,我们可以看到我们方法的效率,并产生明显更好的结果。
ExploitMeter: Combining Fuzzing with Machine Learning for Automated Evaluation of Software Exploitability-IEEE PAC
Abstract 可利用的软件漏洞对其信息安全和隐私构成严重威胁。尽管已经投入大量精力来提高软件安全性,但量化软件可利用性的研究仍处于起步阶段。在这项工作中,我们提出了ExploitMeter,这是一个基于模糊的软件可利用性量化框架,可以促进软件保障和网络保险的决策。 ExploitMeter设计为动态,高效和严谨,它以贝叶斯方式集成了基于机器学习的预测和动态模糊测试。使用100个Linux应用程序,我们进行了大量实验,以评估ExploitMeter在动态环境中的性能。
ExploitMeter: Combining Fuzzing with Machine Learning for Automated Evaluation of Software Exploitability-IEEE PAC
2016年
综述
研究性工作
Experimenting machine learning techniques to predict vulnerabilities-IADC
Abstract 软件度量标准可用作软件漏洞存在的指示器。这些指标已用于机器学习,以预测容易包含漏洞的源代码。虽然无法找到缺陷的确切位置,但模型可以显示在检查和测试期间哪些组件需要更多关注。每种新技术都使用他自己的评估数据集,该数据集多次具有有限的大小和代表性。在此体验报告中,我们使用大型且具有代表性的数据集来评估几种最先进的漏洞预测技术。该数据集是使用来自五个广泛使用的开源项目的2186个漏洞的信息构建的。结果表明,数据集可用于区分哪种是最佳技术。还表明,一些技术可以预测几乎所有数据集中存在的漏洞,尽管精度非常低。最后,准确性,精确度和召回率并不是表征这种工具有效性的最有效方法。 关键词 - 机器学习,软件度量,软件安全,漏洞