PentestAgent:将LLM智能体融入自动化渗透测试
PentestAgent: Incorporating LLM Agents to Automated Penetration Testing
![![[Pasted image 20250327110339.png]]](/https://i-blog.csdnimg.cn/direct/fc746333f0ee46749bef4348aa5c5518.png)
摘要
渗透测试是一种识别安全漏洞的关键技术,传统上由熟练的安全专家手动执行。这一复杂的过程包括收集目标系统的信息、识别入口点、利用系统漏洞以及报告发现结果。尽管这种方法行之有效,但手动渗透测试耗时且昂贵,通常需要大量的专业知识和资源,而许多组织无法承担这些成本。虽然已有自动化的渗透测试方法被提出,但由于灵活性、适应性和实施能力的局限性,它们在实际应用中往往表现不佳。近期,大型语言模型(LLMs)的进步为通过提升智能化和自动化水平改进渗透测试提供了新的机会。然而,当前基于LLM的方法仍面临重大挑战,包括渗透测试知识有限以及缺乏全面的自动化能力。
为了解决这些问题,我们提出了PentestAgent,一种新颖的基于LLM的自动化渗透测试框架,该框架利用了LLM的能力以及诸如检索增强生成(Retrieval Augmented Generation, RAG)等基于LLM的技术,以增强渗透测试知识并自动化各种任务。我们的框架通过多智能体协作来自动完成情报收集、漏洞分析和利用阶段,从而减少人工干预。我们使用一个综合基准对PentestAgent进行了评估,结果表明其在任务完成度和整体效率方面表现出色。这项工作显著提升了自动化渗透测试系统的实际适用性。
1 引言
渗透测试是一种广泛采用的主动识别安全漏洞的技术。该过程包括收集目标系统的信息(侦察)、识别可能的入口点、尝试利用系统漏洞并报告发现结果 [13]。传统上,渗透测试是一个复杂的手动过程,需要高度熟练的安全专家具备丰富的经验。测试人员通常会编写自己的漏洞利用代码,掌握公共领域的工具,并执行大量繁琐且耗时的任务 [42]。根据 Rapid7 的《Under the Hoodie》报告,渗透测试平均需要 80 小时,而显著的异常情况可能需要数百小时 [6]。因此,手动渗透测试通常需要大型、多样化的团队,而大多数组织无法承担这一成本。
尽管自动化渗透测试的概念已经存在了十多年,但所提出的方法与其实际应用之间仍然存在显著差距。早期的工作 [4, 29, 35] 主要将攻击规划建模为一个确定性和完全可观测世界中的攻击图问题 [2]。然而,这种方法存在局限性:它假设防御者具有完全的可观测性,并缺乏动态环境中所需的灵活性和适应性。后来的努力 [5, 14, 18, 19, 36–38, 48] 通过在规划方法中引入不确定性来解决这些缺点,将攻击规划视为马尔可夫决策过程(MDP),将世界建模为状态,将行动建模为状态之间的转换,并用奖励函数编码从一个状态转移到另一个状态的“奖励”。作为基于 MDP 方法的扩展,后续工作采用了部分可观测马尔可夫决策过程(POMDP)[36, 37] 和强化学习算法 [5, 18] 来应对环境和行动结果中的更多不确定性。这些进展更好地符合现实条件,即攻击者对目标系统的知识有限。然而,这些概率模型专注于为自动化渗透测试规划建立理论模型,却缺乏实施方面的考量。
近年来,大型语言模型(LLMs)在广泛的任务中展现了令人印象深刻的能力,包括文本摘要、数据分析和问答等。强大的 LLMs 在安全应用中引起了广泛关注,推动了基于 LLM 的安全解决方案的发展,这些方案相比现有方法提供了增强的智能化和自动化能力,从而使得弥补自动化渗透测试中的实施差距成为可能。最近尝试利用 LLM 自动化渗透测试的工作 [11, 17, 47] 已经显示出一些有希望的初步结果。然而,为了实现实用性,仍需解决两个关键问题:
-
有限的渗透测试知识:这些方法严重依赖预训练的语言模型生成可操作项目。然而,这些模型的训练数据集往往缺乏对渗透测试技术的全面覆盖。这导致状态空间有限且动作空间过时,降低了生成动作的有效性和相关性。
-
自动化不足:现有方法缺乏适应各种环境的自动化能力,包括验证和调试建议的程序以及动态获取和应用新的渗透测试技术。如果不解决这些问题,当前方法将成为实践中效果有限的易出错蛮力技术。
为克服这些挑战,我们提出了 PentestAgent,一种新颖的基于 LLM 的自动化渗透测试框架。我们的框架旨在通过持续整合新技术并借助 LLM 更新框架的知识库,以增强渗透测试知识。此外,PentestAgent 建立了一个强大的自动化渗透测试管道,利用 LLM 技术,结合验证和调试机制,确保生成的动作在特定目标环境中的有效性和相关性。通过弥合这些差距,我们旨在显著提高自动化渗透测试框架的实用性和可靠性。
PentestAgent 采用多智能体设计。框架中的每个智能体都配备了一组工具,并负责渗透测试过程中的特定任务。这些智能体具有高度适应性,因为它们的工具集可以根据不同任务进行定制,使其在不同场景中灵活且可扩展。除了 LLM 智能体外,PentestAgent 还将其框架与检索增强生成(Retrieval Augmented Generation, RAG)[20] 结合。RAG 通过使 LLM 能够利用额外数据进行响应合成,增强了 LLM 的能力,从而成为 LLM 智能体的强大增强工具,使其能够生成更明智且上下文相关的输出。RAG 还允许对通信中的补充上下文进行自定义控制,确保上下文窗口的高效使用。表 1 展示了现有自动化渗透测试系统之间的比较。
![![[Pasted image 20250327115622.png]]](/https://i-blog.csdnimg.cn/direct/661ed2201963408b9ca2acf13057bd1c.png)
PentestAgent 包含四个主要组件:侦察智能体、搜索智能体、规划智能体和执行智能体。这些组件无缝协作,以自动化渗透测试的三个主要阶段:情报收集、漏洞分析和利用。侦察智能体在接收到目标后启动过程,生成并执行侦察命令以收集有关目标主机的全面信息。随后,这些数据被分析并存储在环境信息数据库中以供进一步参考。
在漏洞分析阶段,搜索智能体查询环境数据库以识别暴露的服务和应用程序。它识别潜在的攻击面和程序,并分别对其进行分类。同时,规划智能体利用检索增强生成(RAG)技术优化潜在攻击面,并选择适合目标环境的漏洞利用方式。在利用阶段,执行智能体尝试在目标主机上执行计划的攻击。它从环境数据库中检索必要的操作细节,调试执行错误,并记录所有活动以生成全面的渗透测试报告。
这种综合方法有望减少对手动干预的依赖,并提高自动化渗透测试系统的可扩展性和适应性。总而言之,我们做出了以下贡献:
- 我们设计了 PentestAgent,这是一种基于 LLM 的自动化渗透测试系统,能够在最少人工干预的情况下运行。PentestAgent 集成了多智能体设计和检索增强生成(RAG)技术,以增强渗透测试知识并自动化各种任务。
- 我们基于领先的开源预构建漏洞 Docker 环境集合 VulHub 设计了一个综合的渗透测试基准。该基准涵盖各种难度级别,包含广泛的常见弱点和漏洞,为评估渗透测试工具提供了一个全面且实用的框架。
- 我们设计了实验和指标来评估 PentestAgent 在我们的基准上的表现。结果表明,PentestAgent 在自动完成整个渗透测试过程以及单个渗透任务方面表现出色。
我们将公开我们的基准数据集和框架,以促进自动化渗透测试领域的进一步研究。
2 背景与相关工作
2.1 渗透测试
渗透测试(或简称 pentesting)是一个多阶段、劳动密集型的过程,旨在识别被测系统中的安全漏洞。
2.1.1 工作流程
根据《渗透测试执行标准》(Penetration Testing Execution Standard, PTES)[41],渗透测试包括三个主要阶段:情报收集、漏洞分析和利用。现有工具通常专注于这些阶段中的个别任务。例如,Nmap [28] 专注于通过直接与目标交互来收集响应数据以实现信息收集。Nessus [43] 和 OpenVAS [15] 致力于漏洞分析,通过其集成的服务和工具提供全面的扫描功能。Metasploit [34] 则专注于利用阶段,在识别漏洞后提供具有可定制有效负载的各种漏洞利用方式。尽管这些工具在其特定任务中表现出色,但掌握它们的使用并将它们整合到一个连贯的攻击计划中需要相当高的渗透测试专业知识以及大量的人工操作。
近年来,人工智能的进步推动了基于机器学习和马尔可夫决策过程(MDP)算法的更复杂渗透测试框架的发展 [5, 18, 48]。例如,Chen 等人 [5] 设计了一种基于强化学习的自动化攻击规划框架。该框架将专家知识融入状态-动作对,并通过奖励函数训练系统执行成功率最高的动作。虽然这些框架能够生成合理的攻击计划,但它们缺乏渗透测试的动态实施能力,无法应对潜在的失败并实时调整计划。
基于 LLM 的应用的兴起进一步推进了渗透测试任务的自动化,例如文本分析、任务规划、代码修改和执行调试等。然而,现有的基于 LLM 的渗透测试框架仍然缺乏对各个阶段的全面覆盖和实际应用所需的自动化能力。AutoAttacker [47] 专注于构建后入侵攻击,忽视了前入侵阶段。PentestGPT [11] 虽然通过其“渗透测试任务树”隐式考虑了多个阶段,但仍依赖人类决策来选择特定的任务分支,导致效率低下且效果不佳。例如,PentestGPT 可能过度关注某项任务而忽略其他任务,从而导致不平衡的方法。此外,PentestGPT 和 AutoAttacker 依赖 LLM 的预训练知识和人工分析来收集目标的额外信息、发现和验证漏洞,并从任务树中选择下一步行动。这些任务仍然需要大量的人工干预。
我们的目标是开发一种全面且自动化的渗透测试框架,将所有阶段整合到一个连贯且有效的流程中。通过利用 LLM 的先进能力,我们旨在显著提高渗透测试的自动化水平,减少对人类专业知识和努力的依赖,同时确保渗透测试过程各阶段之间的无缝衔接。
2.1.2 范围
根据范围的不同,渗透测试大致可分为两类:外部评估和内部评估 [6]。在外部评估中,渗透测试人员从互联网开始,针对客户的 Web 应用程序、服务和其他面向互联网的资产进行测试。这些测试包括社会工程参与、红队攻击模拟和外部网络入侵。在内部评估中,测试人员可以访问内部网络、源代码或物理设备。测试内容包括代码审查和内部网络入侵。一些研究集中在利用基于 LLM 的框架改进内部评估上(例如,ChatAFL [25] 和 FuzzGPT [12] 用于模糊测试,LLift [22] 和 LATTE [24] 用于程序和二进制分析),而外部评估则较少受到关注。本文旨在填补这一空白,利用基于 LLM 的方法改进外部评估。根据 Rapid7 最新的渗透测试报告 [7],外部评估需求最高,其中仅外部网络入侵就占所有外部评估的 80% 以上。因此,本文将通过 Web 渗透测试展示 PentestAgent 的有效性。
2.2 将 LLM 应用于渗透测试的挑战
尽管基于 LLM 的系统在各种任务中展现了出色的能力,我们在渗透测试任务中识别出以下挑战:
C1. 有限的渗透测试知识
LLM 具有关于漏洞和渗透测试的基本知识,可以帮助启动渗透测试。然而,它需要用户手动搜索额外的信息,例如实际的 CVE 编号,分析与 CVE 相关的信息(如漏洞类型和相关的漏洞利用方式),手动设置漏洞利用工具,搜索合适的漏洞利用方式并进行配置。所有这些额外的工作都需要渗透测试专业知识和大量的人工努力。例如,以下是与 GPT-4 关于如何对 ActiveMQ 5.17.3 进行渗透测试的对话示例。
![![[Pasted image 20250327115700.png]]](/https://i-blog.csdnimg.cn/direct/11bf5f74f0a94bc4b1fe4a213666fd01.png)
有限的渗透测试知识示例
用户:ActiveMQ 5.17.3 可能存在哪些漏洞?我如何测试这些漏洞是否存在?
GPT-4:
(1) 保持软件更新 . . . (2) 检查 CVE . . . (3) 使用安全扫描工具 . . . (4) 配置审查 . . . (5) 渗透测试 . . . (6) 日志分析 . . .
用户:您能否提供详细的渗透测试步骤?
GPT-4:
(1) 识别已知的 CVE . . . (2) 设置 Metasploit . . . (3) 搜索 ActiveMQ 模块 . . . (4) 配置并运行漏洞利用 . . . (5) 手动测试 . . .
C2. 短期记忆
模型上下文窗口的限制导致短期记忆问题,这在像渗透测试这样需要长时间连续记忆的任务中尤为具有挑战性。例如,在漏洞分析中,情报收集阶段获得的信息对于识别漏洞和寻找相应的漏洞利用方式至关重要。同样,在利用阶段,情报收集阶段的信息有助于选择和配置适当的漏洞利用方式。短期记忆限制可能导致渗透测试过程中出现以下问题:
- 任务重复:由于上下文窗口受限,模型可能忘记之前收集的信息或采取的行动,从而导致重复任务的执行。例如,LLM 可能会重复之前已经完成的信息收集过程。
![![[Pasted image 20250327115710.png]]](/https://i-blog.csdnimg.cn/direct/349018cc3f7d4cfab707cac2c348dfce.png)
任务重复示例
情报收集
LLM:使用 Nmap 对目标主机的所有端口进行全面扫描,以识别开放端口和服务。
用户:{Nmap 扫描结果}
漏洞分析
LLM:使用 Nmap 对目标主机的所有端口进行全面扫描,以识别开放端口和服务。
用户:{Nmap 扫描结果}
- 上下文丢失:随着每次交互或阶段转换,模型的上下文会发生变化,可能导致其失去做出明智决策或有效执行顺序任务所需的上下文理解能力。这可能会导致次优的漏洞利用尝试,或与整体渗透测试目标的不一致。例如,由于上下文丢失,LLM 可能无法提供有关如何执行漏洞利用的详细说明。
![![[Pasted image 20250327115720.png]]](/https://i-blog.csdnimg.cn/direct/a0b949c0eeff41a1aba9f3c8ed1d09c9.png)
上下文丢失示例
情报收集
{信息收集步骤} . . .
LLM:目标操作系统是 Linux,目标 IP 是 192.168.238.129。
漏洞利用
用户:我该如何执行这个漏洞利用?
LLM:需要目标操作系统和 IP 来配置漏洞利用方式。若要调查未知的操作系统和 IP,请执行以下操作:. . .
C3. 工作流程集成
在涉及多阶段互联任务的渗透测试背景下,集成 LLM 带来了与输出质量控制和有状态工作内存管理相关的挑战。
-
输出质量控制:确保 LLM 的输出格式能够被下游模块轻松解析,这对于整个渗透测试管道的顺利运行至关重要。这要求 LLM 生成符合预定义标准或协议的结构化输出,以便后续模块能够高效处理和利用信息。此外,保持高质量的内容同样重要。在将输出传递给下游模块之前,LLM 应进行验证检查,以确保生成信息的准确性、完整性和相关性。LLM 可能会受到“幻觉问题”的影响,生成无关或错误的答案。实施强大的质量控制措施,对于降低通过管道传播错误或误导数据的风险,从而减少单点故障中断整个测试过程的可能性,是必要的。
-
有状态工作内存管理:渗透测试的每个阶段通常需要不同的有状态工作内存,包括已发现的漏洞、选定的漏洞利用方式、目标环境细节以及正在进行的会话上下文等信息。挑战在于实现这些工作内存在任务和会话之间的平滑过渡。如果 LLM 无法在整个渗透测试过程中保留并切换连续的有状态内存,则可能破坏测试序列的流畅性和连贯性。例如,如果 LLM 在从目标环境细节工作内存中获取必要信息后,未能保留漏洞利用执行的进展,则可能导致重新从头开始执行漏洞利用。这种冗余会延迟进度,并影响测试的整体彻底性和有效性。然而,当前的 LLM 并未内在支持会话内部及会话之间的此类工作内存管理,这在实现渗透测试管道的无缝集成方面构成了重大挑战。
2.3 克服挑战的 LLM 技术
LLM 研究的快速进展引入了新的智能化和自动化能力水平,显著提升了渗透测试性能。各种 LLM 技术可以应用于渗透测试的不同阶段,以提高效率和效果,解决 §2.2 中提到的挑战。
LLM 智能体是配备了额外工具的 LLM,扩展了传统模型的功能。这些智能体可以通过执行传统上需要人工干预的任务(如文本分析和代码调试)来在渗透测试的所有阶段发挥作用。借助适当的工具,LLM 智能体可以在线搜索和学习渗透测试知识,从而应对有限的渗透测试知识(C1)的挑战。
为了充分利用 LLM 智能体的能力,提供适当的系统消息以定义智能体的基本配置文件至关重要,包括其功能、限制、输出格式和其他规范 [26]。
检索增强生成(Retrieval-Augmented Generation, RAG) 通过允许 LLM 利用外部数据生成响应来增强其能力。该技术包括三个主要阶段:索引、检索和响应合成。最初,数据集被索引以实现高效的检索。在接收到查询后,RAG 从索引数据集中检索相关信息,并将其与原始查询结合,然后发送到 LLM 进行响应合成。RAG 通过允许用户动态查询和存储长期记忆,有效解决了短期记忆(C2)和有状态工作内存管理(C3.2)的挑战。
思维链(Chain-of-Thought, CoT) 技术显著提高了大型语言模型执行复杂推理的能力 [46]。通过引导 LLM 遵循逻辑步骤序列,这种方法增强了模型的问题解决能力。
角色扮演与技术应用角色扮演 [21] 要求大型语言模型(LLM)扮演一个虚构的角色,使 LLM 能够在明确的目标和边界内运作,从而提高其效率和效果。自我反思技术通过将 LLM 过去的错误总结成长期记忆,以避免在后续交流中犯类似的错误,已被证明在少数试验中对学习复杂任务非常有用 [40]。结构化输出技术可以节省用于迭代提示测试和临时解析的时间,降低整体 LLM 推理成本和延迟,同时也减少了开发人员的工作量。此外,结构化输出确保了与下游流程和工作流的无缝集成 [23]。综合来看,思维链、角色扮演、自我反思以及结构化输出技术显著提高了 LLM 输出的质量,有效应对了输出质量控制挑战 (C3.1)。
3 系统设计
3.1 系统概述
![![[Pasted image 20250327115812.png]]](/https://i-blog.csdnimg.cn/direct/b101635279fd49d6852f030b55608477.png)
如图 1 所示,PentestAgent 包含四个主要组件:侦察智能体、搜索智能体、规划智能体和执行智能体。这些智能体协作完成渗透测试的三个主要阶段:
情报收集:
- 在接收到用户输入指定目标后,侦察智能体通过收集目标主机的环境信息启动渗透测试过程。侦察智能体生成并执行侦察命令,旨在从目标主机收集全面的环境数据。
- 随后,侦察智能体分析执行结果,并编译目标环境的摘要,存储在指定的环境信息数据库中。
漏洞分析:
- 接下来,搜索智能体和规划智能体协同进行漏洞分析。
- 搜索智能体查询环境信息数据库,检索目标主机上暴露的服务和应用程序列表。
- 在这些服务和应用程序的指导下,搜索智能体寻找潜在的攻击面和程序,并将其保存在单独的数据库中。
- 规划智能体首先利用 RAG 技术找到潜在攻击面的列表。
- 随后,规划智能体使用这些识别出的攻击面来确定适用于目标环境的攻击方法。
利用:
- 最后,执行智能体尝试在目标主机上执行这些攻击计划。
- 执行智能体与环境信息数据库通信,获取执行攻击所需的信息。它还通过修改代码或执行额外命令来调试任何执行错误,以收集更多信息。
- 所有执行历史记录都存储在数据库中,可用于生成全面的渗透测试报告。这种结构化和自动化的框架旨在简化渗透测试过程,提高效率并减少所需的人工操作。
3.2 侦察智能体
侦察智能体接收指定目标作为输入,并与其交互以收集详细信息,最终生成环境信息摘要作为输出。
![![[Pasted image 20250327115838.png]]](/https://i-blog.csdnimg.cn/direct/f790440744bd46ddb123d892ca3f9e41.png)
如图 2 所示,该过程始于向侦察智能体提供目标。智能体在一个自迭代循环中运行,生成侦察命令以从目标收集信息,并分析这些命令的结果,直到尽力为止。一旦侦察循环结束,智能体将汇总其发现并存储到数据库中。
侦察智能体遵循由专家知识定义的一般工作流程来执行侦察任务。它在外框架支持下,借助外部知识确定具体的程序或工具。为了实现我们期望的工作流程,我们精心设计了侦察智能体的系统消息和提示,实施以下技术以克服 §2.2 中提到的挑战:
- 角色扮演 已被证明能有效绕过 LLM 强制执行的安全策略 [10]。因此,我们要求侦察智能体扮演渗透测试助手的角色,以验证其侦察行为。
- 我们使用 思维链(CoT) 将复杂任务分解为多个子任务,并构建有效的侦察工作流程以减少幻觉现象。
- 由于侦察工作流程涉及自迭代循环,指定停止条件以避免智能体陷入无限循环非常重要。有效使用 CoT 通过指定停止前需完成的任务来强制执行停止条件。
- 检索增强生成(RAG) 允许侦察智能体从包含各种侦察工具文档的数据库中检索相关信息,使其能够使用最新的工具进行高效的信息收集。例如,它可以使用基于开源指纹数据库(如 ObserverWard [1])的 Web 应用程序指纹识别工具来辅助侦察。
- 此外,RAG 允许侦察智能体将收集到的环境信息存储在数据库中供以后使用,解决了短期记忆问题。
侦察智能体分析先前的执行结果,并在每次通信中生成下一个要执行的命令。为了确保遵守渗透测试管道并确保顺利过渡到后续步骤,我们使用结构化输出,要求侦察智能体以指定格式响应。
![![[Pasted image 20250327115851.png]]](/https://i-blog.csdnimg.cn/direct/e0eb95d9a3184d86bfef62ffa317de98.png)
侦察系统消息(简化版)
-
角色扮演
你是一位出色的网络安全渗透测试助手。引导测试人员…… -
思维链
使用 Nmap 识别暴露的端口,然后使用 Nmap 中的相关工具分析目标主机上的这些端口…… -
RAG
你应该使用查询工具了解可用的侦察工具…… -
结构化输出
你应该始终以有效的 JSON 格式响应,包含以下字段:{FORMAT SPEC.}……
在侦察智能体确定应停止侦察循环后,它会汇总侦察结果并将其存储在数据库中,使短期侦察记忆持久化。以下提示生成侦察摘要的结构化输出。指定输出结构并提供全面示例指导智能体输出相关信息并减少幻觉现象。
3.3 搜索智能体
搜索智能体接收目标服务和应用程序作为输入,并将相关攻击知识存储到数据库中作为输出。
![![[Pasted image 20250327115922.png]]](/https://i-blog.csdnimg.cn/direct/35916ecc0d804ca694dd2d4883d15079.png)
如图 3 所示,搜索智能体执行两轮分层在线搜索以获取相关信息。在第一轮中,它搜索并分析结果,提取与目标相关的潜在攻击面。在随后的轮次中,它使用已识别的潜在攻击面作为指导,搜索并分析程序级攻击知识。潜在攻击面和程序级攻击知识分别存储在两个独立的数据库中以备将来使用。
在线搜索模块是可定制和可扩展的。我们实现了多个搜索功能,包括在 Google 上的一般搜索、在 Snyk [39] 和 AVD [8] 等数据库中的漏洞特定搜索,以及在 GitHub 和 ExploitDB 等漏洞代码库中的搜索。在我们的分层搜索工作流程中,我们使用 Google 和漏洞数据库搜索在第一轮中识别潜在攻击面,然后在第二轮中使用 Google 和代码库搜索查找漏洞实现细节。
每轮在线搜索结束后,搜索智能体都会对结果进行分析。然而,直接从原始搜索结果中提取信息并存储效率较低。因此,我们利用基于 RAG 的问答技术从原始搜索结果中提取关键信息,并使用提取的知识构建一个更相关且简洁的数据库。
![![[Pasted image 20250327115947.png]]](/https://i-blog.csdnimg.cn/direct/e890ee58ff334bea8de4e039bb03d929.png)
如图 4 所示,在给定分析提示的情况下,RAG 框架首先会从搜索结果中检索相关信息片段。然后,它将分析提示与检索到的信息作为上下文发送给 LLM,作为问题,LLM 将根据上下文中的信息帮助回答分析提示中的查询,并生成一份包含我们所需关键信息的综合摘要。最后,单个文档的摘要被汇总起来,用于构建图 3 中的潜在攻击面或漏洞利用数据库。
在第一轮搜索潜在攻击面时,我们使用以下提示从单个搜索结果中提取知识。具体来说,我们要求提供相关性以及漏洞的关键信息,例如 CVE 编号,以及其他可引导至更详细信息的关键词或 URL。我们还要求搜索智能体以结构化格式输出分析结果,以便后续处理。
![![[Pasted image 20250327115957.png]]](/https://i-blog.csdnimg.cn/direct/b6b3197041e04ba48f86627f8b226413.png)
潜在攻击面分析提示(简化版)
-
RAG & 思维链(CoT)
生成文档的简要摘要以回答以下问题:- 本文档是否描述了针对特定服务或应用程序的漏洞?如果是,请提供相关服务/应用程序版本。
- 提供可用于搜索漏洞利用的信息。
-
结构化输出
你应该始终以有效的 JSON 格式响应,包含以下字段:{FORMAT SPEC.}……
例如,响应如下所示:{OUTPUT FORMAT EXAMPLE}。
在分析所有单个搜索结果后,搜索智能体会将它们汇总成结构化输出,用于后续解析和存储。
![![[Pasted image 20250327120007.png]]](/https://i-blog.csdnimg.cn/direct/562755c7448542e8afa194eb24dab5b7.png)
搜索结果汇总提示
列出所有与 {APP} 漏洞相关的 CVE 编号、URL、关键词及其适用版本。结果应以有效的 JSON 格式呈现,包含以下字段:{FORMAT SPEC.}……
类似地,在第二轮搜索程序级漏洞利用细节时,搜索智能体使用 RAG 和 CoT 分析单个搜索结果。首先,它检查代码库是否包含相关漏洞利用。然后,提取关键信息,例如适用的服务或应用程序版本,以及运行漏洞利用的前提条件。虽然第一轮分析主要依赖于 LLM 的文本摘要能力,但第二轮则依靠 LLM 的代码分析能力来确定代码是否作为漏洞利用起作用,以及执行该代码所需的依赖项。通过初步尝试,我们发现 LLM 对软件版本控制不熟悉。因此,我们添加了一段包含描述和示例的文字,以演示如何通过少量样本学习处理软件版本。我们使用以下提示提取所需信息。
![![[Pasted image 20250327120018.png]]](/https://i-blog.csdnimg.cn/direct/99b899b107a142b88e760ac6cbf0b88f.png)
漏洞利用程序分析提示(简化版)
-
RAG & CoT
生成整个代码库的简要摘要以回答以下问题:- 此代码库是否包含针对特定服务或应用程序的漏洞利用?
- 该漏洞利用的效果是什么?用一句话总结效果(例如,远程命令执行)。
- 该漏洞利用适用于哪些相关服务/应用程序版本?
-
少量样本学习
注意,应用程序版本通常格式为 x.y.z。明确声明版本,使用以下格式…… -
RAG & CoT
4) 运行此漏洞利用的要求是什么?(例如,操作系统、库依赖等) -
结构化输出
你应该始终以有效的 JSON 格式响应,包含以下字段:{FORMAT SPEC.}……
例如,响应如下所示:{OUTPUT FORMAT EXAMPLE}。
当搜索智能体提取渗透测试知识后,这些知识将以分层树状结构存储,如图 5 所示。这种分层树状结构的渗透测试知识库能够实现高效搜索和系统化的渗透测试知识管理。
3.4 规划智能体
![![[Pasted image 20250327120052.png]]](/https://i-blog.csdnimg.cn/direct/d90f89757465409282ddeab1f8a346b6.png)
规划智能体以侦察智能体检测到的服务和应用程序作为输入,并生成漏洞利用计划作为输出。如图 1 所示,规划智能体利用 RAG 和渗透测试知识库(图 5)首先生成与服务和应用程序相关的潜在攻击面列表。
![![[Pasted image 20250327120100.png]]](/https://i-blog.csdnimg.cn/direct/e6e5e6a181fa42399f2ef6a0906223ed.png)
然后,规划智能体遵循类似的过程生成漏洞利用列表。规划智能体使用服务或应用程序作为键值,找到潜在攻击面的相关数据库,并根据服务或应用程序的版本和漏洞类型从数据库中检索这些信息。规划智能体基于应用程序版本提出攻击面建议,并按漏洞类型对攻击面进行分类。我们设计了以下提示,为特定服务或应用程序生成潜在攻击面列表。
![![[Pasted image 20250327121421.png]]](/https://i-blog.csdnimg.cn/direct/dc980dfb9b4b49f1834d016af5cb4570.png)
攻击面建议提示(简化版)
列出所有按置信度排名的可利用漏洞……
结果应以有效的 JSON 格式呈现,包含以下字段:{FORMAT SPEC.}……
规划智能体使用攻击面找到漏洞利用的相关数据库,并根据服务或应用程序的版本以及漏洞利用效果(例如,远程代码执行、身份验证绕过)从数据库中检索漏洞利用细节。随后,规划智能体基于应用程序版本提出漏洞利用建议,并按漏洞利用效果对其进行分类。我们设计了以下提示,为每个潜在攻击面生成漏洞利用列表。
![![[Pasted image 20250327121427.png]]](/https://i-blog.csdnimg.cn/direct/70f0e315b6e74914b885daac9c8aaad2.png)
漏洞利用建议提示(简化版)
列出所有相关代码库路径,按包含漏洞利用的置信度排名……
结果应以有效的 JSON 格式呈现,包含以下字段:{FORMAT SPEC.}……
3.5 执行智能体
执行智能体以漏洞利用细节作为输入,尝试在目标上自动执行漏洞利用,并最终生成漏洞利用摘要作为输出。执行智能体遵循规划智能体建议的顺序。如图 6 所示,每次漏洞利用执行可分为两个阶段:准备阶段和利用阶段。
![![[Pasted image 20250327121437.png]]](/https://i-blog.csdnimg.cn/direct/c23793a90c8d4c9795708b4dbbd74cd0.png)
准备阶段
在准备阶段,执行智能体分析漏洞利用细节,以确定成功执行所需的条件,例如所需参数。然后,它查询包含环境信息的数据库以获取必要信息。以下系统消息指导执行智能体完成其任务。为了绕过可能阻止执行智能体尝试运行漏洞利用的安全机制,我们使用角色扮演使其充当网络安全渗透测试助手。为了有效找到执行漏洞利用所需的信息,我们采用思维链(CoT)技术,指导执行智能体首先识别所有参数,然后确定每个参数所需的信息。在此分析过程中,执行智能体使用 RAG 从漏洞利用细节中检索相关信息以提供上下文。最后,执行智能体以结构化 JSON 格式输出所需信息,以便进入下一步,即从环境信息数据库请求信息。
![![[Pasted image 20250327121545.png]]](/https://i-blog.csdnimg.cn/direct/e5a5f622e60645bebb0aa1c3dd859231.png)
执行准备系统消息(简化版)
-
角色扮演
你是一位出色的网络安全渗透测试助手…… -
思维链(CoT)
分析漏洞利用以回答以下问题:- 成功执行此漏洞利用需要填写哪些参数?
- 填写这些参数需要哪些信息?
-
RAG
你应该使用查询工具了解漏洞利用的详细信息…… -
结构化输出
你应该始终以有效的 JSON 格式响应,包含以下字段:{FORMAT SPEC.}……
在获得所需信息列表后,执行智能体使用以下提示查询环境信息数据库以填补信息空白。
![![[Pasted image 20250327121600.png]]](/https://i-blog.csdnimg.cn/direct/e6ca344259bc4fb9be928bf2aab6ee65.png)
执行信息查询提示(简化版)
基于已知信息,尝试提供此处列出的信息。{INFO NEEDED……}
-
思维链(CoT)
你应该逐一检查所需信息。对于每条所需信息,你应该…… -
RAG
你应该使用查询工具了解目标环境…… -
结构化输出
结果应以有效的 JSON 格式呈现,包含以下字段:{FORMAT SPEC.}……
在收到包含请求信息的响应后,执行智能体的系统消息会更新以过渡到利用阶段。
![![[Pasted image 20250327121609.png]]](/https://i-blog.csdnimg.cn/direct/15d66518c5194f9fbc48fb998ed5b473.png)
执行漏洞利用系统消息(简化版)
你的下一个任务是提供逐步指南以执行漏洞利用并调试遇到的错误……
-
RAG
你应该使用工具学习漏洞利用的代码和 README 文件,以确定如何正确执行它。 -
规范
避免需要用户交互的命令…… -
自我反思
当结果显示错误时,你应该…… -
结构化输出
你应该始终以有效的 JSON 格式响应,包含以下字段:{FORMAT SPEC.}……
利用阶段
在利用阶段,执行智能体使用 RAG 获取代码执行的详细信息,分解执行计划,并生成逐步执行指南。类似于侦察智能体,执行智能体通过迭代循环执行漏洞利用。当在漏洞利用执行过程中遇到错误时,需要进行适当的错误处理。为了指导执行智能体调试错误,我们采用了自我反思技术。执行智能体根据代码和错误消息分析并修复错误,同时记录错误历史以供将来参考,避免重复错误。这种迭代过程确保了我们的自动化渗透测试系统的持续改进和优化。
4 评估
在本节中,我们介绍了为评估自动化渗透测试框架而建立的基准,并讨论了评估结果。我们在评估中解决了以下研究问题(RQs):
- RQ1. 效果:自动完成整个渗透测试过程的成功率是多少?
- RQ2. 完成度:可以自动完成的各个渗透测试阶段的完成度如何?
- RQ3. 效率:PentestAgent 完成渗透测试任务需要多少时间和 API 成本?
4.1 评估设置
4.1.1 基准数据集
基准数据集应易于获取,并包含具有不同难度级别的多样化任务,以评估自动化渗透测试框架。可访问性对于一个好的基准至关重要;否则,它会阻碍整个社区的使用。基准中的任务应涉及针对不同服务和应用程序的各种漏洞利用,以模拟现实世界的渗透测试场景。更重要的是,这些任务应有适当的难度标签,以反映被测系统处理不同难度任务的能力,帮助研究人员识别系统的优缺点。
多个平台可以作为基准数据集,例如 HackTheBox [16]、OWASP Benchmark [32]、VulnHub [45] 和 VulHub [44]。然而,HackTheBox 对公众缺乏可访问性,需要 VIP 订阅才能访问其大部分测试机器,这为使用基准带来了负担。OWASP Benchmark 和 VulnHub 包含数千个目标测试环境,涵盖了广泛的现实世界渗透测试场景。然而,搭建这些环境进行测试需要大量的人力投入。此外,它们未提供测试用例的难度级别参考,因此需要手动确定每个测试用例的难度。
最终,我们选择了 VulHub 作为基准数据集。VulHub 提供了一个开源的、包含上百个预构建漏洞 Docker 环境的集合,这些环境在渗透测试实践中得到了广泛认可和应用。基于容器的平台支持基础设施即代码(IaC),使得测试环境的搭建变得容易。此外,Docker 容器为渗透测试提供了足够的隔离性。更重要的是,VulHub 中的大多数漏洞环境旨在重现特定的通用漏洞披露(CVE)[27]。每个漏洞环境都与一个 CVE 编号相关联,这使我们能够利用与 CVE 编号相关的指标来了解每个漏洞环境的特性。具体来说,我们通过通用漏洞评分系统(CVSS)[9] 了解漏洞利用的难度,并通过漏洞预测评分系统(EPSS)[31] 了解漏洞环境的真实性。
我们在附录 §A.1 中详细说明了如何构建基准数据集。最终,我们编制了一个包含 67 个渗透测试目标的基准,涵盖 32 个 CWE(常见弱点枚举)类别,如附录图 12 所示。在我们的基准中,有 50 个目标属于易利用难度,11 个属于中等利用难度,6 个属于高利用难度。这种多样化且真实的漏洞环境集合确保了全面的评估。
4.1.2 指标
为了回答我们的研究问题,我们设计了评估 PentestAgent 效果和效率的指标。这些指标对于评估自动化渗透测试框架的性能至关重要。
我们通过确定渗透测试的三个阶段是否成功并自动完成来衡量 PentestAgent 的效果。我们将成功的完成定义如下:给定一个目标 IP,PentestAgent 能够在漏洞环境中自动执行功能性漏洞利用。一些渗透测试可能部分成功并需要人工协助。然而,前一阶段的失败会影响后续阶段。为了更好地了解 PentestAgent 各组件的效果,我们在阶段层面衡量完成度。这涉及评估假设先前阶段已成功的情况下可以自动完成的渗透测试阶段。
各阶段的完成标准定义如下:
- 信息收集阶段:如果 PentestAgent 成功识别目标应用程序,则视为完成。
- 漏洞分析阶段:如果 PentestAgent 根据目标应用程序识别出功能性漏洞利用,则视为完成。我们手动验证发现的漏洞利用是否有效。
- 漏洞利用阶段:如果 PentestAgent 能够自动且成功地执行漏洞利用,则视为完成。
这种阶段级评估提供了对 PentestAgent 自主性和效果的细致理解,使其能够在最少的人工干预下推进渗透测试过程。
此外,我们通过完成渗透测试所需的时间和 API 成本来衡量 PentestAgent 的效率。时间指标评估 PentestAgent 完成整个渗透测试周期(从初始侦察到漏洞利用执行)所需的时间。API 成本指标量化框架在测试过程中消耗的计算资源。这些指标提供了对系统资源消耗和运行速度的洞察,这对于实际部署和可扩展性至关重要。
4.1.3 环境设置
模拟的漏洞应用程序托管在虚拟机上,该虚拟机配备 2 个 CPU 核心和 8 GB RAM,运行 Ubuntu 22.04 LTS。为了避免干扰测试过程,我们禁用了所有需要监听端口的服务,例如 SSH。攻击者机器也托管在虚拟机上,配备 16 个 CPU 核心和 16 GB RAM,运行 Kali Linux 2024.1。攻击者机器包含 Kali Linux 中的所有预装工具,未安装额外工具。受害机器和攻击者机器通过 NAT 维持网络连接。受害机器上的漏洞容器创建时将网络参数设置为受害机器的 IP,使攻击者机器可以直接访问受害机器容器中托管的漏洞环境。此设置确保攻击者能够在尝试利用漏洞时模拟现实世界的网络条件。
4.1.4 LLM 模型
我们使用 OpenAI GPT-3.5 和 GPT-4 模型,代表最先进的 LLM 技术。这些模型通过 OpenAI API 访问。具体来说,我们使用了 gpt3.5-turbo-0125 模型,其上下文窗口大小为 16,385 个 token,训练数据截止至 2021 年 9 月。该 GPT-3.5 模型的定价为 $0.50 / 1M 输入 token 和 $1.50 / 1M 输出 token。此外,我们使用了 GPT-4o 模型,其上下文窗口大小为 128,000 个 token,训练数据截止至 2023 年 10 月。该 GPT-4 模型的定价为 $5.00 / 1M 输入 token 和 $15.0 / 1M 输出 token。
我们的自动化渗透测试框架并未过度依赖 LLM 的固有能力或知识来规划和执行大多数任务。相反,我们为渗透测试过程设计了一个强大的工作流程,将 LLM 用作特定且明确定义的任务工具,例如文本摘要和代码分析。鉴于此设计,我们并未在框架中试验许多其他 LLM 模型。这种方法确保了一致性和可靠性,因为框架的性能较少依赖于不同 LLM 模型的具体优势和已学习知识。通过引入 GPT-3.5 和 GPT-4,我们旨在展示框架在使用不同能力模型时的可变性和不变性,确保其在不同 LLM 配置下均有效。在 §5.2 中,我们讨论了 PentestAgent 与各种 LLM 的兼容性。
4.2 整体框架的有效性
![![[Pasted image 20250327121735.png]]](/https://i-blog.csdnimg.cn/direct/28b544b6f8464d189d1b4c0732cbdb86.png)
我们通过 PentestAgent 完成渗透测试过程的成功率来评估其有效性。图 7 展示了不同模型在按难度级别分类的漏洞利用任务中的成功率及整体表现。GPT-4 模型在完成自动化渗透测试任务方面表现出 74.2% 的总体成功率,优于 GPT-3.5 模型的 60.6%。两种模型的一致成功率均超过 60%,这证明了 PentestAgent 在建立自动化渗透测试流程方面的有效性。尽管 GPT-4 模型的整体成功率高于 GPT-3.5,但两者的性能差异并不显著。这表明我们的框架并未过度依赖 LLM 的通用知识和能力。值得注意的是,GPT-3.5 模型在高难度渗透测试任务中表现不佳,在最难的类别中未取得任何成功。这种差异可能源于模型之间上下文窗口大小和已学习知识的固有差异,影响了它们处理复杂推理任务的能力。
4.3 渗透测试阶段的完成度
![![[Pasted image 20250327121752.png]]](/https://i-blog.csdnimg.cn/direct/b52295c577724618999dd9af7085fd99.png)
我们进一步深入研究 PentestAgent,通过分析其在各个渗透测试阶段的完成度来评估其性能。图 8 展示了不同难度类别和模型下各渗透测试阶段的完成度。使用 GPT-4 模型的 PentestAgent 在所有阶段和难度级别上表现出稳健的性能,展示了其处理复杂任务的能力。在简单任务中,GPT-4 模型在情报收集和漏洞分析阶段实现了完全完成,并在漏洞利用阶段保持了 81.8% 的高完成率。在中等难度任务中,GPT-4 在所有阶段继续保持强劲表现,尽管在漏洞分析阶段略有下降。然而,在高难度任务中,GPT-4 模型遇到了挑战,情报收集阶段的完成率降至 50%,表明在处理需要更好侦察工具和高级推理能力的复杂场景时可能存在局限性。
相比之下,GPT-3.5 模型在不同难度级别上的表现各异。在简单任务中,它表现出色,在情报收集(92%)和漏洞分析(96%)阶段取得了高完成率,但在漏洞利用阶段的完成率略低(72%)。在中等难度任务中,尽管在漏洞分析阶段保持了完美记录(100%),但在情报收集(66.7%)和漏洞利用(50%)阶段遇到了困难,表明在有效侦察和利用所需的复杂推理方面存在挑战。值得注意的是,在高难度任务中,GPT-3.5 模型表现不佳,在情报收集和漏洞利用阶段均未完成任务,突显了其在处理需要广泛上下文理解和推理的高级渗透测试任务方面的局限性。
总体而言,这些发现表明,尽管两种模型都能自动完成大量渗透测试任务,但 GPT-4 模型在更具挑战性的场景中始终优于 GPT-3.5 模型。
4.4 效率
![![[Pasted image 20250327121801.png]]](/https://i-blog.csdnimg.cn/direct/a16d35a144e84aebb2732e6ccadd1af3.png)
为了评估 PentestAgent 的效率,我们测量了执行渗透测试所需的时间和成本。图 9 提供了使用 GPT-4 和 GPT-3.5 模型进行渗透测试任务的平均时间和成本概览。在所有阶段(情报收集、漏洞分析和漏洞利用)中,GPT-4 模型平均需要 346.7 秒进行情报收集,780.9 秒进行漏洞分析,52.3 秒进行漏洞利用。所有任务的累计时间总计为 1164.7 秒,每项任务的平均成本为 $2.66。相比之下,GPT-3.5 模型的时间需求和成本较低:情报收集耗时 212.9 秒,漏洞分析耗时 698.8 秒,漏洞利用耗时 58.6 秒,总平均时间为 1009.8 秒,成本为 $1.09 每项任务。
该分析强调了效率与性能之间的权衡。虽然 GPT-4 模型在自动化渗透测试中表现出卓越的能力,但其运行成本更高。
4.5 失败分析
我们分析了评估过程中遇到的失败案例,并确定了一些具有代表性的失败场景。如图 8 所示,大多数失败发生在情报收集和漏洞利用阶段。在情报收集阶段,PentestAgent 偶尔未能以适当的粒度识别服务或应用程序。例如,我们的评估显示,PentestAgent 在检测 PHPMailer、PHPUnit 和 Ghostscript 等组件时遇到了困难。这些组件并非独立的应用程序,而是运行在 Web 服务器上的插件或组件。像 Nmap 这样的工具可以识别底层的 Web 服务器框架(如 Nginx),但无法枚举这些组件。为了解决这一限制,PentestAgent 允许集成额外的 Web 组件指纹识别工具和专门的库,以更准确地检测和分类此类 Web 组件。
在漏洞利用阶段的失败原因。
在漏洞利用阶段,PentestAgent 可能因以下挑战而遭遇失败:需要额外知识、需要用户交互或出现 LLM 幻觉。
需要额外知识:某些漏洞利用需要超出 LLM 智能体能力范围的特定领域知识。例如,利用 Samba 服务器 4.6.3(CVE-2017-7494)的前提是攻击者具备凭据(用户名和密码)以建立 SMB 连接。此外,利用 JBoss(CVE-2017-12149)需要使用 “ysoserial” 工具的专业知识来制作针对不安全 Java 对象反序列化的有效载荷。这些限制可以通过引入人类参与的设计来克服,其中人类专家可以提供所需的额外知识或上下文。得益于 PentestAgent 的模块化结构及其任务分解流程,人类专家可以轻松地在测试过程的任何环节介入,协助完成复杂任务。
需要用户交互:一些漏洞利用需要通常由人工手动完成的交互,例如通过 Web 用户界面上传文件。例如,利用 elFinder(CVE-2021-32682),一种用于 Web 环境的开源文件管理器,涉及手动创建并上传归档文件。与前一场景中的缓解方法类似,PentestAgent 允许人类用户在渗透测试的任何阶段介入,协助需要用户交互的任务。此外,AutoGPT [3] 等智能代理的最新进展通过模拟人类操作为复杂任务提供了一种有前景的解决方案。通过集成此类智能代理,PentestAgent 可以自动化这些用户交互,显著增强其处理传统上由人类测试人员执行的任务的能力。
LLM 幻觉:另一个挑战是 LLM 幻觉,即模型生成错误或误导性信息。这一问题在漏洞利用阶段尤为棘手,因为一次幻觉可能导致后续步骤中的一连串错误。例如,如果执行智能体未能生成正确的命令或输入参数,它可能会错误地认为漏洞利用存在缺陷,从而进入一条永远不会成功的错误调试路径。我们采用了多种策略来缓解幻觉问题。首先,通过将模型的温度设置为零来减少 LLM 输出的随机性,并尝试多次执行漏洞利用。我们还实施了多个停止条件,以防止幻觉带来的意外后果,例如陷入无限循环或执行非预期操作。这些停止条件包括对执行尝试次数的硬编码限制,以及基于提示的条件,如“当再次看到相同错误时停止”。此外,攻击知识库通常包含针对同一漏洞的多个漏洞利用方案,使 PentestAgent 能够尝试不同的方法,直到找到功能性漏洞利用。
4.6 与 PentestGPT 的比较
我们对 PentestAgent 和 PentestGPT 的效果和效率进行了比较。与 PentestAgent 不同,PentestGPT 在整个渗透测试过程中需要人类参与反馈和决策。因此,我们通过案例研究比较它们的性能。为了进行公平评估,我们随机选择了五个漏洞,其中包括两个简单漏洞、两个中等难度漏洞和一个高难度漏洞。我们招募了一名具有有限渗透测试经验的本科生作为 PentestGPT 所需的人类组件。该学生遵循 PentestGPT 的指导,未使用外部知识进行决策或任务完成。在此测试条件下,PentestGPT 未能完全利用这五个漏洞中的任何一个。相比之下,PentestAgent 成功完成了其中三个漏洞的利用。
为进一步比较,我们检查了 PentestGPT 在各个渗透测试阶段的表现。PentestGPT 仅在五个案例中的一个正确识别了目标应用程序,而 PentestAgent 在五个案例中的四个正确识别了目标应用程序。在信息收集阶段,PentestGPT 平均耗时 826.25 秒,并需要测试人员与系统之间进行 7.4 轮交互。相比之下,PentestAgent 平均在不到 400 秒内完成了信息收集,且无需人类测试人员的交互。在获得正确的目标应用程序信息后,PentestGPT 仅成功指导了一个漏洞的利用。另一方面,PentestAgent 在目标应用程序被识别后自动利用了四个漏洞,包括高难度漏洞。这些结果表明,PentestAgent 在效果和效率方面显著优于 PentestGPT,能够在无需人类协助的情况下自主完成渗透测试任务。
5 讨论
5.1 基准覆盖率
我们的评估使用了一个包含已知漏洞的基准数据集,这引发了关于其在现实场景中实用性的疑问。首先,必须认识到已知漏洞仍然构成重大风险。许多组织和机构在及时修补实践方面面临困难,导致易受攻击和过时组件成为 OWASP Top 10 Web 应用程序安全风险中的第六大威胁 [33]。此外,尽管我们的基准数据集包含已知漏洞,但我们根据漏洞的 Exploit Prediction Scoring System(EPSS)评分选择了环境。这些评分反映了漏洞在现实场景中被利用的可能性。数据集的平均 EPSS 评分为 79.58,中位数为 97.19,表明所代表的漏洞极有可能在实际环境中存在并可被利用。
此外,寻找包含零日漏洞甚至一日漏洞的开放数据集仍然具有挑战性。通过专注于具有高 EPSS 评分的已知漏洞,我们的评估确保 PentestAgent 在现实且可信的背景下运行,评估其在应对对网络安全构成真正威胁的漏洞方面的有效性。
5.2 与其他 LLM 的兼容性
鉴于数据隐私问题,PentestAgent 被设计为兼容多种大型语言模型(LLMs)。除了 OpenAI 的预训练商业模型外,我们还试验了 Mistral 和 Llama 3 等开源 LLM。实验表明,PentestAgent 能够有效地与最先进的开源模型配合使用,尽管系统的效率可能因具体模型的响应时间而异。正如我们在 §4.5 中讨论的,PentestAgent 的失败案例很少由 LLM 的能力引起。因此,我们认为 PentestAgent 的整体有效性不太可能因 LLM 的选择而受到显著影响。
6 结论
本文介绍了 PentestAgent,这是一种基于 LLM 的新型自动化渗透测试框架,旨在解决现有框架的局限性:渗透测试知识有限和自动化不足。通过利用多智能体架构并结合检索增强生成(RAG)等各种 LLM 技术,PentestAgent 通过改进知识整合和自动化增强了渗透测试过程。我们的综合基准基于 VulHub 的漏洞 Docker 环境,为 PentestAgent 提供了全面的测试平台。评估结果表明,PentestAgent 在任务完成度和整体效率方面表现出色。
A 附录
A.1 基准构建
我们使用 CVSS 和 EPSS 分数来确定漏洞利用的难度。CVSS 提供了一个反映漏洞特性的数值评分。由于 VulHub 上的大多数 CVE 采用 CVSS 3.x 指标,我们以此为参考分配难度级别。该数值评分由两部分组成:可利用性和影响。出于渗透测试的目的,我们以可利用性指标为参考分配难度级别。可利用性分数反映了漏洞被利用的难易程度和技术手段 [30]。较高的可利用性分数表明该漏洞更容易被利用。我们研究了可利用性分数的分布情况,如图 10 所示。
![![[Pasted image 20250327121933.png]]](/https://i-blog.csdnimg.cn/direct/76e125060f6446b9b7f47d78cb6fbe62.png)
我们发现大多数可利用性分数高于 3.0,而 2.0 和 3.0 的分数自然成为划分简单、中等和高难度的标准。
某些易受攻击的应用程序或服务具有多个 CVE 编号。我们根据 EPSS 分数选择要使用的 CVE。EPSS 分数衡量漏洞在现实中被利用的可能性。较高的 EPSS 分数表明该漏洞更有可能被利用,从而使其更符合渗透任务的现实性。
![![[Pasted image 20250327121943.png]]](/https://i-blog.csdnimg.cn/direct/1e64e8e0d9584050bc867bda4db316dc.png)
图 11 显示了基准数据集中 CVE 的 EPSS 分数分布。此外,我们移除了未关联 CVE 编号且没有 CVSS 3.x 分数的 Docker 镜像。同时,由于某些漏洞应用程序的设置过程复杂(例如需要从服务提供商处获取许可证密钥),这些应用程序也被从数据集中移除。
为了在评估中保持完整性和公平性,我们严格禁止 PentestAgent 直接访问 VulHub 存储库中的任何内容,从而防止测试方法中出现任何优势或偏差。
![![[Pasted image 20250327122029.png]]](/https://i-blog.csdnimg.cn/direct/aa8bb68818ae440186eb06b38da3b28f.png)
![![[Pasted image 20250327122038.png]]](/https://i-blog.csdnimg.cn/direct/fbf52e7b11eb4dbca24ac7dc74f6cec2.png)
图 13 显示了我们基准测试数据集的难度评级分布。

6422

被折叠的 条评论
为什么被折叠?



