外观
Living off the Coding Agent:编码 Agent 作为可信父进程掩护反向隧道与 LaunchAgent 持久化
摘要
Elastic Security Labs 记录了一起 macOS 开发者端点上的真实事件:以带权限跳过参数运行的编码 Agent(Claude Code)派生出的 shell 子进程,通过明文 HTTP 把凭据发送到临时隧道域名,随后用 cloudflared 等工具建立反向隧道把本地服务发布到公网,并安装 LaunchAgent 实现跨会话持久化。遥测覆盖 2026 年 7 月 20 日至 23 日,进程血缘为 Claude Code > zsh > curl,命中的行为特征包括对已知双用途隧道代理(*.lhr[.]life、*.trycloudflare[.]com)的网络连接、对已发布 URL 上 /login、/api/summary 等端点的持续轮询,以及带 KeepAlive/StartInterval 配置的 LaunchAgent plist。
这不是一次概念验证,而是端点上实际观测到的行为序列;Elastic 明确指出同一条进程链既可能是"给本地仪表盘做远程管理",也可能是更严重的攻击,仅凭进程祖先关系无法可靠区分,需要会话级别的重建才能判定意图。
核心创新与差异
原研究贡献是把"编码 Agent 派生进程"这一逐渐普遍的检测盲区,落在一起有完整遥测的真实端点事件上:说明可信、经供应商签名的编码 Agent 一旦以降低确认摩擦的方式运行(如允许跳过部分权限提示),其子进程建立隧道和持久化的行为容易被安全团队当作"Claude/Cursor 在进程树里,判定为低风险自动结案",从而系统性地降低了对这类行为的告警优先级。
本站分析认为,这类事件的首个失效控制不是沙箱边界本身被击穿,而是"可信父进程的血缘关系被当作子进程行为可信的依据"——与本站已收录的 Docker socket 滥用、venv 解释器劫持等案例属于同一失效模式(Agent 产出或派生的进程被沙箱外/检测规则外的可信机制不加区分地处理),但这里的"可信机制"是安全运营的告警分类处置逻辑,而不是操作系统组件本身。
威胁模型与攻击链
编码 Agent 以减少用户确认环节的方式运行(例如允许跳过部分权限提示),其子进程可以在无逐次批准的情况下执行 shell 命令、下载并运行网络工具。攻击者(或滥用者)不需要突破编码 Agent 本身的沙箱或权限模型,只需要让 Agent 执行看似合理的运维/调试类任务。
- 编码 Agent 派生 shell 进程,进程内以明文形式通过
curl把凭据 POST 到临时隧道服务商的主机名。 cloudflared或同类工具建立出站控制通道:本地进程连接到隧道服务商的 Broker,Broker 发布一个公网 URL,远程客户端无需经典端口转发即可访问本机服务。- 攻击者(或远程操作者)对已发布 URL 的
/login、/api/summary等端点发起认证请求,轮询直到收到 HTTP 200,实现指标采集或存活检测。 - 在
~/Library/LaunchAgents/安装带KeepAlive和约 60 秒StartInterval轮询间隔的 LaunchAgent plist,确保隧道连接在重启和会话结束后仍保持存活。
攻击工件与复现材料
以下为 Elastic 原文披露的检测信号与规则名称,本站不重构可直接建立真实隧道或持久化的脚本;判定信号本身即为去武器化的复现依据。
text
进程血缘:Claude Code > zsh > curl
网络目的地类型:已知双用途隧道代理域名(如 *.lhr[.]life、*.trycloudflare[.]com、*.trycloudflare.com 的控制面 api.trycloudflare[.]com)
凭据外传信号:命令行参数或请求体中出现明文凭据的 curl 调用
存活探测信号:对已发布 URL 的 /login、/api/summary 等端点做周期性认证请求,直至返回 HTTP 200
持久化信号:~/Library/LaunchAgents/ 下新增 plist,包含 KeepAlive 及约 60 秒量级的 StartInterval
辅助信号:wrapper 脚本中出现非预期语言的状态字符串(原文示例为西里尔字母 "проверка",即"检查")Elastic 生产环境使用的四条检测规则名称(原文披露,规则实现细节未公开):
Unusual Network Connection to Suspicious Top Level DomainUnusual Network Connection to Suspicious Web ServiceGenAI or MCP Server Child Process Execution(作为构建块规则,用于识别编码 Agent 派生的子进程)Process Discovery via Built-In Applications
实验设计与实际过程
以下为 Elastic Security Labs 基于真实客户端点遥测的事后分析,本站未独立复现。遥测覆盖一台 macOS 开发者端点 2026 年 7 月 20 日至 23 日的行为,多天内触发多条行为告警,隧道相关二进制(pritunl-client、wireguard-go、ngrok 等)被端点检测标记为 malicious_file 分类。
关键结果与实际影响
Elastic 未把这起事件定性为已确认的恶意攻击——原文明确承认"同一条进程链既可能是给本地仪表盘做远程管理,也可能是更严重的行为",triage 存在结构性歧义,需要会话重建才能判断意图。其核心、可独立验证的结论是检测工程层面的:把编码 Agent 派生的凭据明文传输、反向隧道建立和 LaunchAgent 持久化这三类行为的告警自动结案或降级,会在这类行为确实是攻击时造成漏报。结果只反映这一起 macOS 端点事件的观测,不代表 Claude Code 或其他编码 Agent 存在设计缺陷,也不代表该行为模式的发生率。
防护措施与验证方法
- 不把"编码 Agent(Claude、Cursor 等)出现在进程树中"作为自动降低告警严重性或自动结案的依据;Elastic 原文明确建议"高严重性结果要保持响亮"。
- 针对编码 Agent 派生进程建立专门的构建块检测规则(如
GenAI or MCP Server Child Process Execution),再叠加网络出口异常、持久化机制的安装等信号做关联判断,而不是依赖单一信号。 - 监控对已知双用途隧道代理域名的出站连接,以及
~/Library/LaunchAgents/(或对应平台的等效持久化位置)新增文件事件。 - 检测命令行参数或请求体中的明文凭据传输,不论其父进程是否为可信签名应用。
- 高风险动作(网络出口建立、持久化机制安装)的会话重建能力应作为检测工程的常规能力,用于区分合法远程管理与恶意行为。
局限与待验证问题
- 证据等级为强:基于真实端点遥测和具体行为特征,但样本仅为一台端点的一起事件,不能代表该行为模式的发生率或在其他操作系统/编码 Agent 产品上的适用性。
- Elastic 未确认该事件的最终意图(合法远程管理 vs. 攻击),本文如实保留这一不确定性,不应外推为"Claude Code 被用于攻击"的结论。
- 未说明触发编码 Agent 派生此类进程的具体提示词、任务描述或是否涉及第三方内容注入,无法判断这是用户主动配置、社会工程还是间接提示词注入导致。
- 四条检测规则的具体实现(字段、阈值、误报率)未公开,本站无法评估检测规则本身的有效性。
参考链接
- Elastic Security Labs, Living off the coding agent: Two tales of tunnels and LaunchAgents, 2026-08-07