如果攻击者在攻陷一台服务器后,不再需要亲手敲打每条命令,而是让一个大模型代理自主完成敏感信息搜集、云凭证提取、数据库全量导出,整个过程不到两小时就干净收场,你会作何感想?5月10日,云安全公司Sysdig记录到一起罕见的入侵事件,攻击链的末端操控者很可能并非人类,而是一个能看懂中文提示、会自主规划“看还能做什么”的AI代理。

整场行动的起点,是一台暴露在公网上的Marimo交互式笔记本。攻击者利用编号CVE-2026-39987的预认证远程代码执行漏洞,直接拿到了服务器的控制权。该漏洞影响所有早于0.20.4版的Marimo,由于在身份验证前即可触发,未经授权的攻击者能够执行任意系统命令,漏洞修复在刚刚发布的0.23.0中才落地,而此前已有攻击者利用它向蜜罐系统发起人工侦察,尝试搜刮敏感数据。

打开网易新闻 查看精彩图片

Sysdig观察到,这次的攻击者在获得初始权限后,第一时间从被控主机上提取了两份云凭证,紧接着通过一个扇出式的出站通道池回放这些凭证,远程访问AWS Secrets Manager并成功取回一枚SSH私钥。云凭证本身来自何处?虽然受害环境的具体配置未被披露,但从“可被公网访问的笔记本”这一特征不难推测,运行在云主机上的Marimo实例很可能绑定了权限过大的实例角色或硬编码了长期访问密钥,攻击者只是用一条简单的命令就从本地元数据服务或配置文件中捞到了通往AWS控制平面的船票。

拿到SSH私钥后,攻击者的行动骤然加速。几分种内,他利用该密钥对一台SSH跳板机发起了首次登录认证,随后一口气打开了8个并行SSH会话,直连跳板机背后的下游服务器,目标指向一个内部PostgreSQL数据库。Sysdig用“堡垒阶段”来描述这一幕:攻击者不但抽走了完整的数据库结构定义,更在不到120秒的时间里,将全量数据一并拖走。从最初漏洞利用到数据完全渗出,整条攻击链仅持续了一个小时出头,节奏紧凑得近乎自动化流水线。

而真正让这次入侵变得与众不同的,是后渗透阶段表现出的高度机器自主性。Sysdig指出四个关键迹象,每一处都像指纹一般,印出了大语言模型代理正在操控全局的特征。

第一个迹象,攻击者在完全没有任何数据库结构先验知识的情况下,即兴完成了一次数据库转储。被拖库的数据库主机名本身毫无线索,磁盘上没有留下应用标识,事先也没有拉取过任何表结构快照,然而攻击链在几分钟内就精准定位到了存放凭证的表。换言之,代理并非按图索骥,而是凭借实时探测系统表、分析返回结果来动态构建下一步查询,这正是当下LLM工具链中常见的“边探索边执行”模式。

第二个迹象,一条中文规划注释毫不在意地泄漏在命令流里。当攻击者执行凭证搜索时,命令输出中赫然出现了一句“看还能做什么”。翻译过来就是“See what else we can do”。这显然不是给人类攻击者看的菜单,更像是代理的内部规划提示,暴露了它在完成当前子任务后,自动评估后续可选动作的决策过程。

第三个迹象,所有命令几乎都是为机器消费而设计的。每条命令之间用一连串“---”分隔符严格隔开,输出捕获被限制在可控范围内,“less”命令被主动禁用,标准错误流(stderr)被直接丢弃以压制噪声。这种配置绝非随手为之,它让上一级编排程序可以像解析API响应一样解析命令结果,人类操作员反而会觉得反直觉。攻击者不再需要凝视终端输出,代理已经把信息流裁切成最适合自己消化的大小。

第四个迹象,值传递的方式彻底暴露了工具链思维。数据库密码之类的敏感字段,不是从某个文件中直接抄录,而是从先前工具的输出中按规则提取,再自动填入下一个连接命令的参数位置。这种跨工具数据流无缝衔接,恰恰是LLM代理将函数调用结果作为链式输入的标准操作。攻击者借助这一机制,可以在完全不知道数据库主机名具体含义、不了解内网拓扑的情况下,依然顺畅地走完连接、查询、导出整条路。

“攻击者现在不再需要事先观察你的环境,就能在里面自己行动了。”Sysdig如此总结。这句话的份量不容轻忽:传统后渗透往往依赖攻击者对目标内部进行大量手动探索,摸清资产、绘制拓扑、试探权限,而LLM代理的出现,正把这一切压缩为按需即查的自适应剧本。哪怕数据库主机名晦涩难解,磁盘上没有可读的应用标记,代理依旧能靠着“看还能做什么”的好奇心一路摸到核心,并用迅雷不及掩耳的速度完成数据外传。

事件中还有一些细节值得划上重点。扇出的出站通道池用来回放窃取的云凭证,其意图很可能是分散异常流量,避免单一出口触发云厂商的异常行为检测;八条并行SSH会话同时向数据库施压,既加快了拖库节奏,也让日志里的并发连接多得像一次日常运维的批量任务,从而降低被实时告警盯上的概率。这些手法与LLM代理的配合,意味着攻击者在行动设计阶段就已经把隐身和速度写进了代理的规划模块。

这也解释了为什么Sysdig能够从命令字里行间捕捉到机器代理的证据。人类攻击者很少会画出整齐划一的“---”分隔符,也鲜少会刻意禁用“less”并把错误流直接丢弃,更不会把中文规划提示像调试信息一样留在流量里