2025,Agent元年。
这一年,大家都在积极探索AI+安全的应用场景,在网络上读到了很多优秀的文章,收获颇丰,也激发了我自己动手的念头,LLM具备强大的理解、推理和决策能力,Agent又能提供操控武器的能力,若将其与标准化的攻击工具相结合,便有望实现"人类制定战略目标,AI自主规划战术执行"的新型攻防模式。
带着这个想法,我最近探索了多Agent协作进行自动化内网渗透的技术路径,踩了不少坑,也有一些收获,整理成文,分享给大家。
这个项目其实一年前就开始写了,期间被项目、毕业等各种琐事反复打断,拖了很久,最终借助AI强大的编码能力,在2026年元旦前完成了第一个完整可用版本:
我给它取名叫 ZDrive——英雄联盟宇宙中艾克的武器,时间线上的破坏者,恰如其分。

ZDrive的设计围绕四个核心展开:
| 设计理念 | 核心思想 | 价值 |
|---|---|---|
| 插件化 | 轻量主体,按需加载 | 降低静态特征暴露面 |
| 隐匿通信 | 一包一密 + AI生成Profile | 伪装业务流量,对抗流量设备 |
| 免杀 | 后渗透操作及插件独立免杀 | 绕过运行时行为检测,确保操作成功率 |
| 原子化 | 所有功能皆为原子,皆可被AI调用 | 为Agent提供标准化接口,实现智能编排 |
经常打攻防的朋友应该遇到过,去年年初微软Defender把Godzilla的C#核心载荷加入了AMSI(反恶意软件扫描接口)规则,shell拿到了,但是初始化会失败,被Defender查杀,虽然可以使用bypass amsi的方法去绕过,但是patch amsi的方法又要免杀,无疑是陷入了"解决A又产生了新问题B"的循环。
为了防止这种事情发生ZDrive的解法是插件化:

通信流量特征是以往Webshell工具的痛点,哥斯拉、冰蝎等工具的流量特征已被各类安全设备广泛收录,辛苦拿到的Shell一连就被应急,因此市面上有了很多二开版本,Zdrive是可高度自定义流量伪装,且可选一包一密的加密方案。


更进一步:集成了AI Profile生成器,Agent可以根据输入的目标URL业务特征,自动分析并生成伪装配置文件

让恶意流量混入正常业务请求中

这是ZDrive最核心的设计理念,也是Agent自动化攻防能力的基础。
将所有功能拆解为最小可执行单元,每个原子操作:

因为Agent需要"抓手",大模型擅长理解、推理、决策,但它需要具体的工具来执行动作,原子化后,每个原子就是一个Tool,Agent可以像调用函数一样调用它们。
ZDrive可启用Api server将所有原子操作暴露为http接口:

每个原子化api都需要标准化的输入输出规范及文档,供Agent阅读和理解:

每个原子操作被封装为Tool 格式统一、调用简洁:
class EnableAMSIBypassTool(BaseTool):
name: str = "enable_amsi_bypass"
description: str = "启用AMSI绕过,用于躲避Defender等杀软检测"def _run(self) -> str:
result = get_api_client().enable_amsi_bypass()
return format_result(result)
所有原子工具遵循声明名称和描述,调用ZDrive API,返回结构化结果。Agent无需关心底层实现细节,只需知道这个工具能做什么即可。
免杀是一场持续的攻防对抗,目前,ZDrive 尚未开源,也未被主流安全厂商收录为静态特征,因此其原生 Shell 无需额外编码或混淆,即可在各大平台上实现0查杀。

在动态检测方面,所有后渗透插件均集成了针对性的免杀方案,能够有效绕过主流杀毒软件的运行时行为检测,具体技术细节和本篇文章主题关联性小,此处不再赘述。
个人理解,内网渗透本质是在不被安全设备检测到的前提下,持续收集凭据,不断横向直到拿到目标系统的过程,不管是传统域还是现代云架构,大致思路都一样,无非是收集凭据和资产探测的方式不同。
然而,在真实的大型内网环境中,这个过程存在大量重复性操作:
这些操作虽然繁琐,但模式相对固定,只要我们的原子武器足够免杀,完全可以交给Agent自动化执行从而减少这种重复性伤肝操作,提高红队作战效率。
基于此理念我使用简单开源的多agent框架CrewAi进行了自动化内网渗透初试。
市面上的Agent框架不少——LangChain、MetaGPT想快速验证可行性,我选择了简单上手的框架CrewAI
实践中发现的不足:
这些问题在后续的攻击链演示中会具体展开。
这里共设计了六个Agent协作,各司其职:
| Agent | 职责 | 核心能力 |
|---|---|---|
| 信息收集专家 | 摸清目标资产 | 杀软识别、网络环境、系统权限 |
| 凭据提取专家 | 获取认证凭据 | 获取Ntmlhash、明文密码等凭据 |
| 后渗透横向专家 | 已获取的凭据进行横向,扩大战果 | Hash传递、代理隧道、权限维持 |
| 漏洞利用专家 | web漏洞利用获取权限 | 指纹识别、漏洞库查询、漏洞利用 |
| 日志清理专家 | 痕迹处理 | 日志清理、痕迹消除 |
| 攻击路径报告专家 | 梳理总结 | 攻击链还原、报告生成 |
各个agent之间的理想协同如下图:

每个Agent的操作都遵循标准化的四阶段流程:

完全自动化并非最优解,危险的操作需要人工确认,降低误操作风险:

一个在靶场中理想的自动化攻击流程:
入口机(10.33.0.16)
│
▼ 信息收集专家
获取权限信息 → 发现低权限 → 检测杀软 → 发现Defender → 绕过杀软提权 → SYSTEM权限
│
▼
发现域环境 → 收集网段信息
│
▼ 凭据提取专家
执行SharpWeb → 执行Mimikatz → 获取Hash1(10.33.0.16)
│
▼ 后渗透横向专家
开启SOCKS代理 → 内网扫描 → 发现Exchange(10.33.0.31)、其他存活主机
│
▼
使用Hash1 PTH横向 → 成功登录10.33.0.8
│
▼ 凭据提取专家
执行Mimikatz → 获取Hash2(域管Hash)
│
▼ 后渗透横向专家
使用Hash2 PTH横向 → 拿下域控(10.33.0.4)
│
▼
使用域管Hash登录Exchange邮件服务器(10.33.0.31)
│
▼ 日志清理专家
入口机器攻击日志清除
│
▼ 攻击路径报告专家
生成完整渗透报告
无人工介入的情况下可以完整的拿到整个靶场域控权限,并且都权限维持到c2上。
实际使用ZDrive_Agent进行攻击遇到了一些问题,主要在横向移动过程中:
在PTH横向时,Agent容易产生幻觉,一直使用低权限域账号尝试登录域控,幻觉已经拿到了域管的权限,尽管在Prompt中已强调权限匹配,当内网扫描发现大量445端口存活主机时,Agent会反复调用PTH工具逐个碰撞,反复调用function call导致上下文过长,容易消耗过多的token以及产生灾难性遗忘。


解决方案:将PTH横向逻辑从LLM决策中剥离,改用确定性Python脚本执行:
# Agent只需调用一个Tool,传入资产表和凭据表路径给python脚本执行
# Python脚本负责:
# 1. 读取资产表,提取445端口存活的IP
# 2. 读取凭据表,获取所有可用Hash
# 3. 使用NetExec遍历喷洒
# 4. 成功的目标继续提取Hash
# 5. 将结果结构化返回给LLM 
LLM只做决策性质工作,确定性操作交给脚本,同样的思路也适用于其他功能,这样可以下降很多token消费。
在横向移动中不是线性流程,每拿下一台新机器,就需要信息收集专家和凭据提取专家再次介入,多个Agent需要反复协作、来回"横跳"。然而CrewAI的流程控制偏向线性任务链,对于这种动态循环、条件触发的场景支持并不理想,目前这个问题在CrewAi上还没有有效的解决 ,后面的想法是做一个轻量的主Agent负责调度,或者使用更加灵活的编排框架。
某些情况下LLM会触发道德限制,拒绝执行渗透操作(概率较小)
解决方案:
在本次测试简单的模拟域环境靶场中,使用glm4.7,完成一次完整的自动化渗透流程需要消耗10万 token,在内在真实的企业内网环境中,网络拓扑更加复杂,各Agent需要反复调用,实际消费token数量是一笔不小的开支。
ZDrive目前只是完成了一次初试,把原子化的灵活性与AI Agent的智能性结合起来,探索下一代红队武器的可能形态,但距离"理想中的AI红队武器"还有很多路要走。
AI驱动自动化攻防不是终点,而是起点,包括最近openclew的出现,可以有效的远程操作电脑,都在探索AI操作真实世界的可能性,虽然这些工具到真正实用还有距离,但它们指明了方向——AI Agent将成为人类能力的延伸,而非简单的工具替代。