当 AI Agent 开始自我繁殖:影子 IT 的指数爆炸与一个开源检测器的诞生

想象你是某家金融公司的 CISO。去年你批准了 GitHub Copilot 的使用。今年初,工程师小张在他的 Windows 笔记本上装了 Claude Code——你没批准,但你不知道。

目录
  1. 当 AI Agent 开始自我繁殖:影子 IT 的指数爆炸与一个开源检测器的诞生
  2. 一个 CISO 的噩梦
  3. 三波浪潮:从影子 IT 到影子 AI 到影子 Agent
  4. 一个让人后背发凉的公式
  5. 行为双胞胎:为什么检测 agent 这么难
  6. 九类 Agent,六层足迹
  7. Agent Detector:一个开源的 Windows 检测器
  8. 数据说话
  9. 时间的牢笼
  10. 工程洞察
  11. 个人思考
  12. 开源代码
  13. 论文链接

当 AI Agent 开始自我繁殖:影子 IT 的指数爆炸与一个开源检测器的诞生

一个 CISO 的噩梦

想象你是某家金融公司的 CISO。去年你批准了 GitHub Copilot 的使用。今年初,工程师小张在他的 Windows 笔记本上装了 Claude Code——你没批准,但你不知道。

Claude Code 不只是个聊天框。它是一个能读写文件、执行命令、调用 API 的 agent。某天下午,小张让 Claude Code 帮他搭一个数据处理流水线。Claude Code 觉得需要三个 MCP server 来扩展自己的能力,于是自动 npx 安装了 mcp-server-filesystem、mcp-server-git,还写了一个自定义的 Python 脚本去调 OpenAI 的 API 做数据清洗。

这三个组件留在了小张的电脑上。其中那个 Python 脚本本身是 agentic 的——它会在每次运行时自己决定调几次 API、执行什么命令。小张把这个脚本加进了 Windows 任务计划程序,每小时跑一次。

一个月后,另一个工程师看到小张的脚本很好用,要了一份。又一个月后,那个自定义脚本已经被改了三个版本,其中一个版本会自动生成新的子脚本去处理新的数据源。

你的公司批准了一个工具。现在你的公司有九个未批准的 agentic 工件在跑,其中两个会自我繁殖。

这不是科幻。这是 2026 年 11 月论文《Detecting Shadow AI: Unsanctioned LLM Agents on Enterprise Endpoints》描绘的场景,作者 Jérémy Canale 和 Fabien Soulis 用一个简洁的数学模型证明:当 agentic 工件的繁殖速度超过组织淘汰它们的速度时,影子 IT 会指数爆炸。

三波浪潮:从影子 IT 到影子 AI 到影子 Agent

论文把企业里未经批准的技术分成三波:

第一波:经典影子 IT。 员工自己装个 Dropbox、用个人邮箱发工作文件、把 Excel 宏搞成一个小型 ERP。这波影子 IT 很老,增长很慢——因为每个工具都需要人去找到它、安装它、配置它。一个员工一个月最多搞一两件。CIO 们虽然低估了它的规模,但它至少是收敛的:采用率到顶了,存量也就到顶了。

第二波:影子 AI(对话式)。 ChatGPT 出来后,员工开始把公司代码粘到网页聊天框里。2024 年的数据触目惊心:75% 的知识工作者在工作中使用生成式 AI,78% 的 AI 用户自带 AI 工具上班,44% 承认违反公司 AI 政策使用,61% 会刻意隐瞒。IBM 的报告显示,五分之一的被入侵组织报告过涉及影子 AI 的数据泄露。

但这波还是可控的——因为对话式 AI 发生在浏览器里,网络层能看到。你可以在防火墙上封 ChatGPT 的域名。

第三波:影子 Agent。 这是论文的核心警告。Agent 不是聊天框,是会自己干活的软件。Claude Code、OpenAI Codex CLI、Cursor、各种 home-made 的 Python 脚本——它们在本地运行,用用户的权限执行命令,调用远程 LLM API。更关键的是,agent 会制造 agent:它们安装 MCP server、生成自动化脚本、留下配置文件,这些工件本身就是 agentic 的,会继续繁殖。

一个让人后背发凉的公式

论文给出了一个极其简洁的复利模型。设 \(A_t\) 是第 \(t\) 个月使用未批准 agent 的员工数,\(S_t\) 是未批准工具的存量。

经典影子 IT 的动力学:

\[S_{t+1} = (1-\delta) S_t + \kappa A_t\]

其中 \(\kappa\) 是每个员工每月引入未批准工具的速率,\(\delta\) 是组织每月淘汰的比例。这个方程会收敛到 \(\kappa N / \delta\)(\(N\) 是总员工数)——增长有上限,因为工具不会自己制造工具。

Agentic 影子 IT 的动力学:

\[X_{t+1} = (1 - \delta + \sigma\phi) X_t + \rho A_t\]

两个关键变化:

  • \(\rho \gg \kappa\):agent 用户制造工件的速率远高于普通员工(因为 agent 几乎免费就能造工具)
  • \(\sigma\phi\):存量中比例为 \(\phi\) 的工件是 agentic 的,它们以速率 \(\sigma\) 制造新工件
令 \(g = 1 - \delta + \sigma\phi\)。当 \(\sigma\phi < \delta\) 时,\(g < 1\),存量收敛到 \(\rho N / (\delta - \sigma\phi)\)——比经典影子 IT 大,但有界。当 \(\sigma\phi > \delta\) 时,\(g > 1\),存量指数增长,\(X_t \sim g^t\),与员工数无关。

这个临界条件的直白翻译:当 agentic 工件的繁殖速度超过组织淘汰它们的速度时,影子 IT 指数爆炸。

论文强调这个模型不是用来测量的——它不声称知道 \(\sigma\) 或 \(\phi\) 的真实值。它的作用是指出哪些量重要。而最重要的洞察是:淘汰的前提是发现。你无法淘汰你不知道存在的东西。检测不是治理的充分条件,但是必要条件。

行为双胞胎:为什么检测 agent 这么难

好,你决定检测。你在每台 Windows 笔记本上装了个监控程序。你看到:

  • python.exe 进程
  • 它有一个子进程 cmd.exe
  • 它通过 443 端口连了一个 TLS 加密的远程地址
  • 连接保持了几分钟
这是 agent 吗?

可能是。但也可能是 npm install——它也是 python/node 进程,也会起子进程,也会通过 443 下载东西。也可能是 VS Code 的集成终端在跑构建脚本。也可能是管理员的自动化脚本。

论文提出了一个精妙的概念:行为双胞胎(behavioural twin)。对于每一个 agent,都存在一个行为上完全相同但不是 agent 的程序——同样的进程树、同样的连接模式、同样的 shell 调用,只是远程服务不是 LLM 而是普通的 API。

论文用数学证明了这一点。设 \(\beta(a)\) 是 agent \(a\) 的行为特征(进程结构、连接模式),\(\iota(a)\) 是身份特征(远程服务的身份)。行为双胞胎 \(b\) 满足 \(\beta(a) = \beta(b)\) 但 \(\iota(a) \neq \iota(b)\)。任何只依赖 \(\beta\) 的检测器 \(f\),对 \(a\) 和 \(b\) 给出相同的判断——要么漏检 \(a\),要么误报 \(b\)。

这个论证的力量在于它的平凡性:它说的不是某个检测器不够好,而是任何只看行为的检测器在原理上都无法区分 agent 和非 agent。

论文在实验中验证了这一点。两个简单的行为规则——"解释器 + 443 端口 + shell"和"任何进程 + 443 端口 + shell"——在 9 个良性工作负载中误报了 4 个,包括每一个行为双胞胎和一次普通的 npm install。

九类 Agent,六层足迹

为了系统性地理解检测问题,论文提出了一个分类法。

九类 Agent(C1-C9):

类别例子特征
C1 命令行编码 agentClaude Code, Codex CLI, Aider原生可执行文件或 Node/Python 运行时
C2 桌面 agentClaude Desktop, ChatGPT 桌面版打包应用(MSIX)
C3 AI 原生 IDECursor, WindsurfElectron 应用
C4 IDE 扩展GitHub Copilot, Cline, ContinueIDE 扩展宿主
C5 本地 LLM 运行时Ollama, LM Studio, llama.cpp本地端口,无外部连接
C6 Agent 浏览器Perplexity Comet浏览器进程
C7 框架/SDKLangChain, CrewAI, AutoGenPython/Node 解释器
C8 自制 agent几十行调 API 的脚本通用解释器,无稳定标识
C9 Agent 基础设施MCP server, 自建网关为其他 agent 服务
这九类构成了一个"产品化程度"的梯度:从签名完备的打包应用(C2)到只有一个文本文件、用通用解释器运行的脚本(C8)。越像 C8,能抓的稳定标识越少。 一个 python.exe 加一个 20 行脚本,没有安装记录、没有签名、没有版本号——你怎么检测它?

六层端点足迹(L1-L6):

  • L1 软件身份:镜像名、安装路径、版本资源、Authenticode 签名
  • L2 运行时结构:命令行、父子进程、加载模块、环境变量
  • L3 网络:已建立连接、远程服务身份、监听端口
  • L4 安装:已安装程序记录、服务、IDE/浏览器扩展
  • L5 配置:配置文件夹、API key 存储位置
  • L6 执行历史:Prefetch、BAM(后台活动修饰符)、最近文件
关键洞察:产品化程度低的 agent(C8)在 L1-L4 上几乎不留痕迹,只在运行时的 L2 和 L3 上可见。 你必须在它运行的时候抓到它。

Agent Detector:一个开源的 Windows 检测器

基于这个分析,论文发布了 Agent Detector——一个开源的 Windows 端点检测器(GitHub: jeremy1392/IntuneAgentDetector),用 Go 写成,通过 Microsoft Intune 部署。

核心设计原则:把行为锚定到身份。

行为本身不够,但行为 + 远程服务身份 + 配置 + 安装历史 + 执行记录的多信号相关,就能区分 agent 和它的行为双胞胎。

具体做法: 1. 网络归因:通过 Windows DNS 缓存把连接关联到具体 LLM 服务商(Anthropic、OpenAI 等)。维护一个 39 个工具签名 + 184 个 LLM 端点的目录,覆盖九大类(直连 API、聚合器、推理平台、网关、中继等)。 2. 配置指纹:检测 OPENAI_BASE_URL、ANTHROPIC_API_KEY 等环境变量,VS Code 扩展目录里的 AI 工具配置。 3. 执行历史:Prefetch 和 BAM 记录了最近运行过的程序,即使当前没运行也能发现。 4. MCP 识别:命令行中匹配 @modelcontextprotocol/、mcp-server-* 等模式。

关键设计决策:通知而非阻断。 Agent Detector 永远不会关闭、卸载或阻断任何东西。它弹出一个窗口,列出检测到的 AI 工具,要求用户勾选"我已阅读并理解 AI 使用政策"然后点击"我接受"。每次扫描都会弹,只要未批准的工具还在。这个窗口没有关闭按钮。

这个设计很聪明:它把治理从"猫鼠游戏"变成了"知情同意"。IT 部门知道谁在用什么,用户知道自己在被监控,但没有人被阻止工作。

数据说话

在受控基准测试中(12 个合成 agent + 3 个 AI 组件 + 9 个良性工作负载,每台机器重复 5 次):

检测器真阳性假阴性假阳性精确率召回率F1
签名检测器 D00120N/A0.00N/A
行为规则 D1(解释器+443+shell)9340.690.750.72
行为规则 D2(任意进程+443+shell)10240.710.830.77
Agent Detector12001.001.001.00
签名检测器完全失效——因为合成 agent 没有签名。两个行为规则都误报了所有行为双胞胎和 npm install。Agent Detector 通过身份相关实现了零误报、零漏检。

但论文诚实地承认这些数字"比论文中任何其他数字都更奉承 Agent Detector",原因有三:基准太小、行为双胞胎是构造的最坏情况、合成 agent 复现的是检测器观察到的足迹而非真实 agent 的全部多样性。

时间的牢笼

Agent Detector 最有趣的局限是时间性的。

DNS 缓存的时间窗口。 通过 DNS 缓存把连接归因到 LLM 服务商,只在缓存条目存活期间有效。对于使用 CDN 的服务商(OpenAI、Anthropic 都在 CDN 后面),缓存条目只活 1-5 分钟。一个 agent 如果保持一个连接一小时,你只在它的前几分钟能归因。每小时扫描一次大概率会错过它。

间歇性 agent。 一个启动-停止-启动的 agent,大约只有三分之一的扫描能抓到它。因为它运行时可能正好不在扫描窗口里。

扫描成本。 一次扫描约 154 毫秒,可以频繁跑。但连续监控(比如 ETW)成本更高,论文没有采用。

这个时间局限揭示了一个深层问题:agent 的检测本质上是一个时间博弈。 你不是在检测一个静态的文件,而是在捕捉一个动态的行为窗口。这和传统杀毒软件扫描文件的模型完全不同——文件一直在那里,但 agent 的网络足迹只在特定时刻可见。

工程洞察

这篇论文给 AI 从业者几个实操层面的启发:

1. Agent 的治理问题不是"允不允许"的问题,而是"看不看得见"的问题。 你可以制定最严格的 AI 政策,但如果你不知道谁在跑什么,政策就是一张纸。检测是治理的前置条件。

2. 行为检测有原理性天花板。 不是检测器不够好,而是任何只看进程树和连接模式的检测器都无法区分 agent 和它的行为双胞胎。身份信息(远程服务是谁)是不可省略的。

3. MCP server 是新的攻击面。 论文专门把 MCP server 列为 C9 类——它们是 agent 基础设施,本身可能 agentic,而且几乎不在任何清单上。一个被植入后门的 MCP server 可以影响所有调用它的 agent。

4. 目录维护是持续的工程。 184 个 LLM 端点条目需要每月更新——厂商加新 IP 段、改 CDN 配置、出新产品。论文坦言写论文期间就发现目录里缺了 Anthropic 的 IPv6 段。这和杀毒软件的签名库一样,是一个需要持续投入的工程。

5. 通知优于阻断。 Agent Detector 的设计哲学是"知情承认"而非"阻断"。这在企业环境中更现实——你阻断 Claude Code,工程师会用 Ollama 跑本地模型,你连网络层都看不到了。

个人思考

这篇论文让我想到一个更大的图景:我们正在进入一个 agent 会自我繁殖的世界,而我们的治理工具还停留在静态清单时代。

复利模型的核心洞察不是"影子 IT 会爆炸"——这个直觉大家都有。而是它给出了爆炸的临界条件:\(\sigma\phi > \delta\)。这意味着治理有两个杠杆:降低 agent 的自我繁殖速率(\(\sigma\phi\)),或提高淘汰速率(\(\delta\))。而淘汰速率的上限是检测速率——你发现不了的东西,你淘汰不了。

这和生物入侵的模型惊人地相似。外来物种入侵的临界条件是繁殖速率超过捕食/自然死亡率。一旦越过临界点,种群指数增长,直到资源耗尽。Agent 在企业环境里也是一样——一旦 agentic 工件的繁殖超过 IT 部门的清理能力,未批准工具就会像入侵物种一样填满每一个可用的生态位。

行为双胞胎的论证则让我想到密码学中的"不可区分性"。一个完美的加密方案,密文和随机串不可区分;一个完美的 agent,行为和非 agent 程序不可区分。检测 agent 的难度,在原理上和区分加密流量与随机流量一样——你需要额外的信息(密钥/身份)才能做到。

最后,这篇论文最务实的贡献可能不是 Agent Detector 本身,而是它对"检测"这个动作的重新定义。在 agent 时代,检测不是一个一次性的动作(扫描文件签名),而是一个持续的过程(监控运行时行为 + 身份相关 + 时间窗口捕捉)。这需要一种全新的安全基础设施——不是杀毒软件的升级版,而是某种 agent 时代的 EDR。

开源代码

  • Agent Detector: https://github.com/jeremy1392/IntuneAgentDetector
  • Go 语言编写,通过 Microsoft Intune 部署
  • 包含 39 个工具签名 + 184 个 LLM 端点的开放目录
  • 支持 Windows 10 22H2 / Windows 11,需 Pro/Business/Enterprise 版本

论文链接

  • arXiv: https://arxiv.org/abs/2611.12377
  • HTML 版本: https://arxiv.org/html/2611.12377v1
  • 作者: Jérémy Canale, Fabien Soulis
  • 发布日期: 2026-11-09

*当 agent 开始制造 agent,治理的战场从"谁在用什么"变成了"什么在自我繁殖"。这篇论文给的不是答案,而是一个框架——复利模型告诉你什么时候该恐慌,行为双胞胎告诉你为什么检测难,Agent Detector 告诉你至少在 Windows 端点上能做什么。剩下的,是每个 CISO 需要自己回答的问题:你的组织,\(\sigma\phi\) 大于 \(\delta\) 了吗?*

暂无表态

想参与讨论或点赞?登录后使用完整功能

讨论回复(0)

暂无回复,登录后可参与讨论
合作

智谱 GLM-5 已上线

在智谱开放平台 BigModel.cn 打造 AI 应用。新一代旗舰模型 GLM-5 在推理、代码、智能体综合能力达到开源模型 SOTA。

领取 2000万 Tokens