PentestAgent: Incorporating LLM Agents to Automated Penetration Testing¶
约 2743 个字 6 张图片 预计阅读时间 14 分钟
Introduction¶
- 手动渗透测试耗时大,通常需要大型的、多样化的团队,这是大多数组织无法负担的。
- 早期的工作主要将攻击计划建模为确定的和完全可观察的世界中的攻击图问题,然而,这种方法有其局限性:从防守者的角度来看,它假设完全可观察性,缺乏动态环境的灵活性和适应性
- 后来的研究通过在规划方法中引入不确定性来解决这些缺点,将攻击计划视为马尔可夫决策过程(Markov Decision Process, MDP),将世界建模为状态,将行动建模为状态之间的转换,并使用奖励函数将从一个状态移动到另一个状态的“奖励”编码。
- 后续研究采用部分可观察马尔可夫决策过程(POMDP)和强化学习算法来解释环境和行动结果的进一步不确定性。这些改进可以更好地适应现实世界的情况,即攻击者对目标系统的了解有限。然而,这些概率模型侧重于建立自动化渗透测试规划的理论模型,缺乏实现方面的研究。
最近利用 LLM 自动化渗透测试已有一定成果,但是仍然需要解决两个关键的差距:
- 有限的渗透测试知识(模型训练数据集缺乏对渗透测试技术的全面覆盖)
- 自动化不足(缺乏适应各种环境的自动化能力,包括验证和调试建议的过程,以及动态获取和应用新的渗透测试技术)
论文推出的以 LLM 为基础的自动渗透测试框架称为 PentestAgent,会在 LLM 的帮助下,不断整合新技术并更新框架的知识库,同时建立一个强大的自动化渗透测试流水线,结合验证和调试机制,以确保在特定目标环境中生成的操作的有效性和相关性,目标是显著提高自动化渗透测试框架的实际适用性和可靠性。
PentestAgent 采用多 Agent 设计,每个 Agent 负责渗透测试过程中的特定任务,支持跨不同任务定制工具,从而增强系统的适应性,还集成了 RAG,有效管理上下文,提高生成输出的质量。
本论文贡献:
- 设计了 PententAgent,需要很少的人工干预
- 设计了一个全面的渗透测试基准,基于开源的预构建的有漏洞的 Docker 环境 VulHub
- 设计了实验和指标来在我们的基准上评估 PentestAgent
Background and Related Work¶
Penetration Testing¶
渗透测试包含三个阶段:情报收集、漏洞分析和漏洞利用
渗透测试大致分为外部评估和内部评估,外部评估集中于暴露在互联网上,使用注入社会工程、红队等技术的资产(例如 Web 应用、在线服务),内部评估的目标是组织的内部网络、源代码或物理设备,通常涉及代码审查
最近的一些工作已经通过 LLM 加强了内部评估,但是在外部评估方面(特别是 Web 渗透测试)仍然没有得到充分探索
- 现有的工具单独使用是有效的,但它们的有效使用需要专业知识、人工决策和协调工作流程的重大努力
- AI 驱动的渗透测试框架可以生成合理的攻击计划,但它们缺乏渗透测试的动态实现方面。它们无法对潜在的失败做出反应,也无法实时调整计划。
- 基于 LLM 的渗透测试框架仍然缺乏对实际使用的阶段和自动化的全面覆盖,例如 autoattack 专注于构建泄露后的攻击,而忽略了泄露前的阶段;PentestGPT 依赖于人工决策来处理任务的某个分支,从而导致效率低下和无效。他们都依赖于 LLM 预先训练的知识和人工分析来收集关于目标的附加信息,发现和验证漏洞,并从任务树中选择下一步。这些任务仍然需要大量的人工工作
Challenges of Applying LLM to Pentesting¶
- 渗透测试知识有限,LLM 需要用户手动搜索额外的信息,如实际的 CVE 编号,分析 CVE 的相关信息
- 短期记忆,模型上下文窗口的限制导致了短期记忆问题,在诸如渗透测试之类的长期任务中变得特别具有挑战性,因为渗透测试需要长时间的连续记忆,短期内存限制可能会导致重复任务、上下文丢失等问题
- 工作流集成,在渗透测试的环境中,涉及到相互连接的任务的多阶段流水线,集成 LLM 引入了输出质量控制、有状态工作记忆管理(要在连续状态记忆之间保持和切换)等问题
LLM Techniques for Overcoming Challenges¶
主要用到的技巧有 LLM agents,RAG,思维链,角色扮演,自我反思,结构化输出
System Design¶
System Overview¶
主要分为 4 部分:侦查 Agent,搜索 Agent,规划 Agent 和执行 Agent
- 情报收集:侦查 Agent 收到用户指定目标的输入后,通过收集目标主机的环境信息,启动渗透测试流程。侦查 Agent 生成并执行侦察命令,从目标主机收集全面的环境数据。侦查 Agent 分析执行结果并生成目标环境的摘要,该摘要存储在指定的环境信息数据库中
- 漏洞分析:搜索 Agent 查询环境信息数据库,以检索目标主机上公开的服务和应用程序列表,在这些服务和应用程序的指导下,搜索潜在的攻击面和过程,并将它们保存在单独的数据库中;计划 Agent 首先利用 RAG 技术查找潜在攻击面列表,并使用这些已识别的攻击面来确定针对目标环境的适当攻击
- 漏洞利用:执行 Agent 尝试在目标主机上执行这些攻击计划,与环境信息数据库通信,以获取执行漏洞利用所需的信息。它还通过修改代码或执行附加命令来调试任何执行错误,以收集更多信息。所有的执行历史都存储在数据库中,可以用来生成全面的渗透测试报告。
Reconnaissance Agent¶
侦查 Agent 在一个自迭代循环中运行,生成侦察命令,从目标收集信息,并分析这些命令的结果,直到做出最大努力。一旦侦察循环结束,Agent 总结其发现并将其存储在数据库中。它遵循由专家知识定义的一般工作流程来执行侦察任务。它在 RAG 框架支持的外部知识的帮助下确定要使用的特定过程或工具。
Search Agent¶
搜索代理将目标服务和应用程序作为输入,并将相关攻击知识存储到数据库中作为输出。搜索代理对相关信息执行两轮分层在线搜索。在第一轮中,它搜索和分析结果,以提取与目标相关的潜在攻击面。在接下来的一轮中,它使用已识别的潜在攻击面作为搜索和分析攻击知识的指南。潜在的攻击面和攻击知识存储在两个独立的数据库中,以备将来使用。
- 在线搜索模块是可定制和可扩展的。第一轮中使用谷歌和漏洞数据库搜索来识别潜在的攻击面,要求提供有关漏洞的相关性和关键信息,例如 CVE 编号,以及其他可以导致更详细信息的关键字或 url,然后在第二轮中使用谷歌和代码库搜索来查找漏洞实现细节。
- 利用基于 RAG 的问答从原始搜索结果中提取关键信息,给定分析提示,RAG 框架将首先从搜索结果中检索相关的信息片段。然后,它将检索到的信息作为上下文的分析提示发送给作为问题的 LLM, LLM 将分析上下文中的信息,以帮助回答分析提示中的查询,并生成包含我们正在寻找的关键信息的搜索结果的综合摘要,并使用提取的知识构建更相关、更简洁的数据库,以分层树结构存储
Planning Agent¶
规划 Agent 将从侦查 Agent 处检测到的服务和应用程序作为输入,并生成开发计划作为输出。规划 Agent 利用RAG 和渗透测试知识库首先生成与服务和应用程序相关的潜在攻击面列表。然后,它遵循类似的过程来生成一个漏洞利用列表。它使用服务或应用程序作为查找潜在攻击面相关数据库的密钥,并根据服务或应用程序的版本和漏洞类型从数据库中检索这些攻击面,根据应用版本给出攻击面建议,并根据漏洞类型对攻击面进行分类,使用攻击面查找相关的漏洞数据库,并根据服务或应用程序版本和漏洞效果(例如,远程代码执行,身份验证绕过)从数据库中检索漏洞详细信息,根据应用程序版本提出攻击建议,并根据攻击效果对攻击进行分类。
Execution Agent¶
执行 Agent 将利用的详细信息作为输入,并尝试在目标上自动执行利用,最终生成利用摘要作为输出。执行 Agent 遵循规划 Agent 建议的顺序。每次攻击执行可以分为两个阶段:准备阶段和利用阶段。
在准备阶段,执行 Agent 分析漏洞利用的细节,以确定成功执行的需求,例如所需的参数。然后,查询包含环境信息的数据库以获得必要的信息。
在开发阶段,执行 Agent 使用 RAG 获取代码执行的详细信息,分解执行计划,并生成分步执行指南。与侦查 Agent 类似,执行 Agent 参与迭代循环来执行漏洞利用。
为了指导执行 Agent 调试错误,采用了自我反思。执行 Agent 根据代码和错误消息分析和修复错误,同时记录错误历史以供将来参考,以避免重复错误