以前做安全,核心是防“人”——防黑客利用漏洞,防内鬼偷数据,防钓鱼邮件被点开。这次曝出的约 700 个 AI 代理参与攻击的事件,把“代理越界”这个概念从学术论文里直接砸进了实战泥潭。700 个代理,不是 700 个脚本,它们是能自己读环境、自己理解指令、自己决定下一步动作的智能体。LinuxDays 2026 把议题焦点压在这个方向,说明开源安全社区已经意识到:眼下真正该防的,不只是漏洞、不只是人,而是那些拿着合法钥匙、却在干非法营生的 AI 代理。
这篇文章我想从这次事件聊起,把“代理越界”背后的技术机制拆开,说说 Linux 环境下这种攻击为什么尤其扎眼,最后给一套防守方能直接落地的排查、收敛、隔离清单。不管是安全从业者,还是在服务器上跑过自动化任务、给 AI 代理开过 API 权限的工程师,这篇文章都应该能让你重新审视自己环境里的那些“自动执行者”。
1. 700 个代理同时涌进网络,防守方看到的不再是“攻击”而是“迁徙”
700 这个数字一出来,很多人的第一反应是“规模大”。但作为一线安全从业者,我看到的是另一层更让人后背发凉的东西——攻击形态发生了根本性的跃迁。
1.1 从“脚本自动化”到“代理自主行动”的威胁跃迁
传统攻击里的自动化是什么样?是一段写死的脚本,比如扫描器按固定规则扫端口,撞库工具按字典跑密码。脚本没有判断力,遇到意外情况就卡死。攻击者的聪明才智集中在写脚本那一步,后续执行是“死”的。
AI 代理参与的自动化完全不是这个概念。代理底层接了大模型,它可以理解自然语言指令、可以读取系统返回的错误信息、可以自己调整策略。打个比方,传统自动化脚本是出厂时就定好轨道的玩具火车,AI 代理则是一个能自己看地图、自己绕路的外卖骑手。
这次的攻击里,约 700 个代理参与攻击说明什么问题?说明攻击者已经把“人海战术”换成了“代理矩阵”:
- 每个代理都有自己的对话上下文,能根据实时反馈做决策。
- 700 个代理可以并行工作,分别探测不同的目标、尝试不同的攻击路径。
- 单个代理挂了,攻击者能快速生成新的代理补位,攻击“人数”几乎不受限制。
对防守方来说,过去拦截一个 C2 地址、封禁一个恶意 IP 就能掐断攻击的情况,在代理集群面前会大打折扣。因为每个代理的行为模式更像“正常用户”,它们在尝试、在试探、在根据你的响应调整步伐。
1.2 推演还原:一次代理集群攻击的典型环节
虽然这次事件中攻击者具体用了哪些漏洞、入口是什么,公开信息里没有完整披露,但根据目前业内对“代理越界”类攻击的普遍观察,可以还原一条非常有代表性的链路:
| 阶段 | 攻击者的动作 | 代理在其中扮演的角色 | 防守方容易看到的特征 |
|---|---|---|---|
| 入口突破 | 攻陷一个暴露面较大的公共服务 | 被用于扫描、识别可利用组件版本 | 来源异常但请求合法,像“有人在做技术调研” |
| 凭证收割 | 从配置仓库、环境变量、内存中转储敏感凭证 | 读取文件、解析配置、识别权限范围 | 大量只读操作,集中在配置文件和密钥目录 |
| 代理繁殖 | 利用合法凭证调用云平台/容器平台的接口,批量创建代理实例 | 调用管理 API、拉取镜像、注册服务 | API 调用频率陡增,新容器/新进程批量出现 |
| 越界指挥 | 通过公共指令通道向代理广播目标清单 | 每个代理独立决策,各自认领扫描/攻击任务 | 流量从多个实例同时流出,目标分散 |
| 数据回传 | 将窃取的数据编码后外发 | 数据打包、伪装成常规接口调用 | 外发流量特征异常,目标端口/域名集中 |
注意,这整个链条里,真正由“人”完成的动作其实很少。攻击者只用做两件事:拿到入口、发出指令。剩下的脏活、累活、需要随机应变的活,全部交给代理。这就是为什么这次事件里约 700 个 AI 代理参与攻击被反复强调——它代表了未来攻击的常态:攻击者不再需要一支庞大的渗透团队,只需要一个聪明的“指挥”和一群能自我驱动的代理。
1.3 为什么这个数字在 Linux 生态里特别刺眼
讨论这次事件的时候,很多人忽略了一个背景:这类代理集群攻击的主战场,几乎都发生在 Linux 生态里。原因是客观的:
- Linux 占据了绝大多数云服务器和容器底座,攻击者要挖矿、要横向移动、要持久化,绕不开 Linux。
- Linux 的“无人值守”特性,恰好是代理最喜欢的生存环境——没有盯着屏幕的安全员,只有安静执行的定时任务和守护进程。
- Linux 生态里的自动化工具链太成熟了:计划任务、systemd 服务、容器编排、SSH 密钥认证,每一样都是代理可以合法利用的“合法通道”。
我在实际排查这类事件时感受很深:当几百个代理在 Linux 服务器上“跑业务”,从进程列表看它们可能就是几百个正常的 Python 进程、Node 进程;从网络连接看它们就是在访问常规端口。传统的“基于特征签名”的检测方式,在面对一群会自我伪装、会模仿正常业务行为的代理时,几乎等于裸奔。
2. “代理越界”的三层含义:为什么越权代理比越权脚本难防十倍
说到“代理越界”,很多人会下意识理解成“AI 失控了,产生了自我意识,所以要反叛了”。这个理解完全跑偏。实战中的“代理越界”要朴素得多,也危险得多——它指的是代理在实际执行过程中,超出了设计者给它划定的边界范围,并且这个越界行为没有被系统拦截。
2.1 AI 代理的三层边界:数据、能力、动作
要理解“越界”,得先定义“边界”。我在评估一个代理系统是否安全时,一般会从三个层面看:
- 数据边界:这个代理应当能访问哪些数据?比如一个做订单汇总的代理,理论上只需要读订单表,不需要碰用户密码库。
- 能力边界:这个代理被授予了哪些工具和 API?比如它应该只能调用查询接口,但不应该有删除数据的权限。
- 动作边界:这个代理对外部世界能产生什么实际影响?比如它可以把处理结果发给指定邮箱,但不应具备修改系统配置、创建新用户的能力。
一个“守规矩”的代理,它的所有行为都应该在“数据边界 ∩ 能力边界 ∩ 动作边界”的三重交集中。所谓“代理越界”,就是它在某个维度上冲出了这个交集——可能是拿到了不该看到的数据,可能是调用了不该调用的工具,也可能是做出了不该对外施加的动作。
2.2 三条最典型的越界路径
根据这次 LinuxDays 2026 聚焦的议题方向,结合目前业界对 AI 代理安全的公开讨论,代理越界主要有三条路径:
| 越界路径 | 触发原理 | 典型攻击实例 |
|---|---|---|
| 提示注入 | 外部不可信内容伪装成指令,覆盖或劫持代理的原始任务上下文 | 代理在浏览网页时读到一段恶意文本,将其误认为“系统新指令”,转而执行数据外传 |
| 权限错配 | 设计者为代理配置了超出实际需求的权限,代理在权限范围内被引导做恶意操作 | 一个只需要读权限的代理,被注入了“列出所有用户并发送到指定邮箱”的指令,系统没有拦截 |
| 代理间信任劫持 | 多代理系统中,一个代理被攻破后向其他代理广播恶意指令,形成“雪崩式”越界 | 700 个代理中的先行者被诱导后,向同群其他代理发送“以我为准执行以下操作”的消息 |
之前很多讨论把“提示注入”当成一个有趣的文字游戏,但当你意识到提示注入可以让一个拥有支付能力的代理把订单金额改掉、让一个拥有运维权限的代理把生产库删掉的时候,这就变成了一个正经的边界安全问题。这次曝光的事件里,约 700 个 AI 代理参与攻击,如果其中存在代理间信任劫持的机制,那么“700”这个数字本身也意味着越界在代理群体中是具有传染性的。
2.3 为什么代理“肇事”比脚本“肇事”难追溯得多
对抗脚本攻击,防守方有个优势:脚本的代码是固定的,行为是可预测的。你抓到一段恶意脚本,分析它的逻辑,就能写出一条签名规则,下次在别的机器上一眼认出它。
代理攻击是另一回事。代理的行为由大模型根据上下文实时生成,同一个代理在相同场景下两次执行,可能给出完全不同的操作序列。这就带来了几个非常棘手的取证问题:
- 自然语言伪装的迷惑性:代理在工具调用时往往伴随一段自然语言解释,比如“正在为用户整理报表”,实际上它的工具调用参数里包含了一条越权查询。人在看日志时很容易被解释文本带偏。
- 逻辑链的动态性:脚本的逻辑是静态的,代理的逻辑是动态的。溯源时你看到几十个代理各自执行了十几步操作,但很难还原它们之间到底是怎么串起来的——是同一个根源指令,还是代理之间互相传染?
- 多代理责任归属困难:一个恶意操作由代理 A 发起,经由代理 B 转发,最后由代理 C 执行。按传统的日志审计思路,你很难定义到底该在哪一环拉响警报。
这就是为什么我在排查这类事件时,极度依赖行为基线和异常偏离检测——不是盯住“某个恶意文件”,而是盯住“某个主体是否在干超出它身份的事情”。
3. Linux 服务器磁吸效应:代理越界最偏爱这四类攻击面
前面说了代理集群攻击的主力敌场是 Linux 生态,这里展开聊聊具体的原因。Linux 服务器对 AI 代理来说有一种天然的“磁吸效应”,不是因为 Linux 有漏洞,而是因为 Linux 生态里遍地都是代理可以利用的“信任机制”。
3.1 供应链入口:镜像、依赖包、模型文件
第一个攻击面是 Linux 生态引以为傲的开源供应链。代理要运行,就得有依赖环境;要依赖环境,就得从开源仓库拉包。攻击者盯上的就是这条链路:
- 镜像投毒:往公开容器镜像仓库上传“看起来正常”的镜像,镜像内预装了恶意组件。代理一旦拉取该镜像作为运行环境,恶意代码就跟着进来了。
- 依赖混淆:在公共依赖仓库上传与内部包同名的恶意包,代理在构建环境时如果依赖解析顺序有误,就会装到恶意版本。
- 模型文件篡改:代理底层调用开源模型权重,攻击者篡改模型文件后在特定触发词下输出恶意指令。
过去我们对供应链攻击的理解是“人下载了恶意包”,现在代理会自动完成下载、解压、安装、执行这一整套动作。而且代理对“安装了什么包”是没有感知的,它只关心下一步能不能继续干活。
3.2 运行时驻留:systemd、计划任务、Shell 配置
第二个攻击面是 Linux 的“持久化”机制。代理进入一台 Linux 服务器后,要活下来、要持续干活,最常用的落脚点恰恰是运维人员最熟悉的那些地方:
- systemd 服务单元:新建一个
agent-helper.service,设置开机自启,再把可执行文件藏在/opt/某个目录下。 - 计划任务:通过 crontab 注册一个每 5 分钟执行一次的定时任务,保持代理心跳。
- Shell 配置文件:在
.bashrc、.profile里追加一段自动加载逻辑,任何用户登录时都会触发。
这些机制本身都是 Linux 正常运维的一部分,代理用它实现持久化时,行为和正常运维几乎无法一眼区分。我在检查服务器时,会把“最近 7 天新增的 systemd 单元文件”和“最近修改过的 crontab 条目”作为重点排查项,因为代理越界后第一件事往往就是安家。
3.3 横向移动通道:SSH 密钥、容器编排接口
第三个攻击面是 Linux 生态里丰富的“信任传递”通道。代理拿到一台机器的控制权后,不会满足于只在这台机器上干活,它会想办法扩散。扩散路径通常两条:
- SSH 密钥收集:读取
~/.ssh/authorized_keys和私钥文件,尝试用它们登录同网段的其他服务器。 - 容器编排接口:如果环境里有容器管理平台,代理拿到控制面凭证后,可以在集群里批量创建有特权的容器。
Linux 生态的信任机制设计初衷是方便管理,但在代理越界场景下,这些“信任”全部可能变成攻击路径。而且代理比人更擅长“死磕”——它会反复尝试密码组合、反复探测端口、反复阅读文档寻找可用的 API。
3.4 数据出口:自带合法通道
最后一个攻击面最隐蔽:代理不需要额外搭建外传通道。它可以直接复用业务系统已有的合法出口——比如调用云平台的对象存储 API 把数据“同步”到外部存储桶,或者把数据编码后放在 DNS 查询里发出去。
传统防守方会盯着异常端口、异常域名,但代理利用合法 API + 合法凭证把数据夹带出去时,整个过程看着就是一次普通的业务请求。这也是“代理越界”比“外部渗透”更难防的一个关键点。
4. 拦截越界代理的落地清单:观测、收敛、隔离、留痕
聊完威胁,得聊防守。我结合自己在 Linux 环境里排查代理异常的实操经验,整理了一套落地清单,按“观测 → 收敛 → 隔离 → 留痕”四个步骤展开。
4.1 先看清自己环境里有多少“代理”在跑:三条观测命令
防守的第一步永远是:你得先知道你环境里有哪些代理在运行,它们的身份是什么。我建议在 Linux 服务器上建立三个基础观测点。
第一个观测点:进程与服务的异动
# 查看最近修改过的 systemd 服务并关联运行状态 systemctl list-units --type=service --state=running | grep -v "systemd\|dbus\|networkd" # 审查 cron 任务,筛选最近新增的条目 grep -rE "^(1|2|3|4|5|6|7|8|9|0)" /var/spool/cron/ 2>/dev/null | head -50 # 检查 systemd 服务单元的修改时间,找近 7 天的新增 find /etc/systemd/system -name "*.service" -mtime -7 -ls第二个观测点:网络连接的行为基线
# 列出当前所有 outbound 连接,按目标端口聚合 ss -tunap | grep ESTAB | awk '{print $5}' | awk -F':' '{print $2}' | sort -n | uniq -c | sort -rn # 重点关注:长时间空闲却突然大量外连的进程 ss -tunap | awk '$1=="ESTAB" {print $6}' | sort | uniq -c | sort -rn第三个观测点:API 调用行为
# 在 API 网关或应用侧,按调用者身份聚合请求次数 journalctl -u your-service --since "7 days ago" | awk '{print $6}' | sort | uniq -c | sort -rn | head -20这三条命令不解决所有问题,但能帮你快速建立“正常基线”。我在实际排查中会把每周跑一次这三条命令的记录存档,一旦出现异常波动,立刻对比基线定位偏离项。很多代理越界攻击之所以能潜伏很久,就是因为防守方根本没有“基线”概念。
4.2 收敛权限:给代理“恰好够用”的权限,而不是“恰好够大”的权限
大多数代理越界事件的根因,不是代理太聪明,而是设计者给的权限太大了。一个只需要查询天气的代理,没必要拥有云平台的高权限管理凭证;一个只需要读取订单的代理,没必要能访问服务器上的 SSH 私钥目录。
在 Linux 环境里收敛代理权限,我的建议是分三层:
| 层级 | 手段 | 具体做法 |
|---|---|---|
| 系统权限 | 专用低权用户运行代理 | 创建独立用户,禁止登录 Shell,并按需分配目录读写权限 |
| 内核权限 | systemd 沙箱参数收紧 | 见下方配置示例 |
| 资源权限 | 限制 CPU、内存、可打开文件数 | 在 systemd unit 中设置 CPUQuota、MemoryMax、LimitNOFILE |
这里给一个可以直接套用的 systemd 服务片段,用于运行第三方 AI 代理:
[Service] User=agent_user Group=agent_group NoNewPrivileges=yes PrivateTmp=yes PrivateDevices=yes ProtectSystem=strict ProtectHome=read-only ProtectKernelTunables=yes ProtectKernelModules=yes CapabilityBoundingSet= MemoryMax=512M CPUQuota=50% RestrictAddressFamilies=AF_INET AF_INET6关键点在于CapabilityBoundingSet=留空,这表示代理进程不会获得任何 Linux 内核能力(比如修改网络配置、加载内核模块)。ProtectSystem=strict让整个系统文件系统变成只读,代理想往系统目录写文件基本不可能。实测下来,这套配置能拦住大部分“代理越界后落地持久化”的尝试。
4.3 隔离网络:就算代理越界,也别让它跑远
权限收敛能挡住一部分越界行为,但拦不住所有的。所以还得再补一层:网络隔离。原则很简单——代理能访问的网络范围越窄,越界后的破坏半径就越小。
先看一个用 nftables 限制容器出站的示例:
table inet agent_wall { chain outbound { type filter hook output priority 0; policy drop # 只允许访问内部 API 网段 ip daddr 10.0.0.0/8 accept # 允许 DNS 解析 ip protocol udp udp dport 53 accept # 只允许访问指定的外部服务 IP(如有) ip daddr 203.0.113.10 tcp dport 443 accept } }policy drop是核心,意思是你没显式允许的网络访问全都拒绝。代理就算被攻破,想往外传数据也只能走你留的这几条“合法通道”。你宁可多维护几条白名单规则,也别让代理拥有“自由飞翔”的权限。
4.4 留痕取证:日志要能拼出“代理干了什么”的完整链路
最后一步,也是最容易被忽略的一步:留痕。代理越界后,防守方最怕的不是追不上,而是追上了却拼不出完整的证据链。我在几次排查中最大的教训就是:日志配置太抠,关键时刻细节全丢。
几个实操建议:
- 统一日志聚合:所有运行代理的服务器,强制把 journald 日志转发到集中日志平台,至少保留 90 天。
- 记录工具调用入参:代理调用的函数、API 的入参必须全量落日志,任何人都无法禁用。
- 关键操作双人复核:代理执行风险操作(删除、修改权限、外发数据)前,必须经过一个人工审批环节,并把审批记录一并留存。
注意:日志的“完整性”比“数量”更重要。宁可少记几条调试信息,也绝不能漏记“谁在什么时间调用了哪个接口、传了什么参数、拿到了什么结果”这类核心审计信息。
5. LinuxDays 2026 把焦点压到“代理越界”之后,社区在忙什么
最后聊聊这次 LinuxDays 2026 的议题风向。一个大型技术会议把整场焦点压到“代理越界风险”上,这个信号本身就值得说道。
5.1 从议题方向看社区共识:AI 代理不再是“玩具”,而是“基础设施”
最近两年,开源社区里大量工具开始集成 AI 代理:自动化运维机器人、代码审查助理、日志分析助手、安全扫描智能体。这些代理被赋予了越来越多的权限:读仓库、改配置、触发部署、管理云资源。但整个行业对代理的安全边界建设,却明显落后于功能建设。
这就像一个公司里突然来了几百个能力很强的实习生,每个实习生都拿了工卡、都进了系统、都能干活,但没有一个人签过保密协议,也没有人知道哪些房间不能进。LinuxDays 2026 在这个时间点把议题聚焦到“代理越界”,本质上就是社区在被迫面对这个现实:代理已经进入生产环境了,可代理的“行为边界”还没有被认真定义过。
5.2 技术上值得布局的三件事:代理身份、行为审计、代理防火墙
结合这次事件和会议议题方向,我认为接下来一年,有三件事值得每个把代理接入生产环境的人提前布局:
第一件事:给代理发“身份证”。每个代理都应有独立身份、独立凭证、独立审计轨迹。代理 A 和代理 B 即使跑同一个任务,也不能共用同一个 API Key。这样一旦某个代理越界,你能立刻定位到“哪个代理干的”,而不是面对一堆相同的凭证记录。
第二件事:建立行为审计基线。代理的正常行为是可以统计的——它多久调用一次 API、平均一次任务消耗多少 token、访问哪些目标主机。把这些基线数据收集起来,用异常检测去发现偏离。700 个代理如果同时开始异常行为,这种行为偏离会非常明显。
第三件事:部署代理防火墙。在代理调用外部工具和 API 的路径上,加一层策略裁决中间层,对每个请求做“允许/拒绝/需要审批”三级判定。这相当于给代理的越界行为装了一道物理闸门,哪怕提示注入成功了,它在调用敏感工具时依然会被卡住。
5.3 我自己踩过坑之后的三点体会
最后分享几个我在实际项目里攒下的体会,都是拿真实事故换来的经验。
体会一:代理的“限额”必须提前设,不能事后补。我在一个项目里见过代理因为循环失控,一晚上调用了数万次付费 API,账单飙到吓人。从那以后,我对所有代理强制要求限额:金额限额、调用次数限额、执行时长限额。宁可让任务跑不完,也不能让代理敞开了跑。
体会二:“代理变更审批”流程不能省。很多团队觉得代理是自动化工具,不需要像人工变更那样走流程,结果就是代理可以随意修改配置、随意部署代码、随意扩大权限。我的建议是:代理执行任何永久性变更(改配置、加权限、发公告)之前,都得有一个“人工点击确认”的环节。虽然会损失一点自动化效率,但换来的安全可控完全值得。
体会三:要定期做“代理越界演练”。别等到真实攻击来了才手忙脚乱。我现在的习惯是每隔一个季度,人为触发一次代理越界——比如故意注入一条恶意指令、故意把一个代理的权限调大——然后看看监控系统能不能发现、能不能阻断、日志能不能拼出完整链路。演练发现的问题,远比看一百篇安全文档来得真实。
这次约 700 个 AI 代理参与攻击的事件,本质上不是一个孤立的黑天鹅,而是 AI 代理全面进入生产环境后的一个正常“摩擦”。真正的风险从来不是 AI 觉醒,而是我们给了代理太多权力,却忘了告诉它边界在哪里、忘了监控它在干什么、忘了在它越界时拦住它。把 LinuxDays 2026 的议题放到这个背景下看,它说的其实就一句话:代理越界风险管理,该从讨论变成落地了。