大模型辅助渗透测试的研究和论文越来越多,今天介绍一篇,只需要输入IP,就可以拿到shell,完全不需要干预的自动化。系统的名称是RapidPen,日本人写的。
本文共分五部分:
1.预备知识
2.系统架构及模块解析
3.RAG的使用
4.实际效果
5.总结
01
预备知识
在PentestGPT 的先前工作中中,引入了渗透测试任务树(PTT)的概念,将整个渗透测试过程构建为属性树,其中每个节点代表一项任务(例如,端口扫描、漏洞测试、利用),边缘定义任务之间的推理流或依赖关系。随着新任务的生成、完成或由于部分故障而需要回溯,树会动态演变。
本项目扩展了PTT树,增加
1.环境元数据。我们的 PTT 包含一个专用的元数据块,用于捕获有关渗透测试环境的详细信息(例如攻击者和目标 IP 地址、时间戳、测试状态)。
2. 节点运行结果。每个任务节点都维护命令执行的历史记录,包括执行的命令字符串、exit_code、exit_class和简短的日志摘要。这使得Act模块输出和Re模块的推理状态之间的相互作用更加清晰。
3. 基于 JSON 的 I/O。我们始终以 JSON 格式存储和交换 PTT,确保 LLM 在严格的架构内运行。这可以防止 LLM 附加新任务或更新现有节点时出现歧义或“幻觉”。
简要结构如下图:
02
系统架构
系统架构图
其中输入简单,就是目标IP地址,输出包括测试过程和结果。
两个关键部分
1. RapidPen:里边包括一个Re和Act模板,这个整个测试的实现核心。
2. RapidPen-vis:用于监控中间过程和最终报告的单独可视化工具。
RE模块细化
RapidPen 中的Re 模块由Re (L1) PTT Planner和Re (L1) PTT Prioritizer子模块组成。PTT Planner 负责扩展和维护 PTT 树,而 PTT Prioritizer 则确定下一个要执行的任务。
左边的PPT Planner用于规划:
PTT 规划器 ,处理上次执行任务的命令结果,以在 PTT 中的第 2 级 (L2) 生成新任务。这些任务使用基于 LLM 的方法进行重复数据删除,然后合并到 PTT 中,将其从旧状态更新为新状态(如下图)。
右边的PTT Prioritizer 用于新任务生成
该模块根据历史成功案例生成新任务。过程首先从上次执行的任务中提取命令结果。LLM 查询相关的历史成功案例,然后对其进行分析以提取关键见解。基于此分析,生成新任务并将其集成到规划过程中。如下图:
两个合起来,其实就是不停地根据任务情况不停更新PTT,以应对结果变化。
执行模块
生成命令,执行命令,自动纠正,错误反馈。该模块相对简单,注意,Command Generation是用大模型生成,实验中经常会出错,RAG是辅助手段。
03
RAG的使用
虽然ReAct提供了通用的“推理-表演”模式,但 RapidPen 通过两个专门的检索增强生成 (RAG)存储库(用于特定于域的命令和经过验证的漏洞利用步骤)增强了这种方法:
1. Act(L1)命令生成 RAG:来自HackTricks 的 148 个 Markdown 文件精选集,主要关注“网络服务渗透测试”(例如 SMB、FTP、SSH)。这些文档提供了与初始访问阶段相关的典型扫描命令、漏洞利用技术和枚举策略。命令生成模块引用这些文档通过 LLM 生成命令。
2. Re (L2) 新任务RAG: JSON 格式的 PTT 捕获成功的渗透测试序列。目前,此数据集包括 Hack The Box 中蓝机的两个 PTT 。每个文件都概述了从扫描到获取 shell 的分步说明。新任务(成功案例)模块根据最近执行的任务的结果为 RAG 生成搜索查询。然后,它会分析检索到的 PTT 输出以生成有效的子任务。
04
实际效果
项目使用了Dify开发框架,Gpt4-o模型。使用 Hack The Box “Legacy” ,攻击时间限制为200-400秒,结果如下:
Re (L2) 新任务(成功案例)对渗透测试效率的 影响。
左列(黄色)代表启用成功案例的运行,右列(绿色)代表未启用成功案例的运行。
顶行:每次运行所用时间(秒)。有成功案例的运行往往完成得更快,而没有成功案例的运行则表现出更大的差异,并且一些失败时间超过 1200 秒(强制终止)。
底行:成功或失败前采取的步骤数(PTT 扩展)。没有成功案例的运行通常需要更多步骤,表明任务选择效率低下。
垂直虚线将成功和失败的运行分开,突出显示与有成功案例(6/10 成功)相比,没有成功案例(3/10 成功)的失败率更高。
大约一半的成功率吧。
注:测试无后期利用,只获取shell,不做提权及横向移动,只包含shell,包含Web或UDP类的处理。
文中还透露了一个大模型的成本:通常每次运行低于 0.60 美元,其中Re(L1)PTT Planner模块贡献最大。
05
总结
此项目的思路,看上去非常象渗透测试自动化,但经过大模型的加持,自动化的实现过程确实比之前基于代码的要容易得多,毕竟返回结果大模型可以读,然后生成命令,最消耗的环节不需要了。
从另一个角度,大模型辅助渗透,确实看起来越来越有用。
项目在油管上有个demo
https://www.youtube.com/watch?v=uk4209jyzvg
论文在:
https://arxiv.org/html/2502.16730v1
未开源
END
原文始发于微信公众号(AI与安全):使用基于 LLM 的代理进行全自动 IP 到 Shell 渗透测试
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论