在自动漏洞利用生成领域,传统方法通常针对单一类型的漏洞,并依赖基于专家经验构建的模板。这限制了其智能性和适用性。近年来,大语言模型在软件漏洞分析和修复方面展现了强大潜力,但在针对可执行文件的漏洞利用生成方面研究仍较匮乏。为了推动该领域的智能化和自动化进程,我们进行了一项研究。
本研究的作者包括Wanzong Peng, Lin Ye, Xuetao Du, Hongli Zhang, Dongyang Zhan, Yunting Zhang, Yicheng Guo和Chen Zhang。他们分别来自哈尔滨工业大学和中国移动通信集团设计院有限公司。这项研究被发表在第63届计算语言学协会年会(Proceedings of the 63rd Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers))的长篇论文集中,论文题为《PWNGPT: Automatic Exploit Generation Based on Large Language Models》,发表于2025年7月27日至8月1日。
本研究的目标是探索如何通过大语言模型提升漏洞利用生成的能力与效率,深化对漏洞机制的理解,并促进防御措施的改进。为此,我们选择以夺旗竞赛中的二进制利用挑战作为研究对象,因为它们既能无害地展示利用生成能力,又涵盖了复杂多样的漏洞场景。具体而言,我们旨在建立一个全面的基准来评估LLM在自动漏洞利用生成任务上的能力,并针对LLM的不足,设计一个新型的、基于LLM的自动漏洞利用生成框架。
为了实现这些目标,我们设计并执行了系统性的研究工作流程,主要包括三个核心部分:基准构建与探索性研究、方法论框架设计(PWNGPT),以及综合评估。
第一部分:基准构建与探索性研究 首先,我们构建了一个名为“Pwn Benchmark”的综合评估基准。该基准基于CTF竞赛中的二进制利用挑战构建,覆盖了最常见的漏洞类型,包括栈溢出、堆利用、格式化字符串漏洞和整数溢出。我们总共收集并筛选了19个具有代表性的挑战。为了全面评估LLM的能力,我们将人类的漏洞利用过程解构为四个关键能力:关键信息分析、漏洞定位、利用链构造和代码生成。针对每个挑战,我们生成了对应这四种能力的测试问题。关键信息分析和漏洞定位的测试问题由程序自动生成,而利用链构造和代码生成的测试问题则由人工精心构建,以确保提供给LLM的信息是专家提炼的、构建利用链所必需的核心要素。我们邀请了专家对挑战进行分析,建立了标准的利用方法和代码,并将LLM生成的正确内容整合进标准答案,以确保基准的准确性。
在基准构建完成后,我们进行了一项探索性研究。我们选取了来自不同平台的大语言模型进行测试,包括阿里巴巴的Qwen-Plus、Qwen-Max,以及OpenAI的GPT-4o和O1-preview模型。我们将构建好的测试问题通过特定的角色扮演提示词输入给这些模型,并对其输出进行分析和评分。实验结果显示,LLM在关键信息分析和代码生成方面表现出色,但在漏洞定位和复杂利用链构造方面存在明显短板。例如,在漏洞定位测试中,所有模型都存在较高的误报率,且仅O1-preview模型能够识别整数溢出漏洞。在利用链构造测试中,所有模型对于涉及动态内存管理的堆挑战都无能为力。这些发现明确指出了LLM在直接用于漏洞利用生成时的局限性,即它们虽然拥有丰富的安全知识和强大的代码生成能力,却难以精准定位漏洞并构思复杂的攻击路径。
第二部分:方法论框架设计 - PWNGPT 基于探索性研究发现的LLM不足,我们提出了PWNGPT,一个基于LLM的自动漏洞利用生成框架。PWNGPT采用了模块化的工作流程设计,其核心架构分为三个主要模块:分析模块、生成模块和验证模块。这些模块相互协作,以克服LLM的局限性。
分析模块负责对目标可执行文件(ELF文件)进行预处理和信息提取。其核心任务是克服LLM的上下文长度限制,并从海量的反编译代码中提取关键信息。该模块首先通过静态分析获取文件的基本信息(如架构、保护机制)和反编译的C代码。针对代码量,模块设定了两种工作流:对于简单的反编译文件,直接将其输入LLM并要求其提取关键函数;对于复杂的文件,则先通过静态分析工具获取函数调用关系图,再引导LLM从函数列表中筛选出与主函数相关或具有人工命名特征的重要函数,最后通过静态分析技术提取这些函数的代码。整个过程结合了提示链技术,通过分步角色扮演引导LLM完成任务。最终,所有提取的信息被整合成一个结构清晰、带有小标题的“问题描述”,作为生成模块的输入。
生成模块的核心任务是利用LLM基于“问题描述”生成漏洞利用代码。为了提高生成质量,我们采用了零样本的角色扮演提示方法,要求LLM扮演CTF专家,并逐步思考。更重要的是,我们要求LLM以结构化格式输出结果,该格式包含三个部分:利用方法介绍、导入声明和利用代码。这种结构化输出便于后续的自动验证和解析。模块还实现了输出格式验证,当检测到格式错误时会自动重试。
验证模块采用迭代方法来提升LLM在代码问题上的表现。在生成模块产出利用代码后,验证模块会将该代码应用于目标程序进行测试。如果利用失败,模块会使用LLM分析程序执行产生的错误信息,生成对错误的“反思”,然后要求LLM根据此“反思”修改利用代码。此过程会循环进行,直到利用成功或达到重试次数上限。
第三部分:综合评估 我们对PWNGPT框架进行了全面的评估。评估分为两个层面:在CTF Pwn挑战上的性能测试,以及在真实世界漏洞上的初步验证。
在CTF挑战评估中,我们首先测试了LLM直接处理整个反编译C文件生成利用的原始性能(作为基线)。结果显示,各模型在19个挑战上的成功率较低(Qwen模型约10.5%,GPT-4o为21.1%,O1-preview为26.3%),且均无法解决整数溢出和堆利用挑战。随后,我们测试了PWNGPT框架的性能。实验表明,分析模块能够成功为大多数挑战构建包含关键信息的“问题描述”,仅在三例中缺失了部分信息(如动态链接库中的gadget)。生成模块在接收到“问题描述”后,生成的可行利用数量显著提升:O1-preview模型从26.3%提升至57.9%,GPT-4o从21.1%提升至36.8%,Qwen-Plus从10.5%提升至21.1%,Qwen-Max保持在10.5%。验证模块虽然未能将原本不可行的利用转变为可行,但它有效地提升了代码质量,并帮助LLM尝试了不同的利用思路。
为了检验框架在更复杂场景下的潜力,我们尝试将其应用于两个基于真实漏洞(CVE-2011-2523和CVE-2018-10933)构建的挑战。结果显示,PWNGPT目前难以处理此类挑战,主要原因是二进制文件中函数符号缺失或漏洞存在于极其复杂的代码逻辑中,导致分析模块无法提取出所有相关函数。这表明PWNGPT需要与更先进的动态和静态分析工具结合才能应对现实世界的软件漏洞。
本研究的结论是,我们提出的PWNGPT框架有效地结合了传统漏洞分析方法和基于LLM的智能体技术,显著提升了LLM在自动漏洞利用生成任务上的表现。与之前的AEG框架相比,PWNGpt能够处理更多样化的漏洞类型,并采用更灵活的利用方法。我们构建的Pwn Benchmark为系统评估LLM在此领域的能力提供了重要工具。实验证明,PWNGPT能够解决许多超出独立LLM能力范围的CTF挑战。
本研究具有多方面的价值和亮点。首先,其科学价值在于系统性地探索和评估了大语言模型在二进制漏洞利用这一复杂安全任务上的能力边界与不足,并提出了一个行之有效的融合框架,为后续研究指明了方向。其次,应用价值在于PWNGPT框架本身作为一个高度自动化的工具,能够辅助安全研究人员和教育者快速理解和复现CTF挑战中的漏洞利用技术,提升安全分析和教学效率。本研究的亮点包括:1)全面的基准构建与能力分析:首次系统性地为LLM的漏洞利用生成能力构建了多维度评估基准,并进行了深入的探索性研究,清晰地揭示了LLM的优势与短板。2)创新的模块化框架设计:提出的PWNGPT框架创造性地将静态分析、LLM智能体技术和迭代验证相结合,通过任务分解和结构化引导,有效放大了LLM在安全领域的实用价值。3)显著的性能提升:实验数据明确展示了PWNGPT相较于直接使用LLM所带来的巨大性能改进,特别是在利用链构造这一关键难点上。4)开源与可扩展性:研究团队决定开源PWNGPT的源代码,并计划未来扩展基准,这将极大地促进该领域的研究合作与发展。
此外,研究也坦诚地指出了当前工作的局限性,例如在分析利用代码时忽略了偏移计算和对齐等细节错误,以及LLM对内存状态和计算机系统内存管理缺乏真正理解。对此,研究者提出了未来的改进方向,例如利用检索增强生成技术为LLM补充利用知识细节,以及构建虚拟环境来帮助框架分析和检索关键的堆栈内存状态。这些思考为技术的持续演进奠定了基础。最后,本研究严格遵守了伦理规范,所有使用的挑战均来自CTF竞赛,目前仅适用于CTF问题,对现实世界软件没有影响,并且在LLM的安全约束下,高风险攻击行为不会在框架内执行。