当后台AI代理成为安全边界问题
本文探讨了Claude Code等AI代理工具的安全隐患,特别是后台会话功能、监控进程及CLAUDE_CONFIG_DIR环境变量可被利用来创建隐蔽的持久化C2代理,仅通过一次本地代码执行即可实现。
现代开发环境中充斥着强大的AI代理工具,但安全团队尚未完全理解其风险。Claude Code是其中最具能力的工具之一——它可以运行代码、读取文件、从互联网获取内容、执行命令,并支持持久化后台会话,这些会话的生命周期超越终端,由监控进程管理。这些对开发者有用的功能同样吸引攻击者。本文展示了如何利用Claude Code的多种特性,在目标机器上一次性本地代码执行后,仅通过Markdown和JSON文件创建几乎不可见的持久化C2代理。
Claude Code的后台会话功能自v2.0.60引入,允许用户设置长期运行的任务并在后台继续。自v2.1.139版本起,后台会话由监控进程管理,关闭终端、结束SSH连接或启动新shell都不会影响运行中的后台会话。作者通过逆向工程分析了v2.1.144版本的守护进程,该进程充当小型本地控制平面,通过Unix域套接字或Windows命名管道与客户端通信。控制套接字管理会话列表、附加、停止等操作,而rv和pty套接字分别处理生命周期事件和终端传输。通信协议使用换行分隔的JSON,包含版本号和操作名称。例如,操作包括list、dispatch、attach等。
更关键的隐蔽机制来自CLAUDE_CONFIG_DIR环境变量。通过设置该变量为自定义路径,后台会话的数据、日志和状态将存储在此路径下,而非默认的~/.claude。当用户运行claude agents时,只能看到~/.claude下的会话,从而完全隐藏攻击者的会话。目前该变量存在一些不一致性,例如Claude期望在目录中找到.claude.json文件,但默认情况下该文件位于~,这已被社区发现并讨论。
攻击的真正“载荷”并非恶意代码,而是一组用纯英文编写的指令,定义了代理的行为。示例中展示了一个伪装成个人任务助理的C2代理,它从远程服务器获取任务、执行本地操作(如搜索文件、提取密码、读取浏览器书签),并将结果回传。这种语义化的载荷使得检测非常困难,因为没有传统的恶意二进制文件。
这一发现凸显了AI代理工具带来的安全边界问题。传统的安全措施侧重于可执行文件或脚本检测,而忽略了基于文本指令的代理行为。安全团队需要重新评估这些工具的威胁模型,并考虑如何监控和限制代理的敏感操作。随着AI代理工具在开发环境中的普及,此类攻击可能成为新的常态,企业必须提前防范。