Sofware Vulnerability Analysis and Discovery Using Machine-Learning and Data-Mining Techniques: A Survey

由于其中主要内容都是关于数据挖掘技术在源代码漏洞和分析中的使用总结,涉及到使用机器学习方法的较少,所以未翻译阅读完,后续再继续翻译。

阅读更多

A Survey on Source Code Review Using Machine Learning

Abstract

源代码审查充分限制了软件系统的安全性。可伸缩性和精度对于代码审查工具的部署非常重要。但是,传统工具只能通过繁琐的大规模源代码审查来自动检测一些高误报和漏报的安全漏洞。各种脆弱点和漏洞在源代码中显示出特定的特征。机器学习系统建立了源代码的特征矩阵作为输入,包括变量,函数和文件,通过区分或生成方法生成ad-hoc标签,以自动和智能地查看源代码。无论编程语言如何,源代码本质上都是文本信息。安全和易受攻击的函数都可以从源代码凸出。幸运的是,已经开发了各种机器学习方法来学习和检测智能源代码安全审查中的脆弱点和漏洞。代码语义和句法特征的组合有助于在源代码审查期间对假阳性和假阴性的优化。在本文中,我们使用机器学习方法对与智能源代码安全性审查相关的文献进行了回顾。它说明了在源代码安全审查中接近ML的主要证据。我们相信机器学习及其分支机构将在源代码审查中脱颖而出。

阅读更多

From automation to intelligence: Survey of research on vulnerability discovery techniques

Abstract

近年来,随着软件规模和复杂度的日益增加,软件漏洞挖掘技术正逐渐向高度自动化和智能化演变,该文从传统漏洞挖掘技术和基于学习的智能化漏洞挖掘技术两方面深入调研和分析了相关的研究进展。首先,从静态和动态挖掘技术2方面详细介绍了传统漏洞挖掘技术的研究现状,涉及的技术包括模型检测、二进制比对、模糊测试、符号执行以及漏洞可利用性分析等,并分析了各项技术存在的问题,提出当前的研究难点是实现漏洞挖掘全自动化。然后,介绍了机器学习和深度学习技术在漏洞挖掘领域的应用,具体应用场景包括二进制函数识别、函数相似性检测、测试输入生成、路径约束求解等,并提出了其存在的机器学习算法不够健壮安全、算法选择依靠经验、数据样本不足、特征选择依赖专家知识等问题。最后,对未来研究工作进行了展望,提出应该围绕提高漏洞挖掘的精度和效率、提高自动化和智能化的程度这2方面展开工作。

阅读更多

Fuzzing: Art, Science, and Engineering

Abstract

在当今可用的众多软件漏洞发现技术中,模糊测试由于其概念简单,部署的低屏障以及发现现实世界软件漏洞的大量经验证据而一直非常受欢迎。虽然近年来研究人员和从业人员都为改进模糊测试投入了大量不同的努力,但这项工作的激增也使得难以获得全面和一致的模糊测试观点。为了帮助保存并使大量的模糊测量文献保持连贯性,本文提出了一种统一的,通用的模糊测试模型以及当前模糊文献的分类。我们通过调查相关文献和艺术,科学和工程方面的创新,有条不紊地探索模型模糊器的每个阶段的设计决策,使现代模糊器有效。

阅读更多

Lord of the X86 Rings: A Portable User Mode Privilege Separation Architecture on X86

Abstract

前heartbleed漏洞导致的敏感信息常泄露一直是人们要解决的问题,即如何保护程序中的隐私数据不被任意的访问到。研究人员想到的方法根本出发点为,将隐私数据隔离,即使存在程序漏洞,也不能任意访问到这些敏感数据。而将隐私数据存放于什么位置,是人们一直以来需要解决的问题。此前的解决办法包括,线程隔离,进程隔离,使用可以信执行区域(如Intel SGX)等。这些方法或者性能影响比较大,或者受限到CPU型号。而在这篇论文里作者使用Intel x86处理器一直以来存在的r0-r3四个特权等级来将数据隔离访问,一方面解决了处理器兼容问题(几乎所有Intel AMD处理器均支持这四个特权级别),一方面解决了性能问题。

阅读更多

Digtool: A Virtualization-Based Framework for Detecting Kernel Vulnerabilities

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。

阅读更多

SoK: Security Evaluation of Home-Based IoT Deployments

Abstract

智能家居在安全方面一直表现得不尽人意,究其原因,在于IoT系统相对于传统的嵌入式系统,还引入了智能终端和网络,这就导致了其本身暴露了更多的攻击面。本文通过总结大量论文来帮助研究人员和从业者更好的理解针对智能家居的攻击技术,缓解措施,以及利益相关者应该如何解决这些问题。最后作者利用这些方法评估了45款智能家居设备,并将实验数据公布在https://yourthings.info%E3%80%82

阅读更多

Enforcing Unique Code Target Property for Control-Flow Integrity

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

阅读更多

Using Logic Programming to Recover C++ Classes and Methods From Compiled Executables

Abstract

  随着计算机硬件的发展,计算机软件也变得越来越庞大、越来越复杂。而为了开发这些复杂的计算机软件,软件工程师们逐渐把方向转向了面向对象 OO(Object Oriented)的编程语言,例如 C++ 等高级开发语言。这些高级的编程语言,对于开发庞大、复杂的应用程序,它可以提供一种高级抽象的框架(Natural Framework),使得面向对象的编程语言更加适用于构造复杂的数据结构 — Class。类可以把相关的数据成员和一组对数据成员进行操作的方法绑定在一起,这样的绑定方式极大的方便了 C++ 代码的维护与管理,使得开发者更容易、更高效地开发复杂的应用程序。虽然类可以给开发者带来极大的便利,但是,万事万物总有两面性,类也一样,它给开发者带来便利的同时,也给软件逆向分析工程师带来了不便,使得分析师在分析 C++ 开发的程序的难度有所提高,特别是在分析恶意程序的时候,分析 C++ 开发的恶意程序变成了一项更高难度的挑战。因此,如何从恶意程序中恢复出代码的高级抽象特性(例如类等),成为了一项值得深究的工作。

阅读更多

Towards Paving the Way for Large-Scale Windows Malware Analysis: Generic Binary Unpacking With Orders-of-Magnitude Performance Boost

Abstract

windows的软件脱壳本来已经在多年前已经被讨论得非常多了,目前安全学术会议上关于脱壳的论文非常少,然而这篇关于脱壳的论文还能在2018年被CCS所录取,足见他的方法之高效。此前关于脱壳的方法大多是跟踪脱壳时期的内存代码写入执行的变化,从而跟踪被加密代码的解密流程从而追溯到OEP。这也是对于分析脱壳的一个最为直观的方法,在这篇论文里作者提出来通过跟踪IAT(函数导入表)被恢复和引用的情况来追溯OEP,并且达到很理想的效果。作者将这款工具称为BinUnpack。

阅读更多