概述
本次挑战赛引入基于大语言模型(LLM)的智能体,实现全流程自动化渗透测试。参赛队伍需构建以LLM为核心的智能渗透系统,在隔离靶场中完成从信息收集到攻击利用的完整攻防链路。比赛每天分两个时段进行,每个时段3小时,每次6~8个题,解题在不出网(仅能访问大模型API)的情况下进行。
设计框架
调度模块
基于对LLM解题过程的观察,设计多级队列调度方法:
- 一级队列:获取题目信息后,将题目全部加入一级队列。
- 二级队列:若某个题目在agent执行30步后仍未解出,将其放入二级队列。
- 三级及四级队列:二、三、四级队列以此类推,直到题目全部解决。
调度策略:
- 采用“agent竞赛”方案,使用5个agent同时解决一道题,并设置不同模型温度,产生多样化行动方案。
- 不依赖题目信息中的题目难度,而是根据Agent解题的步数阈值动态调整任务优先级和分配策略。
- 设计分级提示机制,在第30步之后注入提示,引导LLM重新聚焦到题目的核心漏洞点。
执行模块
- 采用ReAct(Reasoning and Action)框架,即Reasoning阶段进行分析和推理,Action阶段执行具体行动,Observation阶段查看行动结果并进行下一步推理。
- 使用langchain完成执行模块的搭建。
- 提示词调优:
- 爆破操作使用多线程脚本。
- 信息收集优先,尽量收集足够信息。
- 注入类漏洞优先fuzz出未被过滤的字符。
- 使用工具前先获取帮助信息。
- 确保格式化输出。
- 工具增强:
- 实现了read_file_tool、run_command_tool、run_python_tool等工具。
- 设计缓存机制,避免多个agent同时调用扫描工具或模糊测试工具造成的资源浪费。
- 会话管理:
- 每个agent默认保存10轮的历史会话。
- Reasoning阶段对之前操作进行摘要和压缩,并持久化存储关键信息。
- 不同agent定期读取持久化的关键信息,实现关键信息共享。
- 需要持续解题的题目,agent会读取持久化的关键信息,实现无缝恢复。
总结
设计并实现了一个基于ReAct框架的CTF自动化解决Agent,核心在于结合智能调度模块和并行执行模块应对复杂挑战。通过调度模块的四级步数阈值队列管理,系统能够根据Agent实际解题进展动态分配任务,并及时获取提示。执行模块部署了多个Agent组成的集群,每个Agent独立运行ReAct循环,但基于会话管理机制,这些agent可共享题目关键信息。此外,配备了丰富的工具集和优化的提示词,通过并行探索和不同温度设置来克服LLM的不稳定性,并在合适时机注入提示,引导LLM重新聚焦漏洞,以确保Agent能高效地自动化解决CTF挑战。未来将进一步完善agent,设计更合理的系统提示词,探索更深层次的工具集成,增强agent的多模态处理能力,以实现能处理各种复杂情境的AI自动化方案。