PENTESTGPT:一款基于大型语言模型的自动化渗透测试工具

互联不一般哥 2024-05-14 21:12:57

PENTESTGPT: An LLM-empowered Automatic Penetration Testing Tool

Gelei Deng1 , Yi Liu1 , Victor Mayoral-Vilches2,3 , Peng Liu4 , Yuekang Li5,

Yuan Xu1 , Tianwei Zhang1 , Yang Liu1 , Martin Pinzger2 , and Stefan Rass6

1Nanyang Technological University,

2Alpen-Adria-Universitat Klagenfurt,

3Alias Robotics,

4Instituite for Infocomm Research, A*STAR,

5University of New South Wales,

6Johannes Kepler University Linz

{gelei.deng,yi009,xu.yuan,tianwei.zhang,yangliu}@ntu.edu.sg, victor@aliasrobotics.com, liu_peng@i2r.a-star.edu.sg, Martin.Pinzger@aau.at, stefan.rass@jku.at

引用

Deng G, Liu Y, Mayoral-Vilches V, et al. Pentestgpt: An llm-empowered automatic penetration testing tool[J]. arXiv preprint arXiv:2308.06782, 2023.

摘要

渗透测试是确保系统安全的重要工业实践,但传统上难以实现自动化。大型语言模型(LLM)展示了在各领域取得的显著进展,可能彻底改变行业。研究评估了LLM在现实世界渗透测试任务中的性能,发现其在特定子任务上表现熟练,但整体测试场景理解上仍有挑战。为此,介绍了PENTESTGPT,一款利用LLM知识的自动化渗透测试工具,其性能优于传统模型,并在实践中取得良好效果,已在GitHub上开源并受到积极反响。

1 引言

确保系统免受攻击是一个挑战,渗透测试作为攻击性安全方法,已成为安全生命周期中的关键部分。这种方法通过模拟攻击来发现漏洞,相比传统防御机制具有优势。本研究重点关注进攻性策略,特别是渗透测试,它通过模拟攻击来识别和评估漏洞,并提供改进建议。尽管渗透测试是广泛采用的安全评估实践,但它仍然是劳动密集型的,对专业知识和技能有较高要求,这导致了应对不断增长的安全评估需求的能力差距。

最近,大型语言模型(LLM)在理解人类文本和执行复杂任务方面取得了显著进展,这表明它们在网络安全等领域具有变革潜力。因此,本文开始评估LLM在现实世界渗透测试任务中的能力。为了克服现有基准测试的局限性,本文构建了一个新的强大基准测试,包括来自HackTheBox和VulnHub的测试机器,涵盖OWASP十大漏洞清单中的所有漏洞。这个基准测试通过监控每个子任务的完成状态,提供了对测试者表现更详细的评估。

在拥有这一基准测试的基础上,本文使用GPT-3.5,GPT-4和Bard作为代表性LLM进行了一项探索性研究。本文通过引导这些模型完成对本文基准测试目标的渗透任务来与其进行交互测试。这种交互包括为LLM设定渗透测试目标,要求它执行适当的操作,在测试环境中实施这些操作,并将测试输出反馈给LLM进行下一步推理。通过重复这一循环,本文得出最终的渗透测试结果。为了评估LLM的性能,本文将它们的结果与官方解题步骤和认证渗透测试人员的解决方案进行比较。通过分析它们解决问题的方法的相似性和差异,本文旨在更好地理解LLM在渗透测试中的能力,并辨别它们的问题解决策略与人类专家的策略之间的差异。

本文的调查揭示了LLM在渗透测试中的能力和局限性。本文发现,LLM在管理测试过程中的特定子任务方面表现出色,例如利用测试工具、解释它们的输出并提出后续行动。与人类专家相比,LLM在执行测试工具的复杂命令和选项方面特别擅长,而像GPT-4这样的模型在理解源代码和确定漏洞方面表现出色。此外,LLM能够制定适当的测试命令,并准确描述特定任务所需的图形用户界面操作。利用其广泛的知识库,它们可以设计创新的测试程序,揭示现实系统和CTF挑战中的潜在漏洞。然而,本文也注意到,LLM在保持对整体测试场景的一致把握方面存在困难,这是实现测试目标的关键因素。随着对话的进行,它们可能会忽视先前的发现,并且在朝着最终目标一致地应用其推理方面遇到困难。此外,LLM可能会过度强调最近的任务,在对话历史中,不论其漏洞状态如何。结果,它们往往会忽视先前测试中暴露的其他潜在攻击面,并未能完成渗透测试任务。

图1:本文开发全自动渗透测试工具框架MALISM的架构。图中展示了任意用户可以使用MALISM来测试给定目标的各种交互流程。1. 对应EXPLOITFLOW,一个模块化库,用于生成安全利用路径(利用流程),在每个离散操作后捕获被测试系统的状态。2.(本文)对应PENTESTGPT,一个利用LLM的能力为每个给定的离散状态生成测试指导(启发式)的测试工具。3. PENTESTPERF是一个全面的渗透测试基准,用于评估渗透测试人员和自动化工具在广泛的测试目标上的性能。4. 捕捉MALISM,本文开发全自动渗透测试工具的框架,本文称之为网络安全认知引擎。

本文实证研究的结果是令人鼓舞的,揭示了LLM具备执行渗透测试任务所需的必要领域知识。特别是,在给定网络场景下提供直觉的能力。然而,它们缺乏的是有效的指导,以独立执行这些任务并保持对测试场景的一致理解。另一方面,正如在先前的一项研究中所调查的那样,专注于捕获自动化利用路线(或流程)。考虑到(网络)状态空间的复杂性,状态本身不足以推断出执行渗透测试的最佳操作。很快就会明显,需要一种启发式方法来支持自主渗透测试,帮助选择达到给定目标的操作。基于这一理解,本文旨在促进现代机器学习方法的潜力,并开发一个完全自动化的渗透测试框架,帮助生成网络安全认知引擎。本文的整体架构如图1所示,展示了本文迄今为止的工作以及计划中的未来贡献。本文提出的框架,MALISM,旨在使没有深入安全领域知识的用户能够生成自己的网络安全认知引擎,帮助对广泛范围的目标进行渗透测试。该框架包括三个主要组件:

1)EXPLOITFLOW:一个模块化库,用于生成网络安全利用路线(exploit flows)。EXPLOITFLOW旨在结合和组合来自不同来源和框架的利用,捕获被测试系统在每个离散操作后的状态流,从而允许学习影响给定系统的攻击树。EXPLOITFLOW的主要动机是促进和赋能在网络安全领域的博弈论和人工智能(AI)研究。它提供了一个独特的利用过程表示,其中包含每个方面。其表示可以有效地与各种渗透测试工具和脚本集成,例如Metasploit [15],以执行端到端的渗透测试。这种表示还可以进一步可视化,以指导人类专家复制测试过程。

2)PENTESTGPT:一种利用LLM的能力生成在每个给定离散状态下的测试指导和直觉的自动化渗透测试系统。它作为MALISM框架的核心组件,指导LLM在现实世界的测试场景中高效利用其领域知识。

3)PENTESTPERF:一个全面的渗透测试基准,旨在评估渗透测试人员和自动化工具在广泛的测试目标上的表现。它提供了一个公平而强大的平台,用于性能比较。

这三个组件的和谐整合形成了一个自动化、自我演进的渗透测试框架,能够在各种目标上执行渗透测试,即MALISM。这个框架旨在开发完全自动化的渗透测试工具,本文将其称为网络安全认知引擎,旨在通过显著减少对领域专业知识的需求,并实现更全面和可靠的测试,从而彻底改变渗透测试领域。

基于LLM在渗透测试中的潜力,本文提出了PENTESTGPT,这是一个交互式系统,旨在增强LLM在网络安全领域的应用。PENTESTGPT采用了三部分架构,包括推理、生成和解析模块,每个模块对应渗透测试团队中的特定角色。推理模块负责保持渗透测试状态的高层次概述,生成模块负责构建特定子任务的详细流程,而解析模块处理各种文本数据,提取重要信息。PENTESTGPT通过结合高层策略、精确执行和智能数据解释,完成复杂的渗透测试任务,保持了一个连贯而有效的测试过程。

本文使用本文的基准测试评估了PENTESTGPT,展示了其有效性。具体来说,本文的系统在子任务完成方面表现出色,与直接使用GPT-3.5和GPT-4相比,分别增加了228.6%和58.6%。本文还将PENTESTGPT应用于HackTheBox主动渗透测试机器挑战[17],在总共131.5美元的OpenAI API成本下完成了10个选定目标中的4个,排名在拥有超过670,000名成员的社区中的前1%。这次评估强调了PENTESTGPT在增强渗透测试任务的效率和精度方面的实际价值。该解决方案已在GitHub上公开,截至撰写本文时,收到了广泛的好评,获得了超过4,700颗星,并与多个工业合作伙伴进行了积极的社区参与和持续的合作。综上所述,本文做出了以下贡献:

开发了一套全面的渗透测试基准。本文制定了一个强大而代表性的渗透测试基准,涵盖了来自领先平台(如HackTheBox和VulnHub)的大量测试机器。这个基准包括182个子任务,涵盖了OWASP十大漏洞,提供了对渗透测试的公平和全面评估。对LLM在渗透测试任务中的经验性评估。通过使用GPT-3.5、GPT-4和Bard等模型,本文的探索性研究严格调查了LLM在渗透测试中的优势和局限性。从这项分析中获得的见解,为本文理解LLM在这一专业领域中的适用性提供了宝贵的启示,丰富了本文的理解。开发了一种创新的LLM增强型渗透测试系统。本文设计了PENTESTGPT,这是一种新颖的交互式系统,利用LLM的优势自动执行渗透测试任务。PENTESTGPT从现实世界的人类渗透测试团队中汲取灵感,集成了一种三部分设计,反映了主测试人员和初级测试人员之间的协作动态。这种架构优化了LLM的使用,显著提高了自动化渗透测试的效率和效果。

2 方法论

2.1 概述

鉴于前文中提到的挑战,本文提出了本文的解决方案PENTESTGPT,它利用了三个LLM驱动模块的协同作用。如图3所示,PENTESTGPT包括三个核心模块:推理模块、生成模块和解析模块。每个模块都保留一个LLM会话,具有其对话和上下文。用户与PENTESTGPT无缝交互,不同模块处理不同类型的消息。这种交互最终会产生一个最终决策,建议用户应该采取的渗透测试过程的下一步。在接下来的部分中,本文将阐明本文的设计理念,并详细解释PENTESTGPT背后的工程过程。

图3. PENTESTGPT架构图

2.2 设计理念

本文的核心设计考虑源于先前探索性研究中观察到的三个挑战。第一个挑战是渗透测试上下文丢失,由于记忆保留问题,原始形式的LLM难以维持这种长期记忆。第二个障碍是LLM聊天机器人强调近期对话内容的倾向,这在渗透测试任务中会导致专注于优化当前任务,但在复杂、相互关联的任务环境中显得不足。第三个障碍是LLM生成的不准确结果,当直接任务是为渗透测试的一个步骤生成特定操作时,输出往往是不精确的,有时甚至导致错误。

PENTESTGPT被设计用来解决这些挑战,使其更适合渗透测试任务。本文借鉴了现实世界中渗透测试团队采用的方法论,其中主管计划整体程序,将它们细分为个人测试员的子任务。每个测试员独立执行自己的任务,报告结果,而不需要详尽理解更广泛的背景。然后,主管确定后续步骤,可能会重新定义任务,并启动下一轮测试。本质上,主管管理整体策略,而不陷入测试的细节中。这种方法在PENTESTGPT的功能中得到了体现,增强了其在进行渗透测试时的效率和适应性。本文的策略将渗透测试分为两个过程:确定下一个任务和生成完成任务的具体操作。每个过程都由一个LLM会话提供支持。在这种设置中,负责任务识别的LLM会话保留了正在进行渗透测试状态的全部上下文。同时,详细操作的产生和信息的解析由其他会话管理。这种责任划分促进了有效的任务执行,同时保留了整体的上下文。

为了帮助LLM有效地执行渗透测试任务,本文设计了一系列与用户输入对齐的提示。在这个过程中,本文采用了思维链(Chain-of-Thought, CoT)[36]方法。正如CoT所揭示的,使用输入、思维链、输出提示格式可以显著提高LLM的性能和推理能力。在这里,思维链代表了一系列导致结果的中间自然语言推理步骤。本文将渗透测试任务分解为微步骤,并设计带有示例的提示,引导LLM逐步处理渗透测试信息,最终达到期望的结果。完整的提示可以在本文匿名的开源项目中找到。

2.3 推理模块

Reasoning Module 在本文的系统中起着关键作用,类似于团队领导从宏观角度监督渗透测试任务。它从用户处获取测试结果或意图,并为下一步的测试策略做准备。这个测试策略将传递给生成模块进行进一步规划。

为了有效监督渗透测试过程并提供精确的指导,将测试程序和结果转化为自然语言格式至关重要。本文从攻击树的概念中汲取灵感,攻击树经常用来概述渗透测试程序,本文引入了渗透测试任务树(PTT)的概念。这种对测试状态表示的新颖方法植根于Attributed Tree的概念:

定义1(Attributed Tree)。一个Attributed Tree是一个边标记、带属性的有向树G = (V, E,λ,µ),其中V是节点(或顶点)的集合,E是有向边的集合,λ:E→Σ是一个边标记函数,将字母表Σ中的标记分配给每条边,µ:(V∪E)×K→S是一个函数,将键(来自K)-值(来自S)对的属性分配给边和节点。

根据带属性树的定义,PTT(渗透测试任务树)定义如下:

定义2(渗透测试任务树)。一个PTT(渗透测试任务树)T是一个二元组(N,A),其中:(1)N是以树形结构组织的节点集合。每个节点具有唯一的标识符,并且有一个称为根的特殊节点没有父节点。除根节点外,每个节点恰好有一个父节点和零个或多个子节点。(2)A是一个函数,将每个节点n ∈ N分配给一组属性A(n)。每个属性是一个对(a,v),其中a是属性名称,v是属性值。每个节点的属性集合可以不同。

正如图3所示,推理模块的操作分为四个关键步骤,这些步骤在PTT上进行。①首先,该模块吸收用户的意图,以自然语言形式构建初始PTT。通过使用精心设计的提示仔细指导LLM,并提供PPT的示例和定义来实现这一点。LLM的输出被解析以确认树结构的格式是否准确。需要注意的是,由于树结构的特性,它可以通过分层的项目符号以自然语言格式表示,如图4所示。推理模块通过维护一个涵盖整个渗透测试过程的任务树,有效地克服了内存丢失问题。

②在更新树信息后,对新更新的PTT进行验证步骤,以确保其正确性。这个过程明确检查了只有PTT的叶节点已被修改,符合渗透测试过程中原子操作应该只影响最低级子任务状态的原则。这一步确认了推理过程的正确性,防止LLM由于幻觉而对整体树结构进行任何潜在的改变。如果出现差异,信息将被恢复到LLM进行校正和重新生成。③使用更新后的PTT,推理模块评估当前的树状态,并找出可以作为进一步测试的候选步骤的可行子任务。④最后,模块评估这些子任务导致成功渗透测试结果的可能性。然后,它推荐顶级任务作为输出。这个任务的预期结果随后被转发给生成模块进行深入分析。这是可行的,正如在探索性研究中所示,因为LLM,特别是GPT-4,在提供系统状态信息时可以识别潜在的漏洞。这种程序化方法使推理模块能够解决LLM的固有限制之一,即它们往往只集中在最近的任务上。

图4. Pentesting Task Tree a)可视化树形格式b) 在LLM中的自然语言格式编码

本文设计了四组提示,逐步引导推理模块完成每个阶段。为了增强本文结果的可重现性,本文进一步优化这些提示,采用一种称为提示生成的技术。根据本文的实际经验,本文观察到LLM擅长解释与渗透测试相关的树形结构信息,并能够根据测试输出准确更新这些信息。

2.4 生成模块

生成模块将来自推理模块的具体子任务转化为具体的命令或指令。每次接收到一个新的子任务时,生成模块都会启动一个新的会话。这种策略有效地将整体渗透任务的上下文与正在执行的即时任务隔离开来,使LLM能够完全专注于生成具体命令。本文的设计不是直接将接收到的子任务转化为具体的操作,而是采用了CoT策略将这个过程分为两个连续的步骤。这个设计决策直接解决了与模型不准确性和幻觉相关的挑战,增强了模型的推理能力。⑤特别是,在从推理模块接收到简明的子任务后,生成模块首先将其扩展为一系列详细步骤。值得注意的是,与这个子任务相关的提示要求LLM考虑测试环境中可能可用的工具和操作。⑥随后,生成模块将这些扩展步骤中的每一个转化为准备执行的精确终端命令,或者转化为要执行的具体图形用户界面(GUI)操作的详细描述。这种逐步翻译消除了潜在的歧义,使测试人员可以直接而无缝地遵循指令。实施这种两步法过程有效地防止LLM生成在实际情况中可能不可行的操作,从而提高了渗透测试过程的成功率。

通过作为推理模块提供的战略洞察与进行渗透测试所需的可执行步骤之间的桥梁,生成模块确保将高级计划转化为精确且可操作的行动步骤。这种转换过程显著提高了渗透测试过程的整体效率。

示例说明。本文使用一个现实世界的运行示例来说明推理模块和生成模块如何协作完成渗透测试任务。图5展示了PENTESTGPT在HackTheBox机器Carrier [40]上的一个迭代过程,这是一个中等难度的目标。如图a-1)所示,PTT以自然语言格式编码测试状态,揭示了目标机器上开放的端口(21, 22,80)。随后,指令推理模块识别可用的任务。如图中红色突出显示的,服务扫描是PTT叶节点上唯一的可用任务。因此,选择此任务并将其转发给生成模块以生成命令。在测试环境中执行生成的命令,并将执行结果传达给推理模块以更新PTT。在a-2)中,推理模块将先前的扫描结果整合到PTT中,与早期的PTT进行交叉引用,只更新叶节点。然后寻找可执行的任务。在这种情况下,出现了两个任务:扫描端口80上的网络服务和检查SSH服务是否存在已知漏洞。LLM评估哪个任务更有前景,并选择调查网络服务,这通常被视为更脆弱。这个任务被传递给生成模块。生成模块将这个通用任务转化为一个详细过程,使用nikto [41],这是一个常用的网络扫描脚本。迭代过程继续进行,直到测试者完成渗透测试任务。

图5. 在测试目标HTB-Carrier上展示任务树更新过程

2.5 解析模块

解析模块作为一个支持性接口,能够有效地处理用户与其他两个核心模块之间交换的自然语言信息。这个模块的存在主要可以由两个需求来证明。首先,安全测试工具的输出通常非常冗长,充满了无关的细节,直接将这些扩展输出输入到LLM中会计算成本高昂且不必要地重复。其次,安全领域没有专业知识的用户可能难以从安全测试输出中提取关键洞察,这在总结重要测试信息时带来了挑战。因此,解析模块在精简和压缩这些信息方面是至关重要的。

在PENTESTGPT中,解析模块被设计来处理四种不同类型的信息:(1)用户意图,即用户提供的指令,用于指导下一步行动;(2)安全测试工具输出,代表各种安全测试工具生成的原始输出;(3)原始HTTP网络信息,包括从HTTP网络接口衍生出的所有原始信息;(4)在渗透测试过程中提取的源代码。用户必须指明他们提供的信息类别,每个类别都配有一组精心设计的提示。对于源代码分析,本文集成了GPT-4代码解释器[42]来执行任务。

2.6 正向反馈

虽然大型语言模型(LLM)能够产生富有洞察力的输出,但它们的结果有时可能需要修订。为了促进这一点,本文在PENTESTGPT中引入了一个名为积极反馈的交互式操作,它允许用户直接与推理模块互动。这个过程的一个重要特点是,除非用户明确希望更新某些信息,否则它不会改变推理模块内的上下文。推理上下文,包括PTT(任务树),被存储为一个固定数量的token块。在积极反馈交互期间,这个token块被提供给一个新的LLM会话,用户可以就它们提出问题。这确保了原始会话保持不受影响,用户可以随时查询推理上下文,而不必进行不必要的更改。如果用户认为有必要更新PTT,他们可以明确指示模型相应地更新推理上下文历史。这为用户提供了一个强大且灵活的框架,使他们能够积极参与决策过程。

2.7 讨论

本文在PENTESTGPT中探讨了多种设计选择,以解决探索性研究中识别的挑战。本文已经尝试了不同的设计,并在这里讨论一些关键决策。

使用token大小解决上下文丢失问题:减轻上下文丢失的一个直接解决方案是使用具有扩展token大小的LLM模型。例如,GPT-4提供了具有8k和32k token大小限制的版本。然而,这种方法面临着两个重大挑战。首先,即使是32k的token大小也可能不足以应对渗透测试场景,因为像dirbuster [43]这样的单个测试工具的输出可能包含数千个token。因此,具有32k限制的GPT-4无法保留整个测试上下文。其次,即使整个对话历史符合32k token的限制,API可能仍然偏向于最近的内容,关注局部任务而忽视更广泛的上下文。这些问题指导本文制定了推理模块和解析模块的设计。

向量数据库改善上下文长度:另一种提高LLM上下文长度的技术涉及到向量数据库[44]、[45]。通过将数据转换为向量嵌入,LLM可以有效地存储和检索信息,实际上创建了长期记忆。理论上,渗透测试工具的输出可以存档在向量数据库中。然而,在实践中,本文观察到许多结果非常相似,只在细微之处有所不同。这种相似性常常导致信息检索混乱。单纯依赖向量数据库无法克服渗透测试任务中的上下文丢失。将向量数据库集成到PENTESTGPT的设计中是未来研究的方向。

信息提取的精确性:精确的信息提取对于节约token使用和避免LLM中的冗长至关重要。基于规则的方法通常用于提取多样化的信息。然而,由于自然语言的固有复杂性和渗透测试中信息类型的多样性,基于规则的技术在工程上成本高昂。本文设计了解析模块来管理几种通用的输入信息类型,发现这种策略既可行又高效。

LLM的局限性:LLM并非万能解决方案。当前的LLM存在一些缺陷,包括幻觉[46]和知识过时。本文的缓解措施,例如实施任务树验证以防止幻觉,可能无法完全阻止推理模块产生错误的结果。因此,采用人在环策略变得至关重要,它促进了必要专业知识和建议的输入,以有效地引导LLM。

3 实验评估

在本节中,本文将评估PENTESTGPT的性能,重点关注以下四个研究问题:

RQ1(性能):PENTESTGPT的性能与原生LLM模型和人类专家相比如何?

RQ2(策略):PENTESTGPT是否采用了与LLM或人类专家不同的解决问题的策略?

RQ3(消融研究):PENTESTGPT内的每个模块对整体渗透测试性能的贡献有多大?

RQ4(实用性):PENTESTGPT在实际的渗透测试任务中是否实用且有效?

3.1 实验设置

本文用1,700行Python3代码和740个提示实现了PENTESTGPT,可在本文项目网站[18]上获得。本文评估了它在第3节构建的基准测试上的性能。在这个评估中,本文将PENTESTGPT与GPT-3.5和GPT-4集成,形成了两个工作版本:PENTESTGPT-GPT-3.5和PENTESTGPT-GPT-4。由于缺乏API访问权限,本文没有选择其他LLM模型,如Bard。根据本文之前的实验,本文使用了相同的实验环境设置,并指示PENTESTGPT只使用非自动化的渗透测试工具。

3.2 性能评估(RQ1)

PENTESTGPT-GPT-3.5、PENTESTGPT-GPT-4以及LLM的简单应用在图6a中展示了整体任务完成情况。如图所示,本文由LLM驱动的解决方案在渗透测试能力方面优于LLM的简单应用。特别是,PENTESTGPT-GPT-4超过了其他三个解决方案,成功解决了7个简单难度目标中的6个和4个中等难度目标中的2个。这表明PENTESTGPT-GPT-4能够处理从简单到中等难度级别的渗透测试目标。同时,PENTESTGPT-GPT-3.5只解决了两个简单难度的挑战,这种差异可以归因于GPT-3.5缺乏GPT-4中与渗透测试相关的知识。

图6. GPT-3.5、GPT-4、PENTESTGPT-GPT-3.5和PENTESTGPT-GPT-4在整体目标完成和子任务完成方面的性能。

PENTESTGPT-GPT-3.5、PENTESTGPT-GPT-4和LLM的简单应用在图6b中展示了子任务完成状态。如图所示,PENTESTGPT-GPT-3.5和PENTESTGPT-GPT-4的表现都优于LLM的标准应用。值得注意的是,PENTESTGPT-GPT-4不仅比简单GPT-4多解决了一个中等难度的目标,而且完成了111%的更多子任务(57个对27个)。这突显出本文的设计有效地解决了上下文丢失的挑战,并带来了更有希望的测试结果。然而,所有解决方案在处理难度较高的测试目标时都遇到了困难。如第4节所述,难度较高的目标通常需要渗透测试人员有深入的理解。为了达到测试目标,它们可能需要对现有渗透测试工具或脚本进行修改。本文的设计并没有扩展LLM对漏洞的了解,因此它并没有显著提高这些更复杂目标的性能。

3.3 策略评估(RQ2)

然后,本文调查了PENTESTGPT采用的问题解决策略,并将其与LLM和人类专家的策略进行了对比。通过手动分析PENTESTGPT的渗透测试过程,本文综合了其问题解决的基本方法。本文惊讶地发现,PENTESTGPT将渗透测试任务分解的方式与人类专家相似,成功地实现了整体目标。PENTESTGPT不仅专注于最近发现的任务,而且能够确定可能导致成功结果的潜在子任务。图7提供了一个说明性的例子,展示了GPT-4和PENTESTGPT在处理VulnHub机器Hackable II [47]时的策略差异。这个目标包含两个易受攻击的服务:一个允许任意文件上传的FTP服务和一个通过FTP查看文件的web服务。成功的利用需要通过FTP服务上传恶意的PHP shell,并通过web服务触发它。如图所示,GPT-4开始枚举FTP服务,并成功识别了文件上传漏洞(①-③)。然而,它未能将其与web服务相关联,导致在随后的步骤中利用不完整。相反,PENTESTGPT采取了更全面的方法,在枚举FTP服务和浏览web服务之间切换。特别是,PENTESTGPT首先①枚举FTP服务和②web服务以了解基本情况。然后它③优先处理FTP服务,并④最终发现了文件上传漏洞。更重要的是,在这个过程中,PENTESTGPT发现FTP上可用的文件与web服务上的文件相同。通过连接这些发现,PENTESTGPT指导测试者⑤执行shell上传,⑥导致成功获取反向shell。这种策略与演练解决方案一致,突出了PENTESTGPT对渗透测试过程的全面理解以及其在确定下一步追求的最佳子任务方面做出有效决策的能力。这揭示了PENTESTGPT的战略思维和整合测试过程不同方面的能力。

图7. 在VulnHub-Hackable II上,GPT-3.5和PENTESTGPT的渗透测试策略比较。

本文接着调查了 PENTESTGPT 采用的问题解决策略,并将其与 LLM 和人类专家的策略进行了对比。通过手动分析 PENTESTGPT 的渗透测试过程,本文综合了其问题解决的基本方法。本文惊讶地发现,PENTESTGPT 将渗透测试任务分解的方式与人类专家相似,成功地实现了整体目标。PENTESTGPT 并不仅仅专注于最近发现的任务,而且能够确定可能导致成功结果的潜在子任务。

图 7 提供了一个说明性的例子,展示了 GPT-4 和 PENTESTGPT 在处理 VulnHub 机器 Hackable II [47] 时的策略差异。这个目标包含两个易受攻击的服务:一个允许任意文件上传的 FTP 服务和一个通过 FTP 查看文件的 web 服务。成功的利用需要通过 FTP 服务上传恶意的 PHP shell,并通过 web 服务触发它。如图所示,GPT-4 开始枚举 FTP 服务,并成功识别了文件上传漏洞(①-③)。然而,它未能将其与 web 服务相关联,导致在随后的步骤中利用不完整。相反,PENTESTGPT 采取了更全面的方法,在枚举 FTP 服务和浏览 web 服务之间切换。特别是,PENTESTGPT 首先 ①枚举 FTP 服务和 ②web 服务以了解基本情况。然后它 ③优先处理 FTP 服务,并 ④最终发现了文件上传漏洞。更重要的是,在这个过程中,PENTESTGPT 发现 FTP 上可用的文件与 web 服务上的文件相同。通过连接这些发现,PENTESTGPT 指导测试者 ⑤ 执行 shell 上传,⑥导致成功获取反向 shell。这种策略与演练解决方案一致,突出了 PENTESTGPT 对渗透测试过程的全面理解以及其在确定下一步追求的最佳子任务方面做出有效决策的能力。这揭示了 PENTESTGPT 的战略思维和整合测试过程不同方面的能力。

本文的第二个观察是,尽管 PENTESTGPT 的行为更类似于人类专家,但它仍然表现出一些人类不会采用的战略。例如,PENTESTGPT 仍然在漏洞扫描之前优先考虑暴力破解攻击。在 PENTESTGPT 始终尝试对目标机器上的 SSH 服务进行暴力破解的情况下,这一点非常明显。

本文然后分析了失败的渗透测试案例,以了解 PENTESTGPT 的局限性。除了缺乏一些高级渗透测试技术外,两个主要问题浮现出来。首先,PENTESTGPT 难以解释图像。LLM 局限于文本理解,因此它们无法准确处理图像。这个问题可能通过开发大型多模态模型来解决,这些模型能够理解文本和视觉数据。其次,它无法掌握某些社会工程技巧和微妙线索。例如,现实世界的渗透测试人员经常使用从目标服务收集的信息来创建暴力破解词表。尽管 PENTESTGPT 可以从一个 web 服务中检索到一组名称,但它无法指导使用工具从这些名称创建词表。这些局限性凸显了在人类洞察和复杂推理仍然比自动化解决方案更擅长的领域进行改进的必要性。

3.4 消融研究(RQ3)

本文对PENTESTGPT中的三个模块:推理模块、生成模块和解析模块,如何贡献于PENTESTGPT的性能进行了消融研究。本文实现了三个变体:

PENTESTGPT-NO-PARSING:解析模块被禁用,导致所有数据直接输入系统。PENTESTGPT-NO-GENERATION:生成模块被禁用,导致任务生成在推理模块内部完成。任务生成的提示保持一致。PENTESTGPT-NO-REASONING:推理模块被禁用。取而代之的是,这个变体采用了与LLM进行渗透测试时使用的方法,如探索性研究中所描述的。

所有这些变体都集成了GPT-4 API进行测试。

图8. PENTESTGPT、PENTESTGPT-NO-ANNOTATION、PENTESTGPT-OPERATION-ONLY和PENTESTGPT-PARAMETER-ONLY在标准化平均代码覆盖率(µLOC)和缺陷检测方面的性能。

图8展示了在渗透测试基准测试上对三个变体进行测试的结果。总体而言,PENTESTGPT在整体目标和子任务完成方面优于三个消融基线。本文的关键发现如下:

在没有解析模块的情况下,PENTESTGPT-NO-PARSING在整体任务和子任务完成方面与完整配置相比略有下降。尽管解析信息在渗透测试中有优势,但32k token大小限制通常足以处理各种输出。考虑到推理模块天生设计为维护整个测试上下文,缺少解析模块并不会显著损害工具的性能。PENTESTGPT-NO-REASONING的表现最差,完成的子任务量只有完整解决方案的53.6%,甚至比在测试中简单应用GPT-4的表现还要差。本文将这一结果归因于生成模块向LLM上下文添加了补充子任务。由于提示没有针对没有推理模块的场景进行定制,因此生成的输出对于没有生成模块的简单LLM来说无关紧要。此外,扩展的生成输出模糊了原始上下文,阻碍了LLM专注于任务的能力,从而未能通过测试。PENTESTGPT-NO-GENERATION实现的性能略高于简单应用GPT-4。这是因为,没有生成模块,测试程序与LLM的使用方式非常相似。值得注意的是,生成模块主要是为了指导测试者执行精确的渗透测试操作。如果没有这个模块,测试者可能依赖于补充信息来操作完成测试所需的关键工具或脚本。

3.5 实用性(RQ4)

表5. PENTESTGPT在活跃的HackTheBox挑战中的表现。

本文展示了PENTESTGPT在现实世界的渗透测试中具有实用性,而不仅仅是在精心设计的基准测试中。为此,本文让PENTESTGPT参与HackTheBox活跃机器挑战,这是一系列面向全球测试者的渗透测试目标。每个挑战包括两个组成部分:一个用户标志,可在首次用户访问时检索,以及一个根标志,在获得根访问权限后可获得。本文的评估涵盖了五个简单难度目标和五个中等难度目标。在这次练习中,PENTESTGPT使用GPT-4的32k tokenAPI对每个目标进行了多达五次测试。成功的定义仅限于捕获根标志。表5详细列出了PENTESTGPT在这些挑战中的表现。

最终,PENTESTGPT完成了三个简单难度和五个中等难度的挑战。这项练习的总费用为131.5美元,平均每个目标21.92美元。这个成本明显低于雇用人类渗透测试员,并处于可接受的范围内。因此,本文的评估突出了PENTESTGPT在现实世界环境中以高效成本产生可行渗透测试结果的能力,从而凸显了它在网络安全领域作为实用工具的潜力。

转述:伊高磊

0 阅读:0

互联不一般哥

简介:感谢大家的关注