翻译:PENTESTGPT: Evaluating and Harnessing Large Language Models for Automated Penetration Testing
PENTESTGPT:评估与利用大型语言模型进行自动化渗透测试
PENTESTGPT: Evaluating and Harnessing Large Language Models for Automated Penetration Testing
![![[Pasted image 20250327123007.png]]](https://i-blog.csdnimg.cn/direct/93ce2df6474f418c9f3be6fa22cc4ae6.png)
摘要
渗透测试是确保系统安全的关键工业实践,由于其对人类专家的广泛专业知识的依赖,传统上难以实现自动化。大型语言模型(LLMs)在各个领域展现了显著的进步,其涌现的能力表明它们有潜力彻底改变多个行业。在这项工作中,我们基于真实的渗透测试目标建立了一个全面的基准,并进一步利用该基准探索了LLMs在此领域的潜力。我们的研究发现,尽管LLMs在渗透测试过程中的某些子任务中表现出熟练度,例如使用测试工具、解释输出结果以及提出后续操作,但它们在保持整体测试场景的上下文方面仍存在困难。
基于这些见解,我们提出了PENTESTGPT,这是一种由LLM驱动的自动化渗透测试框架,利用LLMs中蕴含的丰富领域知识。PENTESTGPT精心设计了三个自我交互模块,每个模块处理渗透测试的不同子任务,以缓解与上下文丢失相关的挑战。我们的评估显示,PENTESTGPT不仅在基准目标上的任务完成率比GPT-3.5模型提高了228.6%,而且在应对真实世界的渗透测试目标和CTF挑战时也证明了其有效性。自开源发布在GitHub以来,PENTESTGPT在9个月内获得了超过6,200颗星,并促进了活跃的社区参与,充分证明了其在学术界和工业界的巨大价值与影响。
https://github.com/GreyDGL/PentestGPT
1 引言
确保系统的安全性是一项艰巨的挑战。诸如渗透测试(pen-testing)和红队演练等进攻性安全方法如今已成为安全生命周期中的重要组成部分。正如Applebaum [1] 所解释的那样,这些方法涉及安全团队尝试进行攻击以揭示漏洞,相较于依赖于不完整系统知识和建模的传统防御手段具备明显优势。本研究遵循“最好的防御是良好的进攻”这一原则,专注于进攻性策略,特别是渗透测试。
渗透测试是一种主动进攻技术,用于识别、评估和缓解安全漏洞 [2]。它通过有针对性的攻击来确认缺陷,生成一份全面的漏洞清单,并提供可操作的建议。这种广泛采用的做法使组织能够在恶意利用之前检测并消除网络和系统漏洞。然而,该过程通常依赖于手动操作和专业知识 [3],导致其成为一个劳动密集型的过程,难以满足日益增长的高效安全评估需求。
大型语言模型(LLMs)展现了深刻的能力,在处理类人文本方面表现出复杂理解能力,并在众多任务中取得了显著成果 [4, 5]。LLMs 的一项突出特点是它们的涌现能力 [6],这些能力在训练过程中培养而成,使其无需针对特定任务进行微调即可完成复杂的任务,例如推理、总结和领域特定问题解决。这种多功能性使LLMs成为多个领域的潜在变革者,尤其是在网络安全领域。
尽管最近的研究 [7–9] 提出LLMs有可能重塑网络安全实践,包括渗透测试的背景,但目前尚缺乏对其在此方面的能力进行系统性和定量评估的研究。因此,一个紧迫的问题浮现:LLMs能在多大程度上实现渗透测试的自动化?受此问题驱动,我们着手探索LLMs在真实世界渗透测试任务中的能力边界。
遗憾的是,当前的渗透测试基准 [10, 11] 并不全面,无法公平地评估逐步进展的过程。为了解决这一局限性,我们构建了一个强大的基准,其中包括来自 HackTheBox [12] 和 VulnHub [13] 的测试机器——这两个平台是领先的渗透测试挑战平台。该基准包含13个目标,涵盖182个子任务,涵盖了OWASP的十大漏洞列表 [14] 中的所有漏洞以及18个常见弱点枚举(CWE)条目 [15]。该基准通过对每个子任务的完成状态进行监控,从而对测试人员的表现提供更为详细的评估。
基于此基准,我们使用GPT-3.5 [16]、GPT-4 [17] 和 Bard [18] 作为代表性的LLMs进行了探索性研究。我们的测试策略是交互式且迭代的。我们设计了定制化的提示词(prompts),引导LLMs完成渗透测试。每次LLM根据提示词和目标机器信息生成逐步的渗透测试操作。随后,我们在受控环境中执行所建议的操作,记录结果,并将反馈提供给LLM以指导和优化其下一步操作。这一循环(提示、执行和反馈)不断重复,直到LLM能够独立完成整个渗透测试过程为止。
为了评估LLMs,我们将它们的结果与官方攻略和认证渗透测试专家提供的基线解决方案进行比较。通过分析它们解决问题的方法之间的相似点和差异,我们旨在更好地理解LLMs在渗透测试中的能力及其策略与人类专家的不同之处。
我们的调查揭示了LLMs在渗透测试中的能力和局限性。我们发现,LLMs在处理测试过程中的某些特定子任务时表现出熟练度,例如使用测试工具、解释其输出结果以及提出后续操作。与人类专家相比,LLMs在执行复杂命令和测试工具选项方面尤为擅长,而像 GPT-4 这样的模型在理解源代码和定位漏洞方面表现优异。此外,LLMs能够编写适当的测试命令,并准确描述特定任务所需的图形用户界面操作。凭借其庞大的知识库,它们还能设计创新的测试流程,以揭示现实系统和CTF挑战中的潜在漏洞。
然而,我们也注意到,LLMs在保持对整体测试场景的连贯把握方面存在困难,这是实现测试目标的关键所在。随着对话的推进,它们可能会遗忘先前的发现,并在朝着最终目标的一致推理中遇到障碍。此外,LLMs过于强调对话历史中的近期任务,而不管这些任务的漏洞状态如何。这导致它们往往忽视此前测试中暴露的其他潜在攻击面,从而无法完成渗透测试任务。
基于我们对LLMs在渗透测试中能力的洞察,我们提出了 PENTESTGPT1,这是一个交互式系统,旨在增强LLMs在此领域的应用。PENTESTGPT 的设计灵感来源于现实世界中人类渗透测试团队常见的协作动态,特别适合管理大型且复杂的项目。它采用三模块架构,包括推理模块、生成模块和解析模块,每个模块分别反映了渗透测试团队中的不同角色。
推理模块模拟首席测试员的功能,专注于维持对渗透测试状态的高层次概览。我们引入了一种新的表示形式——渗透测试任务树(Pentesting Task Tree, PTT),基于网络安全攻击树 [19]。该结构编码了测试过程的当前状态,并指导后续行动。独特之处在于,这种表示可以被转化为自然语言并由LLM解释,从而被生成模块理解并指导测试流程。
生成模块则类似于初级测试员的角色,负责为特定子任务构建详细的操作流程。将其转化为精确的测试操作增强了生成过程的准确性。同时,解析模块负责处理渗透测试过程中遇到的各种文本数据,如工具输出、源代码和HTTP网页。它对这些文本进行浓缩和提炼,提取关键信息。
总体而言,这些模块作为一个集成系统协同工作。PENTESTGPT通过将高层策略与精确执行和智能数据解释相结合,完成了复杂的渗透测试任务,从而维持了连贯且有效的测试过程。
我们在多种测试场景中对PENTESTGPT进行了评估,以验证其有效性和广泛适用性。在我们的自定义基准中,PENTESTGPT的表现显著优于直接应用的GPT-3.5和GPT-4,分别实现了228.6%和58.6%的子任务完成率提升。此外,当应用于现实世界的挑战时,例如HackTheBox活跃机器渗透测试 [20] 和picoMini [21] CTF竞赛,PENTESTGPT展示了其实用性。它成功解决了10个渗透测试挑战中的4个,OpenAI API使用的总成本为131.5美元。在CTF竞赛中,PENTESTGPT获得了4200分中的1500分,在248支参赛队伍中排名第24位。这一评估突显了PENTESTGPT在提高渗透测试任务效率和精度方面的实际价值。
该解决方案已在GitHub上公开发布,截至撰写本文时已获得超过6,200颗星,活跃的社区参与以及与多个工业合作伙伴的持续合作。
作为长期研究目标,我们旨在释放现代机器学习方法的潜力,并开发一个全自动化的渗透测试框架,以帮助生成网络安全认知引擎。![![[Pasted image 20250327123538.png]]](https://i-blog.csdnimg.cn/direct/a53b71b674c6421f96e849cb634cc05f.png)
我们的整体架构如图1所示,展示了当前的工作以及未来的规划贡献。我们提出的框架MALISM旨在使不具备深入安全领域知识的用户能够生成其网络安全认知引擎,从而在广泛的测试目标上执行渗透测试。该框架由三个主要组件组成:
- EXPLOITFLOW [22]:一个模块化库,用于生成网络安全利用路径(exploit flows)。EXPLOITFLOW的目标是将来自不同来源和框架的漏洞利用组合起来,在每个离散操作后捕获被测试系统的状态,从而生成影响特定系统的攻击树。EXPLOITFLOW的主要动机是促进和支持博弈论与人工智能(AI)在网络安全领域的研究。它独特地表示了漏洞利用过程中的每个方面,这种表示可以有效地与各种渗透测试工具和脚本集成,例如Metasploit [23],以执行端到端的渗透测试。此外,这种表示还可以进一步可视化,为人类专家提供指导以重现测试过程。
- PENTESTGPT(本文):一种自动化的渗透测试系统,利用大型语言模型(LLMs)的能力,为每个给定的离散状态生成测试指导和直觉。它作为MALISM框架的核心组件,引导LLMs高效地利用其在真实世界测试场景中的领域知识。
- PENTESTPERF:一个全面的渗透测试基准,用于评估渗透测试人员和自动化工具在广泛测试目标上的表现。它提供了一个公平且稳健的性能比较平台。
这三个组件的和谐集成形成了一个自动化、自我演进的渗透测试框架——MALISM,能够对各种目标执行渗透测试。这一框架旨在开发全自动化的渗透测试工具(即我们所称的网络安全认知引擎),通过大幅减少对领域专业知识的需求,彻底改变渗透测试领域,并实现更全面且可靠的测试。
总结
我们做出了以下贡献:
- 开发了一个全面的渗透测试基准。我们构建了一个强大且具有代表性的渗透测试基准,涵盖了HackTheBox和VulnHub等领先平台上的众多测试机器。该基准包含182个子任务,覆盖OWASP的十大漏洞,提供了公平且全面的渗透测试评估。据我们所知,这是该领域首个能够提供逐步进展评估和比较的基准。
- 对LLMs在渗透测试任务中的能力进行全面评估。通过使用GPT-3.5、GPT-4和Bard等模型,我们的探索性研究严格调查了LLMs在渗透测试中的优势和局限性。据我们所知,这是针对LLMs在自动化渗透测试中能力的首个系统性和定量研究。从这项研究中获得的见解为我们理解LLMs在此专业领域的适用性提供了宝贵的参考。
- 开发了一种创新的基于LLM的渗透测试系统。我们设计了PENTESTGPT,这是一种新颖的交互式系统,利用LLMs的优势自动执行渗透测试任务。PENTESTGPT借鉴了现实世界中人类渗透测试团队的协作动态,采用三模块设计,模拟了高级测试员与初级测试员之间的协作关系。此架构优化了LLMs的使用,显著提高了自动化渗透测试的效率和效果。我们已将PENTESTGPT开源,截至目前,它已在GitHub上获得了超过6,500颗星,吸引了活跃的社区贡献,并与AWS、华为和字节跳动等行业伙伴展开了合作。
2 背景与相关工作
2.1 渗透测试
渗透测试(或“pentesting”)是增强组织系统安全性的一项关键实践。在典型的渗透测试中,安全专家(称为渗透测试人员)会分析目标系统,通常借助自动化工具完成任务。标准流程分为五个关键阶段 [24]:侦察(Reconnaissance)、扫描(Scanning)、漏洞评估(Vulnerability Assessment)、利用(Exploitation)和后利用(Post Exploitation,包括报告)。这些阶段使测试人员能够了解目标系统、识别漏洞并加以利用以获取访问权限。
尽管已有显著进展 [11, 25, 26],但完全自动化的渗透测试系统仍然遥不可及。这一差距源于对深度漏洞理解以及战略行动计划的需求。通常,测试人员结合深度优先搜索和广度优先搜索技术 [24]。他们首先掌握目标环境的范围,然后深入研究特定漏洞。这种方法确保了全面的分析,依赖于专业知识和经验。此外,众多专用工具进一步增加了自动化的复杂性。因此,即使借助人工智能,实现无缝的自动化渗透测试解决方案仍是一项艰巨的任务。
2.2 大型语言模型
大型语言模型(LLMs),包括OpenAI的GPT-3.5和GPT-4,是应用广泛的工具,其用途扩展到各种网络安全相关领域,例如代码分析 [27] 和漏洞修复 [28]。这些模型具备广泛的一般知识和基本推理能力,能够理解、推断并生成类似于人类交流的文本,这得益于涵盖计算机科学和网络安全等多样化领域的训练语料库。它们解读上下文和识别模式的能力使其能够将知识适应到新场景中。这种适应性,加上它们以类人方式与系统交互的熟练程度,使其成为增强渗透测试过程的宝贵资产。尽管存在固有限制,LLMs提供了显著的特性,可以大大助力渗透测试任务的自动化和改进。然而,要实现这一潜力,需要创建和应用专门且严格的基准。
3 渗透测试基准
3.1 动机
对LLMs在渗透测试中的全面评估需要一个强大且具有代表性的基准。现有基准 [10, 11] 存在若干局限性。首先,它们通常范围狭窄,仅关注一小部分潜在漏洞,因此无法捕捉现实网络威胁的复杂性和多样性。例如,OWASP juiceshop项目 [29] 是最广泛采用的Web漏洞评估基准,但它未包含权限提升漏洞,而这是渗透测试的一个重要方面。其次,现有基准可能无法认可渗透测试不同阶段累积进展的价值,因为它们往往只评估最终利用的成功与否。这种方法忽视了每个步骤对整体过程的细微贡献,导致指标可能无法准确反映实际表现。
为解决这些问题,我们提出构建一个全面的渗透测试基准,满足以下标准:
- 任务多样性:基准必须涵盖多种任务,反映不同的操作系统,并模拟现实世界渗透测试中遇到的多样化场景。
- 挑战级别:为确保广泛适用性,基准必须包含适合挑战新手和专家测试人员的不同难度任务。
- 进展跟踪:除了简单的成功或失败指标外,基准还必须支持增量进展的跟踪,从而认可并评分渗透测试过程中每个阶段的价值。
3.2 基准设计
根据上述标准,我们开发了一个全面的基准,紧密反映现实世界的渗透测试任务。设计过程分为几个阶段:
任务选择
我们从HackTheBox [12] 和 VulnHub [13] 中选择任务,这两个平台是领先的渗透测试培训平台。我们的选择标准旨在确保基准准确反映实际渗透测试环境中遇到的挑战。我们仔细审查了两个平台上最新的机器,力求识别并选择一个子集,全面涵盖OWASP [14] Top 10项目中列出的所有漏洞。此外,我们选择了代表不同难度级别的机器,按照渗透测试领域的传统标准分为简单、中等和困难类别。这一过程确保了我们的基准覆盖了所有漏洞和难度级别的完整范围。需要注意的是,我们的基准不包括用于评估误报的良性目标,因为在渗透测试中有时会探索良性目标,但我们的主要目标仍然是识别真正的漏洞。
任务分解
我们进一步将每个目标的测试过程解析为一系列子任务,遵循渗透测试中通常称为“walkthrough”的标准解决方案。每个子任务对应整体过程中的一个独特步骤。我们按照NIST 800-115 [30]《技术安全测试指南》分解子任务。每个子任务是指南中声明的一个步骤(例如,网络发现、密码破解),或是利用常见弱点枚举(CWE)[15] 中分类的独特漏洞的操作(例如,利用SQL注入 CWE-89 [31])。最终,我们为每个基准目标制定了详尽的子任务列表。附录表7提供了分解后的子任务完整列表。
基准验证
基准开发的最后阶段涉及严格的验证,以确保这些基准机器的可重复性。为此,三名认证渗透测试人员独立尝试渗透测试目标并撰写他们的“walkthrough”。然后,我们根据结果调整任务分解,因为某些目标可能存在多个有效解决方案。最终,我们编译了一个基准,有效涵盖了OWASP [14] Top 10项目中列出的所有类型漏洞。它包含13个渗透测试目标,每个目标具有不同的难度级别。这些目标被分解为26个类别中的182个子任务,涵盖18个独特的CWE条目。这一数量的目标被认为足以代表渗透测试培训所需的广泛漏洞、难度级别和多样性。有关包含类别的详细信息,请参阅附录第7节。
为了促进社区发展,我们已将此基准公开发布在我们的匿名项目网站 [32] 上。
4 探索性研究
我们进行了一项探索性研究,以评估大型语言模型(LLMs)在渗透测试中的能力,主要目标是确定LLMs在应对现实世界复杂性和挑战方面的表现。具体而言,我们旨在解决以下两个研究问题:
- RQ1(能力):LLMs在多大程度上能够执行渗透测试任务?
- RQ2(比较分析):人类渗透测试人员与LLMs的问题解决策略有何不同?
我们使用第3节中描述的基准来评估LLMs在渗透测试任务中的表现。接下来,我们首先概述本研究的测试策略,随后展示测试结果并进行分析讨论,以回答上述研究问题。
4.1 测试策略
LLMs基于文本操作,无法独立执行渗透测试操作。为了解决这一问题,我们开发了一种“人在回路”(human-in-the-loop)的测试策略,作为准确评估LLMs能力的中介方法。该策略包含一个交互循环,其中人类专家负责执行LLM生成的渗透测试指令。重要的是,人类专家仅作为执行者,严格遵循LLM的指示,不添加任何专业知识或做出独立决策。![![[Pasted image 20250327123645.png]]](https://i-blog.csdnimg.cn/direct/d6898d0fbd1c4c3ca767742eb21a9e41.png)
图2展示了该测试策略的具体步骤如下:
- 我们通过向LLM提供目标系统的详细信息启动循环测试程序,寻求其对潜在渗透测试步骤的指导。
- 人类专家严格按照LLM的建议,在渗透测试环境中执行所建议的操作。
- 测试操作的结果被收集并总结:直接文本输出(如终端输出或源代码)被记录;非文本结果(如图形表示)由人类专家转化为简洁的文本摘要。然后将这些数据反馈给LLM,为其后续建议奠定基础。
- 这一迭代过程持续进行,直到找到最终解决方案或陷入僵局为止。随后,我们编译了一份测试程序记录,包括成功的子任务、无效操作以及失败原因(如适用)。
为了更直观地理解这一策略,我们在附录A部分提供了GPT-4针对其中一个基准目标的提示词和相应输出的示例。
为确保评估的公平性和准确性,我们采用了多种策略。首先,我们邀请了专家级渗透测试人员作为人类测试员。凭借其深厚的渗透测试知识,这些测试员能够准确理解和执行LLM生成的操作,从而精确评估LLMs的真实能力。其次,我们要求渗透测试人员严格执行LLM提供的命令,不更改任何内容或信息,即使发现明显错误也不做修改。他们还被要求忠实地将测试结果反馈给LLM,不做任何额外评论。第三,对于基于用户界面(UI)的操作和图形化结果,我们采取了特定措施。最初,我们指示LLMs尽量减少使用基于图形用户界面(GUI)的工具。对于不可避免的工具(如BurpSuite),我们采用结果导向的方法:当收到GUI操作指令时,测试人员首先根据其专业知识执行操作,随后需提供详细的分步文本描述,说明每一步的操作及其观察到的响应,并将这些信息反馈给LLM。如果LLM对某个步骤提出异议或评论,则重新执行该操作。此协议确保了反馈循环的完整性,保证LLM能够全面理解测试结果。
4.2 评估设置
我们继续使用上述策略评估各种LLMs在渗透测试任务中的表现。
模型选择
我们的研究聚焦于三种目前可访问的前沿LLMs:OpenAI的GPT-3.5(8k token限制)、GPT-4(32k token限制)以及Google的LaMDA [33]。这些模型的选择基于其在研究社区中的突出地位和持续可用性。为了与上述LLMs交互,我们利用了OpenAI和Google提供的聊天机器人服务,即ChatGPT [34] 和 Bard [18]。在本文中,术语GPT-3.5、GPT-4和Bard将代表这三种LLMs。
实验设置
我们的实验在本地环境中进行,目标机器和测试机器位于同一私有网络中。测试机器运行Kali Linux [35] 版本2023.1。
工具使用
我们的研究旨在评估LLMs在渗透测试中的内在能力,而不依赖于端到端的自动化漏洞扫描工具(如Nexus [36] 和 OpenVAS [37])。因此,我们明确指示LLMs避免使用这些工具。我们遵循LLMs的建议,使用其他工具验证特定类型的漏洞(例如,sqlmap [38] 用于SQL注入)。偶尔,版本差异可能导致LLMs提供错误的工具使用指令。在这种情况下,我们的渗透测试专家会评估这些指令是否适用于工具的早期版本,并进行必要的调整以确保工具的正确操作。
4.3 能力评估(RQ1)
![![[Pasted image 20250327123732.png]]](https://i-blog.csdnimg.cn/direct/9bbd17c4323f4b8aad55ba1dede40030.png)
为回答RQ1,我们评估了三种领先LLMs的表现:GPT-4、Bard和GPT-3.5。我们将这些发现总结在表1中。每个LLM至少成功完成了一次端到端的渗透测试,突显了它们在较简单环境中的多功能性。其中,GPT-4表现最佳,在4个简单目标和1个中等难度目标上取得成功。Bard和GPT-3.5分别在2个和1个简单目标上取得成功。在子任务方面,GPT-4完成了简单目标中的55/77个子任务,中等难度目标中的30/71个子任务。Bard和GPT-3.5也展现出潜力,分别完成了中等难度子任务的16个(22.54%)和13个(18.31%)。然而,在困难目标上,所有模型的表现均有所下降。尽管它们能够启动侦察阶段,但在利用已识别漏洞方面遇到困难。这是意料之中的,因为困难目标专门设计得极具挑战性,通常包含看似脆弱但实际上不可利用的服务,称为“兔子洞”[39]。这些机器的利用路径独特且难以预测,难以通过自动化工具复制。例如,目标Falafel具有专门针对sqlmap的SQL注入漏洞。当前的LLMs在没有人类专家输入的情况下无法应对这些挑战。
发现1:大型语言模型(LLMs)在执行端到端渗透测试任务方面表现出熟练度,但在克服更困难目标带来的挑战时仍然存在局限性。
我们进一步检查了三个LLMs在子任务完成情况上的表现,并将其与标准解决方案(WT)进行了对比,如表2所示。![![[Pasted image 20250327123749.png]]](https://i-blog.csdnimg.cn/direct/c2de86f3c6324f7894dd991ba64ca064.png)
通过分析完成状态,我们发现了LLMs在多个领域表现出色。首先,它们能够熟练使用常见的渗透测试工具并解释相应的输出,特别是在枚举任务中表现出色。例如,所有三个评估的LLMs成功完成了九个端口扫描子任务。它们能够配置广泛使用的端口扫描工具nmap [40],理解扫描结果,并制定后续行动。其次,LLMs展现了对常见漏洞类型的深刻理解,将这些漏洞与目标系统上的服务联系起来。这种理解通过成功完成与各种漏洞类型相关的子任务得以体现。最后,LLMs在代码分析和生成方面表现出高效性,特别是在代码分析和Shell构建任务中。这些任务要求模型读取和生成不同编程语言的代码,通常最终能够从代码片段中识别潜在漏洞并构建相应的利用代码。值得注意的是,GPT-4在代码解释和生成方面优于其他两个模型,使其成为最适合渗透测试任务的候选者。
发现2:LLMs能够高效使用渗透测试工具、识别常见漏洞,并通过解读源代码识别漏洞。
4.4 比较分析(RQ2)
为回答RQ2,我们研究了LLMs所采用的问题解决策略,并将其与人类渗透测试人员的策略进行对比。在每次渗透测试试验中,我们重点关注两个主要方面:(1) 识别LLMs提示的不必要操作,这些操作与标准解决方案(walkthrough)相比,无助于成功的渗透测试;(2) 理解阻止LLMs成功执行渗透测试的具体因素。
我们通过将记录的测试过程分解为子任务来分析LLMs提示的不必要操作,并采用与第3节相同的方法制定基准子任务。通过与标准解决方案对比,我们识别出那些超出标准范围且与渗透测试过程无关的主要子任务试验。结果总结在表3中。![![[Pasted image 20250327123809.png]]](https://i-blog.csdnimg.cn/direct/d9ca8182a0a344fc8c3615fe53f4f2ac.png)
我们发现,LLMs提示的最常见的不必要操作是暴力破解。对于所有需要密码验证的服务,LLMs通常建议暴力破解。这是一种在渗透测试中低效的策略。我们推测,许多企业中的黑客事件涉及密码破解和暴力破解。LLMs从事故报告中学习到这些内容,因此将其视为可行的解决方案。除了暴力破解外,LLMs还建议测试人员研究CVE漏洞、SQL注入和命令注入。这些建议很常见,因为现实世界的渗透测试人员通常优先使用这些技术,尽管它们并不总是提供确切的解决方案。![![[Pasted image 20250327123918.png]]](https://i-blog.csdnimg.cn/direct/b0ef0ce2086543cdb71ade679aeaaeb0.png)
为了理解渗透测试试验失败的原因,我们将195次试验的失败原因分类,如表4所示。主要失败原因是会话上下文丢失。这意味着模型经常忘记之前的测试结果,遗漏了重要的历史信息。这一问题源于LLMs处理对话上下文的挑战。每个LLM都有固定的token窗口限制,例如GPT-4的容量为8,000个token [41]。如果复杂任务的关键信息超出了这一限制,修剪会导致重要细节的丢失。这在复杂的测试中尤其成问题,因为在跨服务识别漏洞并形成连贯的利用策略至关重要时,这种设计缺陷会影响模型处理分层、详细任务的效率。
发现3:LLMs难以维持长期记忆,而这是有效链接漏洞和发展利用策略的关键。
其次,LLMs强烈倾向于最近的任务,严格遵循深度优先搜索方法。它们倾向于深入解决最近对话中提到的问题,很少在当前路径彻底探索之前转向新的目标。这种行为与研究[42, 43]一致,即LLMs主要将注意力集中在提示的开头和结尾。相比之下,经验丰富的渗透测试人员采用更全面的方法,战略性地规划具有最高潜在回报的操作。当结合上述会话上下文丢失问题时,这种倾向使LLMs过度专注于某一特定服务。随着测试的推进,模型常常忽略先前的发现,从而陷入僵局。
发现4:LLMs对最近任务的高度偏好和深度优先搜索方法常常导致过度关注某一服务并遗忘之前的发现。
最后,LLMs存在结果生成不准确和幻觉问题,正如文献[44]所指出的那样。这种现象是失败的第二大常见原因,其特征是生成错误的命令。在我们的研究中,我们观察到LLMs经常能够识别适合任务的工具,但在配置工具正确设置时遇到困难。在某些情况下,它们甚至编造不存在的测试工具或工具模块。
发现5:LLMs可能生成不准确的操作或命令,这通常源于固有的不准确性与幻觉问题。
我们对三种LLMs在渗透测试中的探索性研究突显了它们完成子任务的能力。然而,它们在长期记忆保留、依赖深度优先策略以及确保操作准确性方面存在问题。在下一节中,我们将详细介绍缓解这些问题的方法,并描述基于LLM的渗透测试工具的设计。
5 方法论
5.1 概述
![![[Pasted image 20250327123935.png]]](https://i-blog.csdnimg.cn/direct/70242df8cfc84c39bcf7f878bb17f37e.png)
鉴于上一节中确定的挑战,我们提出了我们的解决方案——PENTESTGPT,它利用三个基于LLM模块的协同作用。
如图3所示,PENTESTGPT包含三个核心模块:推理模块、生成模块和解析模块。每个模块保留一个带有对话和上下文的LLM会话。用户可以无缝地与PENTESTGPT交互,不同模块处理不同类型的消息。这种交互最终形成一个决策,建议用户应采取的下一步渗透测试过程。在接下来的部分中,我们将阐明我们的设计思路,并详细分解PENTESTGPT背后的工程流程。
5.2 设计原理
我们的核心设计考虑来自前文探索性研究(第4节)中观察到的三大挑战:
第一个挑战(发现3)涉及由于记忆保留问题导致的渗透测试上下文丢失。原始形式的LLMs因token大小限制而难以维持长期记忆。
第二个障碍(发现4)源于LLM聊天机器人倾向于强调最近的对话内容。在渗透测试任务中,这种方法专注于优化即时任务,但在渗透测试这种复杂且相互关联的任务环境中表现不足。
第三个障碍(发现5)与LLMs生成不准确结果有关。当直接要求生成渗透测试某一步骤的具体操作时,输出往往不精确,有时甚至导致错误方向。
PENTESTGPT被设计用来应对这些挑战,使其更适合渗透测试任务。我们从现实世界渗透测试团队采用的方法中汲取灵感,其中总监规划总体程序,将其细分为子任务分配给各个测试人员。每个测试人员独立完成自己的任务,并在不了解更广泛背景的情况下报告结果。总监随后决定后续步骤,可能重新定义任务并触发下一轮测试。本质上,总监管理整体策略,而不陷入测试的细节中。这种方法被反映在PENTESTGPT的功能中,增强了其在渗透测试中的效率和适应性。
我们的策略将渗透测试分为两个过程:识别下一个任务和生成具体操作以完成该任务。每个过程由一个LLM会话驱动。在这种设置中,负责任务识别的LLM会话保留了正在进行的渗透测试状态的完整上下文,同时,详细操作的生成和信息解析由其他会话管理。这种职责划分促进了有效的任务执行,同时保留了整体上下文。
为了帮助LLMs有效执行渗透测试任务,我们设计了一系列与用户输入对齐的提示词。在此过程中,我们采用了“思维链”(Chain-of-Thought, CoT)[45] 方法。正如CoT所揭示的,使用输入、思维链、输出提示格式可以显著增强LLMs的性能和推理能力。在这里,思维链代表一系列中间自然语言推理步骤,最终导向结果。我们将渗透测试任务分解为微步骤,并设计带示例的提示词,逐步引导LLMs处理渗透测试信息,最终实现预期结果。完整的提示词可在我们的匿名开源项目[32]中找到。
5.3 推理模块
推理模块在我们的系统中扮演着关键角色,类似于团队负责人从宏观角度监督渗透测试任务。它从用户处获取测试结果或意图,并为下一步制定测试策略。该测试策略随后传递给生成模块以进行进一步规划。为了有效监督渗透测试过程并提供精确指导,将测试程序和结果转化为自然语言格式至关重要。我们受到攻击树 [46] 概念的启发(常用于概述渗透测试流程),引入了渗透测试任务树(PTT) 的概念。这种新颖的测试状态表示方法基于属性树 [47] 的概念:
定义1(属性树)
属性树是一种边标记、带属性的多树G=(V,E,λ,μ)G = (V, E, λ, μ)G=(V,E,λ,μ),其中:
-VVV是节点集(或顶点集),
-EEE是有向边集,
-λ:E→Σλ : E → Σλ:E→Σ是边标记函数,为每条边分配一个来自字母表ΣΣΣ的标签,
-μ:(V∪E)×K→Sμ : (V ∪ E) × K → Sμ:(V∪E)×K→S是一个函数,为边和节点分配键值对属性(键来自KKK,值来自SSS)。
基于属性树的定义,PTT 定义如下:
定义2(渗透测试任务树)
PTTTTT是一个二元组(N,A)(N, A)(N,A),其中:
1.NNN是以树结构组织的节点集。每个节点都有唯一的标识符,并且存在一个特殊节点称为根节点,它没有父节点。除根节点外,每个节点都有一个父节点和零个或多个子节点。
2.AAA是一个函数,为每个节点n∈Nn ∈ Nn∈N分配一组属性A(n)A(n)A(n)。每个属性是一个键值对(a,v)(a, v)(a,v),其中aaa是属性名称,vvv是属性值。每个节点的属性集可以不同。
如图3所示,推理模块的操作分为四个关键步骤,围绕PTT展开:
-
初始PTT构建:模块首先通过解释用户目标来创建初始PTT,以自然语言格式呈现。这涉及使用包含上述PTT定义和现实世界示例的设计提示词来指导LLM。LLM的输出被解析以确保树结构正确表示,可以通过分层项目符号以自然语言格式化,如图4所示。推理模块通过维护涵盖整个渗透测试过程的任务树,有效克服了记忆丢失问题。
![![[Pasted image 20250327124111.png]]](https://i-blog.csdnimg.cn/direct/12ace98bc77b46b597692b74293fb5d6.png)
-
PTT验证:在更新树信息后,对新更新的PTT进行验证以确认其正确性。此过程明确检查只有PTT的叶节点被修改,符合渗透测试过程中原子操作应仅影响最低级子任务状态的原则。这一步骤确认了推理过程的正确性,防止LLM因幻觉而对整体树结构进行潜在更改。如果出现差异,信息会被返回LLM进行修正和重新生成。
-
候选任务识别:在更新PTT后,推理模块评估当前树状态,并确定可作为进一步测试候选步骤的可行子任务。
-
任务优先级排序与推荐:最后,模块评估这些子任务导致成功渗透测试结果的可能性,并推荐最高优先级的任务作为输出。该任务的预期结果随后转发至生成模块以进行深入分析。这种方法是可行的,正如探索性研究所示,LLMs(特别是GPT-4)在提供系统状态信息时能够识别潜在漏洞。这种程序化方法使推理模块能够解决LLMs的一个固有限制,即它们倾向于仅专注于最近任务的倾向。需要注意的是,如果测试人员发现推荐任务不正确或未按首选方式完成,他也可以通过第5.6节进一步讨论的交互式处理手动修订PTT。
我们设计了四组提示词,依次引导推理模块完成每个阶段的任务。为了增强结果的可重复性,我们使用一种称为提示生成 [48] 的技术进一步优化这些提示词。从实际经验来看,我们观察到LLMs擅长解释与渗透测试相关的树状结构信息,并能根据测试输出准确更新这些信息。
5.4 生成模块
生成模块将推理模块传递的具体子任务转化为具体的命令或指令。每次接收到新的子任务时,生成模块都会启动一个新的会话。这种策略有效隔离了整体渗透任务的上下文与当前正在执行的任务,使LLM能够完全专注于生成特定命令。
我们的设计并未直接将接收到的子任务转化为具体操作,而是采用了CoT(思维链)策略 [45],将这一过程分为两个连续步骤。这一设计决策通过增强模型的推理能力,直接应对了模型不准确性和幻觉相关的挑战:
- 子任务扩展:在接收到推理模块传递的简明子任务后,生成模块首先将其扩展为一系列详细步骤。值得注意的是,与该子任务相关的提示要求LLM考虑测试环境中可用的工具和操作。
- 步骤转化为命令:随后,生成模块将这些扩展后的步骤转化为精确的终端命令以供执行,或者转化为特定图形用户界面(GUI)操作的详细描述。这种分阶段的翻译消除了潜在的歧义,使测试人员能够直接且无缝地遵循指令。
通过实施这一两步流程,有效避免了LLM生成在现实场景中不可行的操作,从而提高了渗透测试程序的成功率。
作为连接推理模块提供的战略洞察与执行渗透测试所需的具体行动步骤之间的桥梁,生成模块确保高层次计划被转化为精确且可操作的步骤。这一转化过程显著提升了渗透测试程序的整体效率,同时也提供了完整测试过程的人类可读输出。我们在附录图9中展示了一个针对完整渗透测试目标的详细PTT生成过程,并附有说明性示例以帮助理解。
示例说明
![![[Pasted image 20250327124143.png]]](https://i-blog.csdnimg.cn/direct/4aace22e44dd485b9135741ad1c7fb83.png)
我们使用一个真实的运行示例来阐明推理模块和生成模块如何协作完成渗透测试任务。图5展示了PENTESTGPT在HackTheBox机器Carrier [49] 上的一次迭代操作,这是一个中等难度的目标。
如图a-1所示,PTT以自然语言格式编码了测试状态,揭示了开放端口(21、22、80)及其运行的服务。推理模块随后被指示识别可用任务。如红色高亮所示,服务扫描是PTT叶节点上唯一的可用任务。因此,该任务被选择并传递给生成模块以生成命令。生成的命令在测试环境中执行,执行结果被传递回推理模块以更新PTT。
在图a-2中,推理模块将先前的扫描结果整合到PTT中,并与之前的PTT进行交叉引用,仅更新叶节点。然后,它寻找可用任务以继续执行。在这种情况下,出现了两个任务:扫描端口80上的Web服务,以及检查SSH服务是否存在已知漏洞。LLM评估哪个任务更具潜力,并选择调查通常被认为更脆弱的Web服务。此任务被传递给生成模块。
生成模块将这一通用任务转化为详细的过程,使用nikto [50](一种常用的Web扫描脚本)。这一迭代过程持续进行,直到测试人员完成渗透测试任务。
5.5 解析模块
解析模块作为一个支持性接口,能够有效处理用户与另外两个核心模块之间交换的自然语言信息。该模块的存在主要由两个需求驱动:首先,安全测试工具的输出通常冗长且包含大量无关细节,直接将这些扩展输出输入LLMs会导致计算成本高昂且不必要的冗余。其次,缺乏安全领域专业知识的用户可能难以从安全测试输出中提取关键见解,从而在总结重要测试信息时面临挑战。因此,解析模块在简化和浓缩这些信息方面至关重要。
在PENTESTGPT中,解析模块被设计为处理四种不同类型的信息:
- 用户意图:这是用户提供的指令,用于指导下一步操作;
- 安全测试工具输出:这是由一系列安全测试工具生成的原始输出;
- 原始HTTP网页信息:包括从HTTP网页界面中提取的所有原始信息;
- 渗透测试过程中提取的源代码。
用户必须指定所提供信息的类别,每个类别都配有一组精心设计的提示词。对于源代码分析,我们集成了GPT-4代码解释器 [51] 来执行任务。
5.6 主动反馈
尽管LLMs可以生成富有洞察力的输出,但其结果有时需要修正。为此,我们在PENTESTGPT中引入了一种交互式控制机制,称为主动反馈,允许用户直接与推理模块互动。这一过程的一个关键特性是,除非用户明确希望更新某些信息,否则不会改变推理模块中的上下文。推理上下文(包括PTT)被存储为一个固定大小的token块。在主动反馈交互期间,这个token块会被提供给一个新的LLM会话,用户可以针对其提出问题。这确保了原始会话不受影响,用户可以随时查询推理上下文而无需进行不必要的更改。如果用户认为有必要更新PTT,他们可以明确指示模型相应地更新推理上下文历史记录。这为用户提供了一个强大而灵活的框架,使他们能够积极参与决策过程。
5.7 讨论
我们探索了PENTESTGPT的各种设计替代方案,以应对探索性研究中识别出的挑战。我们尝试了不同的设计,并在此讨论一些关键决策。
使用Token大小解决上下文丢失问题
缓解上下文丢失的一种直接方法是使用具有扩展token大小的LLM模型。例如,GPT-4提供了8k和32k token大小限制的版本。然而,这种方法面临两个重大挑战。首先,即使32k的token大小也可能不足以应对渗透测试场景,因为像dirbuster [52] 这样的单一测试工具的输出可能包含数千个token。因此,32k限制的GPT-4无法保留整个测试上下文。其次,即使整个对话历史适合32k token的边界,API仍可能偏向最近的内容,专注于局部任务而忽略更广泛的上下文。这些问题引导我们设计了推理模块和解析模块。
使用向量数据库提高上下文长度
另一种增强LLMs上下文长度的技术是使用向量数据库 [53, 54]。通过将数据转换为向量嵌入,LLMs可以高效地存储和检索信息,实际上创建了长期记忆。理论上,渗透测试工具的输出可以存储在向量数据库中。然而,在实践中,我们观察到许多结果非常相似,仅在细微之处有所不同。这种相似性往往导致信息检索混乱。单纯依赖向量数据库无法克服渗透测试任务中的上下文丢失问题。将向量数据库集成到PENTESTGPT的设计中是未来研究的一个方向。
信息提取的精确性
精确的信息提取对于节约token使用和避免LLMs的冗长表达至关重要 [55, 56]。基于规则的方法常用于提取多样化信息。然而,考虑到自然语言的固有复杂性和渗透测试中信息类型的多样性,基于规则的技术在工程上成本高昂。我们设计了解析模块来管理几种通用的输入信息类型,这一策略被证明既可行又高效。
LLMs的局限性
LLMs并非万能解决方案。当前的LLMs存在缺陷,包括幻觉 [57, 58] 和知识过时等问题。我们的缓解措施(如实施任务树验证以防止幻觉)可能无法完全阻止推理模块产生错误结果。因此,“人在回路”策略变得至关重要,它有助于输入必要的专业知识和指导,以有效引导LLMs。
6 评估
在本节中,我们评估了PENTESTGPT的性能,重点关注以下四个研究问题:
- RQ3(性能):PENTESTGPT的性能与原生LLM模型和人类专家相比如何?
- RQ4(策略):PENTESTGPT是否采用了与LLMs或人类专家不同的问题解决策略?
- RQ5(消融分析):PENTESTGPT中的每个模块如何对整体渗透测试性能做出贡献?
- RQ6(实用性):PENTESTGPT在现实世界的渗透测试任务中是否实用且有效?
6.1 评估设置
我们使用1,900行Python3代码和740行提示词实现了PENTESTGPT,相关代码可在我们的匿名项目网站 [32] 获取。我们对其在第3节构建的基准以及额外的真实世界渗透测试机器(第6.5节)上的性能进行了评估。在本次评估中,我们将PENTESTGPT与GPT-3.5和GPT-4集成,形成了两个工作版本:PENTESTGPT-GPT-3.5 和 PENTESTGPT-GPT-4。由于缺乏API访问权限,我们未选择其他LLM模型(如Bard)。与之前的实验一致,我们使用相同的实验环境设置,并指示PENTESTGPT仅使用非自动化渗透测试工具。
6.2 性能评估(RQ3)
图6a展示了PENTESTGPT-GPT-3.5、PENTESTGPT-GPT-4以及LLMs的原生应用的整体任务完成情况。如图所示,由LLMs驱动的PENTESTGPT解决方案展示了比LLMs原生应用更优越的渗透测试能力。具体而言,PENTESTGPT-GPT-4超越了其他三种解决方案,成功解决了7个简单难度目标中的6个和4个中等难度目标中的2个。这一表现表明,PENTESTGPT-GPT-4能够处理从简单到中等难度的渗透测试目标。与此同时,PENTESTGPT-GPT-3.5仅解决了两个简单难度的挑战,这种差异可归因于GPT-3.5缺乏GPT-4中与渗透测试相关的知识。![![[Pasted image 20250327124213.png]]](https://i-blog.csdnimg.cn/direct/961c1ef838b6436792e78da631f40565.png)
子任务完成情况如图6b所示。可以看出,无论是PENTESTGPT-GPT-3.5还是PENTESTGPT-GPT-4,其表现均优于LLMs的标准应用。值得注意的是,与原生GPT-4相比,PENTESTGPT-GPT-4不仅多解决了一个中等难度的目标,还完成了更多子任务(57 vs. 27),增幅达111%。这表明我们的设计有效地应对了上下文丢失的挑战,并带来了更具前景的测试结果。
然而,所有解决方案在高难度测试目标上都遇到了困难。正如第4节所详述的,高难度目标通常需要渗透测试人员具备深刻的理解。为了实现测试目标,可能需要对现有的渗透测试工具或脚本进行修改。我们的设计并未扩展LLMs对漏洞的知识,因此在这些更复杂的目标上并未显著提升性能。
6.3 策略评估(RQ4)
我们分析了PENTESTGPT的问题解决方法,并将其与LLMs和人类专家进行了比较。通过手动检查,我们识别了PENTESTGPT在渗透测试中的方法。值得注意的是,PENTESTGPT的任务分解方式与人类专家相似,并且能够有效优先处理任务。它不仅关注最新识别的任务,还识别出可能导致成功的关键子任务。![![[Pasted image 20250327124239.png]]](https://i-blog.csdnimg.cn/direct/30bca19adc714554a30ed5167053e513.png)
图7对比了GPT-4和PENTESTGPT在VulnHub机器Hackable II [59] 上的策略。该机器包含两个漏洞:一个用于文件上传的FTP服务和一个用于查看FTP文件的Web服务。有效的利用需要结合这两个服务。图中显示,GPT-4从FTP服务开始,识别了上传漏洞(❶❸),但未能将其与Web服务联系起来,导致利用不完整。相比之下,PENTESTGPT在FTP和Web服务之间切换。它首先探索了两个服务(❶❷),然后专注于FTP(❸-❹),意识到FTP和Web文件是相同的。基于这一洞察,PENTESTGPT指示测试人员上传shell(❺),成功实现了反向shell(❻)。这与解决方案指南一致,突显了PENTESTGPT在整合各种测试方面的能力。
我们的第二个观察结果是,尽管PENTESTGPT的行为更接近人类专家,但它仍表现出一些人类通常不会采用的策略。例如,PENTESTGPT在漏洞扫描之前仍然优先尝试暴力破解攻击。这一点在PENTESTGPT总是试图对目标机器上的SSH服务进行暴力破解时尤为明显。
我们还分析了使用PENTESTGPT进行渗透测试失败的案例,识别出三个主要限制:
- 图像解释能力不足:LLMs无法处理图像,而图像在某些渗透测试场景中至关重要。解决这一限制可能需要开发能够同时解释文本和视觉数据的先进多模态模型。
- 缺乏社交工程技术的应用能力:PENTESTGPT无法运用某些社交工程技术或检测微妙线索。例如,虽然人类测试人员可能会从目标服务中提取信息生成暴力破解字典,但PENTESTGPT可以从Web服务中检索名称,却无法指导如何使用这些名称创建字典的工具。
- 有限尝试次数内构造准确利用代码的能力不足:尽管LLM在代码理解和生成方面具有一定的熟练度,但在生成详细的利用脚本(特别是低级字节码操作)方面表现不佳。这些限制表明,在需要人类洞察力和复杂推理的领域,自动化解决方案仍有改进空间。
6.4 消融研究(RQ5)
我们对推理模块、生成模块和解析模块如何影响PENTESTGPT的性能进行了消融研究。我们实现了三种变体:
- PENTESTGPT-NO-PARSING:解析模块被禁用,所有数据直接输入系统。
- PENTESTGPT-NO-GENERATION:生成模块被禁用,任务生成直接在推理模块中完成。任务生成的提示保持一致。
- PENTESTGPT-NO-REASONING:推理模块被禁用。该变体不再使用PTT,而是采用探索性研究中描述的LLMs渗透测试方法。
所有变体均与GPT-4 API集成进行测试。![![[Pasted image 20250327124323.png]]](https://i-blog.csdnimg.cn/direct/86bf80bc383e4a33bbaa02fa61c92e5e.png)
图8展示了三种变体在我们基准测试中的结果。其中,PENTESTGPT在目标和子任务完成方面始终优于消融基线。我们的主要观察包括:
- 缺少解析模块的影响:PENTESTGPT-NO-PARSING在任务和子任务完成方面的性能仅略有下降。尽管解析有助于渗透测试,但32k token限制通常足以覆盖多样化的输出。推理模块的设计保留了完整的测试上下文,弥补了解析模块的缺失,从而确保性能下降最小。
- 缺少推理模块的影响:PENTESTGPT-NO-REASONING的成功率最低,仅完成了完整变体53.6%的子任务,甚至低于基础GPT-4设置。生成模块添加的子任务扭曲了LLM上下文。不匹配的提示和扩展的生成输出模糊了原始上下文,导致测试失败。
- 缺少生成模块的影响:PENTESTGPT-NO-GENERATION略优于基础GPT-4。没有生成模块的过程类似于标准LLM的使用。生成模块的主要作用是指导精确的测试操作。没有它,测试人员可能需要额外信息来使用必要的工具或脚本。
6.5 实用性研究(RQ6)
我们展示了PENTESTGPT在现实世界渗透测试场景中的适用性,超越了标准化基准的范畴。为了进行分析,我们将PENTESTGPT部署在两种不同的挑战形式中:
- HackTheBox (HTB) 活跃机器挑战:这些挑战提供了一系列面向全球用户的现实世界渗透测试场景。我们从活跃列表中选择了10台机器,包括5个简单难度目标和5个中等难度目标。
- picoMini [21]:这是一个由卡内基梅隆大学和redpwn [60] 组织的“夺旗赛”(CTF)竞赛,采用Jeopardy风格。比赛包含21个独特的CTF挑战,并在初赛中吸引了248支团队参与。这些挑战目前可在线免费获取,供练习和重试。
我们的评估将PENTESTGPT与GPT-4 32k token长度的API结合使用,以捕获root flag作为成功试验的指标。我们对每个目标进行了五次试验,并记录了成功捕获的次数。需要注意的是,我们将五次试验中至少一次成功捕获视为对该目标的成功尝试。这一标准反映了现实世界渗透测试和CTF挑战的迭代性质,即允许多次尝试,最终成功与否取决于是否至少达成一次目标。![![[Pasted image 20250327124339.png]]](https://i-blog.csdnimg.cn/direct/81caee2fca2e45e89a50758493d8bc69.png)
表5展示了PENTESTGPT在这两组挑战中的表现。在HackTheBox挑战中,PENTESTGPT成功完成了4个简单难度挑战和1个中等难度挑战,总成本为131.5美元,平均每目标成本为21.9美元。这一表现表明,PENTESTGPT能够以合理的成本有效应对从简单到中等难度的渗透测试任务。![![[Pasted image 20250327124353.png]]](https://i-blog.csdnimg.cn/direct/9ee9ae8e2ae448c0927cce049f453b85.png)
表6展示了PENTESTGPT在picoMini CTF中的表现。具体而言,PENTESTGPT成功解决了21个挑战中的9个,每次尝试的平均成本为5.1美元。最终,PENTESTGPT累计获得了1400分[4],在248支提交有效结果的团队中排名第24位[61]。这些结果表明,PENTESTGPT在各种类型的现实世界渗透测试任务中表现出色。
7 讨论
可能存在的情况是,PENTESTGPT使用的LLMs在训练时接触过基准机器的“walkthrough”,这可能会使评估结果无效。为了应对这一问题,我们采用了两种方法。首先,我们确保LLM对目标机器没有先验知识。我们通过查询LLMs对被测机器的熟悉程度来确认这一点。其次,我们的基准包含了2021年后发布的机器,确保它们超出了OpenAI模型的训练数据范围。我们对近期HackTheBox挑战的研究证实了PENTESTGPT在没有预先目标知识的情况下解决问题的能力。
尽管我们力求设计通用的提示词,但某些LLMs会避免生成特定的黑客相关内容。例如,OpenAI实施了模型对齐策略[62],以确保GPT模型的输出不违反使用政策,包括生成恶意利用内容。我们采用了“越狱”技术[63–69],以引导LLMs生成相关数据。
提高PENTESTGPT的可重复性仍然是一个重点研究领域。LLMs偶尔会出现“幻觉”现象[57],即生成偏离训练数据的输出。这影响了我们工具的可靠性。为了解决这个问题,我们正在研究减少幻觉的方法[70],预计这将提升我们工具的效率和可靠性。
在渗透测试中使用PENTESTGPT的伦理影响显著,需要仔细考虑。虽然PENTESTGPT可以通过识别漏洞大幅增强安全性,但其能力也可能被滥用。为了降低这些风险,我们实施了多种策略。我们积极推广PENTESTGPT的道德使用指南,并与网络安全社区密切合作,防止误用。此外,我们还集成了监控模块[71]以跟踪工具的使用情况,并致力于确保其不会被不当使用。这些措施旨在平衡先进渗透测试工具的优势与伦理考量,确保PENTESTGPT为网络安全防御做出积极贡献。
8 结论
本研究深入探讨了LLMs在渗透测试中的潜力与限制。通过构建一个新颖的基准,我们揭示了LLMs在这一复杂领域的表现。尽管LLMs能够处理基本任务并有效使用测试工具,但在任务特定上下文和注意力方面仍面临挑战。为此,我们提出了PENTESTGPT,这是一种模拟人类渗透测试行为的工具。受现实世界测试团队启发,PENTESTGPT由推理、生成和解析模块组成,促进了分段式的问题解决策略。
我们对PENTESTGPT的全面评估突显了其潜力,同时也指出了当前技术尚未超越人类技能的领域。这项工作为未来在网络安全这一关键领域的发展铺平了道路。
更多推荐



所有评论(0)