总结
- 本次会议涵盖的安全研究主题广泛,包括源代码分析、二进制代码分析、恶意软件检测、漏洞检测、模糊测试、程序验证等。
- 一些热门的研究方向包括:基于机器学习的漏洞检测、大型语言模型在软件安全中的应用、区块链智能合约安全分析。这些方向都在最近几年持续发展。
- 一些较冷门的研究方向包括:嵌入式固件安全、自动驾驶系统安全测试、多媒体内容审核软件验证。这些方向研究的系统及应用场景较为专业。
- 一些值得深入研究的方向包括:提高漏洞修复的自动化程度、增强深度学习系统的安全性、提高图神经网络模型的可解释性。这些方向都与提高自动化软件安全技术的可靠性和可解释性相关。
1、1dFuzz: Reproduce 1-Day Vulnerabilities with Directed Differential Fuzzing
1-day漏洞在实践中很常见,并对终端用户造成严重威胁,因为攻击者可以通过已发布的补丁学习并利用这些漏洞。复现1-day漏洞对于防御者也非常重要,例如,用于阻止针对1-day漏洞的攻击流量。影响识别和触发1-day漏洞的有效性的核心问题是安全补丁的独特特征是什么。通过进行大规模的实证研究,我们指出补丁的一个普遍和独特特征是尾调用序列(TCS),并在本文中提出了一种新的导向式差分模糊测试解决方案1dFuzz,以高效地复现1-day漏洞。基于TCS特征,我们提出了一个能够通过静态分析找到候选补丁位置的定位器1dLoc,一种基于TCS的有向模糊距离度量方法,以及一种能够在模糊测试过程中捕获1-day漏洞的PoC的新型消毒剂1dSan。我们对11种不同设置中一组现实世界软件漏洞进行了系统评估1dFuzz。结果表明,1dFuzz明显优于最先进的基准线,并且在43%更短的时间内能够找到多达2.26倍的1-day漏洞。
论文链接:https://doi.org/10.1145/3597926.3598102
2、A Bayesian Framework for Automated Debugging
调试占据开发人员大部分时间。因此,自动调试技术,包括故障定位(FL)和自动程序修复(APR),因其在帮助开发人员调试任务方面的潜力而引起了广泛关注。随着将这两个任务视为紧密耦合的技术的最新进展,例如统一调试,形式化表达这两个任务的框架将提高我们对自动调试的理解,并为形式化分析技术和方法提供一种途径。为此,我们提出了一种理解自动调试的贝叶斯框架。我们发现,贝叶斯框架以及对自动调试目标的明确陈述可以从先前的工作中恢复出最大的故障定位公式,并分析现有的APR技术及其潜在假设。
为了通过实证方法展示我们的框架,我们进一步提出了BAPP,一种贝叶斯补丁优先技术,它结合中间程序值来分析可能的补丁位置和修复操作,其核心方程由我们的贝叶斯框架推导而来。我们发现,引入程序值使得BAPP能够更精确地识别正确的补丁:BAPP产生的排序结果减少了68%的补丁评估次数,因此平均减少了34分钟的修复时间。此外,我们的贝叶斯框架建议在程序修复中使用故障定位信息的方式进行一些改变,我们验证了这对BAPP是有用的。这些结果突显了有价值的自动调试技术的潜力,并进一步验证了我们的理论框架。
论文链接:https://doi.org/10.1145/3597926.3598103
3、API2Vec: Learning Representations of API Sequences for Malware Detection
基于API调用序列的恶意软件分析是一种有效的方法,因为序列反映了恶意软件的动态执行行为。深度学习的最新进展使得这些技术可以应用于从API调用序列中挖掘有用信息。然而,这些方法主要在原始序列上操作,可能无法有效捕捉重要信息,特别是对于多进程恶意软件,主要是由于API调用交错的问题。
受此启发,本文提出了API2Vec,一种基于图的恶意软件检测API嵌入方法。首先,我们构建一个图模型来表示原始序列。特别是,我们设计了时间过程图(TPG)来模拟进程间行为,以及时间API图(TAG)来模拟进程内行为。借助这些图,我们设计了一种启发式随机游走算法,生成可以捕捉细粒度恶意软件行为的路径。通过使用Doc2Vec模型预训练这些路径,我们能够生成路径和API的嵌入,进而用于恶意软件检测。对一个真实的恶意软件数据集进行的实验证明,API2Vec在准确性和鲁棒性方面优于最先进的嵌入方法和检测方法,尤其是对于多进程恶意软件。
论文链接:https://doi.org/10.1145/3597926.3598054
4、An Empirical Study on the Effects of Obfuscation on Static Machine Learning-Based Malicious JavaScript Detectors
随着网络攻击的增加和昂贵的手动识别成本,机器学习越来越多地应用于恶意JavaScript检测。实际应用中,恶意脚本和良性脚本为了隐藏恶意行为或保护知识产权,在上传之前往往会对自己的代码进行混淆。混淆虽然有益,但也引入了一些额外的代码特征(例如死代码)到代码中。当使用机器学习来学习恶意JavaScript检测器时,这些额外的特征会影响模型,使其效果较差。然而,目前对现有基于机器学习的检测器在不同混淆器上的鲁棒性还缺乏清晰的理解。
在本文中,我们进行了第一次实证研究,以弄清混淆对基于静态特征的机器学习检测器的影响。通过实验结果,我们观察到几个发现:1)混淆对检测器的有效性有显著影响,导致误报率和漏报率都增加,并且混淆在训练集中的偏差使检测器更容易检测到混淆而非恶意行为。2)常见的措施,如通过添加相关的混淆样本提高训练集的质量和利用最先进的深度学习模型,并不能取得良好效果。3)混淆对这些检测器的影响的根本原因在于它们使用的特征空间只能反映代码的浅层差异,而不能反映良性和恶意的本质差异,这很容易受到混淆引入的差异的影响。4)混淆对VirusTotal中的现实检测器产生了类似的影响,表明这是一个常见的实际问题。
论文链接:https://doi.org/10.1145/3597926.3598146
5、Automated Generation of Security-Centric Descriptions for Smart Contract Bytecode
智能合约和去中心化应用(DApp)用户面临着巨大风险,因为他们缺乏必要的知识,无法避免使用容易受攻击和恶意的合约代码。本文提出了一种新颖的系统Tx2TXT,可以从智能合约字节码中自动生成以安全为中心的文本描述。为了捕捉金融应用程序的安全性方面,我们正式定义了一个资金转移图,用于模拟智能合约中关键资金流动。为了确保从这些图中派生的描述的表达能力和简洁性,我们采用了基于图卷积网络(GCN)的模型,以识别与安全相关的条件语句,并有选择地将它们添加到我们的图模型中。为了将低级字节码指令转换为可读的文本脚本,我们利用健壮的API签名来恢复字节码的语义。我们在890个标记完好的易受攻击、恶意和安全合约上评估了Tx2TXT,其中包含开发者编写的描述。我们的结果表明,Tx2TXT优于现有的解决方案,并能有效帮助终端用户避免风险合约。
论文链接:https://doi.org/10.1145/3597926.3598132
6、Automated Program Repair from Fuzzing Perspective
本文提出了一种连接两个密切相关主题的新方法:模糊测试和自动化程序修复(APR)。文章分为两个部分。第一部分描述了模糊测试和APR之间的相似之处,两者都可以看作是一个搜索问题。第二部分介绍了一种名为Casino的新的补丁调度算法,该算法从模糊测试的角度设计,以提高搜索效率。我们的实验表明,Casino优于现有算法。我们还通过共享SimAPR这个模拟工具来推动开放科学,该工具可用于评估新的补丁调度算法。
论文链接:https://doi.org/10.1145/3597926.3598101
7、Automatic Testing and Benchmarking for Configurable Static Analysis Tools
静态分析是在现实世界软件中检测错误的重要工具。众多具有各自权衡的分析算法的出现导致了可配置静态分析工具的大量增加,但它们复杂且未经充分测试的配置空间成为广泛采用的障碍。为了提高这些工具的可靠性,我的研究重点是开发新的方法来自动测试和调试它们。首先,我描述了一项实证研究,帮助我们了解Android可配置污点分析工具的性能和行为。该研究的结果激发了ECSTATIC的开发,这是一个超越污点分析的测试和调试框架,可用于测试任何可配置的静态分析工具。这项研究的下一步工作涉及自动创建与静态分析相关的现实世界基准测试、相关基准的真实情况和分析特征。
论文链接:https://doi.org/10.1145/3597926.3605232
8、Automatically Reproducing Android Bug Reports using Natural Language Processing and Reinforcement Learning
在解决用户通过错误报告提交的问题的过程中,Android开发人员尝试重现并观察错误报告中描述的崩溃情况。由于错误报告的质量较低和现代应用程序的复杂性,重现过程并不简单且耗时。因此,迫切需要能够帮助重现Android错误报告的自动化方法。然而,目前用于帮助开发人员自动重现错误报告的方法只能处理有限形式的自然语言文本,并且在初始错误报告中缺少或不精确的步骤时很难成功重现崩溃。在本文中,我们介绍了一种新的完全自动化的方法,用于从Android错误报告中重现崩溃,并解决了这些限制。我们的方法通过利用自然语言处理技术来更全面准确地分析Android错误报告中的自然语言,并设计基于强化学习的新技术来指导成功重现步骤的搜索。我们对77个真实世界的错误报告进行了实证评估。我们的方法在准确提取错误报告中的重现步骤方面达到了67%的准确度和77%的召回率,重现了总体错误报告的74%,重现了包含缺失步骤的错误报告的64%,在性能上显著优于现有技术水平。
论文链接:https://doi.org/10.1145/3597926.3598066
9、BehAVExplor: Behavior Diversity Guided Testing for Autonomous Driving Systems
对自动驾驶系统(ADS)进行测试是确保自动驾驶车辆可靠性和安全性的关键任务。现有方法主要集中于寻找安全违规行为,而忽视了生成的测试用例的多样性,可能会产生许多冗余的测试用例和失败。这种冗余的失败会降低测试性能并增加失败分析成本。本文提出了一种新颖的行为引导模糊测试技术(BehAVExplor),用于探索自动驾驶系统(ADS)控制的自车(即ADS正在测试的车辆)的不同行为并检测各种违规行为。具体而言,我们设计了一种高效的无监督模型,称为BehaviorMiner,用于描述自车的行为。BehaviorMiner从给定的场景中提取时间特征,并进行基于聚类的抽象,将具有相似特征的行为分组为抽象状态。如果新的测试用例触发新的行为(例如,覆盖新的抽象状态),则将将其添加到种子语料库中。由于行为多样性和一般违规反馈之间存在潜在的冲突,我们进一步提出了一种能量机制来指导种子选择和变异。种子的能量量化了其好坏程度。我们在Apollo工业级ADS和LGSVL仿真环境上评估了BehAVExplor。实证评估结果表明,BehAVExplor能够有效地发现比现有技术更多样的违规行为。
论文链接:https://doi.org/10.1145/3597926.3598072
10、Beware of the Unexpected: Bimodal Taint Analysis
静态分析是检测安全漏洞和其他编程问题的强大工具。全局污点跟踪特别能够发现由于复杂数据流经过多个函数而引起的漏洞。然而,准确地确定哪些流是有问题的是具有挑战性的,有时依赖于超出纯程序分析范围的因素,如约定和非正式知识。例如,了解到API函数locale的参数名称最终出现在文件路径中是令人惊讶且有潜在问题的。相比之下,发现参数command传递给API函数execaCommand最终被解释为操作系统命令的一部分是完全不足为奇的。本文介绍了一种名为Fluffy的双模态污点分析方法,它结合了静态分析(推理数据流)和机器学习(概率地确定哪些流可能有问题)。关键思想是让机器学习模型从污点流中涉及的自然语言信息(如API名称)中预测流是否是预期的或意外的,并且只向开发人员报告后者。我们提出了一个通用框架,并使用四个学习模型来实例化该框架,这些模型在需要注释训练数据和预测准确性之间提供了不同的权衡。我们在CodeQL分析框架之上实现了Fluffy,并将其应用于25万个JavaScript项目。在对五种常见漏洞类型进行评估时,我们发现Fluffy在各种数据集上对其中四种的F1得分达到了0.85或更高。
论文链接:https://doi.org/10.1145/3597926.3598050
11、Beyond “Protected” and “Private”: An Empirical Security Analysis of Custom Function Modifiers in Smart Contracts
智能合约是在区块链账本上运行的应用层代码,通过基于事务的执行预定义函数来提供编程逻辑。默认情况下,智能合约函数可被任何一方调用。为了保护它们,以以太坊区块链的流行智能合约语言Solidity为例,提出了一种独特的语言级关键字"modifier",允许开发人员定义自定义函数访问控制策略,超越传统编程语言中的"protected"和"private"修饰符。
本文旨在对现实世界中以太坊智能合约中使用的modifier进行大规模安全分析。为了实现这一目标,我们设计并实现了一种新颖的智能合约分析工具SoMo。其主要目标是识别可以从一个或多个未受保护的智能合约函数绕过的不安全modifier。由于modifier与其变量/函数之间的复杂关系以及攻击者可访问的入口函数的不确定性,这是具有挑战性的。为了克服这些问题,我们首先提出了一种新的结构,即Modifier Dependency Graph(MDG),用于连接所有与modifier相关的控制/数据流。在MDG上,我们对系统变量建模,生成符号路径约束,并迭代地测试每个候选入口函数。我们的广泛评估结果显示,SoMo在检测所有真阳性和正确避免11个假阳性方面优于最先进的SPCon工具。在分析包含62,464个合约的大型数据集时,它还实现了91.2%的高精确度,其中有超过400个被识别为可绕过的modifier。我们的分析进一步揭示了有关modifier的三个有趣的安全发现和九种主要的modifier使用方式。SoMo已集成到在线安全扫描服务MetaScan中。
论文链接:https://doi.org/10.1145/3597926.3598125
12、Building Critical Testing Scenarios for Autonomous Driving from Real Accidents
自动驾驶技术的发展和普及之一目标是减少由人为因素引起的交通事故。然而,最近有关自动驾驶系统(ADS)致命事故的数据显示,这一重要目标尚未实现。因此,对安全驾驶进行更全面和有针对性的测试提出了新的要求。本文提出了一种从真实事故数据中自动构建关键测试场景的方法。首先,我们提出了一种名为M-CPS(多通道全景分割)的新模型,用于从事故记录(如图像或视频)中提取有效信息,并将不同交通参与者的独立个体分离出来以进一步恢复场景。与传统全景分割模型相比,M-CPS模型能够有效处理由于拍摄角度、图像质量、像素重叠等问题而存在于事故记录中的分割挑战。然后,提取的核心信息与虚拟测试平台连接,生成原始场景集。此外,我们还设计了一种基于原始场景集的变异测试解决方案,从而大大丰富了用于测试的场景库。在实验中,M-CPS模型在CityScapes测试集上达到了66.1%的PQ结果,表明与纯全景分割任务上最佳基准模型相比,我们的模型性能只有轻微波动。在SHIFT数据集上,语义分割分支达到了84.5%的IoU结果,实例分割分支达到了40.3%的mAP结果。然后,我们使用UCF-Crime、CADP和US-Accidents数据集生成了原始和变异的场景集。这些生成的场景集连接到Apollo和Carla模拟平台上,用于测试ADS原型。我们发现了导致ADS原型发生事故的三种场景类型,这表明现有的ADS原型存在缺陷。我们的解决方案为ADS测试中关键场景的恢复提供了一种新的可能方向,并可以提高相关领域的效率。
论文链接:https://doi.org/10.1145/3597926.3598070
13、CGuard: Scalable and Precise Object Bounds Protection for C
空间安全违规是许多安全攻击和应用程序的意外行为的根本原因。现有的强制空间安全的技术通常在对象或指针粒度上广泛工作。基于对象的方法往往会产生高的CPU开销,而基于指针的方法则会产生高的CPU和内存开销。
SGXBounds是一种基于对象的方法,相较于其他具有类似精度的工具,它提供了更低的开销来精确保护对象的越界访问。然而,这种方法的一个主要缺点是它无法支持大于32位的地址空间。
在本文中,我们介绍了CGuard,这是一种为C应用程序提供精确对象边界保护的工具,其开销与SGXBounds相当,而不限制应用程序的地址空间。CGuard在对象的基地址之前存储边界信息,并使用x86_64架构中可用的虚拟地址的多余位来编码基地址的相对偏移量。对于无法适应多余位的对象,CGuard使用自定义内存布局,使其能够在仅进行一次内存访问时找到对象的基地址。我们的研究揭示了SPEC CPU2017基准套件中gcc和x264基准以及Phoenix基准套件中的string_match基准中的空间安全违规。SPEC CPU2017和Phoenix基准套件的执行时间开销分别为42%和26%,而当CPU完全饱和时,Apache webserver的吞吐量减少了30%。这些结果表明,CGuard在保持合理的效率水平的同时可以非常有效。
论文链接:https://doi.org/10.1145/3597926.3598137
14、CONCORD: Clone-Aware Contrastive Learning for Source Code
在过去几年中,深度学习(DL)模型用于分析源代码展示了巨大的潜力。最近,自监督预训练在学习通用代码表示方面受到了关注,这对于许多下游软件工程任务(如克隆和错误检测)非常有价值。
虽然以前的研究成功地从不同的代码抽象(例如标记、AST、图)中学习,但我们认为在学习通用表示时还必须考虑开发人员日常编码的方式。一方面,人类开发人员倾向于编写重复的程序,引用当前代码库或在线资源(例如Stack Overflow网站)中的现有代码片段,而不是从头实现函数;这种行为导致了大量的代码克隆。相反,错误的克隆可能会触发恶意程序行为。
因此,作为将开发人员编码行为纳入预训练方案的代理,我们提出将代码克隆及其异常变体包含在内。具体而言,我们提出了CONCORD,一种自监督预训练策略,将良性克隆放置在表示空间中较近的位置,同时将异常变体推远。我们证明了CONCORD的克隆感知预训练显著减少了昂贵的预训练资源需求,同时改善了下游软件工程任务的性能。我们还凭经验证明,CONCORD能够改进现有的预训练模型,学习更好的表示,从而在识别语义等价程序和区分有错误和无错误代码方面变得更加高效。
论文链接:https://doi.org/10.1145/3597926.3598035
15、Catamaran: Low-Overhead Memory Safety Enforcement via Parallel Acceleration
内存安全问题是C/C++程序固有的疾病。
动态内存安全强制作为主要方法在高效性方面具有优势,但遭受着过高的运行时开销。
现有的减少开销的尝试要么需要大量劳动,严重依赖特定的硬件/编译器支持,要么效果不佳。
本文提出了一种新颖的技术,通过并行执行动态检查代码来减少时间开销。
我们利用静态依赖分析和动态利润分析来识别和调度潜在的代码,让它们在独立的线程中同时运行。我们实现了一个名为 Catamaran 的工具,并对丰富的基准进行了评估。
实验结果验证了 Catamaran 能够显著减少现有动态工具的运行时开销,而不损失内存安全强制的功能。
论文链接:https://doi.org/10.1145/3597926.3598098
16、CodeGrid: A Grid Representation of Code
代码表示是将人工智能应用于软件工程的关键步骤。通用的自然语言处理表示方法是有效的,但没有充分利用代码固有的丰富结构。最近的研究集中于提取抽象语法树(AST)并将其结构信息整合到代码表示中。这些增强了AST的表示方法推动了技术的进步,加速了人工智能在软件工程中的新应用。然而,AST忽视了代码结构中重要的控制和数据流方面,使一些潜在相关的代码信号未被利用。例如,纯粹基于图像的表示方法表现几乎与基于AST的表示方法一样好,尽管它们必须学习识别令牌,更不用说它们的语义了。这一结果是先前工作的有力证据,表明这些新的代码表示方法仍有改进的空间;它也引发了基于图像方法到底利用了什么信号的问题。我们回答了这个问题。我们展示了代码是具有空间性质的,并利用这一事实提出了一种新的表示方法,将令牌嵌入到保留代码布局的网格中。与现有技术中的一些方法不同,这种方法与下游任务无关:无论任务是生成还是分类,它都可以通过空间信号来增强学习算法。例如,我们展示了卷积神经网络(CNN),这是一种固有具有空间感知能力的模型,可以利用输出来有效地解决基本的软件工程任务,如代码分类、代码克隆检测和漏洞检测。PixelCNN利用网格表示实现了代码补全。通过大量的实验证明了我们的空间代码假设,并在保留网格程度变化时量化了模型的性能。为了证明其普遍性,我们展示了如何增强模型,提高其在一系列任务上的性能。在克隆检测方面,相对于ASTNN,F1得分提高了3.3%。
论文链接:https://doi.org/10.1145/3597926.3598141
17、CoopHance: Cooperative Enhancement for Robustness of Deep Learning Systems
对于深度学习系统而言,对抗性攻击一直是一种需要引起重视的威胁。通过向无害输入添加人类无法察觉的扰动,对抗性攻击可以导致深度学习系统产生错误行为。考虑到深度学习系统在工业界的普及程度,开发人员需要紧急采取措施来增强深度学习系统对抗性攻击的鲁棒性。
在本研究中,我们提出了一种新的增强技术,称为CoopHance。CoopHance利用两个特定定制的组件,即Regulator和Inspector,协同增强深度学习系统对不同扭曲的对抗性示例的鲁棒性。Regulator可以净化具有低或中度扭曲的对抗性示例,而Inspector负责通过捕捉深度学习系统的异常状态来检测具有高度扭曲的对抗性示例。我们使用各种攻击进行评估,结果显示,平均而言,CoopHance可以分别成功抵御CIFAR-10和SVHN数据集上未受保护系统生成的90.62%和96.56%的对抗性示例,比包括Feature Squeeze、LID、SOAP、Adversarial Training和MagNet在内的五种最先进的增强技术更为有效,效果提高了188.14%。同时,当攻击者在增强系统上生成新的对抗性示例时,CoopHance可以拒绝78.06%的攻击,平均而言比五种增强技术中最好的技术提高了82.71%。
论文链接:https://doi.org/10.1145/3597926.3598093
18、DeFiTainter: Detecting Price Manipulation Vulnerabilities in DeFi Protocols
DeFi协议是在区块链上管理高价值数字资产的程序。价格操纵漏洞是DeFi协议中常见的漏洞之一,它允许攻击者通过操纵代币价格获取过高利润。本文提出了DeFiTainter,一种用于检测价格操纵漏洞的跨合约污点分析框架。DeFiTainter具有两个创新机制,以确保其有效性。第一个机制是通过恢复调用信息构建跨合约污点分析的调用图,不仅包括代码常量,还包括合约存储和函数参数。第二个机制是针对检测价格操纵漏洞的高级语义归纳,准确识别污点源和汇,并跟踪跨合约的污点数据。对真实世界事件和高价值DeFi协议的广泛评估显示,DeFiTainter优于现有方法,在检测价格操纵漏洞方面达到了最先进的性能,精确率为96%,召回率为91.3%。此外,DeFiTainter揭示了三个以前未公开的价格操纵漏洞。
论文链接:https://doi.org/10.1145/3597926.3598124
19、DeUEDroid: Detecting Underground Economy Apps Based on UTG Similarity
近年来,地下经济在移动系统中蓬勃发展。这些地下经济应用程序(简称UEware)通过提供违规服务来获取利润,尤其是在敏感领域(例如赌博、色情、贷款)。与传统恶意软件不同,其中大多数(超过80%)没有恶意载荷。由于它们的独特特点,现有的检测方法无法有效和高效地应对这种新兴威胁。
为了解决这个问题,我们提出了一种新颖的方法,通过考虑界面转换图(UTGs)来有效和高效地检测UEware。基于这种方法,我们设计并实现了一个名为DeUEDroid的系统来进行检测。为了评估DeUEDroid,我们收集了25,717个应用程序,并建立了第一个大规模的UEware真实数据集(1,700个应用程序)。基于真实数据集的评估结果显示,DeUEDroid可以覆盖新的界面特征并静态构建准确的UTG。它的检测F1分数达到了98.22%,分类准确率达到了98.97%,明显优于传统方法的性能。涉及24,017个应用程序的评估结果显示了UEware在真实场景中的检测效果和效率。此外,结果还显示UEware普遍存在,即野外应用程序中的54%和应用商店中的11%是UEware。我们的工作为分析和检测UEware的未来工作提供了启示。为了与社区合作,我们已经在网上提供了我们的原型系统和数据集。
论文链接:https://doi.org/10.1145/3597926.3598051
20、Detecting Condition-Related Bugs with Control Flow Graph Neural Network
自动化的错误检测对于高质量的软件开发至关重要,并且多年来一直受到广泛关注。在各种错误中,先前的研究表明条件表达式非常容易出错,并且与条件相关的错误在实践中很常见。传统的自动化错误检测方法通常局限于可编译的代码,并且需要繁琐的手动工作。最近基于深度学习的工作倾向于基于抽象语法树(AST)学习一般的语法特征,或者在程序图上应用现有的图神经网络。然而,基于AST的神经模型可能会错过源代码的重要控制流信息,而现有的用于错误检测的图神经网络倾向于学习局部邻域结构信息。一般来说,与条件相关的错误受到控制流知识的高度影响,因此我们提出了一种基于控制流图的图神经网络(CFGNN)来自动检测与条件相关的错误,其中包括一个图结构化的LSTM单元,以高效地学习控制流知识和远距离的上下文信息。
我们还采用了API使用的注意机制来利用API知识。为了评估所提出的方法,我们在流行的GitHub存储库中收集了真实世界的错误,并构建了一个大规模的与条件相关的错误数据集。实验结果表明,我们提出的方法在检测与条件相关的错误方面明显优于现有的最先进方法。
论文链接:https://doi.org/10.1145/3597926.3598142
21、Detecting State Inconsistency Bugs in DApps via On-Chain Transaction Replay and Fuzzing
分布式应用程序(DApps)由在区块链上运行的多个智能合约组成。随着DApp生态系统的日益流行,DApp中的漏洞可能带来重大影响,如财务损失。识别DApp中的漏洞绝非易事,因为现代DApp由多个合约之间的复杂交互组成。由于在分析智能合约时缺乏精确的上下文信息,以确认智能合约漏洞,以往的研究要么存在较高的误报率,要么存在误报率较高的问题。本文介绍了一种基于模糊测试的新框架IcyChecker,以有效识别状态不一致(SI)漏洞,这是一种可能导致漏洞的特定类型的漏洞,如可重入性漏洞、复杂模式的前期交易。与以往的工作不同,IcyChecker利用一组准确的上下文信息通过回放链上历史交易对合约进行模糊测试。此外,IcyChecker不设计其他模糊测试方法所需的特定测试预言,而是实施了新颖的机制来变异一组模糊测试交易序列,并通过观察它们的状态差异进一步识别SI漏洞。对前100个热门DApps的IcyChecker评估表明,它有效地识别了总共277个SI漏洞,精确度为87%。通过与其他最先进的工具(如Smartian、Confuzzius和Sailfish)进行比较,我们展示了IcyChecker不仅识别了更多的SI漏洞,而且误报率更低,这要归功于其集成了准确的链上数据和独特的模糊测试策略。我们的研究为发现DApps中的智能合约漏洞提供了新的方法。
论文链接:https://doi.org/10.1145/3597926.3598057
22、Detecting Vulnerabilities in Linux-Based Embedded Firmware with SSE-Based On-Demand Alias Analysis
尽管广泛认识到在基于Linux的嵌入式固件中使用静态污点分析以检测污点式漏洞的重要性,但现有方法存在以下主要限制:(a)现有方法不能正确处理从攻击者可控源到安全敏感位置之间的间接调用,导致大量误报;(b)它们使用启发式方法来识别污点源,精度不够高,导致高误报率。
为了解决这些问题,我们提出了EmTaint,一种新颖的用于在基于Linux的嵌入式固件中准确快速检测污点式漏洞的静态方法。在EmTaint中,我们首先设计了一种基于结构化符号表达的按需别名分析技术。基于此,我们提出了间接调用解析和准确污点分析方案。结合清理规则检查,EmTaint可以在有限的时间内准确地发现大量的污点式漏洞。我们对来自六个知名供应商的35个真实嵌入式固件样本进行了EmTaint的评估。结果显示,EmTaint至少发现了192个漏洞,包括41个n-day漏洞和151个0-day漏洞。在撰写本文时,至少有115个CVE/PSV编号已分配给部分报告的漏洞。与KARONTE和SaTC等最先进的工具相比,EmTaint在更短的时间内在相同的数据集上发现了更多的漏洞。
论文链接:https://doi.org/10.1145/3597926.3598062
23、EDHOC-Fuzzer: An EDHOC Protocol State Fuzzer
EDHOC是由IETF提出的一种紧凑轻量级的身份验证密钥交换协议,其设计侧重于小型消息大小,以适用于受限制的物联网通信技术。在本工具论文中,我们概述了EDHOC-Fuzzer,这是一种用于EDHOC客户端和服务器实现的协议状态模糊器。它采用模型学习来生成EDHOC实现的状态机模型,捕获其输入/输出行为。该模型可以用于基于模型的测试、指纹识别,或者可以分析非一致性、状态机错误和安全漏洞。我们概述了EDHOC-Fuzzer的架构和使用方式,并展示了工具生成的模型和我们当前的发现的一些示例。
论文链接:https://doi.org/10.1145/3597926.3604922
24、Enhancing REST API Testing with NLP Techniques
RESTful服务通常使用OpenAPI规范进行文档化。尽管已经提出了许多自动化测试技术,利用规范的机器可读部分来指导测试生成,但其人类可读部分大多被忽视。这是一个被忽略的机会,因为规范中的自然语言描述通常包含相关信息,包括示例值和参数间的依赖关系,可以用于改进测试生成。在这个思路下,我们提出了NLPtoREST,一种自动化方法,应用自然语言处理技术来辅助REST API测试。给定一个API及其规范,NLPtoREST从规范的人类可读部分提取额外的OpenAPI规则。然后,它通过将这些规则添加到原始规范中来增强规范。测试工具可以透明地使用增强的规范来进行更好的测试用例生成。由于规则提取可能不准确,原因可能是自然语言的内在歧义或文档与实现之间的不匹配,NLPtoREST还包括一个验证步骤,旨在消除虚假规则。我们进行了研究,评估了我们的规则提取和验证方法的有效性,以及增强规范对八种最先进的REST API测试工具性能的影响。我们的研究结果令人鼓舞,表明NLPtoREST能够高准确地提取许多相关规则,进而显著提高测试工具的性能。
论文链接:https://doi.org/10.1145/3597926.3598131
25、Eunomia: Enabling User-Specified Fine-Grained Search in Symbolically Executing WebAssembly Binaries
尽管现有技术已经提出了自动化方法来缓解符号执行中的路径爆炸问题,但用户仍需要通过谨慎应用各种搜索策略来优化符号执行。由于现有方法主要支持粗粒度的全局搜索策略,无法高效地遍历复杂的代码结构。本文提出了Eunomia,一种支持细粒度、具有局部领域知识的符号执行技术。Eunomia使用Aes,一种领域特定语言,让用户可以为程序的不同部分指定局部搜索策略。Eunomia还将不同局部搜索策略的变量上下文隔离开,避免冲突。我们使用WebAssembly实现了Eunomia,它可以分析用各种语言编写的应用程序。Eunomia是第一个支持WebAssembly的完整功能的符号执行引擎。我们使用一个微基准套件和六个真实世界应用程序对Eunomia进行评估。评估结果显示,Eunomia可以将错误检测提高多达三个数量级。我们还进行了用户研究,证明了使用Aes的好处。此外,Eunomia验证了六个已知的错误,并在Collections-C中检测到两个新的零日错误。
论文链接:https://doi.org/10.1145/3597926.3598064
26、Finding Short Slow Inputs Faster with Grammar-Based Search
最近的研究表明,适当仪器化的突变搜索可以生成演示性能问题的短输入。模糊测试研究的另一个方向表明,用推导树森林中的子树替换是一种有效的基于语法的模糊测试技术,用于发现深层语义错误。我们将性能模糊测试与基于语法的搜索相结合,通过生成带有长度限制的推导树,其中每个子树都带有其长度的标签。此外,我们使用性能仪器化反馈来指导搜索。与针对安全问题的模糊测试相比,我们专注于搜索过程足够短(最多一个小时,使用适度的计算资源),以成为常规增量测试过程的一部分。我们评估了这些方法的组合,基准包括最佳的先前性能模糊测试工具。没有单一的搜索技术在所有示例中占主导地位,但蒙特卡罗树搜索和长度限制树混合化在可以通过语法正确的输入找到语义性能错误的示例应用中表现一致良好。在我们的评估过程中,我们发现了LunaSVG中的一个挂起错误,开发人员已经承认并修复了该错误。
论文链接:https://doi.org/10.1145/3597926.3598118
27、Fine-Grained Code Clone Detection with Block-Based Splitting of Abstract Syntax Tree
代码克隆检测旨在找到相似的代码片段,在软件工程领域日益重要。有几种用于检测代码克隆的技术。基于文本或基于标记的代码克隆检测工具可扩展且高效,但缺乏对语法的考虑,因此在检测句法代码克隆方面性能较差。虽然已经提出了一些基于树的方法来检测具有良好性能的句法或语义代码克隆,但它们大多耗时且缺乏可扩展性。此外,这些检测方法无法实现细粒度的代码克隆检测,无法区分被克隆的具体代码块。在本文中,我们设计了Tamer,一种可扩展且细粒度的基于树的句法代码克隆检测工具。具体而言,我们提出了一种将复杂的抽象语法树转化为简单子树的新方法。它可以加速检测过程,并实现对克隆对的细粒度分析,以定位代码的具体克隆部分。为了检验Tamer的检测性能和可扩展性,我们在广泛使用的数据集BigCloneBench上对其进行评估。实验结果表明,Tamer在性能上优于十种最先进的代码克隆检测工具(即CCAligner、SourcererCC、Siamese、NIL、NiCad、LVMapper、Deckard、Yang2018、CCFinder和CloneWorks)。
论文链接:https://doi.org/10.1145/3597926.3598040
28、Fuzzing Deep Learning Compilers with HirGen
深度学习(DL)编译器被广泛应用于优化高级DL模型,以在各种硬件上实现高效部署。它们的质量对编译后的DL模型质量有着深远影响。最近的一个错误研究表明,高级中间表示(IR)的优化是最容易出错的编译阶段,该阶段的错误占收集到的总错误的44.92%。然而,现有的测试技术不考虑与高级优化相关的特性(例如高级IR),因此在暴露该阶段的错误方面存在不足。为了弥补这一差距,我们提出了HirGen,一种自动化测试技术,可以有效地暴露高级IR优化中的编码错误。HirGen的设计包括:1)三个覆盖准则,用于生成多样且有效的计算图;2)利用高级IR的语言特性生成多样的IR;3)三个测试预言,其中两个受到元胞测试和差异测试的启发。HirGen已成功检测到在TVM中发生的21个错误,其中17个错误得到确认并修复了12个。此外,我们使用最先进的DL编译器模糊器构建了四个基准,可以覆盖高级优化阶段。我们的实验结果表明,HirGen能够在48小时内检测到基准无法检测到的10个崩溃和不一致性。我们还评估了我们提出的覆盖准则和测试预言的实用性。
论文链接:https://doi.org/10.1145/3597926.3598053
29、Fuzzing Embedded Systems using Debug Interfaces
对嵌入式系统进行模糊测试是困难的。它们的关键组件——微控制器——高度多样化且难以虚拟化;它们的软件可能无法更改或插装。然而,我们观察到许多微控制器(如果不是大多数)都具有通过调试接口进行调试的功能,通过这个接口,调试探针(通常可以通过GNU调试器GDB进行控制)可以设置有限数量的硬件断点。通过使用这些硬件断点,我们可以提取部分覆盖反馈,即使对于未插装的二进制代码,从而通过一种通用且广泛使用的机制实现对嵌入式系统的有效模糊测试。在对四个不同的微控制器板进行评估时,我们的原型实现GDBFuzz快速实现了高代码覆盖率,并检测到已知和新的漏洞。由于它可以应用于任何GDB可以调试的程序和系统,GDBFuzz是一种要求最低且最灵活的覆盖引导模糊测试工具之一。
论文链接:https://doi.org/10.1145/3597926.3598115
30、GDsmith: Detecting Bugs in Cypher Graph Database Engines
在大数据时代,图数据库引擎以其对关联数据建模和处理的效率脱颖而出。为了确保图数据库引擎的高质量,对于图数据库引擎进行自动测试生成至关重要,例如随机测试生成,这是实践中最常采用的方法。然而,随机测试生成面临着生成复杂输入(即属性图和查询)以产生非空查询结果的挑战;生成此类输入对于检测错误结果的错误尤为重要。为了应对这一挑战,本文提出了GDsmith,这是一种用于测试Cypher图数据库引擎的首个方法。GDsmith确保每个随机生成的查询都满足语义要求。为了增加产生返回非空结果的复杂查询的概率,GDsmith采用了两种新技术:基于图的复杂模式组合生成和基于数据的复杂条件生成。我们的评估结果表明,GDsmith对于产生复杂查询以检测错误结果非常有效和高效,并且明显优于基准测试。GDsmith成功地在三个非常受欢迎的开源图数据库引擎的发布版本上检测到了28个错误,并得到了开发人员的积极反馈。
论文链接:https://doi.org/10.1145/3597926.3598046
31、GrayC: Greybox Fuzzing of Compilers and Analysers for C
编译器和代码分析器的模糊测试已经发现并修复了许多在LLVM、GCC和Frama-C等广泛使用的框架中的错误。大多数这类模糊测试技术采用了黑盒方法,导致编译器和代码分析器相对免疫于这类模糊器。
我们提出了一种基于覆盖率导向和变异的方法,用于对C编译器和代码分析器进行模糊测试,受到其他应用领域中此类灰盒模糊测试的成功启发。在这种情况下,应用基于变异的模糊测试的主要挑战在于,简单的变异很可能会生成无法编译的程序。这些程序对于发现影响优化、分析和代码生成例程的深层次错误并不有用。
我们通过开发一组新的变异来针对常见的C语言结构,并对模糊程序进行转换,使其产生有意义的输出,从而设计了一种新颖的用于C编译器和代码分析器的灰盒模糊测试工具。这样可以利用差异测试作为测试Oracle,并为由模糊器生成的程序集成到编译器和代码分析器回归测试套件中铺平道路。
我们在一个名为GrayC的新开源工具中实现了我们的方法,通过实验证明与其他基于变异的方法(包括Clang-Fuzzer、PolyGlot和类似于LangFuzz的技术)相比,它在编译器和代码分析器的中后端阶段提供了更多的覆盖率。
我们使用GrayC已经确认了30个编译器和代码分析器的错误:其中25个是之前未知的错误(其中22个已经根据我们的报告进行了修复),而另外5个已经在我们发现它们之前独立报告确认的错误。还有3个错误报告正在调查中。除了上述结果外,我们还为Clang/LLVM测试套件做出了贡献,提供了由GrayC产生的24个简化版本的覆盖率增强测试用例,针对LLVM代码库中78个以前未覆盖的函数。
论文链接:https://doi.org/10.1145/3597926.3598130
32、Green Fuzzer Benchmarking
在过去的十年中,模糊测试由于其在发现漏洞方面的有效性而越来越受关注。然而,在此期间,模糊测试工具的评估一直存在挑战,主要是由于缺乏标准化的基准测试。为了缓解这个问题,在2020年,谷歌发布了一个名为FuzzBench的开源基准测试平台,被广泛用于准确的模糊测试工具评估。
然而,一个典型的FuzzBench实验需要耗费数年的CPU时间才能完成。如果我们考虑到正在积极开发的模糊测试工具需要通过经验来评估任何更改,基准测试就变得既在计算资源上受限,又耗时。在本文中,我们提出了一个名为GreenBench的环保基准测试平台,与FuzzBench相比,它显著加快了模糊测试工具的评估速度,同时保持了非常高的准确性。
与FuzzBench不同,GreenBench大幅增加了基准测试的数量,同时大幅缩短了模糊测试的持续时间。因此,GreenBench生成的模糊测试工具排名几乎与FuzzBench一样准确(相关性非常高),但GreenBench的速度提高了18到61倍。我们讨论了这些发现对模糊测试社区的影响。
论文链接:https://doi.org/10.1145/3597926.3598144
33、Green Fuzzing: A Saturation-Based Stopping Criterion using Vulnerability Prediction
模糊测试是一种广泛使用的自动化测试技术,它使用随机输入来引发程序崩溃,从而指示安全漏洞。一个困难但重要的问题是何时停止模糊测试活动。通常情况下,当崩溃数量和/或覆盖的代码元素在一段时间内没有增加时,活动会被终止。为了避免在达到漏洞之前过早终止,通常更喜欢使用代码覆盖率而不是崩溃数量来决定何时终止活动。然而,活动可能只会增加对非安全关键代码的覆盖率,或者反复触发相同的崩溃。因此,代码覆盖率和崩溃数量往往会高估模糊测试的效果,不必要地增加测试过程的持续时间和成本。
本文探讨了基于覆盖的饱和度而不是触发的崩溃或常规函数覆盖率来终止活动时,在节省模糊测试时间和错过的错误数量之间的权衡。在对30个开源C程序进行大规模实证评估的基础上,这些程序共含有240个安全漏洞和1280个模糊测试活动,我们首先展示了基于已知漏洞(CVE)的软件训练的二分类模型,使用从静态应用安全测试工具和经验证的软件度量中得出的轻量级机器学习特征,可以可靠地预测(潜在的)易受攻击的函数。其次,我们展示了我们提出的终止准则比崩溃和常规函数覆盖的饱和度提前了6-12小时终止了24小时的模糊测试活动,同时错过的平均缺陷数量少于0.5个缺陷。
论文链接:https://doi.org/10.1145/3597926.3598043
34、Guided Retraining to Enhance the Detection of Difficult Android Malware
Android操作系统的普及使其成为恶意软件开发者的一个吸引目标。为了逃避检测,包括基于机器学习的技术,攻击者投资于创建与合法应用非常相似的恶意软件,挑战当前技术水平并制造出难以检测的样本。在本文中,我们提出了一种名为Guided Retraining的基于监督表示学习的方法,用于提升恶意软件检测器的性能。为此,我们首先将实验数据集分成“简单”和“困难”样本的子集,其中困难程度与恶意软件检测器产生的预测概率相关。对于“简单”样本的子集,基础恶意软件检测器用于进行最终的预测,因为该子集上的错误率在设计上较低。我们的工作针对包含“困难”样本的第二个子集,其中的概率使得分类器对预测不够自信,错误率较高。我们在这些困难样本上应用Guided Retraining方法来改善其分类。Guided Retraining利用基础恶意软件检测器的正确预测和错误来指导重新训练过程。Guided Retraining使用监督对比学习学习困难样本的新嵌入,并为最终的预测训练一个辅助分类器。我们使用超过265,000个恶意软件和良性应用程序验证了我们的方法,涵盖了四种最先进的Android恶意软件检测方法。实验结果表明,Guided Retraining可以通过消除困难样本上的预测错误来提升最先进的检测器,错误率的降低高达45.19%。此外,我们还注意到我们的方法是通用的,并设计用于增强二元分类器在Android恶意软件检测之外的其他任务上的性能。
论文链接:https://doi.org/10.1145/3597926.3598123
35、Guiding Greybox Fuzzing with Mutation Testing
灰盒模糊测试和变异测试是两个流行但大部分独立的软件测试研究领域,迄今为止两者之间的重叠有限。灰盒模糊测试通常用于搜索新的漏洞,主要使用代码覆盖率选择输入来保存。变异测试主要用作代码覆盖率的强力替代方案,用于评估回归测试的质量;其思想是评估测试用例对于在目标程序中人为注入的错误的识别能力。但是,如果我们想要使用灰盒模糊测试来生成高质量的回归测试呢?
在本文中,我们开发并评估了Mu2,一个基于Java的框架,将变异分析纳入灰盒模糊测试循环中,目标是生成具有高变异分数的测试输入库。Mu2利用差异化的预期输出来识别能够触发有趣程序行为但不会导致崩溃的输入。本文描述了Mu2中实施的几种动态优化,以克服使用每个模糊器生成的输入进行变异分析的高成本。这些优化在模糊测试吞吐量和变异杀伤能力之间引入了权衡,我们在五个真实的Java基准测试上进行了实证评估。总体而言,Mu2的变种能够生成具有比最先进的Java模糊器Zest更高变异分数的测试输入库。
论文链接:https://doi.org/10.1145/3597926.3598107
36、How Effective Are Neural Networks for Fixing Security Vulnerabilities
安全漏洞修复是一项急需自动化的艰巨任务。两组技术显示出了希望:(1)大型代码语言模型(LLMs)已经在源代码上进行了预训练,用于诸如代码补全之类的任务;(2)自动化程序修复(APR)技术使用深度学习(DL)模型自动修复软件缺陷。本文首次研究并比较了LLMs和基于DL的APR模型在修复Java漏洞方面的能力。贡献包括:(1)在两个真实世界的Java漏洞基准(Vul4J和VJBench)上应用和评估了五个LLMs(Codex、CodeGen、CodeT5、PLBART和InCoder)、四个经过微调的LLMs和四个基于DL的APR技术;(2)设计代码转换来解决Codex训练和测试数据重叠的威胁;(3)创建了一个新的Java漏洞修复基准VJBench及其转换版本VJBench-trans,以更好地评估LLMs和APR技术;(4)评估了VJBench-trans中的LLMs和APR技术对转换漏洞的修复能力。我们的研究结果包括:(1)现有的LLMs和APR模型修复了很少的Java漏洞。Codex修复了10.2个(20.4%)漏洞,数量最多。其中许多生成的补丁无法编译。(2)使用通用APR数据进行微调可以提高LLMs的漏洞修复能力。(3)我们的新VJBench揭示了LLMs和APR模型未能修复许多常见弱点枚举(CWE)类型,例如CWE-325缺失加密步骤和CWE-444 HTTP请求走私。(4)Codex在转换漏洞上仍然修复了8.7个漏洞,胜过其他所有LLMs和APR模型。研究结果呼吁创新来增强自动化Java漏洞修复,例如创建更大的漏洞修复训练数据,使用这些数据来微调LLMs,并应用代码简化转换来促进漏洞修复。
论文链接:https://doi.org/10.1145/3597926.3598135
37、Hybrid Inlining: A Framework for Compositional and Context-Sensitive Static Analysis
在跨过程静态分析中,上下文敏感性对于获得良好的精度至关重要。要实现上下文敏感性,自顶向下分析需要在每个调用点完全内联被调用函数中的所有语句,从而导致语句爆炸。组合分析通过内联所有被调用函数的摘要来扩展,但通常会失去精度,因为它不是严格的上下文敏感性。我们提出了一个组合且严格上下文敏感的静态分析框架。该框架基于一个关键观察:组合分析通常只在一些需要上下文敏感分析的关键语句上失去精度。我们的方法混合内联关键语句和每个被调用函数的非关键语句摘要,从而避免重新分析非关键语句。此外,我们的分析在需要时延迟摘要关键语句,一旦调用上下文累积足够,就停止传播关键语句。我们基于这个框架设计和实现了几个分析(包括指针分析)。我们对指针分析的评估表明,它可以在几分钟内分析来自DaCapo基准测试套件和工业应用的大型Java程序。与上下文无关分析相比,混合内联仅在DaCapo和工业应用上分别增加了65%和1%的额外时间开销。
论文链接:https://doi.org/10.1145/3597926.3598042
38、Icicle: A Re-designed Emulator for Grey-Box Firmware Fuzzing
基于仿真的模糊测试器可以在没有源代码的情况下测试二进制文件,并且可以方便地测试嵌入式应用程序,其中在目标硬件架构上进行自动化执行是困难且缓慢的。添加的仪器技术用于提取反馈并指导输入变异,以生成有效的测试用例,是现代模糊测试器的核心。然而,现代基于仿真的模糊测试器通过重新利用通用仿真器进行了演变;因此,开发和集成模糊测试技术(例如仪器化方法)是困难的,并且通常以特定于指令集架构(ISA)的临时方式添加。这限制了现有的模糊测试技术在一些ISA(如x86/x86-64或ARM/AArch64)上的应用,这对于对多样化ISA的固件模糊测试是一个重要问题。本研究介绍了我们对于模糊测试的仿真的重新思考的努力。我们设计和实现了一个针对模糊测试的多架构仿真框架——Icicle。我们展示了一次将仪器添加到Icicle中的能力,以一种与架构无关的方式,并且执行开销很低。我们将Icicle作为最先进的ARM固件模糊测试器——Fuzzware的仿真器,并且复制了结果。重要的是,我们展示了Icicle中新仪器的可用性使得发现了新的漏洞。我们通过在不同指令集架构(x86-64、ARM/AArch64、RISC-V、MIPS)的基准测试中发现了漏洞,证明了Icicle的逼真性和与架构无关的仪器的有效性,这些基准测试要求仪器技术具有已知且特定的操作能力。此外,为了展示Icicle在基于仿真的模糊测试器中发现不支持的架构的漏洞的有效性,我们对德州仪器的MSP430 ISA的实际固件二进制文件进行了一次模糊测试,发现了7个新的漏洞。
论文链接:https://doi.org/10.1145/3597926.3598039
39、Improving Binary Code Similarity Transformer Models by Semantics-Driven Instruction Deemphasis
二进制代码相似性分析是针对二进制可执行形式的函数,在大量候选函数中确定一组相似函数的过程。这些相似函数通常是使用不同编译设置从同一源代码编译而来。这种分析有许多应用,例如恶意软件检测、代码克隆检测和自动软件修补。目前最先进的方法采用复杂的深度学习模型,如Transformer模型。我们观察到这些模型受特定编译器约定引起的不良指令分布偏差的影响。我们开发了一种新技术来检测和修复这种偏差,方法是从数据集中删除相应的指令,并对模型进行微调。这需要深度学习模型分析和程序分析之间的协同作用。我们的结果表明,在最具挑战性的情况下,即测试数据可能不符合训练数据分布的情况下,我们可以显著提高最先进模型的性能,最高可达14.4%。
论文链接:https://doi.org/10.1145/3597926.3598121
40、Interpreters for GNN-Based Vulnerability Detection: Are We There Yet?
传统的漏洞检测方法由于需要大量手工操作而存在局限性。自动化漏洞检测方法引起了研究人员的兴趣,尤其是深度学习,取得了显著的成果。由于图形能够比文本更好地传达代码的结构特征,基于图神经网络(GNN)的漏洞检测方法明显优于基于文本的方法。因此,基于GNN的漏洞检测方法越来越受欢迎。然而,对于安全分析师来说,GNN模型接近于黑盒子,因此模型无法提供清晰的证据来解释为什么将某个代码样本检测为有漏洞或安全。在这个阶段,已经提出了许多GNN解释器。然而,这些解释器对于漏洞检测模型提供的解释在稳定性和可信度方面存在高度不一致和不令人信服的问题。为了解决上述问题,我们提出了基于漏洞检测中的关注点(稳定性、鲁棒性和有效性)的原则性指导方针,以评估基于GNN的漏洞检测器的解释方法的质量。我们进行了大量实验,评估了六种著名解释器(GNN-LRP、DeepLIFT、GradCAM、GNNExplainer、PGExplainer和SubGraphX)在四种漏洞检测器(DeepWukong、Devign、IVDetect和Reveal)上的解释性能。实验结果表明,目标解释器在有效性、稳定性和鲁棒性方面表现不佳。在有效性方面,我们发现独立于实例的方法由于对检测模型具有深入的洞察力而表现优于其他方法。在稳定性方面,基于扰动的解释方法对模型参数的轻微变化更具弹性,因为它们与模型无关。在鲁棒性方面,独立于实例的方法为类似漏洞提供更一致的解释结果。
论文链接:https://doi.org/10.1145/3597926.3598145
41、ItyFuzz: Snapshot-Based Fuzzer for Smart Contract
智能合约是关键的金融工具,其安全性至关重要。然而,由于所有交易背后都有持久的区块链状态,智能合约程序很难进行模糊测试。变异的交易序列复杂且常常导致输入和程序空间的不理想探索。本文介绍了一种用于测试智能合约的新型基于快照的模糊测试工具ItyFuzz。在ItyFuzz中,我们不存储交易序列并对其进行变异,而是快照状态和单例交易。为了探索有趣的状态,ItyFuzz引入了数据流路径点机制来识别具有更大潜力动能的状态。ItyFuzz还结合了比较路径点来修剪状态空间。通过保持状态的快照,ItyFuzz可以快速合成具体的攻击,如再入攻击。由于ItyFuzz具有二级响应时间来测试智能合约,它可以用于链上测试,与本地开发测试相比具有许多优势。最后,我们在真实世界的智能合约和一些被黑客攻击的链上DeFi项目上评估了ItyFuzz。在指令覆盖方面,ItyFuzz优于现有的模糊测试工具,并且可以快速找到和生成链上项目的真实攻击。
论文链接:https://doi.org/10.1145/3597926.3598059
42、Large Language Models Are Zero-Shot Fuzzers: Fuzzing Deep-Learning Libraries via Large Language Models
深度学习(DL)系统在我们的日常生活中变得非常流行,并且无处不在。这些系统建立在流行的DL库(如TensorFlow和PyTorch)之上,这些库提供了DL系统的构建模块。在这些DL库中检测错误对于确保最终用户的有效性/安全性对于几乎所有下游DL系统都至关重要。与此同时,传统的模糊测试技术在这个具有挑战性的领域中很难起作用,因为输入的DL程序需要同时满足输入语言(如Python)的语法/语义和DL API输入/形状约束以进行张量计算。
为了解决这些限制,我们提出了TitanFuzz - 第一个直接利用大型语言模型(LLMs)来生成用于模糊测试DL库的输入程序的方法。LLMs是在数十亿个代码片段上训练的巨大模型,可以自动生成类似人类的代码片段。我们的关键洞察是现代LLMs也可以包含大量调用DL库API的代码片段在它们的训练语料库中,因此可以隐式学习语言的语法/语义和复杂的DL API约束以生成有效的DL程序。具体而言,我们使用生成型和填充型LLMs(如Codex/InCoder)来生成和变异用于模糊测试的有效/多样化的输入DL程序。我们的实验结果表明,TitanFuzz在TensorFlow/PyTorch上的代码覆盖率比最先进的模糊测试工具提高了30.38%/50.84%。此外,TitanFuzz能够发现65个错误,其中44个已经确认为之前未知的错误。
本文表明,现代的巨型LLMs可以被利用来直接执行几十年来研究的基于生成和基于变异的模糊测试,同时实现完全自动化、可推广性,并适用于传统方法(如DL系统)难以应对的领域。我们希望TitanFuzz能够在LLMs用于模糊测试的这个有前途的方向上推动更多的工作。
论文链接:https://doi.org/10.1145/3597926.3598067
43、NodeRT: Detecting Races in Node.js Applications Practically
由于其卓越的并发支持,Node.js已成为最受欢迎的开发平台之一。然而,在Node.js应用程序中,由事件处理程序的非确定性执行顺序引发的竞争可能会导致严重的运行时故障。最先进的Node.js竞争检测工具NRace在检测之前使用一组HB(happens-before)关系规则构建了一个HB图。在检测过程中,NRace利用一种基于BFS的重型算法查询资源操作之间的可达性,这在实践中引入了大量开销,导致NRace无法应用于真实世界的Node.js应用程序测试过程。本文提出了一种更实用的Node.js动态竞争检测方法,称为NodeRT(Node.js Race Tracker)。为了减少不必要的开销,NodeRT简化了HB关系规则,并将检测分为三个阶段:跟踪收集阶段、竞争候选检测阶段和误报移除阶段。在跟踪收集阶段,NodeRT构建了一个称为异步调用树(ACTree)的部分HB图,实现了事件处理程序之间的高效可达性查询。在竞争候选检测阶段,NodeRT对ACTree进行检测,有效地消除了大多数非竞争事件处理程序,并输出竞争候选项。在误报移除阶段,NodeRT利用从HB关系规则和资源特征导出的匹配规则,减少了竞争候选项中的误报。在实验中,NodeRT检测到了所有已知的竞争和9个未知的有害竞争,而NRace仅检测到3个未知的有害竞争,平均耗时增加了64倍。与NRace相比,NodeRT显著降低了开销,使其成为集成到真实世界测试过程中的实用工具。
论文链接:https://doi.org/10.1145/3597926.3598139
44、OCFI: Make Function Entry Identification Hard Again
函数入口识别是二进制反汇编器中一个至关重要且具有挑战性的任务,过去几十年一直是研究的焦点。然而,最近的研究表明,调用帧信息(CFI)提供了准确且几乎完整的函数入口信息。借助CFI的帮助,反汇编器在函数入口检测方面有了显著的改进。CFI专门设计用于有效的堆栈展开,在x64和aarch64架构中,每个函数都有相应的CFI。然而,并非每个函数和指令在运行时都会展开堆栈,这一观察结果导致了使用混淆等技术来使反汇编器难以检测函数的发展。
我们提出了基于这一观察的OCFI原型,用于混淆CFI。OCFI的目标是阻碍使用CFI作为函数入口检测方式的流行反汇编器的函数检测。我们在包括真实应用程序和自动生成程序的大规模数据集上评估了OCFI,并发现混淆后的CFI能够正确展开堆栈,并使流行反汇编器的函数入口检测更加困难。此外,平均而言,OCFI仅引入4%的大小开销,几乎没有运行时开销。
论文链接:https://doi.org/10.1145/3597926.3598097
45、Precise and Efficient Patch Presence Test for Android Applications against Code Obfuscation
第三方库(TPLs)广泛被Android开发者用于实现新的应用程序。然而,TPLs经常存在各种漏洞,攻击者可以利用这些漏洞对应用程序用户造成灾难性后果。因此,在目标应用程序中测试漏洞是否已修复至关重要。然而,现有技术无法有效地测试混淆应用程序的补丁存在性,而混淆在实践中普遍存在。为了应对代码混淆引入的新挑战,本研究提出了PHunter,这是一个系统,它捕获与补丁相关方法的抗混淆语义特征,以确定目标应用程序中补丁的存在。具体而言,PHunter利用粗粒度特征定位与补丁相关的方法,并比较细粒度的语义相似性来确定代码是否已经修复。对94个CVE和200个应用程序进行了广泛评估,结果显示PHunter能够胜过现有的工具,平均准确率为97.1%,具有高效率和低误报率。此外,PHunter能够抵御不同的混淆策略。更重要的是,PHunter有助于消除现有TPL检测工具产生的误报。特别是,它可以帮助减少高达25.2%的误报,准确率为95.3%。
论文链接:https://doi.org/10.1145/3597926.3598061
46、Quantitative Policy Repair for Access Control on the Cloud
随着云计算的普及,提供对云存储信息的安全访问已成为一个关键问题。由于访问控制策略的复杂性,管理员可能会无意中允许对私人信息的意外访问,这是云服务中数据泄露的常见原因。本文提出了一种定量符号分析方法,用于自动修复过于宽松的访问策略。我们使用SMT公式对访问控制策略的语义进行编码,并使用模型计数来评估其宽容性。给定一个策略、一个宽容性界限和一组应允许的请求,我们通过宽容性的减少和改进来迭代修复策略,以便达到宽容性界限,同时仍然允许给定的请求集合。我们通过将该方法应用于亚马逊的AWS身份和访问管理(IAM)策略语言编写的策略来展示我们自动化的策略修复技术的有效性。
论文链接:https://doi.org/10.1145/3597926.3598078
47、Quantitative Symbolic Similarity Analysis
相似性分析在各种软件工程任务中起着至关重要的作用,例如检测软件变更、版本合并、识别抄袭和分析二进制代码。等价分析是相似性的一种更严格形式,重点是确定不同程序或同一程序的不同版本是否表现相同。虽然在代码和二进制相似性以及等价分析方面存在大量研究,但这些领域缺乏定量推理。非等价性是一个需要深入探索的范围,因为它可以在输入域空间的不同方式中显现出来。本文强调了由语义差异引起的非等价性的定量推理的重要性。通过对非等价性进行定量推理,可以确定程序在哪些特定的输入范围内是等价的或非等价的。我们旨在填补符号相似性分析中定量推理的空白,从而实现对程序行为的更全面的理解。
论文链接:https://doi.org/10.1145/3597926.3605238
48、Rare Path Guided Fuzzing
从随机的初始种子开始,模糊测试器寻找能够触发错误或漏洞的输入。然而,模糊测试器经常无法生成满足限制性分支条件的程序路径的输入。在本文中,我们展示了通过首先识别程序中的稀有路径(即通过随机输入生成不太可能满足的路径约束的程序路径),然后生成能够触发稀有路径的输入/种子,可以提高模糊测试工具的覆盖率。具体而言,我们提出了两种技术:1)使用定量符号分析识别稀有路径,2)使用路径引导的共模执行生成可以探索这些稀有路径的输入。我们将这些输入作为初始种子集提供给三个最先进的模糊测试器。我们在一组程序上进行的实验评估显示,与随机初始种子相比,模糊测试器使用基于稀有路径的种子集能够实现更好的覆盖率。
论文链接:https://doi.org/10.1145/3597926.3598136
49、Reasoning about MLIR Semantics through Effects and Handlers
MLIR是一种新颖的编译器中间表示(IR)开发框架。在其核心,MLIR是一个用于规范语法片段(方言)和优化的框架,可以按需组合以形成定制的IR。通过这一方式,MLIR允许在不同领域之间共享IR抽象。随着MLIR在工业界的迅速应用,迫切需要与MLIR提供的灵活性和可扩展性相匹配的形式化语义技术。我们提出了一个基于效果处理程序的MLIR语义框架,可以以模块化和可组合的方式指定方言语义,与MLIR并行。我们还描述了基于处理程序的MLIR语义的几个研究方向。
论文链接:https://doi.org/10.1145/3597926.3605239
50、Reducing the Memory Footprint of IFDS-Based Data-Flow Analyses using Fine-Grained Garbage Collection
IFDS算法对于大型程序来说既需要大量的内存又需要计算资源,因为它需要在内存中存储大量的路径边缘并对其进行处理,直到达到一个固定点。一般来说,基于IFDS的数据流分析,如污点分析,旨在仅在某些程序点发现数据流事实。维护大量路径边缘(其中许多仅访问一次)会浪费内存资源,从而降低其可扩展性和效率(由于用于路径边缘数据结构的频繁重新哈希操作)。本文介绍了一种细粒度垃圾回收(GC)算法,以使(多线程)IFDS通过从其路径边缘数据结构中删除非活动路径边缘(即不再需要用于建立其他路径边缘的边缘)来减少内存占用。所得到的IFDS算法称为FPC,保持了IFDS的正确性、精度和终止性质,同时避免了在分析的未来迭代中重复处理已进行GC的路径边缘(在存在未知递归循环的情况下可能形成)。与CleanDroid不同,后者使用粗粒度GC算法在方法级别收集路径边缘,FPC则通过在数据事实级别收集路径边缘来实现细粒度控制。因此,FPC可以收集比CleanDroid更多的路径边缘,并且因此对于使用的路径边缘数据结构的重新哈希操作更少。在我们的评估中,我们专注于将基于IFDS的污点分析应用于一组28个Android应用程序。FPC可以可扩展地分析三个应用程序,而CleanDroid无法在每个应用程序的3小时预算内完全运行(因为内存不足)。对于其余的25个应用程序,FPC分别将CleanDroid产生的路径边缘数量和内存使用减少了4.4倍和1.4倍,因此平均而言,FPC的性能优于CleanDroid的1.7倍(在最佳情况下可达到18.5倍)。
论文链接:https://doi.org/10.1145/3597926.3598041
51、Security Checking of Trigger-Action-Programming Smart Home Integrations
物联网(IoT)已经在各个领域广泛应用,尤其是在家庭自动化(HA)的背景下。为了更好地控制HA-IoT设备,尤其是整合多个设备以实现丰富的智能功能,触发-动作编程,如"If This Then That"(IFTTT),已经成为一种流行的范式。利用这种范式,新手用户可以轻松地在小程序中指定他们的意图,即在特定条件满足时如何通过另一个设备/服务来控制设备/服务。然而,由于缺乏安全经验或对针对个别设备的网络攻击的安全影响缺乏认识,用户可能会不恰当地设计IFTTT风格的整合。这导致了财务损失、隐私泄露、未经授权访问和其他安全问题。为了解决这些问题,本文提出了一个名为MEDIC的系统框架,用于对智能家居整合进行建模和安全检查。它可以自动生成包括小程序的服务/设备行为和动作规则的模型,并考虑外部攻击和设备内部的漏洞。我们的方法大约需要一秒钟的时间来完成一个整合的建模和检查。我们基于一个用户研究和从ifttt.com爬取的数据集创建了200个整合,并进行了实验。令人惊讶的是,近83%的这些整合存在安全问题。
论文链接:https://doi.org/10.1145/3597926.3598084
52、Semantic-Based Neural Network Repair
最近,神经网络已经广泛应用于许多安全关键系统等领域。神经网络是通过在TensorFlow和PyTorch等框架中进行编程构建(和训练)的。开发人员可以应用一套丰富的预定义层来手动编程神经网络,或者通过自动化机器学习(例如AutoML)来自动生成神经网络。由于必须满足使用这些层的非平凡约束条件,因此组合不同层的神经网络容易出错。在这项工作中,我们提出了一种自动修复错误神经网络的方法。挑战在于识别对网络进行最小修改,使其变为有效的。修改一个层可能对后续层产生级联影响,因此我们的方法必须递归搜索以识别“全局”最小修改。我们的方法基于深度学习层的可执行语义,重点关注实践中常见的四类错误。我们在两个使用场景下评估了我们的方法,即修复自动生成的神经网络和手动编写的神经网络中常见的模型错误。结果表明,我们能够有效且高效地修复一组随机生成的神经网络(这些网络是使用现有的AI框架测试方法生成的)的100%(平均修复时间为21.08秒),以及一组真实神经网络错误的93.75%(平均时间为3分钟40秒)。
论文链接:https://doi.org/10.1145/3597926.3598045
53、SmartState: Detecting State-Reverting Vulnerabilities in Smart Contracts via Fine-Grained State-Dependency Analysis
Solidity编写的智能合约广泛应用于以太坊、TRON和BNB Chain等不同的区块链平台。Solidity智能合约中的一种独特设计是其用于错误处理和访问控制的状态还原机制。然而,最近发生的一些安全事件表明,攻击者也利用这一机制来操纵智能合约的关键状态,从而带来非法利润和拒绝服务(DoS)等安全后果。本文将这种漏洞称为状态还原漏洞(SRV)。自动识别SRV面临独特的挑战,因为它需要对智能合约中的状态依赖关系进行深入分析和理解。
本文提出了SmartState,一种通过细粒度状态依赖分析来检测Solidity智能合约中的状态还原漏洞的新框架。SmartState集成了一套新颖的机制来确保其有效性。特别地,SmartState从合约字节码和历史交易中提取状态依赖关系,这两者对于推断与SRV相关的依赖关系至关重要。此外,SmartState将SRV的通用模式(即利润获取和DoS)建模为SRV指标,并根据构建的状态依赖图有效地识别SRV。为了评估SmartState,我们手动注释了一个包含91个真实世界SRV的基准数据集。评估结果显示,SmartState实现了87.23%的精确度和89.13%的召回率。此外,SmartState成功地从47,351个真实世界智能合约中识别出406个新的SRV。其中11个SRV来自交易金额较高(即前2000名)的热门智能合约。总体而言,我们报告的SRV影响了总价值为428,600美元的数字资产。
论文链接:https://doi.org/10.1145/3597926.3598111
54、Splendor: Static Detection of Stored XSS in Modern Web Applications
在现代网站中,存储型跨站脚本攻击(XSS)是最危险的XSS漏洞,它可以将恶意代码存储在网站系统中,并直接由受害者触发。作为网站上最常用的数据存储介质,数据库(DB)也是存储型XSS最常发生的地方。由于现代编程架构的模块化特性,复杂的底层数据库操作通常会被封装和抽象为数据访问层(DAL),以提供统一的数据访问服务给业务层。在封装过程中广泛使用的面向对象(OO)和动态语言特性使得静态污点分析工具越来越难以理解污点数据在源代码和数据库之间的流动路径。本文提出了一种静态分析框架,用于检测现代Web应用中使用DAL的存储型XSS,并实现了一个名为Splendor的PHP代码分析原型。该框架的亮点是设计了一种启发式但精确的令牌匹配方法,用于定位数据库和源代码之间的污点数据流动路径。识别出的数据库读取和写入(R/W)位置的准确率分别为91.3%和82.6%。通过识别出的R/W位置,可以静态地连接污点路径,以获取存储型XSS的完整污点传播路径。与现有的五个真实应用程序和GitHub上的PHP Web应用程序进行的大规模实验比较表明,Splendor在存储型XSS检测方面明显优于最先进的静态和动态方法,并发现了17个零日漏洞。
论文链接:https://doi.org/10.1145/3597926.3598116
55、SymRustC: A Hybrid Fuzzer for Rust
我们提出了SymRustC,一种用于Rust的混合模糊测试工具。SymRustC是混合的,因为它结合了模糊测试和共轭执行。SymRustC利用了一个名为SymCC的现有工具的共轭执行能力,以及另一个名为LibAFL的现有工具的模糊测试能力。由于SymCC为共轭执行而仪器化了LLVM IR(中间表示),而Rust编译器使用LLVM作为后端,我们将SymCC与Rust编译器集成,以为Rust程序提供共轭执行的仪器化支持。LibAFL提供了一个开发模糊测试工具的框架,我们使用它来开发一个混合模糊测试工具,结合了模糊测试和我们的共轭执行。我们讨论了我们的实现以及四个案例研究,以证明SymRustC可以生成发现Rust程序中错误的输入。
论文链接:https://doi.org/10.1145/3597926.3604927
56、Systematic Testing of the Data-Poisoning Robustness of KNN
数据污染旨在通过污染训练集来损害基于机器学习的软件组件,以改变其对测试输入的预测结果。现有的决定数据污染鲁棒性的方法要么准确度低,要么运行时间长,并且更重要的是,它们只能证明一些真正鲁棒的情况,但在认证失败时无法得出结论。换句话说,它们无法证明真正非鲁棒的情况。为了克服这个限制,我们提出了一种基于系统化测试的方法,可以证明和证实广泛使用的监督学习技术k最近邻(KNN)的数据污染鲁棒性。由于在抽象域中进行新颖的过程分析来快速缩小搜索空间,以及在具体域中进行系统化测试以找到实际违规行为,我们的方法比基准枚举方法更快更准确。我们对一组监督学习数据集评估了我们的方法。结果显示,该方法明显优于最先进的技术,并且能够决定KNN预测结果在大多数测试输入上的数据污染鲁棒性。
论文链接:https://doi.org/10.1145/3597926.3598129
57、Tai-e: A Developer-Friendly Static Analysis Framework for Java by Harnessing the Good Designs of Classics
静态分析是一个成熟的领域,应用于错误检测、安全分析、程序理解、优化等方面。为了促进这些应用,静态分析框架发挥着重要作用,提供一系列基本服务,如中间表示(IR)生成、控制流图构建、指向/别名信息计算等。然而,尽管静态分析取得了巨大进展,过去几十年中也出现了几个著名的框架,但对于依赖它们来创建和实施分析的开发人员来说,这些框架并不容易学习和使用。在这个意义上,构建一个开发人员友好的静态分析框架并不是一件简单的事情,因为相比于静态分析本身所需的知识,我们在设计和实现静态分析框架方面的知识要少得多。
在这项工作中,我们通过讨论Java静态分析框架关键组件的设计权衡,采用“利用经典设计”的原则选择设计方案:对于静态分析框架的每个关键组件,我们比较了不同经典框架(如Soot、Wala、Doop、SpotBugs和Checker)可能采用的设计选择,并选择了一个更合适的方案;但如果没有一个方案足够好,我们则提出了一个更好的设计。这些选定或新提出的设计最终构成了Tai-e,一个全新的Java静态分析框架,它从头开始实现。Tai-e在IR、指针分析和新分析开发等多个方面的设计上具有创新性,从而实现了一个开发人员友好(易学易用)的分析框架。据我们所知,这是第一个系统探索Java各种静态分析框架设计和实现的工作。我们希望它能为构建更好的静态分析基础设施提供有用的材料和观点,并希望它能引起社区对这个具有挑战性但切实可行的话题的更多关注。
论文链接:https://doi.org/10.1145/3597926.3598120
58、Testing Automated Driving Systems by Breaking Many Laws Efficiently
自动驾驶系统(ADS)作为自动驾驶车辆(AV)的大脑,在部署前需要进行全面测试。
ADS必须满足一系列复杂的规定,以确保道路安全,例如现有的交通法规以及可能专门针对AV的未来法规。
为了全面测试ADS,我们希望系统地发现各种违反特定交通法规的场景。挑战在于,一方面有许多交通法规(例如中国交通法规中有13条可测试的条款,新加坡交通法规中有16条可测试的条款,分别涉及81种和43种违规情况);另一方面,许多交通法规只适用于复杂的特定场景。
现有的ADS测试方法要么专注于简单的规则(如无碰撞),要么在生成多样化违规场景方面能力有限。
在本研究中,我们提出了一种新的ADS测试方法ABLE,受到GFlowNet的成功启发,旨在通过生成各种场景高效地违反多个法规。
与传统的GFlowNet不同,ABLE根据强健信号时态逻辑的鲁棒性语义和主动学习,动态更新测试目标,以有效地探索广阔的搜索空间。
我们基于Apollo和LGSVL对ABLE进行评估,结果表明,在测试Apollo 6.0和Apollo 7.0时,ABLE违反了更多(分别为17%和25%)的法规,其中大部分是难以违反的法规,超过了现有技术水平。
论文链接:https://doi.org/10.1145/3597926.3598108
59、Testing the Compiler for a New-Born Programming Language: An Industrial Case Study (Experience Paper)
由于编译器的重要作用,已经提出了许多编译器测试技术,其中最值得注意的两类技术是基于语法和基于变形的技术。所有这些技术都已广泛研究用于测试成熟的编译器。然而,在实践中,通常需要为一种新生的编程语言开发新的编译器。在这种情况下,由于某些重要原因,现有的技术很难适用:(1)没有参考编译器来支持差异测试,(2)缺乏程序分析工具来支持大多数基于变形的编译器测试,(3)由不同编程语言特性带来的大量实现工作。因此,目前尚不清楚现有技术在这种新情景下的表现如何。
在这项工作中,我们进行了第一次探索(即一个工业案例研究),以大量改进适应这种新情景的现有技术的性能。我们通过基于代码片段合成新的测试程序,并使用编译崩溃作为测试预期结果,将基于语法的编译器测试技术适应到这种情景中,因为没有参考编译器进行差异测试。我们还通过构造等效的测试程序,以缓解对程序分析工具的依赖,将基于变形的编译器测试技术适应到这种情景中。我们分别将这些改进后的技术称为SynFuzz和MetaFuzz。
我们在一家全球性IT公司的一种新生编程语言的两个版本的新编译器上评估了SynFuzz和MetaFuzz。通过与测试团队采用的测试实践和一般模糊测试器(AFL)进行比较,SynFuzz能够在相同的测试时间内检测到更多的错误,而SynFuzz和MetaFuzz都可以互补这两种技术。特别是,SynFuzz和MetaFuzz共检测出11个以前未知的错误,这些错误已由开发人员修复。根据工业案例研究,我们总结了一系列实际应用和未来研究的经验教训和建议。
论文链接:https://doi.org/10.1145/3597926.3598077
60、Third-Party Library Dependency for Large-Scale SCA in the C/C++ Ecosystem: How Far Are We?
现有的C/C++生态系统的软件组合分析(SCA)技术倾向于通过目标软件项目和收集的第三方库(TPLs)之间的特征匹配来识别重复使用的组件。然而,由于内部代码克隆引起的特征重复可能导致不准确的SCA结果。为了缓解这个问题,提出了Centris,这是一种针对C/C++生态系统的最新SCA技术,采用函数级代码克隆检测来推导TPL依赖关系,以在执行SCA任务之前消除冗余特征。虽然Centris在原始论文中已被证明有效,但其推导的TPL依赖关系的准确性尚未得到评估。此外,用于评估TPL依赖对SCA影响的数据集是有限的。为了进一步调查Centris的有效性和局限性,我们首先构建了两个大规模的地面真实数据集,分别用于评估推导TPL依赖性和SCA结果的准确性。然后我们广泛评估了Centris,评估结果表明Centris推导的TPL依赖性的准确性可能不适用于我们的评估数据集。我们进一步推断导致性能下降的关键因素可能是不准确的函数出现时间和基于阈值的召回率。此外,Centris推导的TPL依赖对SCA的影响可能有一定的限制。受到我们的发现的启发,我们提出了TPLite,采用基于函数级起源TPL检测和基于图的依赖关系召回,以增强C/C++生态系统中TPL重用检测的准确性。我们的评估结果表明,与Centris相比,TPLite有效地将TPL依赖性的精确度从35.71%增加到88.33%,召回率从49.44%增加到62.65%。此外,TPLite将精确度从21.08%增加到75.90%,将召回率从57.62%增加到64.17%,与SOTA学术SCA工具B2SFinder相比,甚至优于被广泛采用的商业SCA工具BDBA,即将精确度从72.46%增加到75.90%,将召回率从58.55%增加到64.17%。
论文链接:https://doi.org/10.1145/3597926.3598143
61、To Kill a Mutant: An Empirical Study of Mutation Testing Kills
突变测试已经作为评估测试套件强度的方法被使用和研究了四十多年。该技术将一个人工缺陷(即突变)添加到程序中以生成一个变异体,然后运行测试套件以确定其中是否有任何测试用例足以检测到这个突变(即杀死变异体)。在这种情况下,导致测试用例失败的就是杀死变异体的那个。然而,我们对这些失败的本质知之甚少。本文介绍了一项实证研究,旨在探究这些失败的本质。我们试图回答以下问题:测试用例是如何失败的,从而导致杀死变异体?对于每个被杀死的变异体,有多少个测试用例失败,考虑到只需要一个失败就可以杀死该变异体?程序崩溃如何导致杀死变异体,这些崩溃的起源和本质是什么?我们在所有实验对象中发现了几个有启示意义的结果,包括“崩溃”对导致杀死变异体的测试失败的重要贡献,即使对于单个突变,测试失败的原因也是多样化的,以及常常引发崩溃的特定异常类型。我们认为,这项研究及其结果应该在实践者使用突变测试和解释其突变分数时予以考虑,并且对于研究者来说,在他们未来的工作中研究和利用突变测试时也应该加以重视。
论文链接:https://doi.org/10.1145/3597926.3598090
62、Toward Automated Detecting Unanticipated Price Feed in Smart Contract
基于智能合约的去中心化金融(DeFi)在2022年达到了超过2000亿美元的总锁定价值(TVL)。在DeFi生态系统中,价格预言机在为加密货币提供实时价格数据以确保智能合约中准确的资产定价方面发挥着关键作用。然而,价格预言机也面临着安全问题,包括可能出现意外的价格数据,这可能导致DeFi协议中的债务和资产不平衡。然而,现有的解决方案无法有效地结合交易和代码来实时监控价格预言机。
为了解决这个限制,我们首先将价格预言机分为DON预言机、DEX预言机或内部预言机,基于可信方进行分类,并分析它们的安全风险、数据来源、价格持续时间和查询费用。然后,我们提出了VeriOracle,这是一个形式化验证框架,用于自动检测智能合约中的意外价格数据。VeriOracle可以在区块链上部署价格预言机的形式化语义模型,实时检测智能合约的状态,并识别出意外价格数据的交易。我们将VeriOracle应用于实际世界中13个易受攻击的DeFi协议的50万多笔交易的验证。实验结果表明:(1)VeriOracle是有效的,它可以在DeFi攻击之前(最佳情况下比攻击者提前33,714个区块)检测到意外价格数据;(2)VeriOracle是高效的,其验证时间(约4秒)小于以太坊的区块时间(约14秒),这意味着VeriOracle可以实时检测到不安全的交易;(3)VeriOracle是可扩展的,用于验证防御策略。使用意外价格数据的攻击只能在特定的智能合约状态下成功。VeriOracle可以验证哪些智能合约状态可以防御攻击。
论文链接:https://doi.org/10.1145/3597926.3598133
63、Towards Efficient Fine-Tuning of Pre-trained Code Models: An Experimental Study and Beyond
最近,在许多软件测试和分析任务中,对预训练的代码模型(如CodeBERT)进行微调取得了巨大的成功。虽然这种方法有效且普遍,但微调预训练参数会带来很大的计算成本。本文通过广泛的实验研究,探讨了在微调过程中逐层预训练表示和编码的代码知识发生的变化。然后,我们根据上述发现提出了基于这些发现的高效微调大型预训练代码模型的替代方法。我们的实验研究表明:(1)源代码的词汇、句法和结构特性分别编码在较低、中间和较高层,而语义特性则跨越整个模型。(2)微调的过程保留了大部分代码特性。具体而言,由较低和中间层捕获的基本代码特性在微调过程中仍然保留。此外,我们发现,仅顶部两层的表示在各种下游任务的微调过程中发生了最大变化。(3)基于上述发现,我们提出了Telly,通过层冻结来高效微调预训练的代码模型。对五个不同的下游任务进行的广泛实验结果表明,训练参数和相应的时间成本大大降低,而性能相当或更好。
论文链接:https://doi.org/10.1145/3597926.3598036
64、TreeLine and SlackLine: Grammar-Based Performance Fuzzing on Coffee Break
TreeLine和SlackLine是基于语法的模糊测试工具,用于快速发现由上下文无关文法描述的丰富结构文本驱动的程序中的性能问题。与长时间的模糊测试活动不同,后者旨在寻找触发安全漏洞的(大多数无效的)输入,TreeLine和SlackLine旨在在几分钟而不是几小时内搜索有效输入的性能问题。TreeLine和SlackLine的前端在搜索策略上有所不同(分别是蒙特卡洛树搜索或派生树拼接),但接受相同的语法规范,并依赖于共同的后端进行仪表化执行。关注点的分离应该方便其他研究人员使用,他们希望探索前端或后端的替代方案和扩展。
论文链接:https://doi.org/10.1145/3597926.3604925
65、Understanding and Tackling Label Errors in Deep Learning-Based Vulnerability Detection (Experience Paper)
软件系统的复杂性和安全漏洞的多样性是软件漏洞研究中持续挑战的可信来源。应用深度学习方法进行自动漏洞检测已被证明是一种有效的补充传统检测方法的手段。然而,缺乏合格的基准数据集可能严重限制基于深度学习的漏洞检测技术的有效性。具体而言,现有漏洞数据集中存在错误标签的长期存在可能导致不准确、偏倚甚至错误的结果。在本文中,我们旨在对标签错误的原因进行深入理解和解释。为此,我们系统地分析了现代学习型漏洞检测方法使用的多样化数据集,并检查了它们用于收集易受攻击源代码数据集的技术。我们发现,标签错误严重影响主流漏洞检测模型,最坏情况下平均F1值下降了20.7%。作为缓解措施,我们引入了两种数据集去噪的方法,平均可以提高模型性能10.4%。利用数据集去噪方法,我们提供了一个可行的解决方案来获得高质量的标记数据集。
论文链接:https://doi.org/10.1145/3597926.3598037
66、Validating Multimedia Content Moderation Software via Semantic Fusion
社交媒体平台(如Facebook、Instagram、YouTube和TikTok)的指数增长彻底改变了人类社会的沟通和内容发布方式。在这些平台上,用户可以发布多媒体内容,通过文本、音频、图片和视频的组合传递信息。与此同时,多媒体内容发布的便利性越来越多地被用于传播有害内容,如仇恨言论、恶意广告和色情内容。为此,在这些平台上广泛部署了内容审核软件,以检测和阻止有害内容。然而,由于内容审核模型的复杂性和跨多种模态信息理解的困难,现有的内容审核软件可能无法检测到有害内容,这往往导致极其负面的影响(例如对青少年心理健康的有害影响)。
我们引入了语义融合,一种通用且有效的验证多媒体内容审核软件的方法论。我们的主要思想是将两个或多个现有的单模态输入(例如文本句子和图像)融合成一种以新颖方式结合其祖先的语义并具有有害性质的新输入。然后,使用这个融合的输入来验证多媒体内容审核软件。我们将语义融合实现为DUO,一种实用的内容审核软件测试工具。在我们的评估中,我们使用DUO来测试五种商业内容审核软件和两种最先进的模型对三种类型的有害内容进行测试。结果显示,当测试审核软件时,DUO的错误发现率(EFR)可达到100%,而测试最先进的模型时,EFR可达到94.1%。此外,我们利用DUO生成的测试用例对我们研究的两个模型进行重新训练,从而在保持原始测试集准确率的同时大大提高了模型的鲁棒性(2.5%~5.7%的EFR)。
版权归原作者 riusksk 所有, 如有侵权,请联系我们删除。