传统渗透测试高度依赖安全专家的经验与时间,在面对规模化、复杂化的现代数字资产时,常面临效率瓶颈与覆盖盲区,大语言模型技术的突破性发展,为解决这一困境提供了全新范式。
本文主要分为六个部分,第一部分是对基于大语言模型的渗透测试方法的介绍,第二部分介绍了该方法的背景,第三部分介绍了该方法所面临的挑战,第四部分完成了对相关论文的架构分析及总结,第五部分得出当前基于大语言模型的渗透测试方法的结论,最后是对该方法的展望。
基于大语言模型(LLM)的渗透测试是指利用大语言模型(如GPT系列、Claude等)的能力,辅助或自动化执行网络安全渗透测试的过程。主要包括:智能代码分析、攻击路径规划、测试用例生成以及报告智能撰写四个步骤。其中智能信息收集包括自动化子域名枚举、端口和服务识别、指纹识别以及敏感信息发现等,攻击路径规划指模拟攻击者思维设计测试策略,测试用例生成包括SQL注入检测与利用脚本生成、XSS攻击向量构造、命令注入测试以及API安全测试等,报告智能撰写包括自动生成详细测试报告、自动生成漏洞风险等级评估、自动生成漏洞修复建议等。
尽管基于大语言模型的渗透测试目前应用并不是十分广泛,但是笔者认为有以下几点优势。一是高效率:这体现在可以做自动化的重复性任务,从而加快测试速度;二是全面性:结合大语言模型的先验知识,在测试过程中能够覆盖更广泛的攻击向量和场景;三是智能决策:大语言模型能够基于上下文动态调整测试策略;四是知识整合:大语言模型融合了海量的安全知识。除了优势之外,也必须提到几点局限性,首先是误报率:大语言模型的幻觉可能导致生成不准确或不可行的攻击方案。其次是强依赖训练数据:模型的能力受限于模型训练时的知识范围。最后是缺乏真实经验:大语言模型尽管知识丰富,但是它仍然无法完全替代安全专家的直觉。
本文笔者将对6种相关工具做调研学习,通过对原理及架构分析,系统梳理其设计思路、核心能力与实现路径,希望为后续工作中的技术决策提供参考依据。
一、传统渗透测试面临长期难以解决的瓶颈,为大模型的应用提供了用武之地:
人才严重短缺与成本高昂:合格的渗透测试工程师培养周期长、数量少,人力成本极高,无法满足海量系统、快速迭代的测试需求。
知识的广度与深度矛盾:网络技术栈日益复杂,攻击面呈指数级扩张。单个安全专家难以掌握所有漏洞类型和利用技巧。
重复性劳动与创造性思维的冲突:测试中包含大量重复、繁琐的工作,挤占了安全专家进行深度、创造性思维攻击的时间。
响应速度要求提升:在敏捷开发和持续交付的背景下,传统周期性渗透测试速度太慢,需要更自动化、可集成到开发流程中的智能测试手段。
二、大语言模型的突破性进展,为解决上述挑战提供了全新的技术路径:
强大的代码与自然语言理解能力:大模型经过海量代码和文本训练,能够理解技术文档、分析脚本、解释漏洞原理,具备了与安全领域知识对话的基础。
复杂推理与规划能力:以GPT-4为代表的模型展现出多步骤规划、工具使用的能力,可以模拟攻击者的决策过程,规划"侦察→发现→利用→维持"的攻击路径。
代码生成与解释能力:大语言模型可以根据自然语言指令,快速生成、修改、解释各种语言的利用脚本,极大地自动化了测试用例的编写。
知识压缩与泛化能力:一个大语言模型可以内化吸收分散在无数安全博客、漏洞数据库、工具手册中的知识,并在需要时综合调用,某种程度上实现了一个全能安全顾问的知识广度。
三、安全领域已经进行了长期的AI自动化探索:
传统安全自动化工具:如Metasploit自动化利用、Burp Suite自动化扫描,提供了成熟的工具链和API,为AI驱动提供了可操作手脚。
早期机器学习应用:已尝试将ML用于异常检测、恶意软件分类、漏洞预测等,验证了AI在安全领域的价值,并积累了数据和处理经验。笔者之前也利用kaggle数据集做过ML在异常检测方面的简单复现。
红队自动化平台:如BloodHound域渗透路径分析、Cobalt Strike协同攻击,展示了将攻击过程模块化、流程化的思想。
开发安全工具链:SAST/DAST/IAST等工具的普及,使得在开发流程中集成自动化安全测试成为共识。
基于大模型的渗透测试方法虽然前景广阔,但面临着多方面的严峻挑战,这些挑战决定了其目前无法取代渗透测试人员,而只能作为辅助工具。主要挑战可分为技术、操作和伦理3个层面:
幻觉与误报:大模型会生成看似合理但完全错误或虚构的攻击方法、漏洞细节或代码,导致安全团队浪费时间验证无效路径。 缺乏真实世界验证:模型基于训练数据中的文本模式生成内容,而非真实的系统交互经验,提出的漏洞利用建议可能早已修复。 上下文理解的局限:即使是128K的上下文,也难以容纳一次完整渗透测试的所有细节。模型难以维持对复杂、动态的网络拓扑、会话状态和依赖关系的准确跟踪,可能导致攻击链断裂。
提示工程的高度依赖:需要测试者具备较强的提示工程能力,精确引导模型。一个模糊的指令可能导致无用或危险的结果,这本身成了一项新技能门槛。 流程难以标准化:不同模型、不同提示词可能导致差异巨大的结果,不利于建立可重复、可审计的标准化测试流程。 训练数据滞后:模型的知识存在截止日期,对最新出现的0day漏洞、新兴技术的特定攻击手法缺乏了解。
技术扩散与武器化风险:即使有防护措施,该技术也可能被恶意行为者利用,自动化生成攻击脚本,使"脚本小子"具备更强大的破坏力。 模型本身成为攻击目标:攻击者可能通过提示注入、投毒训练数据等方式,操控或越狱用于渗透测试的AI模型,使其执行有害操作或泄露敏感信息。针对于这一类攻击,市面上目前是通过AI护栏的方式来做AI模型输入输出的风险收敛,笔者后续也会输出针对AI护栏的调研总结。
Strix是一种自主运行的AI工具,它的行为与真正的黑客一样:它能够动态执行用户的代码,识别其中的漏洞,并通过实际测试来验证这些漏洞的存在。它专为开发人员和安全团队设计,旨在帮助他们快速、准确地检测系统安全问题,同时避免了手工渗透测试所带来的繁琐流程以及静态分析工具容易产生的误报现象。
核心亮点
提供开箱即可使用的完整黑客工具包:Strix智能体持续扫描并模拟对整个攻击面的真实攻击,从而主动识别潜在漏洞。
出色的扩展能力,通过实际测试进行验证:Strix 不止于扫描,它能在受控环境中主动利用已识别的漏洞,并提供实时的影响证明,这种动态测试方法显著减少了误报。
以开发人员为中心设计的命令行界面,同时提供可操作的报告功能:Strix可无缝集成到开发生态系统,包括GitHub、GitLab、Jira和各大云平台。其智能体架构提供了全方位的黑客工具集——从浏览器自动化到终端环境,为开发人员和安全团队赋能,提供先进的协作测试能力。
自动修复功能及报告机制,有效加快问题解决速度:Strix不仅仅识别漏洞,它还能为检测到的漏洞生成可直接用于生产环境的代码修复方案。它会自动在GitHub上创建pull request,实现一键修复。
使用场景
Strix最大的创新在于其动态验证机制。传统工具通常只报告潜在的安全问题,而Strix会尝试实际利用发现的漏洞,确认其是否真正存在且可被攻击者利用。
该验证引擎支持多种漏洞类型的动态验证:
PentestGPT是2024年推出的基于大语言模型的自动化渗透测试框架,充分利用了大语言模型所具备的丰富领域知识。PentestGPT由三个相互协作的模块组成,每个模块分别负责渗透测试中的不同子任务,从而有效解决了与"上下文丢失"相关的问题。
论文探讨了以下两个问题:
论文以GPT-3.5、GPT-4和Bard为代表性的大语言模型进行探索研究,研究发现,大语言模型在处理测试过程中的具体子任务方面表现出色:它们能够熟练使用各种测试工具,理解这些工具的输出结果,并提出相应的后续操作方案。与攻防专家相比,大语言模型在执行复杂的测试命令方面更具优势,而像GPT-4这样的模型则更擅长理解源代码并识别系统中的漏洞。此外,大语言模型还能生成恰当的测试命令,并准确描述完成特定任务所需的图形用户界面操作。凭借其庞大的知识库,它们能够设计出创新的测试方法,从而发现系统及CTF挑战中的潜在漏洞。但是大语言模型在全面理解整个测试流程方面还存在困难,例如随着对话的进行,模型可能会忽略之前的发现,难以始终如一地运用自己的推理能力来达成最终目标。此外,大语言模型在对话记录中总是过分强调最近完成的任务,而忽略了这些任务可能存在的漏洞。因此,它们往往会忽视在之前的测试中暴露出来的其他潜在攻击点,从而无法顺利完成渗透测试任务。
由此引出了PentestGPT,这是一个专为提升大语言模型在渗透测试中的应用而设计的交互式系统。该系统借鉴了渗透测试团队之间的协作模式,特别适合用于处理规模庞大、结构复杂的项目。它由推理、生成和解析模块三层架构组成,每个模块在渗透测试中都扮演着特定的角色。推理模块模拟了安全专家,专注于渗透测试结果,并为下一步准备测试策略。论文基于网络安全攻击树引入了一种新的表示方法,即渗透测试任务树(PTT),这种结构编码了测试过程的当前状态并引导后续操作。这种表示法可以独特地翻译成自然语言并由大语言模型解释,从而被生成模块理解并指导测试过程。生成模块模仿初级测试工程师的角色,负责为特定子任务构建详细的操作步骤。将这些步骤翻译成精确的测试操作可以提高生成过程的准确性。同时,解析模块处理渗透测试过程中遇到的各种文本数据,如工具输出、源代码和HTTP网页。它浓缩和强调这些文本,提取关键信息。这些模块共同作为一个集成系统发挥作用,从而保证测试过程连贯有效。
PentestGPT 是论文中所设计的全自动渗透测试工具Malism的一个模块,下图展示了用户使用Malism对目标系统进行渗透测试时可能遵循的各种操作流程:
PentestGPT模块架构如上图所示。主要分为三大模块,分别是解析模块、推理模块和生成模块。解析模块:解析渗透工具的输出和Web界面的内容。作用:提取关键信息、减少计算成本推理模块:解释渗透测试过程,告诉渗透测试人员下一步该做什么解决的问题:大语言模型难以维持长期记忆,在论文中作者创新性的引入了渗透测试任务树(PTT)这一概念。如下图所示:其中a表示以可视化的树形结构呈现。b表示以自然语言形式通过大语言模型进行编码
推理模块的步骤可以分为以下几个部分
生成模块:生成用户可以执行的精确命令或渗透测试操作
论文深入探讨 了大语言模型在渗透测试中的潜力与局限性。通过构建一个新的测试基准进一步了解了大型语言模型在渗透测试这一复杂领域中的表现。虽然大语言模型能够顺利完成一些基本任务,并能有效地使用各种测试工具,但它们在处理特定任务相关的情境信息以及应对各种复杂挑战时仍存在明显不足。为了解决这些问题,论文设计了PentestGPT,PentestGPT借鉴了渗透测试团队的工作方式,其系统由解析模块、推理模块和生成模块组成,从而实现了更加高效的问题解决方式。这项研究为未来在网络安全领域的发展奠定了坚实的基础。
早期尝试自动化渗透测试的过程时,主要采用的是强化学习方法。然而,这些方法主要侧重于提出攻击方案,而并未真正执行这些攻击方案或生成详细的测试报告。最近的一些研究则探索了使用大语言模型或基于大语言模型的代理来自动化渗透测试。不过,这些方法仍存在一些局限性 (a)在没有人工指导的情况下,它们难以制定有效的攻击策略,因此往往只能采用一些简单或重复性的攻击方法,从而无法取得实质性的进展 (b)其自动化程度仍然较低,因为通常仍需要人工来为工具执行命令并处理测试结果 (c)这些方法主要起到辅助作用,仅能提供基本的指导,并且只能支持有限数量的测试工具。因此,这些方法在自动化渗透测试方面的效果仍然十分有限。 基于以上局限性设计了AutoPentester,论文指出与那些依赖固定模板、人工指导或有限工具处理能力的传统方法不同,AutoPentester采用了一种全新的架构,该架构由五个关键模块组成。
AutoPentester的主要贡献有以下4点: 提出了AutoPentester,这是一个用于自动化渗透测试、软件漏洞评估和威胁分析的新型LLM代理框架。AutoPentester有效克服了现有方法的一些关键局限性,例如战略规划能力有限、无法根据选定的计划自动进行调整、自动化程度较低,以及过度依赖人类专家的经验。 使用三种大语言模型对AutoPentester进行了测试,并在多种渗透测试和威胁评估任务中对其进行了验证。测试结果表明,AutoPentester具有显著的优势:与PentestGPT模型相比,其子任务的完成率提高了27.0%,漏洞检测的覆盖率也提高了39.5%。 深入分析了AutoPentester的各个模块如何弥补PentestGPT的不足,并通过一系列实验来验证这些模块是如何协同工作以生成渗透测试结果和报告的。实验结果表明:RAG功能使子任务的完成效率提高了20.0%;重复识别功能减少了90.5%的循环次数;结果验证功能则使未完成的命令数量减少了80.1%。 对专业渗透测试人员及网络安全专家进行了调查,以评估AutoPentester的性能、生成报告的质量以及它与PentestGPT之间的差异。在所有测试项目中,AutoPentester的平均得分为3.93分(满分为5分),其表现明显优于PentestGPT——优势高达19.8%。此外,参与者认为AutoPentester能够显著节省初始渗透测试阶段的时间。
AutoPentester 的设计目的是模拟渗透测试人员的思维方式,从而提升他们的测试效率。渗透测试人员通常会先进行信息收集工作,然后根据前一步骤所获得的线索逐步利用系统中的漏洞进行攻击。在整个测试过程中,渗透测试人员会不断分析测试结果,调整自己的测试策略,并选择最有效的行动加以执行。这个迭代循环会持续进行,直到所有服务和软件都经过全面评估为止。遵循相同的原理,AutoPentester框架以迭代的方式运行:每次迭代只执行一个任务,并根据之前的执行结果动态调整攻击策略。
在 AutoPentester中,这种目标行为是通过五个基于大语言模型的代理模块来实现的:总结模块、策略分析模块、命令生成模块、结果验证模块以及报告生成模块,如下图所示:
当接收到一个初始任务例如目标机器的 IP地址时,AutoPentester会将该任务分解为多个子任务,并通过迭代的方式依次执行这些子任务。通常,它会使用nmap扫描工具来识别目标机器上的开放端口和服务,从而进行漏洞评估;随后会针对每个服务进一步进行漏洞评估和攻击尝试。
总结模块的输入是上一步工具的输出,这些输出结果已经通过结果验证模块的审核。这里的工具指的是任何可以通过命令行界面使用的安全工具,例如 Nmap、Nikto、Metasploit、Dirbuster以及curl等。这些工具产生的输出结果通常很长,往往超过了大语言模型的输入字符限制。为了解决这个问题,总结模块会将工具的输出结果分割成长度为6000个字符的片段,每个片段之间会有500个字符的重叠部分,这样做能够保证内容之间的连贯性。然后,总结模块会使用大语言模型来对每个片段进行处理。最后,所有结果会被合并在一起,再次通过大语言模型生成最终的输出结果。这样,策略分析模块就可以轻松地理解之前的分析结果,并据此更新攻击方案。
策略分析模块是 AutoPentester的核心模块。它的设计灵感来源于PentestGPT,但主要区别在于采用了经过修改的攻击树结构(即PentestTree,简称PTT),以及以发现结果为导向的推理机制来制定相应的攻击策略。在PTT中,攻击测试流程中的每个步骤及其