综述

面向攻防对抗的自动化漏洞利用研究综述

  • 王海波 1, 2 ,
  • 王其文 3 ,
  • 郭燕 2 ,
  • 张巧遇 4 ,
  • 王冲华 5 ,
  • 周明 , 1, *
展开
  • 1. 南京理工大学网络空间安全学院,南京 210094
  • 2. 中国科学技术大学软件学院,合肥 230000
  • 3. 国家计算机网络应急技术处理协调中心,北京 100029
  • 4. 中国科学院信息工程研究所,北京 100085
  • 5. 国家工业信息安全发展研究中心,北京 100040

这项工作在访问南京理工大学期间完成

网络出版日期: 2025-09-29

基金资助

国家自然科学基金青年基金(62402225)

版权

版权所有©《网络空间安全科学学报》编辑部 2025

A survey on automatic exploitation for offensive and defensive cyber operations

  • WANG Haibo 1, 2 ,
  • WANG Qiwen 3 ,
  • GUO Yan 2 ,
  • ZHANG Qiaoyu 4 ,
  • WANG Chonghua 5 ,
  • ZHOU Ming , 1, *
Expand
  • 1. School of Cyber Science and Engineering, Nanjing University of Science and Technology, Nanjing 210094, China
  • 2. School of Software Engineering, University of Science and Technology of China, Hefei 230000, China
  • 3. National Computer Network Emergency Response Technical Team/Coordination Center of China (CNCERT/CC), Beijing 100029, China
  • 4. Institute of Information Engineering, Chinese Academy of Science, Beijing 100085, China
  • 5. China Industrial Control Systems Cyber Emergency Response Team, Beijing 100040, China

Online published: 2025-09-29

Copyright

Copyright ©2025 Journal of Aeronautical Materials. All rights reserved.

摘要

人工检测漏洞和利用漏洞费时且易出错,研究者提出了多种漏洞检测和漏洞利用方案,其中自动化漏洞利用方法近年来得到了广泛关注。自动化漏洞利用可以快速发现和利用漏洞,并通过批量生成复杂攻击路径与策略的方式,对特定目标发起大规模、定制化攻击。现有工作缺乏对自动化漏洞利用技术系统性的分类与讨论,本文的主要研究内容包括:(1)将自动化漏洞利用技术的发展路线划分为单任务对抗、多任务对抗和大模型智能体三个阶段,并讨论了现有数据集的局限性。(2)将自动化漏洞利用过程划分为漏洞检测和致效载荷生成两个步骤,为了找出触发漏洞的根本原因,漏洞检测重点讨论了漏洞识别和漏洞定位技术;生成突防能力强的致效载荷或漏洞验证程序,致效代码生成重点讨论了致效原语生成和防御机制突破。(3)讨论了大语言模型智能体处理真实漏洞的局限性,包括未知漏洞检测、致效载荷的突防能力和代码可靠性。(4)讨论了自动化漏洞利用技术在夺旗赛(Capture The Flag,CTF)竞赛和渗透测试中的应用前景。

本文引用格式

王海波 , 王其文 , 郭燕 , 张巧遇 , 王冲华 , 周明 . 面向攻防对抗的自动化漏洞利用研究综述[J]. 网络空间安全科学学报, 2025 , 3(3) : 38 -56 . DOI: 10.20172/j.issn.2097-3136.250303

Abstract

Manual detection and exploitation of vulnerabilities are time-consuming and error-prone. Researchers have proposed various vulnerability detection and exploitation methods, among which automatic exploitation has attracted significant attention in recent years. Automatic exploitation enables rapid identification and utilization of vulnerabilities, allowing for large-scale, customized attacks through the batch generation of complex attack paths and strategies targeting specific objectives. However, existing studies lack a systematic classification and discussion of automatic exploitation techniques. The main contributions of this paper include: (1) We categorize the development of automatic exploitation into three stages: single-task confrontation, multi-task confrontation, and large language model agents, while also discussing the limitations of current datasets. (2) The automatic exploitation process is divided into two main steps: vulnerability detection and exploit payload generation. To uncover the root causes of vulnerabilities, we focus on vulnerability identification and localization techniques. To produce highly effective payloads or proof-of-concept exploits, we discuss the creation of exploit primitives and the bypassing of defense mechanisms. (3) We explore the limitations of large language models in handling real-world vulnerabilities, including challenges in detecting unknown vulnerabilities, the effectiveness of exploit payload, and code reliability. (4) Finally, we discuss the potential applications of automatic exploitation techniques in CTF competitions and penetration testing.

0 引言

根据MITRE[1]的统计,仅 2023 一年公开披露的新漏洞数量就达到 26447 个,比 2022 年增长了约 6%。面对如此庞大的漏洞数量,研究者提出了自动化漏洞利用技术。自动化漏洞利用技术指的是使用自动化工具或系统,在无需或仅需少量人工干预的情况下,识别并利用计算机系统、软件或网络中的安全漏洞,从而执行未经授权的操作或攻击行为。该技术通常涉及自动化的漏洞检测、生成可利用的致效载荷、突破安全防御机制,并可能在大规模或复杂环境中实施定制化的攻击。这些技术旨在提高攻击的效率和规模,同时降低攻击的技术门槛。
图1所示,自动化漏洞利用过程分为4个步骤:漏洞识别、漏洞定位、致效载荷生成和防御机制突破。其中,漏洞识别采用静态分析、动态分析和模糊测试等技术系统地分析目标系统以发现潜在安全漏洞。漏洞定位通过符号执行(通过用符号值代替具体值来分析程序执行路径以发现软件漏洞的技术)、程序切片(从程序中抽取与特定变量和语句相关的部分程序代码的技术)和统计分析等方法分析漏洞的触发路径和触发条件,找出触发漏洞的根本原因。致效载荷生成指的是创建一种特定的代码或数据片段,其目的是成功利用目标系统的漏洞,通常通过代码重用、数据操纵等方法生成可以有效执行攻击或触发漏洞的代码或数据。防御机制突破采用返回导向编程(Return-Oriented Programming,ROP)、格式化字符串攻击等方法将致效载荷投递到目标系统,并在执行时突破目标系统部署的防御机制。
图 1 自动化漏洞利用流程

Fig.1 Workflow of automatic exploitation

图2所示,本文将自动化漏洞技术的发展历程划分为4个阶段:单任务对抗阶段、多任务对抗阶段、漏洞利用框架阶段和大模型智能体阶段。
图 2 漏洞利用技术发展路线

Fig.2 Evolution patch of exploitation techniques

0.1 单任务对抗

早期漏洞利用需要人工手动完成,依赖专家的经验 知识,且主要围绕操作系统漏洞展开。1988年,Morris 蠕虫利用缓冲区溢出漏洞攻击互联网计算机,通过发 送定制化超长请求使程序执行流跳转到攻击者预设的指令。Morris蠕虫的迅速传播影响了当时互联网约10万台的计算机,该事件促使美国成立了计算机应急响应组织(CERT),1996年,Aleph One[2]在Phrack杂志上发表文章“Smashing The Stack For Fun And Profit”。该文章不仅首次详细披露了缓冲区溢出漏洞的原理,还提供了具体的利用方法和shellcode示例。1997 年,Designer[3]发表了关于返回到libc的攻击技术,该技术突破了不可执行栈类保护机制。同年,Smith[4]分析了针对多种处理器架构的Shellcode,并详细阐述了在不同UNIX类系统中利用栈溢出漏洞编写Exploit(漏洞利用原语)的过程。

0.2 多任务对抗

基于单一任务和有限场景的漏洞利用方式在面对日益复杂的网络环境时逐渐暴露出局限性。于是,2008年,Brumley等[5]提出了自动补丁生成利用(Automatic Patch-based Exploit Generation, APEG) 方法。通过比较漏洞修复前后二进制代码的变化,APEG自动生成可利用的程序输入。APEG仅限于已知补丁的场景,难以利用未知漏洞和没有补丁的情况。2011年,针对栈溢出漏洞,AEG(Automatic Exploit Generation,AEG )[6-7]通过符号执行和约束求解自动探索程序路径,识别可能导致内存损坏的输入。发现触发漏洞的输入后,AEG自动构造攻击载荷来精确覆盖返回地址,攻击载荷主要是shellcode和必要的填充数据,但主要针对简单的栈溢出漏洞。2012年,针对二进制程序中的栈溢出和格式化字符串漏洞,Mayhem [8]通过动态污点分析来追踪用户输入,并将关键点(如内存访问和跳转指令)进行符号化处理。一旦发现潜在漏洞,Mayhem自动构造触发条件并生成相应的致效载荷。由于符号执行的计算复杂度高,Mayhem在分析大型或复杂程序时效率较低。2013年,CRAX [9]采用动态符号执行和约束求解来自动识别内存损坏漏洞,利用程序内存布局和寄存器状态来构造精细的致效载荷,并通过覆盖返回地址或函数指针的方式实现控制流劫持。同年,PolyAEG [10]将这些功能扩展到多平台的内存损坏漏洞利用。2015年,Hu等[11]提出了一种自动构造数据导向攻击的方法FlowStitch。FlowStitch采用单边拼接和多边拼接等数据流拼接技术来寻找程序中数据流的连接点,并基于源数据流和目标数据流之间建立的连接来生成面向数据的致效载荷。针对8个真实漏洞,FlowStitch生成了16个新的数据导向类致效载荷。
2016年,美国国防高级研究计划局(Defense Advanced Research Projects Agency, DARPA)组织了一场网络大挑战(Cyber Grand Challenge,CGC) [12],CGC要求参赛队伍开发自动发现、利用和修复软件漏洞的系统。针对未知二进制程序漏洞,CGC要求系统自主完成从漏洞发现到致效载荷生成再到修复的全过程。CGC使用了简化的网络HTTP服务器CROMU_00007和简化的网络协议NRFIN_00003[13],这些程序仅具有真实软件的部分功能,且在规模和复杂度上都经过了简化。
为了对真实系统或软件开展自动化漏洞利用,FUZE[13]自动分析Linux内核漏洞,并生成概念验证(Proof of Concept,PoC)程序。2019年,SLAKE[14]提供了分析和调整堆布局的方法,辅助用户开发内核提权利用,但最终的利用代码还需要人工编写和调试。2021年,KOOBE[15]通过分析漏洞识别可利用的内核对象和系统调用,并利用堆布局调整方法生成可行的漏洞利用策略。此外,MAZE[16]首先识别堆布局原语和分析对象依赖关系,随后使用Dig and Fill算法调整堆布局并生成期望的内存布局以实现漏洞利用。

0.3 漏洞利用框架的发展

研究者提出了多种漏洞利用框架来统一编写和执行致效载荷,漏洞框架使安全研究人员能够在一个统一的框架内对不同类型的目标系统进行漏洞利用,显著提高了漏洞识别和利用的效率。2006年,Core Impact[17]引入了自动化渗透测试功能,能够自动识别目标系统的漏洞并进行利用,可以在几分钟内完成传统方法需要数小时才能完成的漏洞扫描和利用过程。自2003年推出以来,Metasploit[18]持续扩展其漏洞库,支持对Windows、Linux、MacOS等多个操作系统的漏洞利用。SQLMap[19]是一个专门用于检测和利用数据库漏洞的结构化查询语言(Structured Query Language,SQL)工具。2007年,Metasploit引入了AutoPwn功能,可以自动选择合适的漏洞利用模块。2015年,Routersploit[20]专注于网络设备的漏洞利用,其漏洞库涵盖了多种品牌的路由器和交换机。2016年,Drozer[21]集成了针对Android 平台的漏洞利用功能。

1 数据集构建

自动化漏洞利用的效果依赖数据集的规模和质量,高质量数据集有助于提升其性能和泛化能力。如图3所示,数据集构建包括数据准备和数据预处理。数据准备既可以利用爬虫技术从互联网抓取开源代码库(包括漏洞代码和致效代码)、漏洞描述及其利用描述等原始代码和数据,也可以通过人工方式收集已有的专用数据集。大多数数据集在构建完成后很少更新,难以及时反映新出现的漏洞类型和利用技术。其中美国国家漏洞数据库(National Vulnerability Database,NVD)提供通用漏洞披露(Common Vulnerabilities & Exposures,CVE)列表和漏洞详细信息。Github包含大量开源项目的代码库,自动化漏洞利用主要关注漏洞相关的提交。漏洞报告、利用代码和威胁情报均来自可信的第三方。需要注意的是,虽然NVD、CWE每年都会统计并更新漏洞报告,但这些数据更多的是披露漏洞相关的内容,对实际漏洞利用的指导作用有限。
图 3 数据集构建

Fig.3 Dataset construction

用于大语言模型训练的专用数据集有D2A[22]、CVE-fixes[23]、Big-Vul[24]、CodeSearchNet[25]、SATE IV Juliet[26]和 SARD[27]。D2A数据集聚焦内存损坏类漏洞,收录了实际发现的漏洞及其相关描述信息。D2A包含698个真实世界的漏洞样本,不仅提供了漏洞代码,还包含详细的漏洞触发条件和相应的利用代码。CVEfixes数据集提供了漏洞描述、补丁信息和受影响的代码片段,涵盖了5 495个CVE漏洞,跨越多种编程语言。Big-Vul是一个大规模的C/C++漏洞数据集,包含从开源项目中收集的188 000多个代码提交,包括漏洞描述、漏洞类型、受影响的代码片段、修复补丁等。此外,该数据集还提供了漏洞代码和修复后的代码对,使研究者能够直接分析漏洞修复模式。但其无法做到动态更新,且数据类型单一。CodeSearchNet[25]虽然在代码搜索和文档生成方面表现出色,但缺乏与漏洞相关的上下文信息,影响了模型对漏洞本质的理解。
Juliet数据集包含大量的C/C++函数,总计117 738个,其中带漏洞的函数有76 567个。这些函数根据CWE ID分类,涵盖了116种不同类型的漏洞。软件保障参考数据集(Software Assurance Reference Dataset,SARD)是由美国国家标准与技术研究院(National Institute of Standards and Technology,NIST)维护的一个公开可用的软件漏洞测试和分析数据集,明确标注了漏洞代码在漏洞样本中的具体位置。截至2024年12月底,SARD包含177 184个测试用例。这些代码样本被分为三类:Good(无漏洞)、Bad(有漏洞)和Mix(包含漏洞及其修复代码)。虽然SARD数据样本标注准确,但其未考虑真实软件的复杂性,导致从该数据集训练的模型在实际应用中表现不佳[28]
为了确保数据集的完整性、准确性和适用性,需要进行一系列数据预处理,主要包括数据清洗、数据扩充和重采样。数据清洗包括数据去重、噪声过滤、缺失值填补和异常值处理,旨在纠正原始数据文件中的一些可识别错误,以便数据可以更好地用于后续分析过程。数据去重使用哈希算法或相似性检测方法,将重复出现的数据条目删除。噪声过滤使用正则表达式等自然语言处理技术清理数据中的噪声,如无效字符、乱码等与漏洞无关的信息。针对缺失数据,缺失值填补采用填充、插值或删除等方法。例如,缺失的漏洞描述可以从其他数据源补全,无法补全的数据可以删除。异常值处理使用统计方法或机器学习模型检测并处理异常值,对明显异常的漏洞严重等级进行人工审核和修正。相比通用领域代码数据,漏洞利用代码数据相对稀缺且存在严重的类别不平衡问题。如,有些类型的漏洞数据样本数仅为个位数,正常代码样本比漏洞代码样本多几个量级。因此,需要通过数据增强策略生成更多的训练样本,如使用代码结构重组、非关键代码嵌入等方法扩充漏洞代码数据。

2 漏洞检测

漏洞检测包括漏洞识别与漏洞定位。漏洞识别是发现系统或应用程序中可能存在漏洞的过程,漏洞定位则是在已识别出可能存在漏洞的前提下,更为精确地明确漏洞的具体位置、范围及影响。本节将研讨这两项关键技术的相关成果。如表1所示,漏洞识别方面有Splint[29]、VulDeePecker[30]、Devign[31]等技术,漏洞定位则有EXE(Execution generated Executions)[32]、BARINEL [33]、PLBART [34]等技术。该表格从各项技术所适用的漏洞类型、对漏洞识别和定位的准确率与误报率,以及在实验机器上产生的开销等方面予以展示。
表 1 漏洞检测与定位技术概览

Table 1 Overview of vulnerability detection and localization techniques

工作 技术原型 检测漏洞类型 检测效果 性能开销 优点 缺点
漏洞识别 Splint[29] 静态分析 缓冲区域溢出 误报率75% 1 000行/秒 轻量 误报率高
TaintCheck[35] 动态分析 缓冲区溢出、
格式化字符串
无需源码 运行开销大
SAGE[38] 白盒模糊测试 缓冲区溢出、
格式化字符串
平均25秒 无需源码 运行开销大
VulDeePecker[30] 深度学习LSTM 缓冲区溢出、
资源管理错误
准确率88.1% 平均156秒 无需人工定义特征 泛化能力差
Devign[31] GNN 通用型 准确率72.26% 无需人工定义特征 泛化能力差
GRACE[36] LLM 缓冲区错误 准确率50% 无需大量数据 依赖数据集质量
漏洞定位 EXE[32] 符号执行 缓冲区溢出、
格式化字符串
准确率56% 低误报率 性能开销大
BARINEL[33] 谱分析、
贝叶斯推理
通用型 准确率60% 平均9.6秒 不依赖静态分析 受程序特定属性影响
Niu[39] 静态分析、
机器学习
缓冲区错误、
资源管理错误
准确率97% 平均3.4秒 低误报率 缺乏通用性
MDiff[40] 静态分析 通用型 平均时间1 977秒 精度高 存在漏报
PLBART[34] LLM 通用型 泛化能力强 在PHP上表现差

2.1 漏洞识别

漏洞识别是指运用多种技术与方法来探寻系统或应用程序中的潜在漏洞的过程。其主要技术有:2002年的Splint[29],通过预定义规则和模式对源代码进行扫描以识别潜在漏洞;2005年的TaintCheck[35],一种动态污点分析技术;2008年Godefroid[36]等提出的基于白盒模糊测试的自动化漏洞识别技术;基于深度学习的VulDeePecker[30];以及2019年使用图神经网络进行漏洞识别的Devign[31]
Splint通过特定的规则和模式进行漏洞检测。例如,它利用函数参数注解,像“notnull@”表示参数不能为NULL,“warn flag-specifier message”用于指示特定函数使用时产生的警告。同时,通过对函数添加requires子句及使用maxSet、maxRead等缓冲区属性注解来检测缓冲区溢出漏洞。比如对于strcpy函数,添加“requires maxSet(s1)>= maxRead(s2)”前提条件,maxSet和maxRead分别表示缓冲区可安全作为左值和右值使用的最高索引值。Splint可以解析源代码,根据这些预定义的规则和内部分析算法自动扫描源代码,识别潜在的缓冲区溢出和格式化字符串漏洞。然而,由于静态分析难以准确理解程序运行时的环境,因此这种方法存在一定的误报率。
一种动态污点分析技术TaintCheck在2005年被提出。该方法利用Valgrind[37]这个x86模拟器进行动态插桩,每当程序控制到达新的基本块,Valgrind先将x86指令块翻译成类RISC指令集(UCode),然后传递给TaintCheck进行插桩,插桩后的UCode块再由Valgrind翻译回x86代码,从而在程序运行时插入用于污点跟踪和检查的代码。动态插桩、污点跟踪和运行时检查带来较大的系统开销,原因在于动态插桩在程序运行时增加的额外指令致程序执行变慢。在评估TaintCheck的性能时,以bzip2这个用于文件压缩和解压缩的程序为例,bzip2在运行时消耗大量CPU资源。对其进行测试发现,正常运行时压缩15 MB源代码包需8.2秒,而在TaintCheck下运行需305秒,是正常运行时间的 37.2倍。
2008年,Godefroid[38]等提出了基于白盒模糊测试的自动化漏洞识别技术。他们开发了可扩展的自动化引导执行(Scalable Automated Guided Execution,SAGE),采用符号执行和动态测试生成相结合的方法,系统地探索了程序执行路径。SAGE通过记录程序对结构良好输入(如格式正确的文件)的实际运行,追踪输入如何影响程序流程,从而生成新的输入以覆盖不同的程序控制路径。SAGE无需特定格式知识,即可检测出MS07-017 ANI漏洞[41]等关键安全缺陷。MS07-017 ANI是微软在2007年4月发布的关键安全补丁所针对的漏洞,该漏洞源于对ANI格式动画光标解析代码的不完全补丁,具体是对ANI文件中anih记录的参数读取时未进行充分验证,导致内存损坏。这一漏洞非常严重,是自2006年1月以来微软发布的第三个此类紧急安全补丁,此前的广泛黑盒模糊测试和现有静态分析工具都未能发现该漏洞。然而,由于符号执行在有限的搜索时间内要实现对大型应用程序的全路径覆盖仍存在问题,所以该方法导致了较大的性能开销。
VulDeePecker是基于深度学习的漏洞检测系统,它使用非连续代码段来表示程序。系统首先将代码段转换为向量表示,然后使用双向长短期记忆(Bidirectional Long Short-Term Memory,BLSTM)神经网络[42]进行学习和分类。VulDeePecker能够在不需要人工定义特征的情况下实现较低的误报率,它在检测缓冲区错误和资源管理错误方面表现出较好的性能。资源管理错误是一种常见的漏洞类型,如在CWE-399中,资源管理错误可能涉及对内存资源(如通过free、delete、new、malloc、realloc、calloc等函数进行内存分配和释放)操作不当。对于C/C++程序,VulDeePecker通过一系列步骤使用BLSTM神经网络表示程序,而非简单的程序序列化。首先提取程序中的库/API函数调用及对应的程序切片,然后将程序切片组装成代码小工具,接着对代码小工具进行符号表示并编码为向量,这些向量作为输入用于训练BLSTM神经网络。最终,BLSTM神经网络可以对目标程序的代码小工具进行分类,判断其是否存在漏洞。目前,VulDeePecker主要针对C/C++程序。
2019年,Devign使用图神经网络进行漏洞识别。Devign将代码表示为复合图结构以更好地表示漏洞程序,具体方式如下:以抽象语法树(Abstract Syntax Tree,AST)为基础,将程序控制和不同层次的数据依赖显式编码为具有异构边的联合图,其中每种边类型表示对应表示的连接关系。AST是源代码的有序树表示结构,通常是代码解析器用于理解程序基本结构和检查语法错误的第一步表示,其节点集包括下列使用的其他三种变量表示的所有节点。控制流图(Control Flow Graph,CFG)描述程序执行期间可能遍历的所有路径,节点表示语句和条件,通过有向边连接以指示控制转移。数据流图(Data Flow Graph,DFG)跟踪变量在CFG中的使用情况,DFG边代表对相同变量的后续访问或修改。此外,为了编码源代码的自然顺序,还使用自然代码序列(Natural Code Sequence,NCS)连接AST中的相邻代码标记。通过这种方式,Devign构建了复合程序表示图,使用门控图神经网络(Gated Graph Neural Network,GGNN)学习节点表示,通过卷积和密集层对图级分类进行特征提取,并在4个大型开源C语言项目的手动标注数据集上取得了较高准确率和F1分数。

2.2 漏洞定位

漏洞定位是指通过一系列技术手段,在已经发现可能存在漏洞的基础上,精确确定漏洞在程序中的具体位置、范围和影响的过程。在漏洞定位方面,主要的技术有20世纪90年代末开始应用的程序切片技术,如1995年Tip提出的改进程序切片算法[43];2006年基于符号执行的自动化漏洞定位工具EXE[32];2009年的BARINEL[33],它是一种融合谱分析和基于模型诊断的软件漏洞定位方法;2020年Niu等提出的基于深度学习的静态污点分析方法[38];2023年采用粗粒度和细粒度两阶段策略的MDiff定位网络设备漏洞[40]
20世纪90年代末,程序切片技术开始应用于漏洞定位。程序切片是一种通过分析程序中的数据流和控制流,从程序中提取与某些特定计算相关的代码片段的技术,能够简化程序,帮助开发者和分析工具聚焦相关代码部分。1995年,Tip提出了一种改进的程序切片算法,该算法使用系统依赖图(System Dependence Graph,SDG)表示程序。SDG是一种综合了控制依赖和数据依赖的有向图结构,其节点对应程序中的语句和控制谓词,边对应数据和控制依赖关系。算法通过两阶段切片方法在SDG上进行前向和后向遍历,追踪程序中的数据流和控制流。这种方法不仅考虑了过程内部的依赖关系,还处理了过程间的调用和参数传递。具体而言,对于单程序的切片,先确定切片准则对应的顶点,在SDG中,切片是所有能到达该顶点的顶点集合。对于多程序的切片,SDG包含主程序的程序依赖图和每个程序的过程依赖图,通过计算过程间的摘要信息,在两阶段遍历中确定切片。第一阶段确定不下降到过程调用的所有顶点,利用传递的跨过程依赖边绕过调用。第二阶段下降到先前旁路的调用确定剩余顶点,从而得到切片。在漏洞定位方面,若程序计算出错误值,通过程序切片可以找到与该错误值相关的代码片段,从而定位到漏洞。例如,若一个程序计算某个变量的值出现错误,则对该变量进行切片,切片中的语句很可能包含漏洞。
符号执行的基本思想是将程序的输入表示为符号变量,而不是具体的值,然后通过追踪这些符号变量在程序中的流动和操作来分析程序的行为。2006年,基于符号执行的自动化漏洞定位工具EXE被提出。EXE通过对输入进行符号化处理,系统地探索程序的执行路径。该方法在程序运行时跟踪符号输入的约束条件,并在条件分支处分叉执行。当遇到危险操作时,EXE能够检测当前路径约束是否允许任何可能导致漏洞的值。EXE还集成了专门设计的约束求解器STP(Simple Theorem Prover),用于生成触发漏洞的具体输入。EXE能够有效检测并定位多种类型的漏洞,包括缓冲区溢出和格式化字符串漏洞。然而,EXE也面临着性能开销和路径爆炸等挑战。
2009年提出的BARINEL是一种结合谱分析和基于模型诊断的软件漏洞定位方法。谱分析通过记录程序执行过程中函数、语句等程序元素的运行情况来定位错误。基于模型的诊断则使用程序行为的形式化描述,通过推理分析来识别故障。BARINEL融合这两种方法,利用程序运行数据构建行为模型,并应用贝叶斯网络推理定位潜在漏洞,网络节点对应程序中的语句。BARINEL引入“组件健康概率”的概念,表示程序元素不含漏洞的可能性。通过最大似然估计计算这些概率,BARINEL能够定位可能存在漏洞的代码区域。相比传统的谱分析方法,BARINEL在处理多个漏洞的情况时表现良好,且适用于大型软件系统,有助于识别严重漏洞和潜在安全问题。
2020年,Niu等提出了一种基于深度学习的静态污点分析方法,用于物联网软件漏洞定位。该方法首先通过比较源代码和补丁代码确定污点源,然后利用静态污点分析生成污点传播路径。这些路径随后被转化为符号表示并编码为向量。最后,他们应用BLSTM模型[42]进行漏洞检测和定位。在包含缓冲区错误和资源管理错误的数据集上,该方法的准确率分别达到了97.32%和97.21%,优于传统的机器学习模型和静态分析工具。
2023年,MDiff(MonolithDiff)采用粗粒度和细粒度两阶段策略定位网络设备的已知漏洞。在粗粒度定位阶段,MDiff通过符号表解析方法识别网络协议服务的启动代码,并使用函数级分割方法将单个可执行文件拆分为若干模块。在细粒度定位阶段,MDiff对存在差异的函数进行动静态结合的语义信息分析,包括基于扩展局部轨迹的安全修补识别和基于代码度量的安全修补排序,目的是更准确地定位漏洞并减少分析的函数数量。MDiff在华为、思科、中兴和惠普4个厂商设备中已披露的15个漏洞上进行了测试,实验结果表明,MDiff平均仅须分析31个差异函数即可定位漏洞。然而,由于网络设备固件的复杂性和多样性,以及补丁中可能存在的复杂语法和语义变化,所以MDiff在处理语法和语义变化较大的补丁时仍面临挑战。

3 致效代码生成

致效代码生成是指利用漏洞利用框架、大语言模型生成漏洞利用代码。它包括漏洞利用原语生成和防御机制突破两个部分。漏洞利用原语生成是致效代码生成的基础组成部分,它专注于发掘和构建针对特定漏洞的基本利用手段,如特定的代码片段、指令序列或攻击模式等。防御机制突破则是在漏洞利用原语的基础上,进一步针对目标系统的各种防御措施进行攻克。

3.1 漏洞利用原语生成

漏洞利用原语是针对特定漏洞的特性而设计的,可以直接作用于目标系统以实现漏洞的利用。原语代表最基础的元素,能够清晰地表达特定漏洞的利用行为,可以在不同的场景中使用。漏洞利用原语生成的技术演进可以概括为代码重用、数据操纵、自动化生成三个主要方向。漏洞利用原语生成的一般流程如图4所示。首先,对漏洞触发条件进行分析,判断该漏洞是否具备利用的可能性。在确定漏洞可利用的前提下,综合应用代码重用、数据操控和自动化生成技术,从致效载荷数据库中选择合适的利用方法,构建Payload。随后,根据漏洞触发条件设计利用路径,并将其集成到原语中,最终生成致效载荷。漏洞利用原语生成有返回导向编程(Return Oriented Programming,ROP) [44]、数据导向编程(Data-Oriented Programming,DOP) [45]、程序块导向编程(Block-Oriented Programming,BOP) [46]等相关技术。
图 4 漏洞利用原语生成的一般流程

Fig.4 General flow of vulnerability generation using primitives

2007年,Shacham等提出了ROP。ROP通过分析x86可执行文件和库,发现大量短指令序列,这些指令序列可以作为构建块来构造任意功能的漏洞利用原语。其提出算法Galileo以ret指令为根节点构建查找树,通过逆向扫描可执行文件,从已找到的序列出发探索新的有用指令序列,这些序列必须是有效的指令且以ret指令结尾,同时执行过程中不能让处理器转移执行到其他地方而不执行ret指令。在构建漏洞利用原语时,ROP技术考虑了加载常量、从内存加载数据、存储数据到内存、算术逻辑运算、控制流操作和系统调用等多种情况。例如,加载常量可通过形如pop %reg; ret的序列实现;加载内存数据到寄存器可使用movl 64(%eax), %eax; ret序列;存储寄存器内容到内存则利用movl %eax,24(%edx); ret序列。在算术逻辑运算中,对于加法操作可使用addl (%edx), %eax; push %edi; ret序列。在控制流方面,无条件跳转可通过pop %esp; ret实现,而条件跳转则通过一系列复杂的操作,包括设置标志位、转移标志到通用寄存器、根据标志位有条件地改变栈指针来实现。对于系统调用,可以通过设置系统调用参数并跳转到libc中的系统调用包装器函数来实现特定系统调用。ROP通过组合这些短指令序列,构建各种功能的漏洞利用原语。
2011年,Schwartz等提出的Q系统[47]能够自动生成ROP链的工具。在ROP攻击中,gadget是指程序中已存在的短小代码片段,通常以返回指令结束。Q系统引入了一种面向gadget的定制高级语言,允许用户以抽象的方式描述攻击目标,如内存读写或系统调用。系统首先从目标二进制文件中提取可用的gadget,然后利用SMT(Satisfiability Modulo Theories)求解器将高级语言描述的目标自动转换为具体的 gadget 序列。
2009 年,Dullien等[48]提出了一种与平台无关的中间表示语言REIL(Reverse Engineering Intermediate Language)。REIL的创新点在于其具有非常精简的指令集,仅17种不同指令,区别于现实中流行的指令集,如x86指令集包含600多种指令,PowerPC指令集包含1 000多种指令。REIL可以跨多种平台,如x86平台、PowerPC平台、ARM平台等。对于跨平台漏洞,REIL通过抽象原生汇编代码,使分析工具和算法能在不同平台上工作,以与平台无关的方式表示代码。
2016 年,Hu等提出DOP[45]。DOP利用程序中的数据导向代码片段(data-oriented gadgets)和代码片段调度器(gadget dispatchers)来构建攻击。数据导向代码片段是程序中短的指令序列,能模拟特定操作,包括算术运算、赋值、内存读写等。例如,加法操作可以通过特定的x86指令序列实现,先进行加载操作,然后执行加法,最后进行存储操作。代码片段调度器可通过循环和选择器来连接不同的代码片段,实现重复计算和选择性激活特定代码片段。攻击者可以利用这些代码片段和调度器构建恶意输入,执行恶意计算。如在一个类似文件传输协议(File Transfer Protocol,FTP)服务器的程序中,攻击者可以通过缓冲区溢出漏洞控制多个局部变量,利用程序中的指令序列模拟数据导向代码片段,包括赋值、条件判断、加法等操作,以及利用循环作为代码片段调度器,实现对程序状态的恶意控制,如同在受害服务器上执行一个虚拟CPU进行恶意计算。
2018年,Ispoglou等提出了BOP。BOP通过灵活组合基本块级别的代码片段来构造攻击代码。这种技术利用程序中现有的基本块,通过调度原语(如调用、跳转或异常)将它们串联起来,形成复杂的攻击逻辑。BOP不仅可以实现直接的控制流转移,还能执行条件跳转和循环结构,从而在保持代码重用的同时,增强了攻击的表达能力和灵活性。相比传统的ROP,BOP能够构造更加复杂和细粒度的攻击序列,进一步提高了漏洞利用原语生成的自动化程度和适应性。
组装漏洞利用原语形成完整的多阶段漏洞利用程序,须深入分析目标漏洞特性,包括漏洞类型、触发条件及影响范围等,据此从原语库中选择合适的原语进行能力组合,如空指令填充、对抗程序脚本、shellcode。继而设计多阶段漏洞利用的总体流程,确定各个阶段的目标和任务,一般分为多个步骤逐步实现对目标系统的控制。最后按照确定的攻击流程,将选择的漏洞利用原语进行组合,确保原语之间的参数传递和数据交互,以形成完整的多阶段漏洞利用程序。

3.2 防御机制突破

随着漏洞利用技术的不断发展,防御机制也持续进化,形成动态的对抗博弈过程。如表2所示,多种攻击方法在与防御机制的对抗中各有特点。其中,Kil3r[49]通过数据操纵有效应对栈保护,但不适用于所有情况且需要特定的前提条件;Shacham[50]采用暴力搜索虽能有效绕过地址空间随机化(Address Space Layout Randomization,ASLR),却有性能开销大的缺点;ROP[44]以代码重用方式有效绕过数据执行保护(Data Execution Prevention,DEP)和ASLR,但主要集中在x86架构,适用性受限;BROP[51]同样利用代码重用绕过DEP、ASLR和canary,然而仅适用于栈溢出;DOP[45]通过数据操纵能有效规避控制流完整性(Control Flow Integrity,CFI),却无法应对更细粒度的CPI;Q系统[47]以自动化生成方式有效绕过DEP和ASLR,但难以应对复杂的防御情况;BOP借助代码重用可规避CFI,但受基本块粒度限制;JIT-ROP[52]也以代码重用绕过DEP、ASLR和栈保护,但在高频率随机化页面时会失效,且无法应对CFI;JOP[53]用代码重用有效绕过DEP,但在其他平台效果不佳;Control Jujuts[54]和FlowStitch[11]均通过数据操纵有效规避CFI,后者在开启ASLR的系统上稳定性差。防御机制突破的目的主要是使攻击者能够利用漏洞实现恶意目的,如获取系统权限、窃取敏感信息等。主要技术包括数据操纵、暴力搜索、代码重用等。表中的攻击成本是指攻击者实施攻击所需的时间、资源等代价。突破防御则展示了各攻击方法能够成功绕过或规避的防御机制,如DEP、ASLR、CFI等。
表 2 攻防博弈对抗

Table 2 Offensive and Defensive Game Theory

工作 技术原型 攻击成本 突破防御 缺点
Kil3r [49] 数据操纵 应对栈保护 不适用于所有情况,需要特定的前提条件
Shacham [50] 暴力搜索 平均216s获取shell 绕过ASLR 性能开销大
ROP [44] 代码重用 有效绕过DEP和ASLR 主要集中在x86架构上,适用性受到限制
BROP [51] 代码重用 20分钟内完成 有效绕过DEP、ASLR 仅适用于栈溢出
DOP [45] 数据操纵 有效规避CFI 无法应对更细粒度的 CPI
Q系统 [47] 自动化生成 有效绕过DEP和ASLR 难以应对复杂的防御情况
BOP [46] 代码重用 有效规避CFI 受到基本块粒度的限制
JIT-ROP [52] 代码重用 有效绕过DEP、ASLR 高频率随机化页面时攻击方法会失效、无法应对CFI
JOP [53] 代码重用 有效绕过DEP 在其他平台表现效果不佳
Control Jujuts [54] 数据操纵 有效规避CFI
FlowStitch [11] 数据操纵 有效规避CFI 在开启了ASLR的系统上稳定性很差
1997年,针对栈溢出威胁,Cowan等[55]提出了一种编译器级别的栈保护机制StackGuard。StackGuard通过在返回地址前插入“canary”值来检测栈溢出。“canary”值是随机生成的,用于增加攻击者猜测的难度。然而,Kil3r等[49]发现可以通过覆写函数指针或longjmp缓冲区来绕过StackGuard保护。例如,通过操纵位于缓冲区之后的指针,攻击者可以在不触及canary的情况下改变函数的返回地址。此外,利用exit()函数的fnlist结构,攻击者能够在程序正常退出时执行恶意代码。但Kil3r等的方法并非能突破所有栈保护的情况,比如StackShield编译的程序对通过覆写缓冲区后的指针来改变函数返回地址的攻击方式有一定的抵御能力。
2001年,PaX团队在操作系统里引入了地址空间布局随机化(Address Space Layout Randomization,ASLR)[56]技术。ASLR通过随机化程序内存布局,增加了攻击者预测关键内存地址的难度。2004年,Shacham等[50]提出了一种去随机化攻击,利用暴力搜索和新型return-to-libc技术,能够在平均216秒内绕过PaX ASLR保护并获得远程shell。这一研究揭示了ASLR在32位架构上的脆弱性,同时指出仅增加随机化频率难以提升安全性。更进一步,2013年,Snow等[53]提出了即时代码重用(Just-In-Time ROP,JIT-ROP)攻击,该攻击可以绕过细粒度ASLR。JIT-ROP利用内存泄露漏洞重复读取内存,动态调整应用程序布局,并在运行时编译攻击代码。研究者用此方法成功攻击了启用细粒度ASLR的IE浏览器,在多个测试场景中攻击平均耗时22.5秒,即使面对增强版ASLR,攻击者仍能有效绕过防御。
2005年,Microsoft在Windows XP SP2系统中引入了数据执行保护(Data Execution Prevention,DEP)[57]。DEP将数据页标记为不可执行,有效防止了直接执行堆栈上的代码。尽管DEP提供了有效的保护,攻击者也开发了一些技术来绕过它,JIT-ROP[52]重用内存中的代码来构建绕过DEP,不需要依赖注入可执行的代码。Bletsch等[53]的研究介绍了跳转导向编程(Jump Oriented Programming,JOP),该方法不依赖栈或返回指令来控制程序流,而是使用程序中间接跳转指令来绕过应对CFI和DEP的防御机制。
2007年,Abadi等[58]提出了一种更全面的防御机制——控制流完整性(Control Flow Integrity,CFI)保护。CFI通过在编译时对程序进行分析,根据预定义的CFG在计算控制流转移的源指令和可能的目的指令处进行修改,插入检查点。具体而言,当两个目的指令在CFG中从相同的源有边指向它们时,认为这两个目的指令是等价的,在每个目的指令处插入一个标识(ID),标识用于确定目的指令的等价类,同时在每个源指令前插入一个动态检查点,以确保运行时的目的指令具有正确等价类的ID。这种插入检查点的方式确保程序执行遵循预定义的控制流图,有效防止了包括ROP在内的各种控制流劫持攻击。
然而,2015年Evans等[54]提出了“Control Jujutsu”,该方法利用可扩展指针分析的不精确性来绕过细粒度CFI。这种攻击引入了一种新的“gadget”类型,称为参数可腐化的间接调用点(Argument Corruptible Indirect Call Site,ACICS)。ACICS gadgets是成对的间接调用点(Indirect Call Sites,ICS)和目标函数,能实现远程代码执行,同时遵守细粒度CFI。具体而言,ACICS gadgets能实现对间接调用点的参数腐化,结合对前向边指针的腐化,可将执行引导至目标函数,当目标函数执行时,可实现远程代码执行,如通过系统调用实现恶意行为。2015年,Crane等[59]提出了代码指针完整性(Code Pointer Integrity,CPI),这是一种更细粒度的保护机制。CPI通过隔离和保护敏感指针,提供了比CFI更强的安全保证。
2014年,Bittau等[52]提出了返回导向编程(Blind Return Oriented Programming,BROP)攻击方法。BROP允许攻击者在不知道目标二进制文件或源代码的情况下,对重启后的服务进行远程栈缓冲区溢出攻击。这种技术通过逐字节覆盖泄露栈内容,远程查找ROP构造攻击链。BROP能够同时绕过ASLR、DEP和栈canary,仅依赖程序是否崩溃这一单比特信息。这项研究显著拓展了远程攻击的可能性,它能在远端找到ROP gadgets,这在之前对于闭源系统是非常困难的。同时也揭示了现有与PaX类似的ASLR仅能略微减缓蠕虫的传播速度。
2019年,Burow等[60]系统研究了影子栈保护技术,该技术通过在单独的内存区域存储返回地址的副本来防御栈溢出攻击。他们研究评估了5种影子栈实现,包括紧凑型和并行型设计,并提出了一种基于寄存器的新方案Shadesmar。Shadesmar是一种紧凑型、基于寄存器的影子栈方案,直接使用影子栈返回地址,依靠信息隐藏来保护影子栈。它在现代64位架构上,通过专用通用寄存器来提高性能,并增强了对C/C++编程范式的兼容性。研究发现,影子栈能有效防御ROP攻击,但在处理栈展开时,如C++异常处理,需要额外的机制来保持同步。目前暂无研究突破影子栈的保护技术。

4 大语言模型赋能漏洞利用

大语言模型为漏洞利用应用开辟了新的研究方向。本文首先介绍大语言模型对漏洞的描述方法,随后介绍如何训练一个漏洞利用大语言模型,最后讨论基于大语言模型智能体的自动化漏洞利用方法。

4.1 漏洞表示学习

在自动化漏洞利用大模型中,如何表示漏洞数据是关键。漏洞数据包括漏洞类型、影响范围和触发条件等信息,这些信息通常以CVE标识符、CVSS评分、相关CWE类型等结构化字段描述,有助于大语言模型理解漏洞原理。目前方法常采用以字节对编码(Byte-Pair Encoding,BPE) [61]为代表的子词分词方法,其通过合并出现频率最高的字符对来逐步构建子词单元,能够较好地处理未知词汇并压缩词汇表。漏洞描述经过分词、标准化等预处理后,转换为向量或token序列输入模型。然而,大多数语言模型在处理代码生成等任务时,由于自然语言和代码语言在表述逻辑、词语分布上的差异性,若将预训练语言模型的分词器直接用于处理代码语言效果欠佳。
考虑到代码语言与自然语言具有类似的统计属性,CodeGen[62]、CodeT5[63]等工作使用GitHub公开代码库训练一个BPE分词器。虽然这些方式很大程度上提升了语言模型在通用领域代码语言上的表现性能,但是其难以考虑到特定领域代码语言中的专业化知识。同时,与常规的高级编程语言不同,漏洞利用代码包含大量低级算术、逻辑操作和位级切片等操作,这使得通用领域代码语言的分词学习方法不能直接套用到漏洞利用代码。一方面,漏洞利用代码中许多专用代码字符(如十六进制数组、下划线标记)会被BPE分词器忽略或者错误解析;另一方面,漏洞利用领域数据有限,难以支撑大规模训练。

4.2 大语言模型构建

图5所示,自动化漏洞利用大语言模型主要采用Transformer架构[64]及其变体。这些模型训练大量文本和代码数据,习得了理解和生成人类语言及程序代码的能力。大模型选择性地使用编码器、解码器或两者的组合,并采用自注意力机制来捕捉序列数据中的长距离依赖关系,在各种代码相关任务中表现出色。在代码生成任务中,模型倾向于利用解码器的自回归能力;而在代码理解任务中,则更多地依赖编码器的双向特性。这种架构上的灵活性使得模型能够适应从代码搜索到程序合成等广泛的应用场景。
图 5 基于 Transformer 架构的模型

Fig.5 Model based on the Transformer architecture

2020年,CodeBERT[65]使用多层双向Transformer编码器架构来建模和替换令牌检测等预训练目标,同时高效地处理单模态和双模态数据。CodeBERT在代码搜索和代码文档生成等任务中表现优异,展示了其在代码-自然语言交互方面的优势。2021年,GPT-3的衍生模型Codex[66]采用基于Transformer解码器的架构,将自然语言指令准确转化为可执行代码。Codex在数十亿行公开源代码上训练,支持Python、JavaScript和Go等多种编程语言。2022年,CodeT5+[67]采用编码器-解码器架构,通过多任务预训练目标如跨度去噪、对比学习和文本-代码匹配等,实现了代码和自然语言的联合表示学习。CodeT5+根据不同任务需求灵活激活模型的不同组件,提高了模型在各种代码相关任务中的适应性。
2023年,MetaAI推出的llama2[68]采用改进的Transformer架构在2万亿token的公开数据上训练,涵盖了7 B到 70 B的参数规模。此外,llama还引入了分组查询注意力机制,并将上下文长度扩展到4 096个token。llama2在MMLU[69]等多项基准测试中表现出色,特别是经过指令微调和基于人类反馈的强化学习后的Llama2-Chat版本,在安全性和实用性方面取得了显著进展。然而,llama2主要专注英语,对其他语言的支持较为有限,而且它在某些专业领域的知识可能不够准确或最新。2024年,llama3[70]在15万亿个token上预训练,具有8 B和 70 B两种参数规模,可以支持广泛的用户场景。8 B模型刷新了同尺寸模型的效果,70 B模型的效果界于GPT3.5与GPT4之间,400 B模型(还在训练)在评测集上的效果可能超过GPT4。

4.3 基于大语言模型智能体的自动化漏洞利用

研究者通过模块化设计和与大语言模型的迭代交互,实现了从漏洞识别、定位到利用代码生成的自动化流程。
GRACE[36]通过整合图结构信息和上下文学习来增强大语言模型智能体的漏洞检测能力。该方法首先构建代码属性图(Code Property Graph,CPG),结合抽象语法树、程序依赖图和控制流图,然后设计了一种有效的示例检索方法。这种方法通过同时考虑语义、词法和语法相似性,从训练集中选择与目标代码最相关的函数作为示例,为上下文学习提供了高质量的演示。这些示例帮助模型更好地理解代码的上下文和潜在漏洞模式。实验结果表明,GRACE在多个基准数据集上的表现优于现有的漏洞检测方法,F1分数至少提高了28.65%,但其性能在一定程度上依赖示例的质量。
PLBART[34]是一个在源代码和自然语言描述上预训练的模型。PLBART通过掩码和重建任务在多语言代码语料库上进行预训练,捕获了代码的语法和语义信息。在漏洞定位任务上,相比于基准模型CodeBERT [64]和GraphCodeBERT[71],PLBART在准确率和F1分数方面平均提高4%~5%。
2023年,基于GPT-3.5和GPT-4,PentestGPT[72]采用解析、推理和生成的三模块设计,并引入渗透测试任务树(Pentesting Task Tree,PTT)来动态表示和管理测试进度。PTT通过向模型提供当前测试状态和目标,引导其生成下一步攻击策略,实现了对复杂渗透测试场景的有效处理。PentestGPT在HackTheBox[73]挑战中得到成功应用。同年,以GPT-4为核心,AUTOAT-TACKER[74]构建了包含摘要器、规划器、导航器和经验管理器的四模块体系。AUTOAT-TACKER应用检索增强生成(Retrieval Augmented Generation,RAG)技术管理攻击经验,并通过提供相关历史信息指导模型生成更精准的攻击命令。AUTOAT-TACKER在14个涵盖不同攻击阶段的任务中得到了成功应用,体现了其在多样化攻击场景中的适应能力。2023年,Wintermute [75]提出了基于GPT-3.5和GPT-4的Linux特权提升智能体。该智能体设计了三种专门的提示模板(Next-Cmd、Analyse-Result和Update-State),通过这些模板与模型交互,引导其分析系统状态、生成攻击命令并更新攻击进度。此外,该智能体还利用本地数据库维护历史记录以增强模型的上下文理解能力,在16个特权提升场景的测试中展现了无需人工干预即可完成任务的能力。

5 应用场景

5.1 CTF 竞赛

CTF(Capture The Flag)是一种信息安全技术竞赛,包括红方、蓝方、攻击工具库和被保护目标4个部分。在CTF竞赛中,通常红方需要通过漏洞利用等手段获取目标系统中的flag,而蓝方则负责保护系统并阻止攻击。如图6所示,现有CTF竞赛流程为:红队首先侦察目标靶机系统(被保护目标),利用Nmap[76]、Wireshark[77]等工具自动化收集目标系统在网络层、应用层和操作系统层的关键信息,以识别并定位其潜在漏洞;随后结合漏洞利用框架进行武器化,运用SQLMap[20]、Burp Suite[78]、John the Ripper[79]等渗透测试工具进行数据库攻击、Web攻击和密码破解,快速武器化发现的漏洞,如SQL注入、跨站脚本(Cross Site Scripting,XSS)攻击和权限提升等;之后进行代码审计,评估漏洞利用代码质量是否可对靶机造成攻击,完成代码审计后红队会发起攻击,通过自动化脚本进行与目标系统的TCP/IP协议交互,试图绕过蓝队的防御机制,包括地址解析协议(Adress Resolution Protocol,ARP)欺骗防护和缓冲区溢出防护等。而蓝队一方则通过靶机固有的防火墙、入侵检测系统、操作系统(Operating System,OS)层的防护等自动化检测和防御工具抵御来自红队的攻击,在红队发起攻击的同时,编写漏洞修复代码来抵御红队的攻击,保护系统中的flag。在红蓝双方的攻防博弈中,红方会使用Metasploit等漏洞利用框架来自动化生成攻击载荷,突破蓝队的防御机制,夺取flag。自动化漏洞利用技术可以综合运用这些工具,优化并加速红方的攻击效果和速度。
图 6 CTF 竞赛流程

Fig.6 Workflow of CTF competition

2014年,Chapman等[80]提出的PicoCTF为漏洞利用技术在教育领域的应用提供了创新模式。PicoCTF是面向高中生的安全竞赛,设计了一系列涵盖二进制漏洞利用、Web安全和密码学等领域的挑战。在这个竞赛中,学生通过完成各种挑战来学习和实践技术技能,这对于自动化漏洞利用技术在教育领域的发展具有重要作用。一方面,竞赛中的挑战涵盖多个安全领域,为学生提供了接触和学习不同类型漏洞利用技术的机会,有助于培养学生在自动化漏洞利用方面的能力。另一方面,竞赛的设计鼓励学生创造性地探索和实验计算机系统,这种实践方式可以帮助学生更好地理解自动化漏洞利用技术的原理和应用场景,为未来在相关领域的深入学习和研究奠定了基础。
2016年,Shoshitaishvili等[81]开发了用于CTF的Angr框架,现已成为广泛应用于实际软件漏洞分析的工具。Angr集成了符号执行、二进制分析和约束求解等技术,使其能够有效解决CTF中的逆向工程和漏洞利用类题目。例如,它可以自动化分析二进制程序,找出特定输入或构造攻击载荷,助力参赛选手快速理解并攻克复杂的二进制难题。自动化漏洞利用技术可与Angr联动,进一步拓展其应用范围并提升效果。例如,将自动化漏洞利用技术与Angr的符号执行功能相结合,能够更高效地探索程序状态空间,寻觅潜在漏洞利用路径,并且借助Angr提供的约束求解能力,更精确地构造攻击载荷,提高漏洞利用的成功率。
2017年,AutoCTF系统[82]通过自动注入脆弱代码创建多样化的漏洞环境,提高了程序试题生成效率。然而,如何创建CTF靶机复现环境是个难题。目前,可以通过Docker技术部署Web漏洞和应用程序漏洞,通过虚拟机技术部署操作系统漏洞环境,但虚拟机较大,仅部署单个漏洞成本太高,因此可以考虑部署多个内核漏洞。Docker技术在部署Web漏洞和应用程序漏洞方面具有诸多优势。它能够快速创建隔离的环境,使得不同的漏洞环境可以独立运行而互不干扰。同时,Docker的轻量级特性使得部署和管理相对简便,可以快速启动和关闭漏洞环境,方便CTF参与者进行测试和挑战。

5.2 渗透测试

渗透测试(Penetration Testing,Pentest)是一种模拟攻击者对计算机系统、网络或Web应用进行测试的方法。其目的是发现和评估系统中的安全漏洞,并为改进系统的安全性提供建议。渗透测试通常由专业的安全专家或自动化工具执行,以确保组织的安全措施能够抵御真实的攻击。自动化漏洞利用站在攻击者角度,可通过渗透测试找到目标程序的脆弱点。在渗透测试的实施中,自动化漏洞利用技术通过集成化软件工具来收集和利用漏洞。如图7所示,渗透测试场景包括测试员、被测试系统和测试工具集。测试员运用多种工具进行渗透测试。Nmap[76]主要针对网络服务漏洞,进行详细的信息搜集,以准确识别目标网络信息。Wireshark[77]可用于网络流量分析,辅助了解网络通信情况。SQLMap[20]专门针对数据库漏洞,可自动化执行SQL注入攻击以发现安全漏洞。Burp Suite[78]则用于Web端的漏洞扫描与发现,通过它可以针对Web服务编写并执行复杂的攻击脚本。在执行攻击过程中,攻击者可能利用加密的HTTPS请求进行SQL注入,发现和利用隐藏的网站后台URL,进一步获取网站管理员的登录凭证,最终植入webshell。下一步,攻击者将尝试提升权限。例如,在Windows系统中,可以使用如Tokenvator等工具来获取系统级的密钥,以实现对系统的全面控制。Tokenvator[83]是一种用于提升Windows系统权限的工具,它利用Windows操作系统中的访问令牌来执行权限提升,允许用户模拟不同的权限级别。最后测试员开始进行测试,评估系统的安全性并且生成测试报告。在渗透测试阶段,可使用自动漏洞利用为其赋能,提高渗透测试的成功率。
图 7 渗透测试

Fig.7 Penetration tests

2010年左右,Doupe等[84]评估了11种黑盒Web漏洞扫描器,主要包括Acunetix、AppScan、Burp、Grendel-Scan、Hailstorm等。这些工具在检测传统扫描器难以发现的漏洞方面展示了一定潜力,为渗透测试场景的应用提供了方法。黑盒Web漏洞扫描器对Web应用进行漏洞检测的这种方法在发现逻辑缺陷和状态相关漏洞方面取得成功的原因在于:在对现代Web应用程序进行爬取的过程中,会暴露出一些问题,如在处理多媒体数据时,某些基于代理的扫描器会出现漏洞;不完整或不正确的HTML解析器会让扫描器错过可能暴露漏洞的输入向量;对JavaScript和Flash的支持不足也会影响漏洞的发现。
2017年,AUTH-SCOPE[85]将自动化漏洞利用技术扩展到了移动应用后端服务的渗透测试领域。AUTH-SCOPE能自动生成和执行针对授权机制的攻击载荷,其在大规模测试中的成功表明,自动化漏洞利用技术可以有效应用于复杂的现代Web服务渗透测试。这种方法扩大了测试覆盖范围,特别是在处理大量应用和复杂授权逻辑时表现出显著优势。然而,AuthScope也面临一些限制,如仅适用于使用Facebook登录的应用,以及仅关注未经授权读取类型的漏洞。
2020年,Hu等[86]开发了基于深度强化学习的自动渗透测试框架。该框架结合搜索引擎和多主机多阶段漏洞分析,构建了真实的网络拓扑和攻击树。通过深度Q学习网络(Deep Q-Network,DQN),系统能自主探索网络环境并执行攻击策略,从候选路径中发现最易被利用的攻击路径。这种方法将渗透测试过程建模为强化学习问题,使人工智能代理能像人类测试者一样优化攻击策略。实验表明,在数千个场景中,系统以86%的准确率找到最优攻击路径,展示了人工智能在自动化渗透测试中的潜力。

6 自动化漏洞利用待解决的问题

自动化漏洞利用技术仍面临数据集规模与质量不足、复杂系统漏洞检测难、致效代码突防能力不强等问题。针对现有数据集规模与质量不足的问题,本文提出了以下改进方向:首先,开发基于持续集成/持续部署原则的数据采集系统,实时从开源项目代码库、安全公告和漏洞报告中提取最新漏洞信息。其次,构建标准化的漏洞环境描述框架,详细记录软件版本、系统配置、网络拓扑等关键参数,提高漏洞复现的精确度。利用图神经网络技术构建漏洞知识图谱,捕捉漏洞之间的复杂关系,揭示潜在的攻击模式。最后,整合漏洞报告、补丁分析和专家讨论等多源信息,丰富代码语料库的漏洞上下文。
当前的自动化系统在处理复杂系统和新型漏洞方面能力有限。以Angr框架[81]为例,虽然它在分析简单漏洞时表现出色,但在面对大型商业软件中的复杂逻辑错误时,效果大幅降低。这主要是因为Angr难以有效模拟复杂的程序状态,导致漏洞检测和利用生成的准确性受到影响。类似地,FUZE系统虽然在内核使用后释放(Use after free,UAF)漏洞利用方面取得了显著进展,但无法有效处理如Spectre[87]和Meltdown[88]等微架构漏洞。这些新型漏洞利用现代处理器的推测执行机制,其特点是在硬件层面上操作,不留下传统软件层面的痕迹。这种复杂性和隐蔽性使得传统的软件级自动化漏洞利用技术难以有效识别和利用,因为它们需要对底层硬件架构有深入理解,并能模拟微架构级的行为。
随着防御技术的不断进化,自动化漏洞利用系统也面临着更大的挑战。以BOPC系统[46]为例,虽然它能在一定程度上绕过DEP和ASLR,但在面对细粒度的CFI等更先进的防御技术时效果显著降低。这主要是因为BOPC依赖在目标二进制文件的有效CFG中查找和链接基本块,而细粒度CFI通过严格限制间接控制流转移的目标,大大减少了可用的基本块和有效路径。这种限制使得BOPC难以构造复杂的攻击序列,尤其是在需要频繁进行间接跳转的情况下。未来的研究需要探索如何在更严格的防御环境下实现有效的漏洞利用,需要研究新技术来绕过或破解这些防御机制。
自动生成的利用代码在可靠性和稳定性方面仍存在问题。以FlowStitch[11]为例,尽管它能够生成绕过DEP、CFI和部分ASLR防御的攻击,但在10个成功绕过ASLR的攻击中,仍有9个无法在启用ASLR的环境中稳定运行。特别是在复杂的内存布局和系统配置环境中,自动生成的代码往往难以稳定运行,这严重限制了其在实际安全评估中的应用范围。
大语言模型在自动化漏洞利用方面展现出一定潜力,但其应用仍处于初级阶段。Cheshkov等[89]的研究表明,虽然模型如ChatGPT在某些简单场景下表现良好,但在处理大型、复杂的代码库时效果显著下降。这主要是由于大语言模型缺乏对特定系统架构和运行环境的深入理解,难以准确捕捉复杂漏洞的细微特性。未来需要探索如何增强大语言模型对特定领域知识的理解,可能的方向包括:开发专门针对漏洞利用的预训练模型,通过使用专门设计的领域知识数据库进行大语言模型的预训练,或引入领域专家知识增强模型的训练过程;设计更有效的提示工程;将大语言模型与传统漏洞分析技术相结合等。
自动化漏洞利用技术的发展也带来了一系列道德和法律问题。如何平衡技术研究与潜在的滥用风险,如何确保这些技术不被用于非法或不道德的目的,都是需要深入讨论的问题。如可通过制定行业标准或规范、引入技术使用的伦理审查机制等手段来对伦理问题进行约束。

7 结束语

本文对自动化漏洞利用技术进行了系统性回顾。自动化漏洞利用包括漏洞检测和致效代码生成两方面。漏洞检测方面取得了污点分析、模糊测试等成果,识别和定位漏洞的能力显著提升。但在处理大规模复杂软件系统时仍存在性能瓶颈,混合分析结合机器学习展现出潜力。致效代码生成虽有ROP、DOP、BOP、JOP等成果,但漏洞利用原语生成和防御机制突破能力较弱,无法针对复杂系统漏洞生成合适的原语,且突破影子栈等最新防御机制的能力有限。此外,用于自动化漏洞利用的漏洞程序、PoC程序、EXP程序、漏洞复现环境等数据集不足,极大限制了当前自动化漏洞利用技术,尤其是基于大语言模型技术的发展。未来可以在以下方面开展深入研究:(1)归纳总结常见漏洞的跨平台利用方法,并研究对应的漏洞原语自动化生成方法;(2)研究影子栈等新防御机制存在的漏洞,绕过或直接突破其防御机制;(3)构建大规模高质量的漏洞程序、PoC程序、EXP、漏洞复现环境等数据集,为基于大语言模型的CTF竞赛和渗透测试场景赋能。
1
MITRE. CVE list master copy[EB/OL]. (2024-06-14)[2024-12-21]. https://cve. mitre. org/cve/search_cve_list. html.

2
ONE A. Smashing the stack for fun and profit[J]. Phrack Magazine, 1996, 7 (49): 14- 16.

3
SOLAR D. Getting around non-executable stack(and fix) [EB/OL]. (1997-08-10)[2024-12-21]. https://seclists.org/bugtraq/1997/Aug/63.

4
SMITH N P. Stack smashing vulnerabilities in the UNIX operating system [EB/OL]. (1997-05-07) [2025-04-18]. https://web.eecs.umich.edu/~aprakash/security/handouts/Stack_Smashing_Vulnerabilities_in_the_UNIX_Operating_System.

5
BRUMLEY D, POOSANKAM P, SONG D, et al. Automatic patch-based exploit generation is possible: Techniques and implications[C]//2008 IEEE Symposium on Security and Privacy(SP). IEEE, 2008: 143-157.

6
AVGERINOS T, CHA S.K, ROBERT A, et al. Automatic exploit generation[J]//Communications of the ACM, ACM, 2014, 57(2): 74-84.

7
CHA S.K, AVGERINOS T, REBERT A, et al. Unleashing mayhem on binary code[C]// IEEE Symposium on Security and Privacy. IEEE, 2012:380-394.

8
HUANG S.K, HUANG M.H, HUANG P.Y, et al. CRAX: Software crash analysis for automatic exploit generation by modeling attacks as symbolic continuations[C]// International Conference on Software Security and Reliability. IEEE, 2012: 78-87.

9
WANG M, SU P, LI Q, et al. Automatic polymorphic exploit generation for software vulnerabilities[C]// International Conference on Security and Privacy in Communication Systems. Springer, 2013: 216-233.

10
HU H, ZHENG L, ADRIAN S, et al. Automatic generation of data-oriented exploits[C]//Proc of the 24th USENIX Security Symp. USENIX Association, 2015: 177-192.

11
DARPA. Cyber grand challenge (CGC)[EB/OL]. (2016-08-04)[2024-12-21]. https://www.darpa.mil/research/programs/cyber-grand-challenge.

12
Cyber Grand Challenge. Examples[EB/OL]. (2018-06-06)[2024-12-21].https://github.com/CyberGrandChallenge/samples.

13
WU W, CHEN Y, XU J, et al. FUZE: Towards facilitating exploit generation for kernel use-after-free vulnera- bilities[C]//Proceedings of the 27th USENIX Security Symposium. USENIX Association, 2018: 781- 797.

14
WANG Y, ZHANG C, XIANG X, et al. SLAKE: Facilitating slab manipulation for exploiting vulnerabilities in the linux kernel[C]//Proceedings of the 2020 ACM SIGSAC Conference on Computer and Communications Security. ACM, 2020: 1875-1890.

15
CHEN W, ZOU X, LI G, et al. KOOBE: Towards facilitating exploit generation of kernel out-of-bounds write vulnerabilities[C]//29th USENIX Security Symposium (USENIX Security 20). USENIX Association, 2020: 1093-1110.

16
WANG Y, ZHANG C, ZHAO Z, et al. MAZE: Towards automated heap feng shui[C]//30th USENIX Security Symposium (USENIX Security 21). USENIX Association, 2021: 1647-1664.

17
TECHNOLOGIES CS. Core impact[Z]. 2006.

18
MOORE H, SPOON M. Metasploit framework[Z]. 2003.

19
G. B D A. SQLMap: Automatic sql injection and database takeover too[EB/OL]. (2006-01-01)[2024-12-21]. https://sqlmap.org

20
THREAT9. Routersploit framework[EB/OL]. (2015-01-01)[2024-12-21]. https://github.com/threat9/routersploit.

21
INFOSECURITY M. Drozer: Comprehensive security assessment for android[EB/OL]. (2012-01-01)[2024-12-21]. https://labs.withsecure.com/tools/drozer.

22
ZHENG Y, PUJAR S, LEWIS B, et al. D2A: A dataset built for AI-based vulnerability detection methods using differential analysis[C]//IEEE/ACM 43rd International Conference on Software Engineering: Software Engineering in Practice (ICSE-SEIP). IEEE, 2021: 111-120.

23
BHANDARI G, NASEER A, MOONEN L. CVEfixes: Automated collection of vulnerabilities and their fixes from open-source software[C]//Proceedings of the 17th International Conference on Predictive Models and Data Analytics in Software Engineering. ACM, 2021: 30-39.

24
FAN J, LI Y, WANG S, et al. A C/C++ code vulnerability dataset with code changes and CVE summaries[C]//Proceedings of the 17th international conference on mining software repositories. ACM, 2020: 508-512.

25
HUSAIN H, WU H, GAZIT T, et al. Codesearchnet challenge: Evaluating the state of semantic code search [J]. arXiv preprint, arXiv: 1909.09436, 2019.

26
OKUN V, DELAITRE A, BLACK P E. Report on the static analysis tool exposition (sate ) IV [EB/OL].(2013-02-04)[2024-12-21]. https://doi.org/10.6028/NIST.SP.500-297.

27
BLACK P. E. SARD: Thousands of reference programs for software assurance[J]. Cyber Secur. Inf. Syst. Tools Test. Tech. Assur. Softw. Dod Softw. Assur. Community Pract. 2017, 2(5) : 6-13.

28
PEARCE H, TAN B, AHMAD B, et al. Examining zero-shot vulnerability repair with large language models[C].//IEEE Symposium on Security and Privacy (SP). IEEE, 2023: 2339-2356.

29
EVANS D, LAROCHELLE D. Improving security using extensible lightweight static analysis[J]. IEEE software, 2002, 19 (1): 42- 51.

DOI

30
LI Z, ZOU D, XU S, et al. Vuldeepecker: A deep learning-based system for vulnerability detection[J]. arXiv preprint arXiv: 1801.01681, 2018.

31
ZHOU Y, LIU S, SIOW J, et al. Devign: Effective vulnerability identification by learning comprehensive program semantics via graph neural networks [C]//Proceedings of the 32nd Conference on Neural Information Processing Systems (NeurIPS 2019). Curran Associates, Inc., 2019: 10197-10207.

32
CADAR C, GANESH V, PAWLOWSKI P M, et al. EXE: Automatically generating inputs of death[C]//Proceedings of the 13th ACM conference on Computer and Communications Security. ACM, 2006: 322-335.

33
ABREU R, ZOETEWEIJ P, VAN GEMUND A J. Spectrum-based multiple fault localization[C]//2009 IEEE/ACM International Conference on Automated Software Engineering. IEEE, 2009: 88-99.

34
AHMAD W, CHAKRABORTY S, RAY B, et al. Unified pre-training for program understanding and generation[C]//Proceedings of the 2022 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies. Association for Computational Linguistics, 2022: 2148-2162.

35
NEWSOME J, SONG D. Dynamic taint analysis for automatic detection, analysis, and signature generation of exploits on commodity software[C]//Proceedings of the Network and Distributed System Security Symposium. The Internet Society, 2005: 3-4.

36
GODEFROID P, LEVIN M Y, MOLNAR D. Automated whitebox fuzz testing[C]//Proceedings of the Network and Distributed System Security Symposium. The Internet Society, 2008: 151-166.

37
NETHERCOTE N, SEWARD J. Valgrind: A framework for heavyweight dynamic binary instrumentation [C]//Proceedings of the 28th ACM SIG- PLAN Conference on Programming Language Design and Implementation (PLDI). ACM, 2007: 89-100.

38
NIU W, ZHANG X, DU X, et al. A deep learning based static taint analysis approach for iot software vulnera-bility location[J]. Measurement, 2020, 152: 107139.

39
LU G, JU X, CHEN X, et al. Grace: Empowering llm-based software vulnerability detection with graph structure and in-context learning[J]. Journal of Systems and Software, 2024, 212: 112031.

40
王琛, 邹燕燕, 刘龙权, 等. 一种针对网络设备的已知漏洞定位方法[J]. 信息安全学报, 2023, 8 (6): 48- 63.

WANG C, ZOU Y Y, LIU L Q, et al. Locating 1-day vulnerabilities in network equipment[J]. Journal of Cybersecurity, 2023, 8 (6): 48- 63.

41
SOTIROV A. Windows animated cursor stack overflow vulnerability[Z]. 2007.

42
GRAVES A, FERNÁNDEZ S, SCHMIDHUBER J. Bidirectional lstm networks for improved phoneme classification and recognition[C]/ //Proceedings of the 15th International Conference on Artificial Neural Networks. Springer, 2005: 799–804.

43
TIP F. A survey of program slicing techniques[J]. Journal of Programming Languages, 1999, 3 (3): 121- 189.

44
SHACHAM H. The geometry of innocent flesh on the bone: Return-into-libc without function calls (on the x86)[C]//Proceedings of the 14th ACM conference on Computer and communications security. ACM, 2007: 552-561.

45
HU H, SHINDE S, ADRIAN S, et al. Data-oriented programming: On the expressiveness of non-control data attacks[C]//2016 IEEE Symposium on Security and Privacy (SP). IEEE, 2016: 969-986.

46
ISPOGLOU K K, ALBASSAM B, JAEGER T, et al. Block oriented programming: Automating data-only attacks[C]//Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security. ACM, 2018: 1868-1882.

47
SCHWARTZ E J, AVGERINOS T, BRUMLEY D. Q. Exploit hardening made easy[C]//USENIX Security Symposium. USENIX Association, 2011: 25-41.

48
DULLIEN T, PORST S. REIL: A platform-independent intermediate representation of disassembled code for static code analysis[C] //Proceedings of CanSecWest. 2009: 1-7.

49
BULBA, KIL3R. Bypassing stackguard and stackshield[J]. Phrack Magazine, 2000, 56(5).

50
SHACHAM H, PAGE M, PFAFF B, et al. On the effectiveness of address-space randomization[C]//Proceedings of the 11th ACM Conference on Computer and Communications Security (CCS). ACM, 2004: 298-307.

51
BITTAU A, BELAY A, MASHTIZADEH A, et al. Hacking blind[C]//2014 IEEE Symposium on Security and Privacy. IEEE, 2014: 227-242.

52
SNOW K Z, MONROSE F, DAVI L, et al. Just-in-time code reuse: On the effectiveness of fine-grained address space layout randomization[C]//2013 IEEE Symposium on Security and Privacy. IEEE, 2013: 574-588.

53
BLETSCH T, JIANG X, FREEH V W, et al. Jumporiented programming: A new class of code-reuse attack[C]//ASIACCS ’11: Proceedings of the 6th ACM Symposium on Information, Computer and Communications Security. ACM, 2011: 30-40.

54
EVANS I, LONG F, OTGONBAATAR U, et al. Control jujutsu: On the weaknesses of fine-grained control flow integrity[C]//Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security. ACM, 2015: 901-913.

55
COWAN C, PU C, MAIER D, et al. StackGuard: Automatic adaptive detection and prevention of buffer-overflow attacks[C]//Proceedings of the USENIX Security Symposium. USENIX Association, 1998: 63-78.

56
TEAM P. Pax address space layout randomization (ASLR) [ EB/OL]. (2003-03-15)[2024-12-21]. http://pax.grsecurity.net/docs/aslr.txt.

57
MICROSOFT. A detailed description of the data execution prevention (DEP) feature in windows XP service pack 2, windows XP tablet pc edition 2005, and windows server 2003[Z]. 2006.

58
ABADI M, BUDIU M, ERLINGSSON Ú, et al. Control-flow integrity[C]//Proceedings of the 12th ACM Conference on Computer and Communications Security. ACM, 2005: 340-353.

59
KUZNETSOV V, SZEKERES L, PAYER M, et al. Code-pointer integrity[C]//11th USENIX Symposium on Operating Systems Design and Implementation. USENIX Association, 2014: 147-163.

60
BUROW N, ZHANG X, PAYER M. Sok: Shining light on shadow stacks[C]//2019 IEEE Symposium on Security and Privacy (SP). IEEE, 2019: 985-999.

61
GAGE P. A new algorithm for data compression[J]. The C Users Journal, 1994, 12 (2): 23- 38.

62
NIJKAMP E, PANG B, HAYASHI H, et al. Codegen: An open large language model for code with multi-turn program synthesis[C]//International Conference on Learning Representations (ICLR), OpenReview, 2023.

63
WANG Y, WANG W, JOTY S, et al. CodeT5: Identifier-aware unified pre-trained encoder-decoder models for code understanding and generation[C]//Proceedings of the 2021 Conference on Empirical Methods in Natural Language Processing. Association for Computational Linguistics, 2021: 8696-8708.

64
VASWANI A, SHAZEER N, PARMAR N, et al. Attention is all you need[C]//Proceedings of the 31st International Conference on Neural Information Processing Systems. Springer, 2017: 6000-6010.

65
FENG Z, GUO D, TANG D, et al. CodeBERT: A pre-trained model for programming and natural lan- guages[C]//Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing . Association for Computational Linguistics, 2020: 1536-1547.

66
OPENAI. Openai codex[EB/OL]. (2021-08-10)[2024-12-21]. https://openai.com/index/openai-codex/.

67
WANG Y, LE H, GOTMARE A, et al. CodeT5+: Open code large language models for code understanding and generation[C]//Proceedings of the 2023 Conference on Empirical Methods in Natural Language Processing. Association for Computational Linguistics, 2023: 1069-1088.

68
TOUVRON H, MARTIN L, STONE K R. Llama 2: Open foundation and fine-tuned chat models[J]. arXiv preprint, arXiv: 2307.09288, 2023.

69
HENDRYCKS D, BURNS C, BASART S, et al. Measuring massive multitask language understanding[J]. arXiv preprint, arXiv: 2009. 03300, 2020.

70
DUBEY A, JAUHRI A, PANDEY A. The llama 3 herd of models[J]. arXiv preprint, arXiv: 2407. 21783, 2024.

71
GUO D, REN S, LU S, et al. Graphcodebert: Pre-training code representations with data flow[J]. arXiv preprint, arXiv: 2009. 08366, 2020.

72
DENG G, LIU Y, MAYORAL-VILCHES V, et al. Pentestgpt: An LLM-empowered automatic penetration testing tool[J]. arXiv preprint, arXiv: 2308. 06782, 2024.

73
HackTheBox: Hacking training for the best [EB/OL]. (2017-10-10)[2024-12-21].http://www.hackthebox.com/.

74
XU J, STOKES J W, MCDONALD G, et al. Autoattacker: A large language model guided system to implement automatic cyber-attacks[J]. arXiv preprint, arXiv: 2403. 01038, 2024.

75
HAPPE A KAPLAN A CITO J. Evaluating LLMs for privilege-escalation scenarios[EB/OL]. arXiv preprint, arXiv: 2310.11409, 2023.

76
LYON G F. Nmap network scanning: The official Nmap project guide to network discovery and security scanning[M]. San Francisco, CA, USA: Insecure, 2009.

77
COMBS G. The world’s most popular network protocol analyzer[EB/OL]. (1998-01-01)[2024-12-21]. https://www.wireshark.org/.

78
LTD P. Burp suite: Web vulnerability scanner[EB/OL]. 2003. https://portswigger.net/burp.

79
DESIGNER S. John the ripper: Fast password cracker [EB/OL]. (1996-01-01)[2024-12-21]. https://www.openwall.com/john/.

80
CHAPMAN P, BURKET J, BRUMLEY D. PicoCTF: A game-based computer security competition for high school students[C]//2014 USENIX Summit on Gaming, Games, and Gamification in Security Education (3GSE 2014). USENIX Association, 2014.

81
SHOSHITAISHVILI Y, WANG R, SALLS C, et al. Sok: (state of) the art of war: Offensive techniques in binary analysis[C]//2016 IEEE Symposium on Security and Privacy (SP). IEEE, 2016: 138-157.

82
HULIN P, DAVIS A, SRIDHAR R, et al. AutoCTF: Creating diverse pwnables via automated bug injection [C]//Proceedings of the 11th USENIX Workshop on Offensive Technologies (WOOT 2017). USENIX Association, 2017.

83
GATES C. Tokenvator[Z]. 2017. https://github.com/0xbadjuju/Tokenvator.

84
DOUPÉ A, COVA M, VIGNA G. Why johnny can’t pentest: An analysis of black-box web vulnerability scanners[C]//International Conference on Detection of Intrusions and Malware, and Vulnerability Assessment. Springer, 2010: 111–131.

85
ZUO C, ZHAO Q, LIN Z. Authscope: Towards automatic discovery of vulnerable authorizations in online services[C]//Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communica- tions Security. ACM, 2017: 799-813.

86
HU Z, BEURAN R, TAN Y. Automated penetration testing using deep reinforcement learning[C]//2020 IEEE European Symposium on Security and Privacy Workshops (EuroS & PW). IEEE, 2020: 2-10.

87
KOCHER P, HORN J, FOGH A, et al. Spectre attacks: Exploiting speculative execution[C]//2019 IEEE Symposium on Security and Privacy (SP). IEEE, 2019: 1-19.

88
LIPP M, SCHWARZ M, GRUSS D, et al. eltdown: Reading kernel memory from user space[J]. CommunACM, 2020, 63 (6): 46- 56.

89
CHESHKOV A, ZADOROZHNY P, LEVICHEV R. Evaluation of chatgpt model for vulnerability detection [J]. arXiv preprint, arXiv: 2304.07232.

文章导航

/