代码检测_论文收集

本文介绍了近年来在USENIX、S&P、NDSS、CSS等会议上发表的关于代码检测的论文,重点关注深度学习和人工智能在二进制代码分析中的应用。论文涉及二进制代码的重定向架构分析、漏洞检测、源码级和二进制级漏洞定位、功能相似性检测、恶意软件检测和编译器源信息恢复等多个方面,展示了这些技术在提高检测精度、减少误报和漏报方面的潜力。
摘要由CSDN通过智能技术生成

0. 概述

从USENIX、S&P、NDSS、CSS收集近几年代码检测相关论文,并介绍论文基本信息。

表1. 代码检测相关论文
序号论文名称会议名称研究机构
1Can a Deep Learning Model for One Architecture Be Used for Others? Retargeted-Architecture Binary Code AnalysisUSENIX'23乔治梅森大学
2V1SCAN: Discovering 1-day Vulnerabilities in Reused C/C++ Open-source Software Components Using Code Classification TechniquesUSENIX'23高丽大学
3VulChecker: Graph-based Vulnerability Localization in Source CodeUSENIX'23本古里安大学
4Arbiter: Bridging the Static and Dynamic Divide in Vulnerability Discovery on Binary ProgramsUSENIX'22亚利桑那州立大学
5How Machine Learning Is Solving the Binary Function Similarity ProblemUSENIX'22思科系统公司
6DeepReflect: Discovering Malicious Functionality through Binary ReconstructionUSENIX'21

佐治亚理工学院

7Finding Bugs Using Your Own Code: Detecting Functionally-similar yet Inconsistent CodeUSENIX'21东北大学
8GraphSPD: Graph-Based Security Patch Detection with Enriched Code SemanticsS&P'24

乔治梅森大学

9SigmaDiff: Semantics-Aware Deep Graph Matching for Pseudocode DiffingNDSS'24加州大学河滨分校
10GNNIC: Finding Long-Lost Sibling Functions with Abstract SimilarityNDSS'24

明尼苏达大学

11VulHawk: Cross-architecture Vulnerability Detection with Entropy-based Binary Code SearchNDSS'23

国防科学技术大学

12Improving Security Tasks Using Compiler Provenance Information Recovered At the Binary-LevelCCS'23

佐治亚理工学院

1. 研究内容 

论文1:Can a Deep Learning Model for One Architecture Be Used for Others? Retargeted-Architecture Binary Code Analysis

现存问题:受 NLP 启发的二进制代码分析深度学习表现出了显着的性能。考虑到市场上的指令集架构 (ISA) 多种多样,能够分析各种 ISA 的代码非常重要。然而,训练深度学习模型通常需要大量的数据,这对某些遭遇“数据稀缺”问题的ISA(例如PowerPC)提出了挑战。例如,获取 PowerPC 恶意软件的大型数据集被证明是具有挑战性的。此外,给定二进制分析任务和多个 ISA,需要花费大量时间和精力(例如,数据收集、标记和清理以及参数调整)来为每个 ISA 训练一个模型。

解决方法:我们提出了一个新的方向,即重定向架构二进制代码分析,来处理数据稀缺问题并减轻每个 ISA 的工作量。我们的想法是将知识从一种 ISA 转移到其他 ISA,即用丰富的数据和大量时间和精力为一种 ISA 训练的模型,可以在不进行任何修改的情况下为其他 ISA 进行预测。我们通过两个重要任务展示了这个想法:恶意软件检测和功能相似性检测。涉及四种 ISA(x86、ARM、MIPS 和 PowerPC)的广泛评估证明了该方法的有效性并解释了高性能。

内容总结:重定向架构二进制代码分析,针对不同二进制代码架构的迁移学习。首先在某个架构下进行预训练,之后基于预训练模型实现其他架构的重定向训练。

论文2:V1SCAN: Discovering 1-day Vulnerabilities in Reused C/C++ Open-source Software Components Using Code Classification Techniques

研究背景:重用第三方开源软件(OSS )有很多好处,但由于它们传播的漏洞,可能会使整个软件面临风险。在缓解方面,已经提出了几种检测传播漏洞的技术,这些技术可以分为基于版本和基于代码的方法。当 OSS 项目通过代码修改重用时,最先进的技术会产生许多误报或漏报。

解决方法:在本文中,我们表明可以通过改进基于版本和代码的方法并将它们协同组合来解决这些限制。通过对OSS组件中重用的代码进行分类,V1SCAN仅考虑目标程序中包含的漏洞,并过滤掉未使用的易受攻击的代码,从而减少基于版本的方法产生的误报。 V1SCAN 通过对易受攻击的代码进行分类,然后检测随着各个代码位置的代码更改而传播的漏洞,从而提高了基于代码的方法的覆盖范围。对 GitHub 流行 C/C++ 软件的评估表明,V1SCAN 发现的漏洞比检测到的漏洞多 50%,优于最先进的漏洞检测方法。此外,V1SCAN 将现有基于版本和基于代码的方法的简单集成的误报率从 71% 降低到 4%,将漏报率从 33% 降低到 7%。借助 V1SCAN,开发人员可以高精度检测传播的漏洞,从而维护安全的软件供应链。

内容总结:结合基于版本的方法和基于代码的方法实现漏洞检测。

论文3:VulChecker: Graph-based Vulnerability Localization in Source Code

现存问题:在软件开发中,尽早检测项目中的漏洞至关重要。尽管深度学习在这项任务中显示出了希望,但当前最先进的方法无法分类和识别漏洞发生的线路。相反,开发人员的任务是在整个函数甚至更大的代码区域中搜索任意错误。

解决方法:在本文中,我们提出了 VulChecker:一种可以精确定位源代码中的漏洞(精确到指令)并对其类型进行分类(CWE)的工具。为了实现这一目标,我们提出了一种新的程序表示、程序切片策略,并使用消息传递图神经网络来利用所有代码语义并提高漏洞根本原因和表现点之间的影响范围。我们还提出了一种新颖的数据增强策略,可以使用在线提供的免费合成样本,以低廉的成本创建用于野外漏洞检测的强大数据集。通过这种训练策略,VulChecker 能够在 19 个野外项目中识别出 24 个 CVE(2019 年和 2020 年有 10 个),与只能检测到 4 个的商业工具相比,误报率几乎为零。VulChecker 还发现了一个可利用的零漏洞日漏洞,已向开发人员报告,以负责任地披露。

内容总结:基于图神经网络的源码级漏洞检测。

论文4:Arbiter: Bridging the Static and Dynamic Divide in Vulnerability Discovery on Binary Programs

现存问题:尽管它们在漏洞发现方面非常有效,但当前最先进的二进制程序分析方法受到准确性和可扩展性之间固有的权衡的限制。

解决方法:在本文中,我们确定了一组漏洞属性,可以帮助静态和动态漏洞检测技术,提高前者的精度和后者的可扩展性。通过仔细集成静态和动态技术,我们可以大规模地检测在现实世界程序中表现出这些属性的漏洞。我们实现了我们的技术,在二进制代码分析方面取得了一些进步,并创建了一个名为 ARBITER 的原型。我们通过对四种常见漏洞类别的大规模评估来证明我们方法的有效性:CWE-131(缓冲区大小计算不正确)、CWE-252(未经检查的返回值)、CWE-134(不受控制的格式字符串)和 CWE -337(伪随机数生成器中的可预测种子)。我们对 Ubuntu 存储库中超过 76,516 个 x86-64 二进制文件评估了我们的方法,并发现了新的漏洞,包括在编译过程中插入程序的缺陷。

内容总结:结合静态检测与动态检测实现二进制级的漏洞检测。

论文5:How Machine Learning Is Solving the Binary Function Similarity Problem

研究背景:准确计算两段二进制代码之间的相似性的能力在各种不同的问题中发挥着重要作用。安全性、编程语言分析和机器学习等多个研究社区已经在这个主题上研究了五年多,并发表了数百篇有关该主题的论文。

现存问题:人们期望,到目前为止,有可能回答许多研究问题,这些问题超出了论文中提出的非常具体的技术,但可以推广到整个研究领域。不幸的是,该主题受到许多挑战的影响,从可重复性问题到研究结果的不透明性,这阻碍了有意义和有效的进展。

解决方法:在本文中,我们着手对该研究领域的最新技术进行首次测量研究。我们首先将现有的研究体系系统化。然后,我们确定了一些相关方法,它们代表了三个不同研究团体最近提出的各种解决方案。我们重新实现了这些方法并创建了一个新的数据集(使用不同编译器、优化设置和三种不同架构编译的二进制文件),这使我们能够进行公平且有意义的比较。这项努力使我们能够回答许多研究问题,这些问题超出了通过阅读个别研究论文所能推断出的范围。通过发布我们的整个模块化框架和数据集(以及相关文档),我们还希望激发这个有趣的研究领域的未来工作。

内容总结:对目前的同源函数相似性检测工作进行回顾。

论文6:DeepReflect: Discovering Malicious Functionality through Binary Reconstruction

现存问题:深度学习在恶意软件分类方面继续显示出有希望的结果。然而,为了识别关键的恶意行为,恶意软件分析师仍然需要使用静态分析工具对未知的恶意软件二进制文件进行逆向工程,这可能需要几个小时。尽管机器学习可用于帮助识别二进制文件的重要部分,但由于获取足够大的标记数据集的成本,监督方法是不切实际的。

解决方法:为了提高静态(或手动)逆向工程的生产力,我们提出了 DEEPREFLECT:一种用于本地化和识别恶意二进制文件中的恶意软件组件的工具。为了定位恶意软件组件,我们以一种新颖的方式使用无监督的深度神经网络,并通过半监督的聚类分析对组件进行分类,分析人员在日常工作流程中逐步提供标签。该工具很实用,因为它不需要数据标记来训练定位模型,也不需要最小/无创标记来增量训练分类器。在我们与五位恶意软件分析师对超过 26,000 个恶意软件样本进行评估时,我们发现 DEEPREFLECT 将分析师需要进行逆向工程的功能数量平均减少了 85%。我们的方法还可以检测到 80% 的恶意软件组件,而使用基于签名的工具 (CAPA) 时只能检测到 43%。此外,DEEPREFLECT 使用我们提出的自动编码器比 SHAP(一种人工智能解释工具)表现得更好。这很重要,因为 SHAP 是一种最先进的方法,需要有标签的数据集,而自动编码器不需要。

内容总结:识别恶意二进制文件中的恶意软件组件。

论文7:Finding Bugs Using Your Own Code: Detecting Functionally-similar yet Inconsistent Code

现存问题:概率分类已在检测已知类型的软件错误方面取得了成功。 然而,采用这种方法的工作往往需要大量样本来训练模型。

解决方法:我们提出了一种新的基于机器学习的错误检测技术,不需要任何外部代码或样本进行训练。 相反,我们的技术从执行错误检测的代码库中学习,因此,无需收集和清理训练样本(例如,某些类型的错误代码)的繁琐任务。我们技术背后的关键思想是应用于给定代码库的新颖的两步聚类过程。 此聚类过程可识别项目中功能相似但形式不一致的代码片段。 人们发现这种不一致会导致各种各样的错误,从缺少检查到不安全的类型转换。 与以前的工作不同,我们的技术是通用的,并不特定于一种类型的不一致或错误。 我们对我们的技术进行了原型设计,并使用 5 个流行的开源软件(包括 QEMU 和 OpenSSL)对其进行了评估。 通过对我们的工具检测到的不一致之处进行少量的手动分析,我们发现了 22 个新的独特错误,尽管事实上许多程序都在不断进行错误扫描,并且其中的新错误被认为是罕见的。

内容总结:通过检测相似却不一致的代码实现BUG检测。

论文8:GraphSPD: Graph-Based Security Patch Detection with Enriched Code Semantics

现存问题:随着开源软件的日益普及,嵌入式漏洞已广泛传播到下游软件。由于维护策略不同,软件供应商可能会在不提供足够建议(例如 CVE)的情况下悄悄发布安全补丁。 这使得用户不知道安全补丁,并为攻击者提供了利用未补丁漏洞的良好机会。 因此,检测这些静默安全补丁对于安全软件维护至关重要。

解决方法:在本文中,我们提出了一种基于图神经网络的安全补丁检测系统,名为 GraphSPD,它将补丁表示为具有更丰富语义的图,并利用补丁定制的图模型进行检测。 我们首先开发了一种称为 PatchCPG 的新型图形结构,通过合并补丁前和补丁后源代码的两个代码属性图(CPG)来表示软件补丁,并保留补丁的上下文、删除和添加的组件。 通过应用切片技术,我们保留了最相关的上下文并减小了 PatchCPG 的大小。 然后,我们开发了第一个名为 PatchGNN 的端到端深度学习模型,以直接从其图结构 PatchCPG 确定补丁是否与安全相关。 PatchGNN 包括一个新的嵌入过程,用于将 PatchCPG 转换为数字格式,以及一个新的多属性图卷积机制,以适应 PatchCPG 中的不同关系。 实验结果表明,GraphSPD 在安全补丁检测方面可以显着优于最先进的方法。

内容总结:通过合并补丁前和补丁后源码生成PatchCPG。

论文9:SigmaDiff: Semantics-Aware Deep Graph Matching for Pseudocode Diffing

研究背景:伪代码比较可以精确定位相似的部分,并捕获两个给定二进制文件的反编译伪代码之间的差异。它在许多安全场景中特别有用,例如代码抄袭检测、沿袭分析、补丁、漏洞分析等。

存在问题:然而,现有的伪代码比较和二进制比较工具都存在准确性低和可扩展性差的问题,因为它们要么依赖于手动设计的启发式算法(例如 Diaphora)或矩阵分解等繁重计算(例如 DeepBinDiff)。

解决方法:为了解决这些限制,在本文中,我们提出了一种语义感知的、基于深度神经网络的模型,称为 SIGMADIFF。 SIGMADIFF 首先构建 IR(中间表示)级过程间程序依赖图(IPDG)。然后,它使用轻量级符号分析来提取初始节点特征并定位神经网络模型的训练节点。然后,SIGMADIFF 利用称为深度图匹配共识 (DGMC) 的最先进的图匹配模型来匹配 IPDG 中的节点。 SIGMADIFF 还引入了 DGMC 设计的几个重要更新,例如预训练和微调模式。实验结果表明,SIGMADIFF 在准确性和效率方面显着优于最先进的基于启发式和基于深度学习的技术。它能够精确定位广泛使用的视频会议应用程序中的八个漏洞。

内容总结:结合伪代码信息实现漏洞检测。

论文10:GNNIC: Finding Long-Lost Sibling Functions with Abstract Similarity

现存问题:为大型程序生成准确的调用图,特别是在操作系统 (OS) 级别,是一个众所周知的挑战。 这种困难源于大型程序中间接调用的广泛使用,其中调用目标的计算被推迟到运行时以实现程序多态性。 因此,编译器无法静态确定间接调用边缘。 最近的进展尝试使用类型分析来全局匹配程序中的间接调用目标。 然而,这些方法在处理大型目标程序或泛型类型时仍然存在精度较低的问题。

解决方法:本文介绍了 GNNIC,一种基于图神经网络 (GNN) 的间接调用分析器。 GNNIC 采用一种称为抽象相似性搜索的技术来准确识别大型程序中的间接调用目标。 该方法基于以下观察:尽管间接调用目标表现出复杂的多态行为,但它们共享共同的抽象特征,例如函数描述、数据类型和调用的函数调用。 我们将这些信息整合到代表性抽象图(RAG)中,并使用 GNN 来学习函数嵌入。 抽象相似性搜索依赖于至少一个锚定目标来引导。 因此,我们还提出了一种新的程序分析技术来本地识别每个间接调用的有效目标。 从锚点目标开始,GNNIC可以扩大搜索范围,在整个程序中找到更多的间接调用目标。 GNNIC 的实现利用 LLVM 和 GNN,我们在多个操作系统内核上对其进行了评估。 结果表明,GNNIC 将错误目标函数减少了 86% 至 93%,优于最先进的基于类型的技术。 此外,GNNIC生成的抽象相似性和精确的调用图可以通过发现新的错误、缓解路径爆炸问题和提高静态程序分析的效率来增强安全应用程序。 静态分析和 GNNIC 相结合,在 Linux 和 FreeBSD 内核中发现了 97 个新错误。

内容总结:通过抽象相似性搜索识别大型程序的间接调用目标,最终实现BUG的检测。

论文11:VulHawk: Cross-architecture Vulnerability Detection with Entropy-based Binary Code Search

现存问题:代码重用在软件开发中非常普遍。它带来了漏洞的大量传播,威胁到软件安全。不幸的是,随着物联网(IoT)的发展和部署,代码重用的危害被放大。二进制代码搜索是查找这些隐藏漏洞的可行方法。面对不同架构、不同优化级别的不同编译器编译的物联网固件镜像,现有方法很难适应这些复杂的场景。

解决方法:在本文中,我们提出了一种新颖的中间表示函数模型,它是一种用于跨架构二进制代码搜索的架构无关模型。它将二进制代码提升为微代码,并通过补充隐式操作数和修剪冗余指令来保留二进制函数的主要语义。然后,我们使用自然语言处理技术和图卷积网络来生成函数嵌入。我们将编译器、架构和优化级别的组合称为文件环境,并采用分而治之的策略将多个跨文件环境场景的相似度计算问题进行划分。我们提出了一种基于熵的适配器,将不同文件环境的函数嵌入转移到同一文件环境中,以减轻不同文件环境造成的差异。为了精确识别易受攻击的函数,我们提出了一种渐进式搜索策略,用细粒度的特征补充函数嵌入,以减少由修补函数引起的误报。我们实现了一个名为 VulHawk 的原型,并在七个不同的任务下进行了实验,以评估其性能和鲁棒性。实验表明,VulHawk 的性能优于 Asm2Vec、Asteria、BinDiff、GMN、PalmTree、SAFE 和 Trex。

内容总结:结合中间表示特征与熵特征实现同源代码相似性检测。

论文12:Improving Security Tasks Using Compiler Provenance Information Recovered At the Binary-Level

现存问题:现代编译器支持的复杂优化允许在多个级别上进行编译器来源恢复。例如,可以识别构建二进制文件时使用的编译器系列和优化级别,以及应用于二进制文件中的函数的各个编译器通道。然而,编译器来源的许多下游应用仍未得到探索。

解决方法:为了弥补这一差距,我们根据从使用 LLVM 14 构建的 27,000 多个程序收集的数据来训练和评估多标签编译器来源模型,并将该模型应用于许多安全相关任务。我们的方法考虑了 68 个不同的编译器通道,并获得了 84.4% 的平均 F-1 分数。我们首先使用该模型来检查编译器引发的漏洞的严重程度,识别出 10 个热门项目中的 53 个信息泄漏错误。我们还表明,一些编译器优化过程引入了大量的功能代码重用小工具,这对安全性产生了负面影响。除了漏洞检测之外,我们还评估其他安全应用程序,包括使用恢复的来源信息来验证 Windows 二进制文件中丰富标头数据的正确性(例如取证分析),以及二进制分解任务(例如第三方库检测)。

内容总结:探索编译器溯源的下游应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值