众人拾柴火焰高:基于大语言模型的多智能体系统用于检测恶意PyPI包

《Journal of Systems and Software》:Many hands make light work: An LLM-based multi-agent system for detecting malicious PyPI packages

【字体: 时间:2026年02月11日 来源:Journal of Systems and Software 4.1

编辑推荐:

  系统级并发错误自动化复现工具SysPro通过自然语言处理和数据挖掘提取系统调用名称与输入数据,结合静态分析和动态源码注入定位并复现错误。摘要:SysPro提出自动提取系统调用名称和生成输入数据的方法,利用NLP和静态分析定位代码位置,通过动态仪器实现并发错误复现,在24个真实案例中实现95.8%有效复现。

  
塔兰努姆·沙伊拉·扎曼(Tarannum Shaila Zaman)、查德尼·伊斯兰(Chadni Islam)、史江帆(Jiangfan Shi)、史子涵(Zihan Shi)、菲奥娜·贤(Fiona Xian)、于婷婷(Tingting Yu)
美国马里兰州巴尔的摩县马里兰大学信息系统系,邮编21250

摘要

重现系统级并发错误需要输入数据以及系统调用的精确交错顺序。这一过程具有挑战性,因为这类错误是非确定性的,而且错误报告中往往缺乏所需的详细信息。此外,用自然语言编写的报告缺乏结构化,使得提取必要细节变得困难。现有的工具由于无法管理系统调用级别的具体交错情况,因此无法有效重现这些错误。为了解决这些问题,我们提出了SysPro这一新方法,它能够自动从错误报告中提取相关的系统调用名称,并确定它们在源代码中的位置。该方法通过信息检索、正则表达式匹配和分类分区方法生成输入数据。然后利用这些提取的输入数据和交错信息,通过动态源代码插装来重现错误。我们对实际基准测试的实证研究表明,SysPro在从错误报告中定位和重现系统级并发错误方面既有效又高效。

引言

多核平台、中断驱动设备和分布式系统的日益普及使得并发系统变得普遍。尽管它们具有性能优势,但由于行为的非确定性以及复杂的执行交错(Bianchi等人,2017年),保证并发程序的正确性仍然很困难。重现和定位并发故障是一项耗时且具有挑战性的任务(Capuano,2004年;Zaman等人,2025年)。与传统的软件错误不同,重现或定位系统级并发错误需要输入信息以及系统调用的交错细节。
现代软件项目使用诸如GNU(GNU,无日期)、Bugzilla(Redhat_bug,无日期)和Debian(Debian,无日期)等错误跟踪系统来加快并发错误的解决速度。这些系统允许测试人员和用户报告他们在应用程序中发现的 issue(Zhao等人,2019年;Chaparro等人,2017年;Han等人,2018年;Rastkar等人,2014年)。然而,非结构化和模糊的信息使得错误报告难以使用。我们对1200多份系统级错误报告的研究发现,在重现这些错误时存在几个挑战:i) 许多错误报告缺乏重现错误所需的基本系统调用名称或输入细节;ii) 人类编写的描述与技术系统调用名称之间存在词汇差异;iii) 一些错误报告中包含不相关的系统调用名称,这使得有针对性的插装变得复杂。即使开发人员完全理解了错误报告,由于并发程序在不同执行环境中的行为不同,重现问题仍然具有挑战性。
现有的工作(Rattanasuksun等人,2016年;Yu等人,2017年)在重现系统级并发错误时需要控制台日志或人工干预。例如,Descry(Yu等人,2017年)利用默认的控制台日志进行错误重现,但在只有错误描述的错误报告的现实场景中可能无法使用这种方法。另一种方法RRF(Rattanasuksun等人,2016年)需要人工干预来收集错误报告中的输入和交错信息。因此,需要开发一种仅通过分析错误报告就能重现错误的自动化工具。
在这项工作中,我们介绍了SysPro,这是一种有效的错误重现工具,旨在帮助开发人员仅使用错误报告来重现和确定特定应用程序功能中的并发故障原因。SysPro针对的是进程间(系统级)并发错误。当两个进程以不同于原始意图的顺序访问共享资源时,就会发生这类错误。这些错误可能会损坏持久存储和其他系统范围内的资源(Yu等人,2013年),从而导致系统范围崩溃。相比之下,进程内(线程级)并发故障通常会影响单个进程内的易失性内存(Yu等人,2017年)。研究表明,在Linux发行版中报告的竞态条件中,超过73%是系统级竞态条件(Laadan等人,2011年)。要重现系统级并发错误,开发人员不仅需要输入数据,还需要系统调用级别的具体交错顺序。我们的工作重点是从错误报告中提取此类交错信息,特别是来自相同或不同进程的同一共享资源的系统调用序列。
我们的目标是分析应用程序错误报告,以识别导致源代码故障的相关系统调用和函数,并利用这些信息来指导程序的插装。在运行时,被插装的系统调用会被重新排序,直到成功重现报告的错误。我们的假设包括:1) 错误报告包含一组特定的词汇(系统调用名称、函数名称等),这些词汇与导致错误的交错相关,使得自动文本提取和映射成为可能;2) 提取的信息集中在一小部分函数和系统调用上,从而缩小插装范围,加快错误重现的速度。
SysPro的输入是一个描述系统级并发错误的错误报告。如果错误成功重现,它会输出一个包含系统调用及其在程序中导致故障的相关函数名称和位置的交错调度。SysPro分为两个主要阶段:在第一阶段,SysPro从错误报告中提取可能导致错误的系统调用名称,并将它们映射到应用程序源代码。在此阶段,SysPro使用自然语言处理(NLP)和数据挖掘技术分析错误报告,然后对源代码进行静态分析,使用结构化信息检索技术计算错误报告与源代码之间的相似性。在第二阶段,SysPro根据提取的信息重现错误。具体来说,SysPro首先利用正则表达式匹配和分类分区方法(Ostrand和Balcer,1988年)从错误报告中生成输入。然后,它使用输入信息和交错信息,通过动态二进制插装(Luk等人,2005年)来重现错误。
SysPro作为一个软件工具实现,使用了srcML静态代码分析工具(Collard等人,2013年)、用于自然语言处理的NLTK(Nltk,无日期)、用于信息检索的Gensim Python库(Gensim,无日期)、开源数据挖掘库SPMF(Fournier-Viger等人,2016年)以及动态二进制插装工具PIN(Luk等人,2005年)。为了评估SysPro,我们对17个应用程序中的19份已知可重现实际并发故障的错误报告进行了实证研究。我们的结果表明,SysPro能够利用错误报告中的信息有效识别导致源代码中错误交错的系统调用名称。我们还发现,通过使用错误交错信息和提取的输入,SysPro能够自动从错误报告中重现系统级并发错误。
总结来说,本文的贡献包括:
  • 我们对1,210份系统级并发错误报告进行了实证研究,总结了它们的一些特征,并确定了从报告中重现这些错误的三个主要挑战。这项研究为我们开发了一个自动化框架提供了指导,该框架可以重现实际系统级并发错误。我们提出了SysPro,这是一个半自动化的系统,可以从错误报告中重现系统级并发错误,当错误报告未明确包含测试用例时,需要手动创建测试用例。
  • 我们实现了SysPro,并对24份实际错误报告进行了实证研究,证明其在重现系统级并发错误方面的有效性和效率达到了95.8%。
  • 部分摘录

    背景和动机

    在本节中,我们首先讨论基于信息检索的故障定位技术的基础知识。接下来,我们定义了系统级并发错误,并提供了一个示例。我们还包含了一个此类错误的样本报告作为激励示例。
    最后,我们对系统级并发错误报告进行了实证研究,以指导我们的方法设计。这项研究非常重要,因为每个错误报告都是独特的,没有统一的格式。

    方法

    图5展示了SysPro的方法,该方法包括两个主要步骤:1) 定位目标程序中涉及错误交错的系统调用;2) 通过插装这些系统调用来重现错误。在第一阶段,SysPro从错误报告中提取可能导致错误的系统调用名称,并将其映射到目标程序的源代码中。

    实验

    我们将SysPro实现为一个基于多个开源平台的软件工具。我们使用了Gensim(Gensim,无日期),这是一个用于文档索引和相似性检索的Python库。我们还使用了NLTK(Nltk,无日期),这是一个用于处理自然语言数据的Python平台。我们使用NLTK的停用词和词干提取技术对错误报告进行了预处理。我们还使用了srcML(Collard等人,2013年)进行静态分析。该工具首先将C代码转换为XML文档,然后对其进行查询。

    讨论和局限性

    许多相关研究(Rattanasuksun等人,2016年;Yu等人,2013年;Payer和Gross,2012年;Zaman和Islam,2022年)假设输入数据为开发人员所知,并且这些方法在现实环境中已经证明了有效性。一些现有工具也专注于测试用例的生成(Yu等人,2017年;Han等人,2018年;Hasan等人,2025年)。这些工具可以与SysPro结合使用,以在未来工作中生成输入数据。SysPro与输入生成工具是相互独立的(Yu等人,2017年;Han等人)

    有效性的威胁

    本研究外部有效性的主要威胁在于我们的研究对象和错误报告的代表性。其他研究对象可能表现出不同的行为。错误跟踪系统和代码版本历史记录的数据可能相对于所有错误报告存在系统性偏差,可能是不完整或不正确的。然而,我们通过使用多种经过充分研究的开源代码对象和错误来源,在一定程度上缓解了这一威胁(Zaman

    相关工作

    从错误报告中重现错误。已有研究利用错误报告自动重现Android应用程序中的错误,这些研究采用了不同的来源,如文本重现步骤(Fazzini等人,2018年;Feng和Chen,2024年;Huang等人,2023年;Cui等人,2024年;Wang等人,2024年;Zhang等人,2023年;Zhao等人,2019年;Moran等人,2017年)、视频记录(Bernal-Cárdenas等人,2020年;Feng和Chen,2022年)以及崩溃堆栈跟踪(Chen和Kim,2015年;Huang等人,2024年)

    结论

    我们提出了SysPro,这是第一个能够从错误报告中自动重现系统级并发错误的工具。SysPro首先结合自然语言处理、数据挖掘和结构化信息检索技术,自动从错误报告中提取相关的系统调用名称。然后,SysPro通过代码的静态分析定位这些系统调用。SysPro利用信息检索、正则表达式匹配等方法从错误报告中生成输入。

    CRediT作者贡献声明

    塔兰努姆·沙伊拉·扎曼(Tarannum Shaila Zaman):写作——审阅与编辑、初稿撰写、可视化、验证、软件开发、资源管理、方法论制定、资金获取、正式分析、数据整理、概念化。查德尼·伊斯兰(Chadni Islam):写作——审阅与编辑、验证、正式分析。史江帆(Jiangfan Shi):写作——审阅与编辑、验证、调查。史子涵(Zihan Shi):写作——审阅与编辑、可视化、项目管理。菲奥娜·贤(Fiona Xian):写作——审阅与

    利益冲突声明

    作者声明他们没有已知的财务利益或个人关系可能影响本文报告的工作。
    相关新闻
    生物通微信公众号
    微信
    新浪微博
    • 搜索
    • 国际
    • 国内
    • 人物
    • 产业
    • 热点
    • 科普

    热点排行

      今日动态 | 人才市场 | 新技术专栏 | 中国科学人 | 云展台 | BioHot | 云讲堂直播 | 会展中心 | 特价专栏 | 技术快讯 | 免费试用

      版权所有 生物通

      Copyright© eBiotrade.com, All Rights Reserved

      联系信箱:

      粤ICP备09063491号