本文总结了27篇关于软件工程安全相关的论文,内容涵盖漏洞检测与修复、测试与验证、安全需求与设计等方面。
前3名热门研究方向是:
基于深度学习的漏洞检测
自动程序修复
智能合约安全性分析
3个冷门的研究方向是:
安全文化对软件开发的影响
API误用检测与修复
安全需求依赖性分析
技术进步在信息共享方面引发了对数据保护的担忧。隐私政策包含了有关个人数据如何由组织或软件系统(例如网络服务或应用程序)处理的隐私相关要求。在欧洲,隐私政策需要符合《通用数据保护条例》(GDPR)的规定。GDPR合规性检查的先决条件是验证隐私政策的内容是否符合GDPR的规定。不完整的隐私政策可能会导致违规组织面临巨额罚款,以及不完整的与隐私相关的软件规范。手动进行完整性检查既耗时又容易出错。在本文中,我们提出了基于人工智能的隐私政策完整性检查自动化解决方案。通过系统的定性方法,我们首先构建了两个用于描述GDPR隐私相关规定的工件,即概念模型和一组完整性准则。然后,我们利用自然语言处理和监督式机器学习的组合构建了一个自动化解决方案。具体而言,我们识别隐私政策中与GDPR相关的信息内容,并将其与完整性准则进行检查。为了评估我们的方法,我们收集了来自基金行业的234个真实隐私政策。在48个未见过的隐私政策中,我们的方法正确检测出了334个完整性准则违规中的300个,同时产生了23个误报。因此,该方法的精确度为92.9%,召回率为89.8%。与仅应用关键词搜索的基准相比,我们的方法在精确度上提高了24.5%,在召回率上提高了38%。
论文链接:https://doi.org/10.1109/TSE.2021.3124332
最近,已经提出了许多用于识别移动应用程序中信息流的静态污点分析技术。这些技术通常在一组合成基准上进行优化和评估,这使得比较结果难以推广。此外,这些技术通常在不同的配置设置下进行比较,导致比较结果不准确。在本文中,我们对三种最重要的静态污点分析工具进行了大规模、可控和独立的比较:FlowDroid、Amandroid和DroidSafe。我们对这些工具进行了配置设置的对齐,并在一组常见基准和来自Google Play应用商店的真实应用程序上进行了评估。我们进一步评估了DroidRA实现的额外反射处理机制的有效性,并将其应用到每个评估工具中。我们将我们的分析结果与先前研究中的结果进行了比较,确定了现有工具不准确的主要原因,并提出了未来研究的建议。
论文链接:https://doi.org/10.1109/TSE.2021.3109563
权限是保护Android用户数据和隐私的基本安全机制。鉴于其重要性,安全研究人员从各个方面研究了权限的设计和使用。然而,大多数以前的研究都集中在系统权限的安全问题上。被许多研究人员忽视的是,应用程序可以使用自定义权限与其他应用程序共享其资源和功能。然而,使用自定义权限的安全影响尚未完全理解。在本文中,我们系统地评估了Android自定义权限的设计和实现。值得注意的是,我们构建了一个名为CuPerFuzzer+的自动模糊测试工具,用于检测Android操作系统中存在与自定义权限相关的漏洞。CuPerFuzzer+将权限机制的操作视为黑盒,并执行大量的有针对性的测试用例来触发特权提升。在实验中,CuPerFuzzer+成功地发现了5,932个有效案例和47个关键路径。通过调查这些存在漏洞的案例并分析Android操作系统的源代码,我们进一步确定了Android权限框架中存在的一系列严重设计缺陷,包括悬空的自定义权限、不一致的权限组映射、自定义权限提升、不一致的权限定义、休眠的权限组和不一致的权限类型。利用这些缺陷,恶意应用程序可以访问未经授权的平台资源。基于这些观察结果,我们提出了三个通用的设计准则来保护自定义权限。我们的发现已经得到了Android安全团队的认可,并被分配了CVE-2020-0418、CVE-2021-0306、CVE-2021-0307和CVE-2021-0317。
论文链接:https://doi.org/10.1109/TSE.2021.3119980
自动程序修复(APR)旨在降低手动修复软件缺陷的成本。然而,APR存在生成大量过拟合补丁的问题,这些补丁只能使测试通过,而不能正确修复缺陷。本文提出了一种名为ODS的新型过拟合补丁检测系统,用于评估APR补丁的正确性。ODS首先在抽象语法树(AST)级别上静态比较修补程序和有缺陷程序,提取代码特征,针对单一编程语言Java。然后,ODS使用捕获的代码特征和补丁正确性标签进行监督学习,自动学习一个概率模型。学得的ODS模型最终可以应用于对新的、未见过的程序修复补丁进行分类。我们进行了大规模实验证明ODS在基于Defects4J、Bugs.jar和Bears基准的10,302个补丁的正确性分类上的有效性。经验证实,ODS能够正确分类26个项目中71.9%的程序修复补丁,这一结果超过了现有技术水平。ODS在实践中具有适用性,可以作为后处理过程用于对不同APR系统生成的补丁进行分类。
论文链接:https://doi.org/10.1109/TSE.2021.3071750
C/C++程序经常遇到内存错误,比如Use-After-Free、缓冲区溢出和整数溢出等。在这些内存错误中,UAF漏洞越来越被攻击者利用来破坏关键软件系统,导致严重后果,如远程代码执行和数据泄露。研究人员提出了几十种方法来检测测试环境中的UAF,并在生产环境中减轻UAF的利用。然而,据我们所知,还没有综合评估和比较这些方法的全面研究。在本文中,我们对当前的UAF检测和利用减轻方法进行了详细介绍,并提供了系统的概述、全面的比较和评估。具体而言,我们评估了公开可用的UAF检测和利用减轻工具的有效性和效率。实验结果表明,静态UAF检测器适用于检测程序内部的UAF,但对于现实世界中的程序中的程序间UAF检测不足够。动态UAF检测器仍然是检测程序间UAF的首选。我们的评估还表明,现有UAF利用减轻工具的运行时开销相对稳定,而内存开销可能因不同程序而大幅变化。最后,我们展望了未来潜在有价值的研究方向。
论文链接:https://doi.org/10.1109/TSE.2021.3121994
中断驱动程序广泛部署在安全关键的嵌入式系统中,用于执行与硬件和资源相关的数据操作任务。在这些系统中频繁使用中断可能会导致竞争条件的发生,因为应用程序任务与中断处理程序(或两个中断处理程序)之间存在交互。已经提出了许多程序分析和测试技术来检测多线程程序中的竞争条件。然而,很少有研究解决与硬件中断相关的竞争条件问题。在本文中,我们提出了一个名为SDRacer的自动化框架,用于检测、验证和修复中断驱动的嵌入式软件中的竞争条件。它使用静态分析和符号执行的组合来生成用于触发潜在竞争条件的输入数据。然后,它利用虚拟平台在潜在竞争点上动态验证这些竞争条件,强制中断发生。最后,它提供修复候选来消除检测到的竞争条件。我们在使用C语言编写的九个真实嵌入式程序上评估了SDRacer。结果显示,SDRacer能够准确地检测和成功修复竞争条件。
论文链接:https://doi.org/10.1109/TSE.2020.2989171
验收测试是一项验证活动,旨在确保软件系统符合其功能需求。在安全关键系统中,它起着至关重要的作用,因为它受到软件标准的强制要求,要求每个需求都要以清晰可追溯的方式通过这种测试进行验证。测试工程师需要从需求中确定所有代表性的测试执行场景,确定触发这些场景的运行时条件,并最终提供满足这些条件的输入数据。鉴于需求规范通常很大且通常以自然语言(例如用例规范)提供,验收测试用例的生成往往是昂贵且容易出错的。在本文中,我们提出了一种名为UMTG(Use Case Modeling for System-level, Acceptance Tests Generation)的方法,该方法支持从自然语言的需求规范中生成可执行的、系统级的验收测试用例,旨在减少生成测试用例所需的手动工作量,并确保需求覆盖。具体而言,UMTG根据用例规范和待测系统的领域模型自动化生成验收测试用例,这在许多开发环境中是常见的。与现有方法不同,它不对用例规范的表达能力施加严格限制。我们依赖自然语言处理的最新进展,自动识别测试场景并生成捕捉触发场景执行的条件的形式约束,从而实现测试数据的生成。在两个工业案例研究中,UMTG自动且正确地将95%的用例规范步骤转化为生成测试数据所需的形式约束;此外,它生成了不仅包含专家手动实现的所有测试场景,还包含一些以前未考虑的关键场景的测试用例。
论文链接:https://doi.org/10.1109/TSE.2020.2998503
二进制差异分析是一种发现两个二进制程序之间功能差异和相似性的过程。以往关于二进制差异分析的研究将其视为一个函数匹配问题,以建立函数之间的初始一对一映射,并计算序列匹配比率来分类两个函数是否完全匹配、部分匹配或不匹配。现有技术的准确性仅在检测完全匹配时最佳,并且在检测部分更改的函数方面效率不高,尤其是对于具有轻微补丁的函数。这些缺点主要由两个主要挑战造成:(i)在一对一映射阶段,使用严格的策略匹配函数特征;(ii)在分类阶段,将汇编片段视为普通文本,并使用序列匹配进行相似性比较。指令具有独特的结构,即助记符和寄存器在指令中具有特定位置,并且具有语义关系,这使得汇编代码与一般文本不同。序列匹配在一般文本方面表现最佳,但无法检测指令级别的结构和语义变化,因此在分类中使用它会产生许多错误结果。在这项研究中,我们通过提出一个双重解决方案来解决上述潜在挑战。对于一对一映射阶段,我们提出了计算成本较低的特征,并与基于距离的选择标准进行比较,以映射相似函数并筛选出不匹配的函数。对于分类阶段,我们提出了一个Siamese二分类神经网络,其中每个分支都是基于注意力的分布式学习嵌入神经网络,学习汇编指令之间的语义相似性,学习突出显示指令级别的变化,并通过最终的全连接层学习准确地对一对一映射的两个函数进行分类,无论是完全匹配还是部分匹配。我们使用x86内核二进制进行训练,并实现了约99%的分类准确性,这高于现有的二进制差异分析技术和工具。
论文链接:https://doi.org/10.1109/TSE.2021.3093926
深度神经网络(DNN)驱动的技术已经广泛应用于我们生活的各个方面。然而,应用的DNN总是无法检测到错误行为,这可能导致严重的问题。已经提出了几种方法来增强对深度学习(DL)系统(例如基于图像的DL系统)进行自动测试的对抗性示例。然而,这些方法存在以下两个限制。首先,现有方法只考虑对对抗性示例进行小幅扰动,它们设计并生成对特定DNN模型的对抗性示例。这可能会阻碍示例在其他DNN模型中的可传递性。其次,它们只使用浅层特征(例如像素级特征)来判断生成的对抗性示例与原始示例之间的差异。完全忽略了包含高级语义信息(例如图像对象类别和场景语义)的深层特征。为了解决这两个问题,我们提出了CAGFuzz,一种面向基于图像的DL系统的基于覆盖率引导的对抗性生成模糊测试方法。CAGFuzz能够为主流DNN模型生成对抗性示例,以发现其潜在错误。首先,我们根据通用数据集训练一个基于对抗性示例生成器(AEG)。AEG只考虑数据特征以减轻可传递性问题。其次,我们提取原始示例和对抗性示例的深层特征,并通过余弦相似度约束对抗性示例,以确保对抗性示例的深层特征保持不变。最后,我们使用对抗性示例对模型进行重新训练。基于几个标准数据集,我们设计了一组专门的实验来评估CAGFuzz。实验结果表明,CAGFuzz能够检测到更多隐藏错误,提高目标DNN模型的准确性,并生成具有更高可传递性的对抗性示例。
论文链接:https://doi.org/10.1109/TSE.2021.3124006
云系统常常受到分布式并发错误的困扰,这些错误往往导致数据丢失和服务中断。本文介绍了CloudRaid,一种高效有效的自动化工具,用于有效地发现分布式并发错误。由于分布式并发错误是由节点之间的不及时交互触发的,即意外的消息顺序,因此它们非常难以发现。为了高效有效地检测云系统中的并发错误,CloudRaid仅自动分析和测试可能导致错误的消息顺序。具体而言,CloudRaid通过挖掘先前执行的日志,揭示了可行但测试不足的消息顺序。此外,我们还提出了一种增强日志的技术,可以自动在正在测试的系统中引入新的日志。这些额外的日志增加了CloudRaid的效果,而不会引入明显的性能开销。我们基于日志的方法非常适合实时系统。我们已经将CloudRaid应用于分析六个代表性的分布式系统:Hadoop2/Yarn、HBase、HDFS、Cassandra、Zookeeper和Flink。在35小时内,CloudRaid成功地测试了这六个系统的60个不同版本(每个系统10个版本),发现了31个并发错误,其中包括九个以前从未报告过的新错误。对于这九个新错误的检测,原始开发人员已经确认了它们,其中三个是关键性错误,并已经修复。
论文链接:https://doi.org/10.1109/TSE.2020.2999364
给定一个目标二进制函数,二进制代码搜索在代码库中检索出前K个相似函数,相似函数表示它们是由相同的源代码编译而来。由于编译器工具链和选项、CPU架构的巨大变化以及成千上万的二进制代码,搜索二进制代码特别具有挑战性。此外,当前的二进制代码搜索方案存在一些关键问题,包括不准确的基于文本或标记的分析、缓慢的图匹配或复杂的深度学习过程。在本文中,我们提出了一种无监督的张量嵌入方案Codee,以在二进制函数级别上高效准确地进行代码搜索。首先,我们使用基于自然语言处理的神经网络生成语义感知的标记嵌入。其次,我们提出了一种基于网络表示学习模型的高效基本块嵌入生成算法。我们学习指令的语义信息和控制流结构信息,生成基本块嵌入。然后,我们使用函数中的所有基本块嵌入来得到一个可变长度的函数特征向量。第三,我们建立一个张量,通过张量奇异值分解生成函数嵌入,将可变长度向量压缩为短的固定长度向量,以便之后进行高效搜索。我们进一步提出了一种动态张量压缩算法,以增量更新函数嵌入数据库。最后,我们使用局部敏感哈希方法在代码库中找到前K个相似匹配函数。与Asm2Vec和DeepBinDiff等最先进的跨优化级别代码搜索方案相比,我们的方案在四个数据集(OpenSSL、Coreutils、libgmp和libcurl)上实现了更高的平均搜索准确性、更短的特征向量和更快的特征生成性能。与其他跨平台和跨优化级别的代码搜索方案(如Gemini、Safe)相比,我们的方法的平均召回率也表现优秀。
论文链接:https://doi.org/10.1109/TSE.2021.3056139
自动检测软件漏洞是软件安全中的一个基本问题。现有的程序分析技术要么存在高误报率,要么存在高漏报率。深度学习(DL)在最近取得的进展引发了对将DL应用于自动漏洞检测的兴趣。最近的几项研究表明,在漏洞检测方面可以达到高达95%的准确率。在本文中,我们提出了一个问题:“最先进的基于DL的技术在现实世界的漏洞预测场景中表现如何?”令我们惊讶的是,我们发现它们的性能下降了50%以上。对导致这种急剧性能下降的原因进行系统调查后发现,现有的基于DL的漏洞预测方法在训练数据(例如数据重复、漏洞类别分布不真实等)和模型选择(例如简单的基于标记的模型)方面面临挑战。因此,这些方法通常无法学习与漏洞实际原因相关的特征,而是从数据集中学习了与之无关的特征(例如特定的变量/函数名称等)。基于这些实证结果,我们展示了如何基于漏洞预测的真实设置,采用更有原则的数据收集和模型设计方法,可以得到更好的解决方案。与文献中表现最佳的模型相比,所得到的工具的性能显著提高,精确度提高了高达33.57%,召回率提高了128.38%。总体而言,本文阐明了现有基于DL的漏洞预测系统存在的潜在问题,并为未来基于DL的漏洞预测研究提供了路线图。
论文链接:https://doi.org/10.1109/TSE.2021.3087402
智能合约是在区块链上运行的图灵完备程序。它们是不可变的,即使在检测到错误时也无法修改。因此,在部署到区块链之前确保智能合约没有错误且设计良好非常重要。合约缺陷是指智能合约中的错误、缺陷或故障,导致其产生不正确或意外的结果,或以意外的方式运行。检测和修复合约缺陷可以避免潜在的错误,并使程序更加健壮。我们之前的工作定义了20种智能合约的缺陷,并将其分为五个影响级别。根据我们的分类,严重级别在1-3之间的合约缺陷可能导致意外行为,例如合约被攻击者控制。在本文中,我们提出了DefectChecker,一种基于符号执行的方法和工具,用于检测以太坊区块链平台上可能导致智能合约产生意外行为的八种合约缺陷。DefectChecker可以从智能合约的字节码中检测合约缺陷。我们通过将DefectChecker应用于一个开源数据集来验证其性能。我们的评估结果显示,DefectChecker在整个数据集上获得了很高的F-score(88.8%),平均分析一个智能合约只需0.15秒。我们还将DefectChecker应用于以太坊平台上的165,621个不同智能合约。我们发现其中25,815个智能合约至少包含一个属于1-3级影响级别的合约缺陷,包括一些真实世界的攻击。
论文链接:https://doi.org/10.1109/TSE.2021.3054928
针对软件应用的网络攻击对我们的日常生活产生了巨大影响。例如,攻击者利用Web应用程序的漏洞窃取和未经授权地使用存储在这些系统中的敏感数据。以往的研究表明,安全测试非常精确,因此广泛应用于验证各个安全需求。然而,安全需求之间的依赖关系可能导致额外的漏洞。手动检测依赖关系面临可扩展性挑战,例如,一项先前的研究显示,对40个需求进行两两依赖性分析需要大约12小时。在本文中,我们提出了一种新颖的方法,将高级安全需求之间的相互依赖性整合到一起,例如政策、法规和标准中记录的需求。然后,我们使用自动化需求追踪方法来识别产品级安全需求及其依赖关系。我们对HIPAA和FIPS 200的手动分析导致了对高级安全需求依赖性的五种类型的识别,这进一步指导了自动化追踪方法和系统级安全测试的设计。在医疗保健和教育领域的五个项目上进行的实验结果显示,召回率显著提高了81%。我们对一个已部署的生产系统的案例研究通过使用检测到的需求依赖性作为测试路径,发现了四个以前未知的漏洞,展示了我们的方法在将需求工程与安全测试联系起来方面的价值。
论文链接:https://doi.org/10.1109/TSE.2020.3030745
突变测试是一种基本的软件测试技术,通常用于评估测试套件的充分性。在突变测试中,通过将不同类别的故障引入待测试的程序,生成一组突变体。测试数据应该以尽可能多地杀死突变体的方式生成。由于存在许多用于不同语言的实现突变测试的工具,即使是规模较小的程序,通常也会生成大量的突变体。然而,大量的突变体不仅导致突变测试成本高昂,而且使相应的测试数据生成成为一项非常复杂的任务。在本文中,我们利用智能技术从两个方面提高突变测试的效果和效率。首先,应用模糊聚类这一机器学习技术将突变体分为不同的聚类。然后,采用基于个体共享的多种群遗传算法,在将测试数据生成问题视为优化问题时,同时生成用于杀死不同聚类中的突变体的测试数据。因此,我们开发了一个名为
FUZGENMUT
的综合框架来实现所提出的技术。基于不同规模的九个程序的实验证明,模糊聚类可以有效降低突变测试的成本,而多种群遗传算法在提高测试数据生成效率的同时,具有较高的突变体杀伤能力。结果清楚地表明,利用智能技术提升突变测试的功效和实用性具有巨大潜力。
论文链接:https://doi.org/10.1109/TSE.2021.3052987
我们提出了一种自动生成动态符号执行搜索启发式的技术。动态符号执行中的一个关键挑战是如何在有限的时间预算内有效地探索程序的执行路径,以实现高代码覆盖率。动态符号执行使用搜索启发式来应对这一挑战,该启发式偏好探索最有可能最大化最终覆盖率的特定类型路径。然而,手动设计一个良好的搜索启发式并不容易,通常会导致次优和不稳定的结果。本文的目标是通过自动学习搜索启发式来克服动态符号执行的这一缺点。我们定义了一类搜索启发式,即参数化搜索启发式,并提出了一种能够高效找到每个被测程序的最优启发式的算法。使用工业级符号执行工具(例如KLEE)进行的实验结果表明,我们的技术能够成功生成搜索启发式,在分支覆盖率和错误发现方面显著优于现有的手工制作的启发式。
论文链接:https://doi.org/10.1109/TSE.2021.3101870
API误用是软件崩溃和安全漏洞的众所周知的原因。然而,鉴于(第三方)API的正确使用对于客户端程序的开发人员可能是模糊的,它们的检测和修复是具有挑战性的。本文首次进行了实证研究,评估现有自动化错误修复工具修复API误用的能力,这是一类以前未被探索的错误。我们的研究在一个手动策划的基准测试(APIRepBench)上检查和比较了14个基于Java测试套件的修复工具(其中11个是在2018年之前提出的,之后有三个),该基准测试包含了101个API误用。我们开发了一个可扩展的执行框架(APIARTy)来自动执行多个修复工具。我们的结果显示,修复工具能够为考虑的API误用生成补丁的比例为28%。虽然11个较早的工具通常速度较快(修复尝试的中位执行时间为3.87分钟,平均执行时间为30.79分钟),但最近的三个工具效率较低(即比前任工具慢98%)。这些工具为大多数属于缺少null检查、缺少值、缺少异常和缺少调用等类别的API误用生成了补丁。所有工具生成的大多数补丁是合理的(65%),但只有很少的补丁与人工补丁在语义上是正确的(25%)。我们的研究结果表明,未来的修复工具设计应支持复杂错误的定位,包括不同类别的API误用、处理超时问题以及配置大型软件项目的能力。APIRepBench和APIARTy已公开提供,供其他研究人员评估修复工具在检测和修复API误用方面的能力。
论文链接:https://doi.org/10.1109/TSE.2021.3067156
当前由免费和商业反恶意软件采用的基于签名的检测方法存在一些弱点,工业界和研究界提出了几种克服这些弱点的技术。这些技术主要基于监督式机器学习,需要优化的类平衡来生成良好的预测模型。在本文中,我们提出了一种通过检测所属家族来推断移动应用程序恶意性的方法,利用形式等价检查。我们引入了一组启发式规则来减少移动应用程序比较的数量,并定义了一个反映应用程序恶意性的度量指标。对35个Android恶意软件家族(从2010年到2018年)进行的实际实验验证了所提出方法在移动恶意软件检测和家族识别方面的有效性。
论文链接:https://doi.org/10.1109/TSE.2021.3067061
测试集的实用性受其多样性和规模的强烈影响。语法覆盖率已成为多样性的标准代理。尽管存在更复杂的度量方法,例如样本与均匀分布的接近程度,但使用它们的方法往往依赖于类型。我们使用r-wise哈希函数为C程序创建了一种新颖的、保持语义的可测试性转换,称为HashFuzz。使用HashFuzz改善了基于仪器的模糊测试器生成的测试集的多样性。我们使用四种在先前研究中广泛使用的最新模糊测试器对Google模糊测试套件中的八个程序评估了HashFuzz转换的效果。我们证明了在所有使用的模糊测试器中,转换后的程序的测试集性能得到了显著改善。这些改善包括在每种情况下多样性的显著提高,分支覆盖率的维持或小幅改善 - 在最佳情况下提高了4.8个百分点,并且在唯一崩溃检测数量方面有显著改善 - 与未转换程序的测试集相比增加了28至97个百分点。
论文链接:https://doi.org/10.1109/TSE.2021.3100858
使用存在漏洞的开源依赖是当今软件开发中已知的问题。在过去的十年中出现了几种用于检测已知有漏洞依赖项的漏洞扫描工具,然而,至今仍没有一项案例研究来调查开发实践(例如分叉、修补、重新打包等)对其性能的影响。本文研究了(i)可能影响存在漏洞的开源依赖项的修改类型,以及(ii)这些修改对漏洞扫描工具性能的影响。通过对SAP开发的7,024个Java项目进行实证研究,我们确定了四种修改类型:重新编译、重新打包、元数据移除和重新封装。特别是,我们发现超过87%(分别为56%)的存在漏洞的Java类以重新打包(重新封装)的形式出现在Maven Central中。我们评估了这些修改对开源漏洞扫描工具OWASP Dependency-Check(OWASP)和Eclipse Steady、GitHub Security Alerts以及三个商业扫描工具性能的影响。结果显示,没有一个扫描工具能够处理所有已识别的修改类型。最后,我们提出了Achilles,一个包含2,505个测试用例的新型测试套件,可以复制对开源依赖项进行的修改。
论文链接:https://doi.org/10.1109/TSE.2021.3101739
对智能合约的攻击给数字资产造成了相当大的损失。许多基于符号执行、模糊测试和静态分析的技术被用于检测合约的漏洞。目前大多数分析器只考虑合约内的漏洞检测场景。然而,以太坊合约通常通过调用其他合约的函数来进行交互。一个隐藏在依赖于外部合约调用信息的路径中的错误被定义为合约间漏洞。未能处理这种错误可能导致潜在的假阴性和假阳性。在这项工作中,我们提出了Pluto,它支持在合约间场景中进行漏洞检测。它首先构建了一个合约间控制流图(ICFG),以提取合约调用之间的语义信息。然后,它通过符号化探索ICFG并推导出合约间路径约束(ICPC),以更准确地检查执行路径的可达性。最后,Pluto根据一些预定义的规则检测是否存在漏洞。为了评估,我们将Pluto与包括Oyente、Mythril、Securify、ILF和Clairvoyance在内的五种最先进的工具进行了比较,使用了一个带有标签的基准测试集和39,443个真实世界的以太坊智能合约。结果显示,其他工具只能检测到10%的合约间漏洞,而Pluto在标记数据集上可以检测到80%的漏洞。此外,Pluto在真实合约中检测到了451个已确认的漏洞,其中包括合约间场景中的36个漏洞。两个错误已被美国国家漏洞数据库(NVD)分配了唯一的CVE标识符。平均而言,Pluto分析一个合约的时间为16.9秒,与最先进的工具一样快。
论文链接:https://doi.org/10.1109/TSE.2021.3117966
Mutation分析通过测量测试套件检测人为引入的小型人工错误的能力来评估其充分性。Mutation分析被认为是最强大的测试充分性标准之一。基于Mutation分析,Mutation测试是一种使用变异体作为测试目标来创建或改进测试套件的测试技术。Mutation测试长期以来被认为是棘手的,因为可以创建的变异体数量代表了一个无法克服的问题——无论是从人力还是计算资源的角度来看。这阻碍了Mutation测试作为行业标准的采用。例如,Google拥有两百亿行代码的代码库,每天执行超过1.5亿次测试。传统的Mutation测试方法在这样的环境下无法扩展;即使是现有的加速Mutation分析的解决方案也无法在这样的规模下实现计算上的可行性。为了解决这些挑战,本文提出了一种可扩展的Mutation测试方法,基于以下主要思想:(1)Mutation测试是增量进行的,在代码审查期间仅对更改的代码进行变异,而不是整个代码库;(2)变异体经过过滤,删除开发人员可能不相关的变异体,并限制每行代码和每个代码审查过程中的变异体数量;(3)变异体的选择基于变异操作符的历史性能,进一步消除不相关的变异体并提高变异体质量。本文通过在基于代码审查的环境中对提出的方法进行实证验证,验证了其有效性,该方法在超过1,000个项目中由超过24,000名开发人员使用。结果显示,提出的方法产生的变异体数量较少,基于上下文的变异体过滤和选择改善了变异体的质量和可操作性。总体而言,提出的方法代表了一个Mutation测试框架,可以无缝地集成到软件开发工作流程中,并适用于任何规模的工业环境。
论文链接:https://doi.org/10.1109/TSE.2021.3107634
自动程序修复是降低手动调试成本和提高软件质量的一种有前景的方法。然而,最近的研究表明,自动程序修复技术往往会产生质量较低的补丁,过度拟合于提供给修复技术的测试集,并且无法推广到预期的规范。本文在真实的Java程序上对这一现象进行了严格的探究,分析了四种知名的修复技术(GenProg、Par、SimFix和TrpAutoRepair)在项目开发过程中由开发人员引入的缺陷上的有效性。我们发现:(1)当应用于真实的Java代码时,自动程序修复技术仅为10.6%至19.0%的缺陷生成补丁,比应用于C代码时更少。(2)生成的补丁往往过度拟合于提供的测试套件,只有13.8%至46.1%的补丁通过了一个独立的测试集。(3)测试套件的规模对补丁的质量有极小但显著的影响,较大的测试套件产生更高质量的补丁,尽管令人惊讶的是,覆盖率更高的测试套件与质量较低的补丁相关。(4)有缺陷程序无法通过的测试数量对生成的补丁质量有小但具有统计学意义的正面影响。(5)测试套件的来源,无论是由人工编写还是自动生成,对补丁的质量有显著影响,开发人员编写的测试通常产生更高质量的补丁。(6)补丁的多样性不足以通过某种组合多个补丁的方法来提高质量。我们开发了JaRFly,一个用于实现基于搜索的自动改进Java程序技术的开源框架。我们的研究使用JaRFly忠实地重新实现了GenProg和TrpAutoRepair以适用于Java代码,并首次发布了Par的实现。与以往的工作不同,我们的研究对混淆因素进行了仔细控制,并提出了一种方法和一个自动生成的测试套件数据集,以客观评估Java修复技术在真实缺陷上的质量。
论文链接:https://doi.org/10.1109/TSE.2020.2998785
尽管对卷积神经网络(CNN)进行了大量的对抗性测试研究,但对循环神经网络(RNN)的测试仍然有限,并且对广泛的顺序应用领域存在威胁。在本文中,我们提出了一种面向RNN系统的对抗性测试框架RNN-Test,专注于广泛部署的序列到序列(seq2seq)任务,而不仅仅是分类领域。首先,我们设计了一种针对RNN模型的新型搜索方法,通过最大化RNN状态之间的不一致性来生成对抗性输入,以突破其内部依赖关系。接下来,我们根据RNN的独特结构引入了两种基于状态的覆盖度量,以实现更多的系统行为。最后,RNN-Test解决了联合优化问题,最大化状态不一致性和状态覆盖,并为不同类型输入的各种任务制定对抗性输入。在评估中,我们将RNN-Test应用于四个常见结构的RNN模型。在测试的模型上,RNN-Test方法在生成对抗性输入方面表现出竞争力,相比基于FGSM和DLFuzz的方法,模型的性能下降更为明显,成功率(或生成率)提高了2.78%至37.94%。RNN-Test在MNIST LSTM模型上的对抗率也比testRNN高出52.65%至66.45%,而在PTB语言模型上的困惑度比DeepStellar高出53.76%至58.02%,生成率提高了16%。与传统的神经元覆盖相比,所提出的状态覆盖度量作为指导具有更高的成功率(或生成率),提高了4.17%至97.22%。
论文链接:https://doi.org/10.1109/TSE.2021.3114353
安全设计是一种推荐的方法,用于解决软件系统设计中的端到端安全和隐私问题。为了实现这种方法,软件开发人员需要采取积极主动的安全行为。本研究基于以往研究的结果,认为个人和组织特征会影响软件设计过程中与安全相关的行为。该研究旨在深入了解积极主动的安全行为及其影响因素。借鉴组织心理学中的组织氛围理论,我们提出了一个理论模型,详细说明了不同因素与积极主动的安全行为之间的关系,并在实证环境中进行了测试。该实证研究是与一家国际分布的信息技术企业合作进行的,包括由来自七个国家的499名软件开发人员完成的调查问卷。调查结果确认了所提出模型中的调节-中介关系,揭示了组织安全氛围和安全自我效能与积极主动的安全行为之间存在正向关联,组织安全氛围与安全自我效能之间也存在正向关联,而倡导个人主义的文化调节了组织安全氛围与安全自我效能之间的关系,从而阻碍了积极主动的安全行为。组织心理学的知识体系指出了可以有效激活改进的方向。
论文链接:https://doi.org/10.1109/TSE.2021.3119721
深度学习在过去几年取得了巨大的成功和广泛的受欢迎。然而,深度学习系统存在一些固有的弱点,这些弱点可能威胁到学习模型的安全性。深度学习的广泛应用进一步放大了其影响和后果。为了全面识别内在的弱点并提出可行的缓解方法,已经进行了大量的研究。然而,对于这些弱点是如何产生以及这些攻击方法在攻击深度学习时的有效性并不清楚。为了揭示安全弱点并帮助开发健壮的深度学习系统,我们对深度学习的攻击进行了调查,并从多个角度分析了这些攻击,得出了一些研究结果。
具体而言,我们重点关注与深度学习安全威胁相关的四种攻击类型:模型提取攻击、模型反演攻击、污染攻击和对抗攻击。对于每种攻击类型,我们构建了其基本工作流程以及对手的能力和攻击目标。我们设计了关键指标来比较攻击方法,通过这些指标进行定量和定性分析。从分析中,我们确定了攻击向量中重要且不可或缺的因素,例如如何减少对目标模型的查询次数,以及用于测量扰动的距离应该是多少。我们对这些方法的优点、缺点、成功概率、部署复杂性和前景进行了详细的研究,总结了18个发现。此外,我们还讨论了其他潜在的安全弱点和可能的缓解措施,这可以激发相关领域的研究灵感。
论文链接:https://doi.org/10.1109/TSE.2020.3034721
程序修复的目标是通过自动修改源代码来消除给定程序中的错误。大多数现实世界的软件是用命令式编程语言编写的。命令式代码中的每个函数或表达式可能具有副作用,即除了返回一个值之外还具有可观察的效果。现有的程序修复方法在处理副作用方面能力有限。先前的测试驱动语义修复方法只能合成没有副作用的补丁。启发式修复方法只有在程序中存在合适的代码片段或修复模式数据库,或者可以从训练数据中推导出时,才会生成具有副作用的补丁。本研究介绍了Trident,这是第一个基于测试驱动的程序修复方法,它可以合成具有副作用的补丁,而无需依赖于“整容手术假设”、模式数据库或训练数据。Trident依赖于多个部分的相互作用。首先,它使用符号执行和自定义状态合并策略来推断合成具有副作用的补丁的规范,从而减轻了由于副作用导致的路径爆炸。其次,它使用一种新颖的基于组件的补丁合成方法,支持出现在赋值语句左侧的lvalue值。在对开源项目进行评估时,Trident成功修复了10个需要插入具有副作用的新代码的真实错误中的6个,而先前的技术无法修复这些错误。在ManyBugs基准测试中,Trident成功修复了先前方法无法修复的两个新错误。将具有副作用的补丁添加到搜索空间可能会加剧测试过度拟合的问题。我们通过实验证明,偏好具有最少副作用的补丁的简单启发式方法可以缓解这个问题。对大量较小程序进行的评估表明,这种策略可以减少由副作用引起的测试过度拟合,将正确补丁的比例从33.3%提高到58.3%。
论文链接:https://doi.org/10.1109/TSE.2021.3124323
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...