软件工程学术顶刊——TSE 2023 论文(网络安全方向)清单与摘要

1、A Source-Level Instrumentation Framework for the Dynamic Analysis of Memory Safety

底层控制使得 C 语言不安全,导致内存错误,可能导致数据损坏、安全漏洞或程序崩溃。动态分析工具通常在 IR 或二进制级别进行仪器化,用于在运行时检测内存错误,然而,这些非源代码级别的仪器化框架和工具存在两个固有的缺点:对优化敏感和平台依赖性。由于对优化敏感,使用这些工具的用户必须在编译程序时在性能和效果之间进行权衡,可以选择使用 -O0 编译程序以换取效果,或者使用更高的优化级别(例如 -O3)以换取性能。在本文中,我们提出了一种新的源代码级仪器化框架,以克服这两个缺点,并在一个名为 Movec 的新动态分析工具中实现了它,该工具采用基于指针的监控算法。我们通过使用 NIST 的 SARD 基准套件(1152 个程序),一组包含真实结果的 126 个微基准测试,一组 20 个 MiBench 基准测试和 5 个纯 C 的 SPEC CPU 2017 基准测试全面评估了 Movec。在效果方面,Movec 在所有标准优化级别(从 -O0 到 -O3)上表现优于三种最先进的动态分析工具,即 AddressSanitizer、SoftBoundCETS 和 Valgrind。在性能方面,Movec 优于 SoftBoundCETS 和 Valgrind,并且比 AddressSanitizer 慢但占用更少的内存。

论文链接:https://ieeexplore.ieee.org/document/9905988

2、ARTE: Automated Generation of Realistic Test Inputs for Web APIs

自动化生成用于Web API的测试用例是一个繁荣的研究课题,其中测试用例通常从API规范中派生而来。然而,这个过程只是部分自动化,因为测试人员通常需要手动为每个输入参数设置有意义的有效测试输入。在本文中,我们介绍了ARTE,一种从知识库(如DBpedia)中自动提取Web API的真实测试数据的方法。具体而言,ARTE利用API参数的规范,通过自然语言处理、基于搜索的技术和知识提取技术自动搜索真实的测试输入。ARTE已经集成到RESTest中,这是一个用于RESTful API的开源测试框架,完全自动化了测试用例生成过程。对来自48个现实世界Web API的140个操作进行的评估结果显示,ARTE可以高效地为64.9%的目标参数生成真实的测试输入,优于最先进的方法SAIGEN(31.8%)。更重要的是,ARTE支持生成超过两倍于随机生成(20%)和SAIGEN(26%)的有效API调用(57.3%),从而提高了故障检测能力,并发现了几个真实世界的错误。这些结果显示了ARTE在增强现有Web API测试工具方面的潜力,实现了前所未有的自动化水平。

论文链接:https://ieeexplore.ieee.org/document/9712422

3、Automatic Detection of Java Cryptographic API Misuses: Are We There Yet?

Java平台提供了各种加密API,以便帮助进行安全编码。然而,对于缺乏网络安全培训的开发人员来说,正确使用这些API是具有挑战性的。先前的研究表明,许多开发人员错误使用API,从而在其软件中引入漏洞。为了消除这些漏洞,人们创建了工具来检测和/或修复加密API的误用。然而,目前尚不清楚:(1)当前的工具是如何设计来检测加密API的误用的,(2)这些工具在定位API误用方面的有效性如何,以及(3)开发人员如何看待工具的输出的实用性。针对这篇论文,我们进行了一项实证研究,以调查上述研究问题。具体而言,我们首先对现有工具进行了文献调查,并从不同角度比较它们的设计方法。然后,我们将这些工具应用于三个广泛使用的基准测试中,以衡量工具在API误用检测方面的有效性。接下来,我们将这些工具应用于200个Apache项目,并向开发人员发送了57个漏洞报告以获取他们的反馈。我们的研究揭示了一些有趣的现象。例如,这六种工具中没有一种被普遍认为比其他工具更好;然而,CogniCrypt、CogniGuard和Xanitizer的性能优于SonarQube。与接受报告的开发人员相比,更多的开发人员拒绝了工具的报告(30人对9人),原因是他们对工具的能力、建议修复的正确性以及报告问题的可利用性表示担忧。这项研究揭示了先进工具与开发人员期望之间存在重大差距,为漏洞检测领域的未来研究提供了启示。

论文链接:https://ieeexplore.ieee.org/document/9711933

4、CPVD: Cross Project Vulnerability Detection Based on Graph Attention Network and Domain Adaptation

代码漏洞检测对于软件安全预防至关重要。在大规模软件代码中进行漏洞注释是非常繁琐和具有挑战性的,需要领域专家花费大量时间进行注释。本研究提出了CPVD,一种基于"使用具有丰富漏洞标签的项去快速预测另一项的漏洞标签"的跨领域漏洞检测方法。CPVD使用代码属性图来表示代码,并使用图注意力网络和卷积池化网络来提取图特征向量。它通过域适应表示学习阶段,减少了源领域和目标领域数据之间的分布差异,用于跨领域漏洞检测。在本文中,我们在不同的实际项目代码上进行了互相测试。与没有域适应和基于自然语言处理的域适应方法相比,CPVD在跨领域漏洞检测任务中更具普适性并表现更好。具体而言,对于chr_deb、qemu、libav和sard这四个数据集,它们在F1-Score上分别取得了最佳结果,分别为70.2%、81.1%、59.7%和78.1%,在AUC上分别为88.4%、86.3%、85.2%和88.6%。

论文链接:https://doi.org/10.1109/TSE.2023.3285910

5、Can We Trust the Phone Vendors? Comprehensive Security Measurements on the Android Firmware Ecosystem

Android是市场份额超过85%的最流行的智能手机平台。它的成功建立在开放性的基础上,手机厂商可以利用Android源代码制作具有独特软硬件功能的定制产品。然而,Android的碎片化和定制化也带来了许多安全风险,引起了研究人员的关注。为了调查定制化Android固件的安全性,人们付出了许多努力。然而,大部分先前的工作都集中在设计高效的分析工具或分析固件的特定方面。对于Android固件生态系统安全性的全景视图和基于大规模固件数据集的相应理解仍然缺乏。在这项工作中,我们对Android固件生态系统的安全性进行了大规模综合测量。我们的研究基于来自153个供应商的8,325个固件映像和813个与Android相关的CVE,这是迄今为止用于安全测量的最大Android固件数据集。特别是,我们的研究遵循了一系列的研究问题,涵盖了漏洞、补丁、安全更新和预装应用程序。为了自动化分析过程,我们设计了一个名为AndScanner+的框架,用于完成固件抓取、固件解析、补丁分析和应用程序分析。通过大规模数据分析和案例探索,我们得到了一些有趣的发现。例如,补丁延迟和丢失问题在Android固件映像中普遍存在,分别占所有映像的31.4%和5.6%。几款手机的最新映像仍然包含有漏洞的预装应用程序,甚至相应的漏洞已经公开披露。除了数据测量之外,我们还通过案例研究探索了这些安全威胁的原因,并证明了发现的安全威胁可以转化为可利用的漏洞。AndScanner+发现了46个新的漏洞,其中36个已被分配CVE/CNVD标识。本研究提供了关于Android固件生态系统的许多新知识,并深入理解了软件工程安全实践。

论文链接:https://doi.org/10.1109/TSE.2023.3275655

6、Challenging Machine Learning-Based Clone Detectors via Semantic-Preserving Code Transformations

代码克隆检测可以识别相似或相同的代码片段。在过去的二十年中,它一直是一个活跃的研究课题,引起了广泛的关注。近年来,基于机器学习(ML)的检测器,尤其是基于深度学习的检测器,在克隆检测方面展示了令人印象深刻的能力。似乎由于机器学习技术的进步,这个长期存在的问题已经得到了解决。在这项工作中,我们希望通过代码语义保持转换来挑战最近基于机器学习的克隆检测器的鲁棒性。我们首先利用十五种简单的代码转换操作符结合常用的启发式算法(即随机搜索、遗传算法和马尔可夫链蒙特卡洛)进行等效程序转换。此外,我们提出了一种基于深度强化学习的序列生成(DRLSG)策略,以有效地指导生成可以逃避检测的克隆的搜索过程。然后,我们使用原始克隆和生成克隆对基于机器学习的检测器进行评估。我们在一个名为CloneGen(代表克隆生成器)的框架中实现了我们的方法。在评估中,我们通过CloneGen辅助进行代码语义保持转换后,挑战了三个最先进的基于机器学习的检测器和四个传统检测器的代码克隆。令人惊讶的是,我们的实验表明,尽管现有的克隆检测器取得了显著的成功,但这些检测器内部的机器学习模型仍然无法区分由CloneGen中的代码转换生成的大量克隆。此外,使用CloneGen生成的克隆进行对抗训练可以提高基于机器学习的克隆检测器的鲁棒性和准确性。与常用的启发式算法相比,DRLSG策略在生成代码克隆以降低基于机器学习的检测器的检测准确性方面显示出最佳效果。我们的研究揭示了最新基于机器学习的检测器存在的一个可以解释但常常被忽视的鲁棒性问题。因此,我们呼吁更多关注这些新的基于机器学习的检测器的鲁棒性。

论文链接:https://doi.org/10.1109/TSE.2023.3240118

7、Characterizing and Finding System Setting-Related Defects in Android Apps

Android,最受欢迎的移动系统,提供了许多可由用户配置的系统设置(例如网络、位置和权限),用于控制设备和应用程序。即使是受欢迎和经过充分测试的应用程序,也可能无法适应各种设置变化,从而使用户感到沮丧。然而,目前还没有系统地调查此类缺陷的努力。为此,我们进行了第一次大规模的实证研究,以了解和描述这些与系统设置相关的缺陷(简称为"设置缺陷"),这些缺陷存在于应用程序中,并由系统设置的变化触发。我们投入了大量的人工工作(超过四个人月)来分析来自GitHub上180个受欢迎应用程序的1,074个设置缺陷。我们调查了这些设置缺陷的影响、根本原因和后果,以及它们之间的相关性。我们发现,(1)设置缺陷对应用程序的正确性有广泛的影响,并具有多种根本原因,(2)这些缺陷中的大多数(约70.7%)导致非崩溃(逻辑)故障,(3)设置类别、根本原因和后果之间存在一些相关性。在这些发现的基础上,我们提出了两种可以从GUI和代码层面协同检测设置缺陷的漏洞发现技术。具体来说,在GUI层面,我们设计并引入了基于设置的变异模糊测试,这是第一个用于检测Android应用程序中设置缺陷(分别导致崩溃和非崩溃故障)的自动动态测试技术。我们将这种技术实现为一个端到端的自动化GUI测试工具,名为SetDroid。在代码层面,我们提炼出两种主要的故障模式,并实现了一个静态分析工具,名为SetChecker,用于识别潜在的设置缺陷。我们在26个受欢迎的开源Android应用程序上评估了SetDroid和SetChecker,并发现了48个独特的、以前未知的设置缺陷。迄今为止,已经有35个缺陷得到确认,21个缺陷已经被应用程序开发人员修复。我们还将SetDroid和SetChecker应用于五个非常受欢迎的工业应用程序,分别是微信、QQ邮箱、抖音、剪映和支付宝香港,每个应用程序每月活跃用户数都达到数十亿。SetDroid成功地在这些应用程序的最新版本中检测到了17个以前未知的设置缺陷,所有这些缺陷都已经得到了应用程序供应商的确认和修复。之后,我们与字节跳动合作,将这两种漏洞发现技术内部部署到其主要应用程序产品之一的抖音上进行压力测试。在为期两个月的测试活动中,SetDroid成功地发现了53个设置缺陷,SetChecker发现了22个设置缺陷。迄今为止,已经确认了59个缺陷,并修复了31个缺陷。所有这些缺陷都在开发人员先前的测试中逃脱了检测。目前,SetDroid已经集成到字节跳动的官方应用程序测试基础设施FastBot中,用于日常测试。这些结果证明了我们提出的技术的强大有效性和实用性。

论文链接:https://doi.org/10.1109/TSE.2023.3236449

8、Combatting Front-Running in Smart Contracts: Attack Mining, Benchmark Construction and Vulnerability Detector Evaluation

前期交易攻击一直是区块链中的一个重大关注点。攻击者通过在即将发生的受害者交易之前插入额外的交易,来操纵受害者交易的执行并获利。最近的研究表明,前期交易攻击在以太坊区块链上普遍存在,并已经造成了数百万美元的损失。导致前期交易攻击机会的是智能合约中的漏洞,智能合约是由交易调用的区块链程序。尽管已经提出了检测前期交易漏洞的技术,但它们在真实易受攻击的合约上的表现尚不清楚。目前还没有基于真实攻击的大规模基准来评估它们的能力。本文做出了四个贡献。首先,我们设计了一种有效的算法来挖掘区块链历史中的真实攻击。评估结果显示,我们的挖掘算法在找到真实攻击方面比之前的研究具有更高的召回率,更加全面。其次,我们提出了一种自动化和可扩展的漏洞定位方法,用于定位智能合约中的代码片段,以便进行前期交易攻击。评估结果还显示,与基准技术相比,我们的定位方法在准确定位漏洞方面更加有效。第三,我们建立了一个基准,其中包含513个真实攻击案例,涉及235个不同的易受攻击的智能合约,并对其进行了标记,这对于帮助理解前期交易攻击的本质、智能合约中的漏洞,并评估漏洞检测技术非常有用。最后,我们对七种最先进的漏洞检测技术在我们的基准上进行了实证评估。评估实验揭示了现有技术在检测前期交易漏洞方面的不足,召回率低于6.04%。我们进一步的分析确定了现有技术中的四个共同限制:不支持合约间分析、密码运算的低效约束求解、不合适的漏洞模式和缺乏令牌支持。

论文链接:https://doi.org/10.1109/TSE.2023.3270117

9、DASP: A Framework for Driving the Adoption of Software Security Practices

实施软件安全实践是现代软件开发中的一个关键问题。行业从业者、安全工具提供商和研究人员已经提供了标准的安全指南和复杂的安全开发工具,以确保软件开发过程的安全性。但是尽管这些努力,恶意黑客可以利用的漏洞数量仍然在增加。因此,迫切需要了解为什么开发人员仍然会在他们的应用程序中引入安全漏洞,以及如何激励他们编写更安全的代码。为了进一步了解和解决这个问题,我们提出了DASP框架,这是一个用于诊断和推动开发人员采用软件安全实践的框架。DASP的构想是通过将行为科学理论与28名软件从业者进行的横断面面试研究相结合而形成的。我们的面试研究得出了一个框架,其中包含了一套全面的33个驱动因素,分为7个更高级别的类别,代表了必须发生或改变的事情,以促使软件安全实践的采用。利用DASP框架,组织可以设计适合开发人员特定开发环境的干预措施,以激励他们编写更安全的代码。

论文链接:https://doi.org/10.1109/TSE.2023.3235684

10、Data Preparation for Software Vulnerability Prediction: A Systematic Literature Review

软件漏洞预测(SVP)是一种数据驱动的软件质量保证技术,最近在软件工程研究界引起了相当大的关注。然而,准备软件漏洞(SV)相关数据的困难被认为是阻碍SVP方法在工业界应用的主要障碍。鉴于这一主题的文献越来越多但分散,有必要和及时地系统选择、审查和综合相关的同行评议论文,报告现有的SV数据准备技术和挑战。我们进行了一项系统文献综述(SLR),以便开发出一个系统化的关于数据准备挑战、解决方案和所需研究的知识体系。我们审查了61篇相关论文,从而得出了一个用于SVP相关挑战的数据准备分类法。我们使用提出的分类法分析了所识别的挑战和可用的解决方案。我们对现有技术的分析使我们能够确定未来研究的机会。这篇综述还为SVP方法的研究人员和从业人员提供了一系列建议。

论文链接:https://doi.org/10.1109/TSE.2022.3171202

11、Demystifying Random Number in Ethereum Smart Contract: Taxonomy, Vulnerability Identification, and Attack Detection

近年来,区块链智能合约应用呈爆炸式增长。随着智能合约的日益普及和携带数万亿美元的数字资产,它们成为攻击者更具吸引力的目标,攻击者利用智能合约的漏洞造成了灾难性的经济损失。虽然已经有大量的工作用于检测各种漏洞,但许多现有工具忽视了糟糕的随机性漏洞。在本文中,我们首次尝试对以太坊智能合约中的随机数进行系统分析,通过研究伪随机数生成背后的原理并将其组织成一个分类法。我们还详细探讨了针对糟糕随机数的各种攻击,并将它们分为四类。此外,我们提出了RNVulDet工具,该工具结合了污点分析技术,可以自动识别糟糕的随机性漏洞并检测相应的攻击交易。为了广泛验证RNVulDet的有效性,我们构建了三个新的数据集:i)34个众所周知的合同被报告存在糟糕的随机性漏洞,ii)214个经过严格审核的热门合同在发布前被认为没有糟糕的随机性漏洞,iii)一个由47,668个智能合约和49,951个可疑交易组成的数据集。我们将RNVulDet与三个最先进的智能合约漏洞检测工具进行比较,我们的工具表现明显优于它们。同时,RNVulDet平均每个合约的处理时间为2.98秒,在大多数情况下比其他工具快了几个数量级。RNVulDet成功揭示了44,264个攻击交易。我们的实现和数据集已经发布,希望能够激发他人的灵感。

论文链接:https://doi.org/10.1109/TSE.2023.3271417

12、Detecting and Characterizing Propagation of Security Weaknesses in Puppet-Based Infrastructure Management

尽管Puppet清单在自动管理计算基础设施方面具有益处,但它们容易受到安全弱点的影响,例如硬编码的秘密和使用弱密码算法。因此,对Puppet清单中的安全弱点进行适当的缓解是确保使用Puppet清单管理的计算基础设施安全的必要条件。对安全弱点在基于Puppet的基础设施管理中的传播和影响进行的表征可以告知从业人员有关检测到的安全弱点的相关性,并帮助他们采取必要的措施进行缓解。我们使用17,629个Puppet清单进行了一项实证研究,使用了Taint Tracker for Puppet Manifests(TaintPup)。与最先进的安全静态分析工具相比,我们观察到TaintPup的精确性提高了2.4倍,F-measure提高了1.8倍。根据我们的实证研究,我们观察到安全弱点传播到了4,457个资源,即用于管理基础设施的特定于Puppet的代码元素。一个安全弱点的单个实例可能传播到多达35个不同的资源。我们观察到安全弱点传播到了7类资源,其中包括用于管理持续集成服务器和网络控制器的资源。根据我们对24位从业人员的调查,安全弱点传播到与数据存储相关的资源被评为对基于Puppet的基础设施管理产生最严重影响的因素。

论文链接:https://doi.org/10.1109/TSE.2023.3265962

13、Empirical Validation of Automated Vulnerability Curation and Characterization

先前的研究表明,像美国国家漏洞数据库(NVD)这样的公共漏洞系统依赖于一种手动、耗时且容易出错的过程,这导致发布最终漏洞结果时存在不一致性和延迟。本研究提供了一种实时整理漏洞报告并将文本漏洞报告映射到可机器读取的结构化漏洞属性数据的方法。该系统旨在支持漏洞数据库进行耗时的人工分析,利用了通用漏洞和暴露(CVE)漏洞列表以及由国家标准与技术研究所(NIST)漏洞描述本体(VDO)框架描述的漏洞属性。我们的工作利用自然语言处理(NLP)、机器学习(ML)和新颖的信息论(IT)方法,提供了自动化技术,实现了近实时发布漏洞和使用5个领域中的28个属性对漏洞进行表征。实验结果表明,相比于手动方法,漏洞可以提前评估多达95个小时,其特征可以达到0.9以上的F-Measure值,并且所提出的自动化方法可以节省CVE特征化所需时间的高达47%。

论文链接:https://doi.org/10.1109/TSE.2023.3250479

14、Enhancing DNN-Based Binary Code Function Search With Low-Cost Equivalence Checking

二进制代码函数搜索已被用作各种安全和软件工程应用的核心基础,包括恶意软件聚类、代码克隆检测和漏洞审计。然而,识别逻辑上相似的汇编函数仍然是一个挑战。大多数二进制代码搜索工具依赖于程序结构级别的信息,例如控制流和数据流图,这些信息是使用程序分析技术或深度神经网络(DNN)提取的。然而,基于DNN的技术捕捉到了二进制代码的词法、控制结构或数据流级别的信息,这往往过于粗粒度,不能准确地表示程序功能。此外,它可能对各种具有挑战性的设置(如编译器优化和混淆)表现出较低的鲁棒性。本文提出了一种通用的解决方案,用于增强基于DNN的二进制代码函数搜索中的前k个排名候选项。关键思想是设计一种低成本且全面的等价性检查,快速暴露目标函数与其前k个匹配函数之间的功能差异。未通过等价性检查的函数可以从前k个列表中删除,通过检查的函数可以重新访问以在前k个排名候选项中继续前进。我们设计了一种实用且高效的等价性检查,名为BinUSE,使用了不完全约束符号执行(USE)。USE是符号执行的一种变体,通过直接从函数入口点开始符号执行并放宽函数参数的约束条件,提高了可扩展性。它消除了由路径爆炸和昂贵约束引起的开销。BinUSE专门设计为提供汇编函数级别的等价性检查,通过低成本减少基于DNN的二进制代码搜索的误报。我们的评估结果显示,在面对不同编译器、优化、混淆和架构带来的挑战时,BinUSE能够有效地增强四种最先进的基于DNN的二进制代码搜索工具。

论文链接:https://doi.org/10.1109/TSE.2022.3149240

15、Evaluation of Static Vulnerability Detection Tools With Java Cryptographic API Benchmarks

几项研究表明,在现实世界的代码中,加密API的误用是很常见的(例如,Apache项目和Android应用)。存在一些开源和商业安全工具,可以自动筛查Java程序以检测误用情况。为了比较它们的准确性和安全性保证,我们开发了两个综合性基准测试,分别命名为CryptoAPI-Bench和ApacheCryptoAPI-Bench。CryptoAPI-Bench包含181个单元测试用例,涵盖了基本情况以及复杂情况,包括跨过程、字段敏感、多类测试用例以及误用情况的路径敏感数据流。该基准测试还包括用于测试误报率的正确情况。ApacheCryptoAPI-Bench包含了来自10个Apache项目的121个加密用例。我们评估了四个工具,分别是SpotBugs、CryptoGuard、CrySL和另一个匿名工具,使用了这两个基准测试。我们展示了它们的性能和比较分析。ApacheCryptoAPI-Bench还检查了这些工具的可扩展性。我们的基准测试对于推进误用检测领域的最新解决方案非常有用。

论文链接:https://doi.org/10.1109/TSE.2022.3154717

16、Graph-of-Code: Semantic Clone Detection Using Graph Fingerprints

代码克隆检测问题已经通过基于令牌和内容的多个显式因素进行了研究,并取得了有效的结果。然而,由于隐私和安全因素,公开代码内容可能不切实际。此外,过去的方法缺乏可扩展性,这是一个重要的挑战。代码流状态可以通过代码结构进行推断,并使用经验图隐式表示。假设可以在不透露代码内容的情况下对代码克隆检测问题进行建模。在这里,引入了一种称为"代码图(Graph-of-Code)"的概念,用于代码克隆检测问题,将代码表示为图形。虽然代码图提供了结构属性和特征的量化,但可以排除代码内容或令牌以识别克隆类型。目标是评估代码图的结构属性对代码克隆检测性能的影响。本研究采用了一种基于特征提取的无标签图形方法。该方法生成了一个"图指纹",表示不同的拓扑特征级别。代码克隆检测的结果表明,代码结构在检测克隆类型方面起着重要作用。我们发现不同的代码图模型优于其他模型。这些模型在召回率、精确度和F1得分方面,在检测代码克隆方面达到了96%到99%的准确率。代码图方法能够在可扩展的数据集中检测代码克隆,并保护代码的隐私。

论文链接:https://doi.org/10.1109/TSE.2023.3276780

17、GraphSearchNet: Enhancing GNNs via Capturing Global Dependencies for Semantic Code Search

代码搜索旨在基于自然语言查询检索准确的代码片段,以提高软件的生产力和质量。鉴于可用程序的大量存在,例如GitHub或Stack Overflow,确定和定位精确的代码对软件开发人员至关重要。此外,深度学习最近在不同的与代码相关的场景中得到了广泛应用,例如漏洞检测、源代码摘要等。然而,自动化的深度代码搜索仍然具有挑战性,因为它需要在代码和自然语言查询之间进行高级语义映射。大多数现有的基于深度学习的代码搜索方法依赖于顺序文本,即将程序和查询作为一系列标记的平面序列输入以学习程序的语义,而结构信息并未完全考虑。此外,广泛采用的图神经网络(GNN)已经证明了在学习程序语义方面的有效性,然而,它们也存在捕捉构建图中全局依赖性的问题,这限制了模型的学习能力。为了解决这些挑战,本文设计了一个新颖的神经网络框架,名为GraphSearchNet,通过共同学习源代码和自然语言查询的丰富语义,实现了有效和准确的源代码搜索。具体而言,我们提出使用双向图神经网络(BiGGNN)构建源代码和查询的图形,以捕捉源代码和查询的局部结构信息。此外,我们通过利用多头注意力模块增强BiGGNN,补充BiGGNN遗漏的全局依赖性,以提高模型的学习能力。对Java和Python编程语言的广泛实验结果来自公共基准测试CodeSearchNet,证实GraphSearchNet在性能上显著优于当前最先进的工作。

论文链接:https://doi.org/10.1109/TSE.2022.3233901

18、How do Developers Really Feel About Bug Fixing? Directions for Automatic Program Repair

自动程序修复(APR)是软件工程领域的一个快速发展领域,旨在通过自动化工具来补充或取代手动修复错误。为了成功将APR应用于工业领域,APR工具必须符合开发人员的需求和偏好。然而,对于开发人员对APR的一般态度或开发人员当前的错误修复实践(APR旨在取代的活动),目前几乎没有研究进行过深入考虑。本文通过对386名软件开发人员进行的调查,报告了他们的错误发现和修复实践、经验以及对APR的直观态度,以填补这一空白。我们发现,对于开发人员来说,错误的发现和修复并不像人们经常认为的那样繁重,而是被评为比开发人员的一般工作更令人满意。开发人员从错误修复中获得满足感和好处,这表明APR的采用并不像简单地替代一项不受欢迎的活动那样简单。在涉及潜在的APR方法时,我们发现开发人员强烈倾向于保持开发人员参与(例如,在不同修复方案之间进行选择或验证修复方案),而不是完全自动化的过程。这表明,APR的进展应该注意开发人员的主动性,以及在修复方案旁边向开发人员呈现的信息。这也表明,存在与信任相关的关键障碍,需要克服才能实现全面的APR采用,事实上,即使那些表示对APR持积极态度的开发人员也列出了一些附加条件和担忧。我们发现特定人口统计变量(例如,开发人员经验、年龄、教育)与关键态度变量之间的关系非常少,这表明开发人员对APR的直观态度很少受到经验水平的影响,而是在开发人员社区广泛持有的。

论文链接:https://doi.org/10.1109/TSE.2022.3194188

19、How to Find Actionable Static Analysis Warnings: A Case Study With FindBugs

自动生成的静态代码警告存在大量的误报问题。因此,开发人员只对其中一小部分警告采取行动。为了更好地预测哪些静态代码警告不应被忽视,我们建议分析人员需要深入研究他们的算法,以找到更好地改进其特定问题的选择。具体而言,我们在这里展示了通过局部调整决策边界(将可行的警告与其他警告区分开来)的方法可以创建有效的警告预测器。这些方法为识别可行的静态代码警告设定了新的高标准。对于八个开源的Java项目(cassandra、jmeter、commons、lucene-solr、maven、ant、tomcat、derby),我们在4/8个数据集上取得了完美的测试结果,并且整体上,AUC(真负例、真正例曲线下的面积)的中位数为92%。

论文链接:https://doi.org/10.1109/TSE.2023.3234206

20、Invalidator: Automated Patch Correctness Assessment Via Semantic and Syntactic Reasoning

自动程序修复(APR)面临着测试过拟合的挑战,即生成的补丁能够通过验证测试,但无法泛化。现有的补丁评估方法涉及生成新的测试用例或手动检查,这可能耗时且具有偏见。在本文中,我们提出了一种新颖的技术------Invalidator,通过语义和语法推理自动评估APR生成的补丁的正确性。Invalidator利用程序不变量来推理程序语义,同时通过使用预训练的语言模型从大型代码语料库中学习的语言语义来捕捉程序语法。给定一个有缺陷的程序和开发人员修复的程序,Invalidator推断出两个程序的可能不变量。然后,Invalidator根据以下情况确定APR生成的补丁是否过拟合:(1)违反了正确的规范,或者(2)保留了原始有缺陷程序的错误行为。如果我们的方法无法基于不变量确定补丁是否过拟合,Invalidator将利用来自标记补丁的训练模型,根据程序语法评估补丁的正确性。Invalidator的好处有三个。首先,Invalidator利用语义和语法推理来增强其区分能力。其次,Invalidator不需要生成新的测试用例,而仅依赖于当前的测试套件,并利用不变量推理来泛化程序行为。第三,Invalidator是完全自动化的。实验结果表明,Invalidator在准确性和F-measure方面优于现有方法,能够正确识别79%的过拟合补丁,并比最佳基准线多检测到23%的过拟合补丁。

论文链接:https://doi.org/10.1109/TSE.2023.3255177

21、IoTCom: Dissecting Interaction Threats in IoT Systems

由于物联网应用程序和设备在智能家居和智能城市中的日益普及,对其安全性和隐私风险的担忧也越来越多。物联网应用程序通常相互交互,并与物理世界互动,为用户提供便利。在本文中,我们研究了物联网应用程序交互行为带来的安全风险和隐患。在确定交互威胁时,面临两个主要挑战:一是如何发现跨网络和物理渠道的威胁;二是如何确保检测方法的可扩展性。为了应对这些挑战,我们首先提供了一个物联网应用程序之间交互威胁的分类法,其中包含七类基于其交互行为分类的协调威胁。然后,我们介绍了IoTCom,这是一个组合威胁检测系统,能够自动检测和验证物联网应用程序与设备之间的不安全交互。IoTCom应用静态分析来自动推断相关应用程序的行为,并使用一种新颖的策略来修剪提取出的应用程序行为,以将其转化为可分析的形式规范,从而减轻与形式分析相关的状态爆炸问题。我们对大量真实世界物联网应用程序的实验证实了IoTCom有效地识别出通过网络和物理渠道触发的广泛的交互威胁,其中许多威胁以前是未知的。最后,IoTCom使用自动验证器来验证发现的威胁。我们的实验结果显示,IoTCom在计算时间方面明显优于现有技术,并且能够在不同的物联网平台上进行分析。

论文链接:https://doi.org/10.1109/TSE.2022.3179294

22、Learning Approximate Execution Semantics From Traces for Binary Function Similarity

检测语义相似的二进制函数是一项至关重要的能力,广泛应用于安全领域,包括漏洞检测、恶意软件分析和取证。这项任务具有挑战性,因为语义相似的函数可以编译成在不同架构上运行,并具有多样化的编译器优化或混淆。现有的大多数方法是基于语法特征进行函数匹配,而不了解函数的执行语义。我们提出了Trex,一种基于迁移学习的框架,通过强制执行(即违反控制流语义)收集函数的跟踪数据,明确地自动学习近似的执行语义,并将学到的知识应用于匹配语义相似的函数。尽管已知强制执行跟踪数据过于不精确,不能直接用于检测语义相似性,但我们的关键见解是,这些跟踪数据可以用于教授机器学习模型各种指令及其组合的近似执行语义。因此,我们设计了一个预训练任务,训练模型从函数的两种模态(即强制执行的代码和跟踪数据)中学习近似的执行语义。然后,我们对预训练模型进行微调,以匹配语义相似的函数。我们在13个热门软件项目中的1,472,066个函数上评估了Trex,这些函数编译成在4种架构(x86、x64、ARM和MIPS)上运行,并具有4种优化(O0 - O3)和5种混淆。Trex在跨架构、优化和混淆函数匹配方面的性能优于现有的最先进解决方案,分别提高了7.8%、7.2%和14.3%,同时运行速度提高了8倍。消融研究表明,预训练显著提升了函数匹配性能,突显了学习执行语义的重要性。我们的案例研究展示了Trex的实际用例------在180个真实固件镜像中,Trex发现了14个之前研究未披露的漏洞。我们在https://github.com/CUMLSec/trex 上发布了Trex的代码和数据集。

论文链接:https://doi.org/10.1109/TSE.2022.3231621

23、Learning the Relation Between Code Features and Code Transforms With Structured Prediction

为了有效地引导自动化代码演化技术中代码转换空间的探索,我们在本文中提出了第一种使用条件随机场(CRF)在AST节点级别上结构化预测代码转换的方法。我们的方法首先离线学习一个概率模型,捕捉某些代码转换如何应用于特定AST节点的规律,然后使用学习到的模型来预测任意新的、未见过的代码片段的转换。我们的方法涉及到程序和代码转换的新颖表示。具体而言,我们引入了定义所谓AST级别代码转换的形式框架,并展示了如何相应地设计、学习和用于预测CRF模型。我们在修复Java程序的转换预测的背景下实例化了我们的方法。我们的实例化包含一组经过精心设计的代码特征,处理了训练数据不平衡的问题,并包括了特定于代码的转换约束。我们基于来自真实Java项目的修复提交的数据集进行了大规模的实验评估。结果显示,当使用流行的评估指标top-3时,我们的方法对于不同的转换,预测代码转换的准确性在41%到53%之间变化。我们的模型优于基于历史概率和神经机器翻译(NMT)的两个基准方法,这表明考虑代码结构对于实现良好的预测准确性是重要的。此外,我们实现了一个概念验证合成器,将一些修复转换具体化以获得最终的补丁。在Defects4j基准测试上对合成器进行的评估证实了预测的AST级别修复转换在生成高质量补丁方面的有用性。

论文链接:https://doi.org/10.1109/TSE.2023.3275380

24、Let's Talk With Developers, Not About Developers: A Review of Automatic Program Repair Research

自动程序修复(APR)在自动化某些编码任务方面具有显著潜力。使用APR可以减少修复代码缺陷所带来的高昂成本,并为软件工程带来重要的益处。采用APR还可能对软件开发人员的日常工作产生深远影响,改变他们的工作实践方式。为了实现APR的好处,我们必须考虑开发人员对APR的看法以及APR可能对开发人员工作的影响。如果在开发APR工具时不考虑开发人员,很可能会削弱APR部署的成功。在本文中,我们通过分析Monperrus的APR综述中的260项研究中如何考虑开发人员,对APR研究中的人因素进行了批判性回顾。在我们的回顾中,超过一半的260项研究是由开发人员面临的问题(例如修复故障的困难)激发的。尽管有这些以人为导向的动机,但在这260项研究中,少于7%包含了人类研究。我们详细研究了这些人类研究,并发现它们的质量参差不齐(例如,有一个人类研究仅基于一个开发人员的意见)。我们的研究结果表明,软件开发人员在APR研究中经常被提及,但很少与之对话。我们需要更全面、可靠地了解开发人员与APR之间的人因素关系。没有这种理解,将很难开发出能够有效融入开发人员工作流程的APR工具和技术。我们建议未来的研究议程推进APR中人因素的研究。

论文链接:https://doi.org/10.1109/TSE.2022.3152089

25、Metamorphic Testing for Web System Security

安全测试旨在验证软件是否符合其安全属性。然而,在现代Web系统中,这通常意味着需要验证在使用大量输入对系统进行测试时生成的输出。为了降低成本并提高安全测试的效果,需要进行全面的自动化。不幸的是,为了实现这种自动化,除了自动派生测试输入的策略外,我们还需要解决预言问题,即在给定系统的输入的情况下,区分正确行为和错误行为的挑战(例如,特定HTTP GET请求后应接收到的响应)。在本文中,我们提出了基于变异模糊测试的元变形安全测试(MST-wi)方法,该方法整合了测试输入生成策略,并解决了安全测试中的预言问题。它使工程师能够指定捕捉Web系统许多安全属性的元变形关系(MRs)。为了便于指定这些MR,我们提供了一个伴随Eclipse编辑器的领域特定语言。MST-wi自动收集输入数据,并将MR转换为可执行的Java代码,以自动执行安全测试。它基于关系和收集到的数据自动测试Web系统以检测漏洞。我们提供了一个76个系统无关MR的目录,以自动化Web系统的安全测试。它涵盖了39%的OWASP安全测试活动,这些活动尚未由最先进的技术自动化;此外,我们的MR可以自动发现102种不同类型的漏洞,这相当于根据MITRE CWE数据库,违反安全设计原则导致的漏洞的45%。我们还定义了一些指南,使测试工程师能够改进针对我们方法的被测系统的可测试性。我们在两个知名的Web系统(Jenkins和Joomla)上评估了MST-wi的有效性和可扩展性。它自动检测到了它们85%的漏洞,并显示出很高的特异性(99.81%的生成输入不会导致误报);我们的发现包括在Jenkins中发现的一个新的安全漏洞。最后,我们的结果表明,该方法具有可扩展性,从而实现了自动化的夜间安全测试。

论文链接:https://doi.org/10.1109/TSE.2023.3256322

26、Mind the Gap! A Study on the Transferability of Virtual Versus Physical-World Testing of Autonomous Driving Systems

安全部署自动驾驶车辆(SDC)需要进行彻底的模拟和实地测试。大多数测试技术都考虑了模拟环境中的虚拟化SDC,而对于评估这些技术是否适用于物理实际车辆并且是否有效,花费的努力较少。在本文中,我们着重解决了将在驾驶模拟器中获得的测试结果推广到物理平台的问题,并对影响SDC测试的模拟到实际差距进行了表征和量化。在我们的实证研究中,我们比较了在物理小型车辆上部署的SDC测试和其数字孪生之间的差异。由于无法从物理平台获取驾驶质量指标,我们使用神经渲染通过视觉里程计来估计它们,从而实现与数字孪生的完全可比性。然后,我们调查了行为和故障曝光在虚拟和实际环境之间的可转移性,旨在针对无意的异常测试数据和有意的对抗性示例。我们的研究表明,尽管使用了忠实的数字孪生,仍然存在严重的缺陷,导致虚拟和物理世界之间存在现实差距,威胁到仅考虑虚拟SDC的现有测试解决方案。从积极的一面来看,我们的结果呈现了哪些测试配置可以避免物理测试,要么是因为它们的结果在虚拟和物理环境之间可以转移,要么是因为模拟器中的不确定性配置可以帮助预测它们在现实世界中的结果。

论文链接:https://doi.org/10.1109/TSE.2022.3202311

27、Multi-Granularity Detector for Vulnerability Fixes

随着对开源软件的依赖日益增加,用户面临着第三方库漏洞的风险。为了提醒用户这种漏洞,已经开发了软件组成分析(SCA)工具。SCA需要识别修复漏洞的提交。先前的研究提出了可以自动识别此类修复漏洞提交的方法。然而,识别这些提交非常具有挑战性,因为只有极少数提交是用于修复漏洞的。此外,代码变更可能存在噪声并且难以分析。我们观察到噪声可以出现在不同的细节级别上,这使得准确检测漏洞修复变得具有挑战性。为了解决这些挑战并提高先前工作的效果,我们提出了MiDas(多粒度漏洞修复检测器)。与先前的工作不同,MiDas为每个代码变更粒度级别构建了不同的神经网络,分别对应于提交级别、文件级别、块级别和行级别,遵循其自然组织,然后使用组合模型结合所有基本模型输出最终预测结果。这种设计使MiDas能够更好地应对漏洞修复提交数据的噪声和高度不平衡的特性。此外,为了减少检查代码变更所需的人力工作,我们设计了一种基于提交长度的MiDas输出的工作量感知调整。评估结果表明,MiDas在Java和基于Python的数据集上的AUC分别比当前最先进的基准线高出4.9%和13.7%。此外,就工作量感知指标EffortCost@L和Popt@L而言,MiDas在Java上的性能也比最先进的基准线提高了28.2%和15.9%,在Python上提高了60%和51.4%。

论文链接:https://doi.org/10.1109/TSE.2023.3281275

28、NCQ: Code Reuse Support for Node.js Developers

代码重用是软件开发的重要组成部分。在Node.js开发人员中,采用代码重用实践尤为普遍。Node.js包管理器NPM索引了超过100万个软件包,开发人员经常寻找这些软件包来解决编程任务。由于软件包数量庞大,选择合适的软件包是困难且耗时的。为了提高通过第三方软件包大量重用代码的开发人员的生产力,我们提出了Node Code Query(NCQ),这是一个Read-Eval-Print-Loop环境,允许开发人员进行以下操作:1)使用自然语言查询搜索NPM软件包,2)搜索与这些软件包相关的代码片段,3)自动纠正这些代码片段中的错误,4)快速设置用于测试这些代码片段的新环境,5)在搜索模式和编辑模式之间切换。在两项用户研究中,共有20名参与者,我们发现参与者使用NCQ比基准方法更快开始编程并完成任务,并且他们喜欢代码片段和软件包搜索等功能。我们的结果表明,NCQ使Node.js开发人员在代码重用方面更加高效。

论文链接:https://doi.org/10.1109/TSE.2023.3248113

29、Neural Network Guided Evolutionary Fuzzing for Finding Traffic Violations of Autonomous Vehicles

自动驾驶汽车和卡车,即自主驾驶车辆(AVs),在监管机构和公众对其安全性和可靠性有更高的信心之前,不应该被接受。而这种信心最实际和令人信服的方法是通过测试来实现。但是现有的测试方法对于检查AV控制器在涉及与多个独立代理(如行人和人驾驶车辆)交互的复杂的现实世界边界情况下的端到端行为是不足够的。尽管在街道和高速公路上进行测试驾驶无法捕捉到许多罕见事件,但现有的基于模拟的测试方法主要集中在简单的场景上,并且在对需要对周围环境进行复杂感知的复杂驾驶情况下无法很好地扩展。为了解决这些限制,我们提出了一种新的模糊测试技术,名为AutoFuzz,它可以利用广泛使用的AV模拟器的API语法来生成语义上和时间上有效的复杂驾驶场景(场景序列)。为了在大规模的搜索空间中高效地寻找引发交通违规的场景,我们提出了一种约束神经网络(NN)进化搜索方法来优化AutoFuzz。在五个场景中,我们对一种最先进的基于学习的控制器、两种基于规则的控制器和一种工业级控制器的原型进行评估,结果显示AutoFuzz在高保真度的模拟环境中高效地找到了数百个交通违规事件。对于每个场景,AutoFuzz平均可以找到比最佳基准方法多10-39%的独特交通违规事件。此外,通过使用AutoFuzz发现的交通违规事件对基于学习的控制器进行微调,成功地减少了新版本AV控制器软件中发现的交通违规事件。

论文链接:https://doi.org/10.1109/TSE.2022.3195640

30、Neural Transfer Learning for Repairing Security Vulnerabilities in C Code

在本文中,我们解决了使用深度学习自动修复软件漏洞的问题。数据驱动的漏洞修复的主要问题是现有的已知确认漏洞数据集只包含几千个示例。然而,训练深度学习模型通常需要数十万个示例。在这项工作中,我们利用了一个直观的观点,即修复错误的任务和修复漏洞的任务是相关的,并且从错误修复中学到的知识可以转移到漏洞修复中。在机器学习社区中,这种技术被称为迁移学习。在本文中,我们提出了一种基于迁移学习的安全漏洞修复方法,名为VRepair。VRepair首先在大规模的错误修复语料库上进行训练,然后在一个数量级较小的漏洞修复数据集上进行调优。在我们的实验中,我们展示了仅在错误修复语料库上训练的模型已经可以修复一些漏洞。然后,我们证明了迁移学习提高了修复易受攻击的C函数的能力。我们还展示了迁移学习模型的性能优于通过去噪任务训练并在漏洞修复任务上进行微调的模型。总之,本文表明与在小型数据集上学习相比,迁移学习对于修复C语言中的安全漏洞效果良好。

论文链接:https://doi.org/10.1109/TSE.2022.3147265

31、Open Science in Software Engineering: A Study on Deep Learning-Based Vulnerability Detection

开放科学是一种使科学研究对任何人都可以公开访问的实践,因此具有极高的益处。鉴于这些好处,软件工程(SE)社区一直在同行评审和出版过程中积极倡导开放科学政策。然而,到目前为止,还没有从系统的角度对SE中的开放科学的状况和问题进行深入研究的研究。在本文中,我们着手开始填补这一空白。鉴于软件工程的广泛性,我们将范围限定为SE中的一个特定主题领域作为示例。最近,越来越多的深度学习(DL)方法在SE中得到探索,包括基于DL的软件漏洞检测,这是一个受欢迎且快速增长的主题,解决了软件安全中的一个重要问题。我们对这一领域的文献进行了详尽的调查,确定了55个相关的研究,提出了基于DL的漏洞检测方法。然后,我们全面调查了开放科学的四个关键方面:可用性、可执行性、可重现性和可复制性。除了其他发现外,我们的研究揭示了仅有很小比例(25.5%)的研究方法提供公开可用的工具。其中一些可用工具没有提供足够的文档和完整的实现,导致它们无法执行或无法重现。使用平衡或人工生成的数据集导致了相关技术的性能被高估,使得其中大多数无法复制。根据我们的实证结果,我们对改善四个方面的开放科学状况提出了可行的建议。我们指出,我们对大多数方面(可用性、可执行性、可重现性)的结果和建议并不局限于所选择的主题的性质(基于DL的漏洞检测),因此可能适用于其他SE主题领域。我们还认为我们对可复制性的结果和建议适用于SE中基于DL的其他主题,因为它们与(在检测软件漏洞方面)使用DL的特定应用无关。

论文链接:https://doi.org/10.1109/TSE.2022.3207149

32、Open or Sneaky? Fast or Slow? Light or Heavy?: Investigating Security Releases of Open Source Packages

在开源软件包中存在的漏洞可能对下游客户项目构成安全风险。当发现新的漏洞时,软件包应该快速发布修复版本,本研究中称为安全发布。安全发布应该有良好的文档,并且需要最小的迁移工作量,以便客户能够快速采用。然而,开源软件包在多大程度上遵循这些建议尚不清楚。在本文中,我们研究了以下内容:(1)修复和发布之间的时间差;(2)安全修复在发布说明中如何进行文档化;(3)发布的代码更改特征(大小和语义版本);以及(4)发布和安全发布建议的发布之间的时间差,涵盖了7个软件包生态系统中的4,377个安全建议。我们发现,与相应的修复相比,中位数安全发布在4天内可用,包含131行代码(LOC)的更改。然而,在我们的数据集中,四分之一的发布仍在修复后至少20天才发布。此外,我们发现61.5%的安全发布附带有记录相应安全修复的发布说明。然而,Snyk和NVD这两个流行的数据库需要中位数17天(从发布之日起)才能发布安全建议,可能导致对客户项目的延迟通知。我们还发现,安全发布可能包含破坏性更改,其中13.2%通过语义版本表示不兼容,而6.4%在发布说明中提到了破坏性更改。根据我们的发现,我们指出了未来工作的方向,例如为安全修复创建私有分支以及标准化公布安全发布的实践。

论文链接:https://doi.org/10.1109/TSE.2022.3181010

33、Plumber: Boosting the Propagation of Vulnerability Fixes in the npm Ecosystem

漏洞是已知的报告的安全威胁,影响npm生态系统中大量的软件包。为了减轻这些安全威胁,开源社区强烈建议受漏洞影响的软件包及时发布漏洞修复,并建议受影响的软件包更新其依赖关系。然而,在漏洞修复在生态系统中传播方面仍存在严重滞后。在我们对最新版本的356,283个活跃npm软件包的初步研究中,我们发现其中20.0%的软件包仍然可以通过直接或传递依赖引入漏洞,尽管相关的受漏洞影响的软件包已经发布修复版本超过一年。之前的研究(Chinthanet等人,2021年)为如何减轻生态系统中漏洞修复传播滞后的研究奠定了基础。他们进行了实证研究,以确定可能发生在受漏洞软件包发布和修复发布之间的滞后。他们发现,修复方案所在的分支和漏洞的严重程度对其在整个生态系统中的传播轨迹具有较小的影响。为了确保包含修复的发布能够快速采用和传播,他们向开发人员和研究人员提供了几项可行的建议。然而,如何设计一种有效的技术来加速漏洞修复的传播仍然是一个悬而未决的问题。受到这个问题的启发,本文进行了一项实证研究,以了解阻碍漏洞修复在生态系统中传播的软件包规模,并调查它们的演化特征。此外,我们提炼了对缓解修复传播滞后效果更好的补救策略。利用我们的实证发现,我们提出了一种生态系统级的技术"Plumber",用于推导可行的缓解漏洞修复传播的补救策略。为了准确诊断修复传播阻塞的原因,Plumber对漏洞元数据和npm依赖元数据进行建模,并持续监测它们的演化。通过分析生态系统级依赖图和相应的修复传播状态,它为关键软件包提供补救方案。在这些方案中,Plumber提供定制的补救建议,包括漏洞影响分析,以唤起软件包开发者的意识。我们将Plumber应用于为识别的关键软件包生成268个补救报告,以根据开发者的反馈评估其补救效果。令人鼓舞的是,我们的47.4%补救报告得到了许多知名npm项目的积极反馈,例如Tensorflow/tfjs,Ethers.js和GoogleChrome/workbox。我们的报告通过92,469个依赖路径将漏洞修复传播到16,403个根软件包中。平均而言,每个修复的软件包版本在本研究进行时每周接收72,678次下载。

论文链接:https://doi.org/10.1109/TSE.2023.3243262

34、Revisiting Binary Code Similarity Analysis Using Interpretable Feature Engineering and Lessons Learned

二进制代码相似性分析(BCSA)被广泛应用于各种安全应用,包括抄袭检测、软件许可违规检测和漏洞发现。尽管在BCSA领域研究兴趣日益增长,但由于几个原因,进行新的研究在这个领域中仍然具有显著挑战性。首先,大多数现有方法仅关注最终结果,即通过采用不可解释的机器学习方法提高BCSA的成功率。此外,它们使用自己的基准测试,既不共享源代码,也不共享整个数据集。最后,研究人员经常使用不同的术语,甚至在没有正确引用以前文献的情况下使用相同的技术,这使得复现或扩展以前的工作变得困难。为了解决这些问题,我们从主流中退后一步,思考BCSA的基础研究问题。为什么某种技术或某种特征比其他技术或特征表现更好?具体而言,我们通过在大规模基准测试上利用可解释的特征工程,对BCSA中使用的基本特征进行了首次系统研究。我们的研究揭示了关于BCSA的各种有用的见解。例如,我们证明了一个简单的可解释模型与几个基本特征可以实现与最新的基于深度学习方法相当的结果。此外,我们还证明了我们编译二进制文件的方式或底层二进制分析工具的正确性对BCSA的性能有显着影响。最后,我们公开了所有的源代码和基准测试,并提出了该领域的未来研究方向,以促进进一步的研究。

论文链接:https://doi.org/10.1109/TSE.2022.3187689

35、SeqTrans: Automatic Vulnerability Fix Via Sequence to Sequence Learning

由于最近自动化漏洞挖掘工具的发展,软件漏洞的报告数量前所未有地增加。然而,修复漏洞仍然主要依赖程序员的手动努力。开发人员需要深入理解漏洞,并尽量对系统的功能产生最小的影响。在本文中,借助神经机器翻译(NMT)技术的进步,我们提出了一种名为SeqTrans的新方法,利用历史漏洞修复来提供建议并自动修复源代码。为了捕捉与易受攻击代码周围的上下文信息,我们提出利用数据流依赖性构建代码序列,并将其输入到最先进的Transformer模型中。引入了微调策略以克服小样本问题。我们在包含1,282个提交的数据集上评估了SeqTrans,在这些提交中修复了205个Java项目中的624个CVE。结果显示,SeqTrans的准确性优于最新的技术,在语句级修复方面达到了23.3%,在CVE级修复方面达到了25.3%。与此同时,我们深入研究了结果并观察到,NMT模型在某些类型的漏洞中表现非常出色,如CWE-287(不正确的身份验证)和CWE-863(不正确的授权)。

论文链接:https://doi.org/10.1109/TSE.2022.3156637

36、Specializing Neural Networks for Cryptographic Code Completion Applications

自然语言和编程语言之间的相似性促使研究人员将神经网络模型应用于软件问题,如代码生成和修复。然而,程序特定的特征提出了独特的预测挑战,需要设计新的专门的神经网络解决方案。在这项工作中,我们在应用程序编程接口(API)完成任务中确定了新的预测挑战,并发现现有的解决方案无法捕捉程序语义和结构中的复杂程序依赖关系。我们设计了一种名为Multi-HyLSTM的新型神经网络模型,以应对新发现的挑战,并理解API调用之间的复杂依赖关系。我们的神经网络利用专门的数据流分析提取多个全局API依赖路径,用于神经网络的预测。我们在64,478个Android应用程序上评估了Multi-HyLSTM,并预测了774,460个Java加密API调用,这些调用通常对开发人员来说很具挑战性。我们的Multi-HyLSTM在API完成的top-1准确率上达到了98.99%的优异结果。此外,我们通过消融研究展示了我们设计选择的有效性,并发布了我们的数据集。

论文链接:https://doi.org/10.1109/TSE.2023.3265362

37、Static Analysis of JNI Programs via Binary Decompilation

由于C和Java程序的综合优势,JNI程序得到了广泛应用。然而,由于理解两种不同编程语言之间的交互行为具有挑战性,JNI程序的开发很难做到完全正确,并容易受到安全攻击。因此,研究人员提出了对JNI程序源代码进行静态分析,以检测其中的错误和安全漏洞。然而,这种源代码分析对于未开源的编译后JNI程序或包含第三方二进制库的开源JNI程序不适用。尽管JN-SAF是用于编译后JNI程序的最先进分析器,可以分析二进制代码,但由于其符号执行和基于摘要的自底向上分析,存在一些限制。在本文中,我们提出了一种新颖的方法,通过二进制反编译对编译后的JNI程序进行静态分析,而无需其源代码。与直接分析二进制文件的JN-SAF不同,我们的方法通过反编译二进制文件,然后使用现有的JNI程序源代码分析器来分析JNI程序。为了将二进制文件反编译为可编译的C源代码,并具有精确的JNI交互相关类型,我们利用JNI程序的特性改进了现有的反编译工具。我们的评估结果显示,该方法几乎与最先进的JNI程序源代码分析器一样精确,并且比JN-SAF更精确。

论文链接:https://doi.org/10.1109/TSE.2023.3241639

38、The Secret Life of Software Vulnerabilities: A Large-Scale Empirical Study

软件漏洞是源代码中的弱点,可能被潜在地利用以造成损失或伤害。尽管研究人员已经设计了许多方法来处理漏洞,但对于它们在软件工程生命周期中的知识仍然明显缺乏,例如漏洞是如何由开发人员引入和修复的。这些信息可以被利用来设计更有效的漏洞预防和检测方法,以及了解这些方法应该瞄准的粒度。为了调查已知软件漏洞的生命周期,我们关注在何种情况下、何时以及如何在软件项目中引入漏洞的贡献,以及漏洞是如何被修复的以及修复需要多长时间。我们考虑了来自国家漏洞数据库的3,663个具有公开补丁的漏洞,涉及GitHub上的1,096个开源软件项目,并定义了一个包含八个步骤的过程,其中既包括自动化部分(例如,使用基于SZZ算法的过程来查找引入漏洞的提交),也包括手动分析(例如,漏洞是如何修复的)。调查的漏洞可以分为144个类别,平均至少有4个贡献提交才会引入,其中一半的漏洞至少有一年没有被修复。大多数贡献是由工作负荷较大的开发人员完成的,通常是在进行维护活动时,而修复漏洞主要是通过添加新的源代码来实现对输入的进一步检查。我们通过提炼实际的实施意见,说明漏洞检测器应该如何工作,以帮助开发人员及时识别这些问题。

论文链接:https://doi.org/10.1109/TSE.2022.3140868

39、UltraFuzz: Towards Resource-Saving in Distributed Fuzzing

最近的研究旨在通过并行计算来提高模糊测试的性能。然而,研究人员关注的是提高效率,而忽视了测试资源成本的增加。在分布式环境中进行并行模糊测试会放大由于模糊测试的随机性而导致的资源浪费问题。在并行模式下,由于缺乏适当的任务分派方案和不同模糊实例之间及时的模糊状态同步,会出现任务冲突和工作负载不平衡,从而加剧了资源浪费问题。在本文中,我们设计了一种名为UltraFuzz的分布式模糊测试工具,以节约资源。基于集中式动态调度,UltraFuzz能够分派任务并全局合理地调度计算资源,以避免资源浪费。此外,UltraFuzz还可以弹性地分配计算资源进行模糊测试和种子评估,从而避免种子评估成为阻碍模糊测试过程的潜在瓶颈。通过对真实世界程序的评估,结果显示在相同的测试资源下,UltraFuzz的性能优于AFL、AFL-P、PAFL和EnFuzz等最先进的工具。最重要的是,实验揭示了一些看似违反直觉的结果,即与单核模糊测试相比,并行模糊测试可以实现"超线性加速"。我们进行了额外的实验,揭示了这一现象背后的深层原因,并深入挖掘了并行模糊测试相对于串行模糊测试的固有优势,包括种子能量调度的全局优化和局部最优种子的逃逸。此外,UltraFuzz发现了24个真实世界的漏洞。

论文链接:https://doi.org/10.1109/TSE.2022.3219520

40、Vulnerability Detection by Learning From Syntax-Based Execution Paths of Code

漏洞检测对于保护软件系统至关重要。基于深度学习的各种方法已被提出来学习漏洞的模式并进行识别。尽管这些方法在这个任务中显示出巨大的潜力,但仍然存在以下问题:(1)它们很难从大量的无关信息中区分出与漏洞相关的信息,这妨碍了它们在捕捉漏洞特征方面的有效性。(2)它们在处理长代码时效果较差,因为许多神经模型会限制输入长度,这妨碍了它们表示长代码片段的能力。为了缓解这两个问题,在这项工作中,我们提出将代码片段的基于语法的控制流图(CFG)分解为多个执行路径来检测漏洞。具体而言,给定一个代码片段,我们首先基于其抽象语法树(AST)构建其CFG,将这样的CFG称为基于语法的CFG,并将CFG从入口节点到出口节点分解为多个路径。接下来,我们采用一个预训练的代码模型和一个卷积神经网络来学习路径的表示,包括路径内部和路径间的关注机制。路径的特征向量被组合为代码片段的表示,并输入分类器以检测漏洞。将代码片段分解为多个路径可以过滤掉与漏洞无关的一些冗余信息,并帮助模型专注于漏洞特征。此外,由于分解后的路径通常比代码片段更短,长代码中位于末尾的信息更有可能被处理和学习。为了评估我们模型的有效性,我们构建了一个包含超过231k个代码片段的数据集,其中包含24k个漏洞。实验结果表明,所提出的方法在精确度、召回率和F1-Score方面至少比最先进的基线方法分别提高了22.30%、42.92%和32.58%。我们进一步分析了所提出方法优越性的原因。

论文链接:https://doi.org/10.1109/TSE.2023.3286586

41、DeepManeuver: Adversarial Test Generation for Trajectory Manipulation of Autonomous Vehicles

对抗性测试生成技术旨在产生使DNN计算出错误输出的输入扰动。然而,对于由DNN驱动的自动驾驶车辆来说,这种扰动的效果会被系统的其他部分所削弱,并且随着车辆状态的演变,其效果也会减弱。在这项工作中,我们认为,为了使对抗性测试扰动对自动驾驶车辆产生效果,它们必须考虑到DNN和车辆状态之间微妙的相互作用。基于这一观点,我们开发了DeepManeuver,一个自动化框架,它将对抗性测试生成与车辆轨迹物理模拟交替进行。因此,随着车辆沿着轨迹移动,DeepManeuver能够对候选扰动进行改进,以便:(1)考虑到车辆状态的变化可能会影响系统对扰动的感知;(2)保持对之前状态的扰动效果,以便当前状态仍然可达并保留过去的轨迹;(3)实现需要满足车辆状态序列的多目标操纵(例如,到达道路上的位置以导航紧急转弯)。我们的评估结果显示,与最先进的技术相比,DeepManeuver可以以平均20.7个百分点的效果更有效且更一致地生成扰动来实现操纵。我们还展示了DeepManeuver在扰乱车辆行为以实现多目标操纵方面的有效性,成功率至少为52%。

论文链接:https://ieeexplore.ieee.org/document/10213222

42、VulExplainer: A Transformer-Based Hierarchical Distillation for Explaining Vulnerability Types

基于深度学习的漏洞预测方法被提出来帮助资源匮乏的安全从业人员检测易受攻击的函数。然而,安全从业人员仍然不知道给定预测对应的是哪种类型的漏洞(即CWE-ID)。因此,解释给定预测对应的漏洞类型的一种新方法变得非常重要。在本文中,我们提出了VulExplainer,一种解释漏洞类型的方法。我们将VulExplainer表示为一项漏洞分类任务。然而,漏洞具有多样的特征(即CWE-ID),每个CWE-ID的标记样本数量极不平衡(被称为高度不平衡的多类别分类问题),这经常导致不准确的预测。因此,我们引入了基于Transformer的软件漏洞分类的分层蒸馏方法,以解决高度不平衡的软件漏洞类型。具体而言,我们根据CWE抽象类型(即将相似的CWE-ID分组的分类)将复杂的标签分布拆分为子分布。因此,相似的CWE-ID可以被分组,并且每个组将具有更平衡的标签分布。我们分别在每个简化的分布上学习TextCNN教师模型,然而,它们只在自己的组中表现良好。因此,我们通过层次化知识蒸馏框架构建了一个Transformer学生模型,以推广TextCNN教师模型的性能。通过对真实世界的8,636个漏洞进行广泛评估,我们的方法在所有基线方法上的表现提高了5%--29%。结果还表明,我们的方法可以应用于基于Transformer的架构,如CodeBERT、GraphCodeBERT和CodeGPT。此外,我们的方法与任何基于Transformer的模型兼容,无需进行任何架构修改,只需向输入添加一个特殊的蒸馏标记。这些结果突显了我们在解释软件漏洞这一基础和实践问题上的重要贡献。

论文链接:https://ieeexplore.ieee.org/document/10220166

43、Constructing Cyber-Physical System Testing Suites Using Active Sensor Fuzzing

网络物理系统(CPS)自动化关键公共基础设施面临着广泛的攻击威胁,这促使研究各种类型的对策。然而,评估这些对策的有效性具有挑战性,因为手动构建基准测试困难,现有的自动化测试解决方案常常做出不切实际的假设,而盲目模糊测试由于庞大的搜索空间和资源需求而无法有效地发现攻击。在这项工作中,我们提出了主动传感器模糊测试,这是一种完全自动化的方法,用于构建测试套件,而不需要任何关于CPS的先验知识。我们的方法采用主动学习技术。应用于现实世界的水处理系统,我们的方法成功地发现了将系统推入涉及水流、压力和水箱水平的15种不安全状态的攻击,其中包括九种攻击在现有攻击基准中没有涵盖。此外,我们成功生成了长期被怀疑可能存在的有针对性的多点攻击。我们揭示了主动传感器模糊测试成功地扩展了我们之前工作中基于机器学习引导的模糊测试工具生成的攻击基准,增加了两种攻击类型。最后,我们研究了主动学习对模型的影响以及使用主动学习训练的模型能够发现更多攻击的原因。

论文链接:https://ieeexplore.ieee.org/document/10292692

44、Improving Cross-Language Code Clone Detection via Code Representation Learning and Graph Neural Networks

代码克隆检测是软件开发和维护的重要方面。在这个领域进行的广泛研究已经帮助减少了源代码的复杂性并增加了其健壮性,从而协助了错误检测工具的开发。然而,大部分代码克隆检测文献都限定于单一编程语言。随着跨平台应用程序的普及,不同编程语言之间的功能复制变得很常见,导致代码片段具有相似的功能但属于不同的语言。由于这样的克隆在语法上没有关联,单一语言的代码克隆检测工具无法应用于这种情况。在本文中,我们提出了一种基于半监督深度学习的工具Rubhus,能够跨不同的编程语言检测代码克隆。Rubhus利用代码片段的控制流和数据流增强的抽象语法树(AST)来利用它们的语法和结构信息,然后应用图神经网络(GNN)来提取这些信息以进行克隆检测任务。我们通过对包含Java、C和Python程序的数据集进行实验,展示了我们提出的系统的有效性,并通过精确度、召回率和F1得分来评估其性能。我们的结果表明,Rubhus优于当前最先进的跨语言代码克隆检测工具。

论文链接:https://ieeexplore.ieee.org/document/10242168

45、Prompt Tuning in Code Intelligence: An Experimental Evaluation

预训练模型在许多代码智能任务中已经显示出有效性,例如自动代码摘要和缺陷预测。这些模型在大规模无标签语料库上进行预训练,然后在下游任务中进行微调。然而,由于预训练和下游任务的输入形式不同,很难充分探索预训练模型的知识。此外,微调的性能在很大程度上依赖于下游任务数据的数量,而在实践中,数据稀缺的情况很常见。自然语言处理(NLP)领域的最新研究表明,prompt tuning是一种新的调整范式,可以缓解上述问题,并在各种NLP任务中取得了有希望的结果。在prompt tuning中,调整过程中插入的提示信息提供了任务特定的知识,对于数据相对稀缺的任务尤其有益。在本文中,我们对prompt tuning在代码智能任务中的使用和效果进行了实证评估。我们对流行的预训练模型CodeBERT和CodeT5进行了prompt tuning,并在包括缺陷预测、代码搜索、代码摘要和代码翻译在内的四个代码智能任务上进行了实验。我们的实验结果显示,prompt tuning在所有四个任务中始终优于微调。此外,prompt tuning在资源稀缺的场景中显示出巨大潜力,例如平均而言,可以将微调的BLEU分数提高超过26%。我们的结果表明,对于代码智能任务,我们可以采用prompt tuning而不是微调,以获得更好的性能,尤其是在缺乏任务特定数据的情况下。我们还讨论了在代码智能任务中采用prompt tuning的启示。

论文链接:https://ieeexplore.ieee.org/document/10269066

46、VulHunter: Hunting Vulnerable Smart Contracts at EVM Bytecode-Level via Multiple Instance Learning

随着以太坊的经济发展,运行在该平台上的智能合约频繁出现的安全事件已经导致数十亿美元的损失。因此,迫切需要在智能合约中识别漏洞,然而目前的检测方法在这方面存在限制,无法同时解决三个挑战:(i)同时满足对合约源代码、字节码和操作码的检测要求;(ii)减少对手动预定义规则/模式和专家参与的依赖;(iii)帮助合约开发人员更安全地完成合约生命周期,例如漏洞修复和异常监控。随着机器学习(ML)的发展,利用它来检测合约运行时执行序列(称为实例)已经有可能解决这些挑战。然而,由于字节码/操作码的不可读性,缺乏细粒度序列标签的数据集构成了重大障碍。为此,我们提出了一种名为VulHunter的方法,通过遍历从合约操作码构建的控制流图来提取实例。基于混合注意力和多实例学习机制,VulHunter推理实例标签,并设计了一个可选的分类器,以自动捕捉正常和有缺陷合约的微妙特征,从而识别出易受攻击的实例。然后,它结合符号执行来构建和解决符号约束以验证其可行性。最后,我们使用15,000行代码实现了VulHunter的原型,并将其与9种SOTA方法在包括52,042个源代码和184,289个字节码的五个开源数据集上进行了比较。结果表明,与SOTA方法相比,VulHunter能够更准确(90.04%的准确率和85.60%的F1分数)、更高效(每个合约仅需4.4秒)和更稳健(0%的分析失败率)地检测合约漏洞。此外,它可以通过采用不同的基准模型和超参数来关注特定的度量指标,如精确度和召回率,以满足各种用户需求,例如漏洞发现和误报减轻。更重要的是,与以前的基于ML的方法相比,它不仅可以提供分类结果、有缺陷的合约源代码语句、关键操作码片段和易受攻击的执行路径,还可以消除误报并促进合约生命周期中的漏洞修复和攻击模拟等更多操作。

论文链接:https://ieeexplore.ieee.org/document/10261219

47、Simulating Operational Memory Models Using Off-the-Shelf Program Analysis Tools

内存模型允许对多线程程序的正确性进行推理。构建和使用这样的模型得益于能够揭示给定程序所允许的行为的模拟器。虽然在模拟公理式内存模型方面进行了大量工作,但在操作模型的模拟方面的研究较少。操作模型通常被认为比公理模型更直观,但由于模型转换系统中路径数量庞大,模拟起来具有挑战性。观察到程序分析工具解决了类似的路径爆炸问题,我们研究了将"一个给定的内存模型是否允许给定的行为"决策问题简化为"一个给定的C程序是否安全"决策问题的想法,这可以通过各种现成的工具来处理。我们报告了使用多个C程序分析工具进行此目的的经验,包括模型检查器(CBMC)、符号执行工具(KLEE)和三种覆盖引导模糊测试工具(libFuzzer、Centipede和AFL++),并提供了两个案例研究。首先,我们评估了这些工具在x86内存模型环境中的性能和可伸缩性,结果显示模糊测试工具的性能与RMEM(一种最先进的定制内存模型模拟器)相当。其次,我们研究了一个更复杂的、最近开发的用于混合CPU/FPGA设备的内存模型,该模型没有定制的模拟器可用。我们强调了不同的编码策略如何帮助各种工具,并展示了我们的方法如何使我们能够比以前的工作更深入地模拟CPU/FPGA模型,从而发现并修复了模型中的几个不准确之处。我们还尝试应用了在2023年年度软件验证竞赛(SV-COMP)的"虚假化"类别中获胜的三种分析工具。我们发现这些工具在我们的用例中无法扩展,这促使我们提交了从我们的工作中产生的示例C程序以纳入SV-COMP基准集,以便它们可以作为挑战示例。

论文链接:https://ieeexplore.ieee.org/document/10295416

48、PatchDiscovery: Patch Presence Test for Identifying Binary Vulnerabilities Based on Key Basic Blocks

软件漏洞通过代码重用很容易传播,这对软件系统的安全构成了严重威胁。自动补丁存在性测试提供了一种有效的方式来检测漏洞是否已修补,这对大规模软件系统的维护非常重要。然而,大多数现有方法无法处理二进制代码,它们的准确性和效率都很低。它们都无法应对版本差异、函数大小和补丁大小的问题。为了解决上述问题,我们提出了PatchDiscovery,一种通过提取补丁和漏洞的关键基本块作为补丁发现的签名来识别二进制漏洞的补丁存在性测试方法。我们提出了一种高效准确的基本块匹配方法,基于脆弱函数(VF)和其修补函数(PF)的规范化简化控制流图(CFG),来精确定位漏洞和补丁。然后,我们对补丁和漏洞进行细粒度的补丁级分析,以获得它们的关键基本块作为补丁存在性测试中PF和VF的签名。具体而言,我们分别在目标函数(TF)中搜索PF和VF的关键基本块,以确定TF更类似于PF还是VF,即是否已修补。基于包含524个常见漏洞和11607个目标函数的两个真实世界二进制数据集的大量实验证明,PatchDiscovery非常有效和高效。它达到了92.2%的F-度量,并且平均仅需0.091秒来测试一个目标函数。它在很大程度上也对版本差异、补丁大小和函数大小具有弹性。此外,它在大规模补丁检测中具有比现有技术更快的测试速度,并且在固件漏洞发现场景中取得了良好的性能。

论文链接:https://ieeexplore.ieee.org/document/10319441

相关推荐
毒果2 小时前
网络安全全景解析
安全·web安全
云盾安全防护2 小时前
CC攻击与WAF的对抗战
网络·安全·ddos
Jasmin Tin Wei3 小时前
软件工程 期末复习
软件工程
网硕互联的小客服4 小时前
如何在服务器上部署 Python Django 应用
linux·运维·服务器·网络·安全
渗透好难4 小时前
CTF show 数学不及格
安全·系统安全·密码学
百度安全5 小时前
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
安全·百度
IDRSolutions_CN5 小时前
如何在网页里填写 PDF 表格?
java·经验分享·pdf·软件工程·团队开发
像素工坊可视化6 小时前
监控升级:可视化如何让每一个细节 “说话”
运维·人工智能·安全
程序员阿超的博客6 小时前
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
java·spring boot·安全·spring
好想打kuo碎7 小时前
轻量安全的密码管理工具Vaultwarden
linux·安全·ubuntu