渗透测试一直是安全里边很挑战的工作,虽然有着各种各样的工具,但仍然对人的能力要求极高,同时测试执行的效率很低。大模型出现后,很多人开始尝试用大模型来执行渗透测试,今天看第一个项目,PentestGPT。
01
项目思路
期望的自动化系统,在用户输入渗透测试目标后,大模型能够输出操作指令,然后在测试环境中执行操作指令,并获取操作结果后再送给大模型,由大模型输出下一步操作,直到达到目标(夺旗,或结论)
02
系统架构
实际系统的架构如图,共分为三个模块,解析模块,推理模块和生成模块:
注意
1.外实线框加内虚线框(见图例)代表该功能由大模型完成。
2.最下边的测试环境部分,主要操作仍然是人来执行的,每次执行后,仍然由人参与交互,这个可以理解为本项目未完成完全自动化,也可以理解为大模型目前的能力还不太合适完全自动化。
3.Youtube上有个演示视频,就是模型输出和人的操作分开进行的,目前该操作方法还未更新。
1)推理模块在系统中扮演着⼀个关键⻆⾊,类似于⼀个团队负责⼈,从宏观⻆度监督渗透测试任务。它从⽤⼾那⾥获取测试结果或意图,并为下⼀步的测试策略做好准备。这个测试策略被传递给⽣成模块进⾏进⼀步的规划。生成类似下图:
2)⽣成模块将推理模块中的特定⼦任务转换为具体的命令或指令。每次收到新的⼦任务时,⽣成模块都会启动⼀个新的会话。这种策略有效地将总体渗透任务的上下⽂与正在执⾏的即时任务隔离开来,使 LLM 能够专注于生成特定命令。类似下图:
3)解析模块充当⽀持性接⼝,能够有效处理⽤⼾与其他两个核⼼模块之间交换的⾃然语⾔信息。两个需求可以主要证明该模块的存在。⾸先,安全测试⼯具输出通常很冗⻓,包含⽆关细节,将这些扩展输出直接输⼊ LLM 需要耗费⼤量计算资源(甚至可能超出tokens限制),⽽且会产⽣不必要的冗余。其次,不具备安全领域专业知识的⽤⼾可能难以从安全测试输出中提取关键⻅解,这给总结关键测试信息带来了挑战。因此,解析模块对于简化和压缩这些信息⾄关重要。
03
测试效果
系统对三类任务进行测试,其中简单7个,中等难度两个,对比GPT3.5和GPT4的效果如下,其中,图B是子任务难度。
04
项目关键发现
-
⼤型语⾔模型 (LLM) 已显⽰出执⾏端到端渗透测试任务的能⼒,但难以克服更困难的⽬标所带来的挑战。 -
LLM 可以⾼效使⽤渗透测试⼯具,识别常⻅漏洞,并解释源代码来识别漏洞。 -
LLM难以维持长期记忆,而这对于关联漏洞和有效制定利⽤策略⾄关重要。 -
LLM强烈偏爱近期任务和深度优先搜索方法,导致过度关注一项任务而忽略之前的发现。 -
LLM可能会产生不准确的操作和命令,通常源于固有的不准确性和幻觉 05
总结
由于渗透测试需要大量的经验,对工具及漏洞、系统的熟悉,这对人的记忆能力和训练都有非常大的挑战,而这些,恰好是大模型最重要的能力。从这个角度看,用大模型做渗透测试是非常合理的,PentestGPT做了非常好的探索,其论文在33届UseNIX上发表,获得Distinguished Artifact Award Winner(杰出作品奖)
相关论文和视频见
https://www.usenix.org/conference/usenixsecurity24/presentation/deng
代码在
https://github.com/GreyDGL/PentestGPT
END
原文始发于微信公众号(AI与安全):PentestGPT,用大模型辅助渗透测试,已开源
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论