FireAI 安全博客

作者 FireAI Security & Research Team · 发布于

Qwen Code 在 Mac 上安全吗?用 FireAI 监控它的网络

Qwen Code 在 Mac 上安全吗?用 FireAI 监控它的网络

Qwen Code 是一款在终端中运行的开源编程智能体,可以读取项目、编辑文件,并按要求运行 shell 命令。开发者搜索“is Qwen Code safe”和“Qwen Code network access”有其实际原因:该智能体会把你的提示和部分代码发送给模型提供方,而它运行的 shell 命令也可能自行建立连接。本文汇集其文档关于它如何在 macOS 上运行、能访问什么以及提供哪些权限控制的说明,然后展示 HisnLabs 开发的 macOS 设备端防火墙 FireAI 如何监视网络这一侧。

Qwen Code 是什么

Qwen Code 由阿里巴巴 Qwen 项目旗下的 QwenLM 团队开发,其代码仓库将它描述为面向终端、编辑器、桌面、浏览器和聊天的开源 AI 编程智能体。它采用 Apache-2.0 许可证发布。其文档说明,它可与 OpenAI 兼容、Anthropic、Gemini 和 Qwen 的 API 配合使用,也可与任何第三方提供方或 Ollama、vLLM 等本地模型配合使用 [1]。因此,其流量的目的地取决于你配置的提供方。

Qwen Code 如何在 macOS 上运行

在 Mac 上,Qwen Code 是一个 Node.js 程序。README 给出了 npm install -g @qwen-code/qwen-code@latest(需要 Node.js 22.0.0 或更高版本)或 brew install qwen-code,还列出了适用于 Linux、macOS 和 Windows 的安装脚本。无头模式可以通过 qwen -p "..." 从脚本运行单个提示。由于 npm 安装的版本运行在 Node 运行时上,macOS 看到的进程是执行某个脚本的 node,而不是以该智能体命名的程序。

它能访问什么,如何加以控制

Qwen Code 记录了五种审批模式:Plan(只读分析)、Ask Permissions(原名 Default,文件编辑和 shell 命令需手动批准)、Auto-Edit(文件更改自动批准,shell 命令仍需询问)、Auto(由一个 LLM 分类器批准它判断为安全的操作、拦截有风险的操作,不确定时也会拦截)以及 YOLO(所有操作自动批准)。会话期间可用 Shift+Tab 在各模式间切换 [2]。

在 macOS 上,沙箱页面描述了两种方法:使用内置 sandbox-exec、无需额外软件的 Seatbelt,以及用于完全隔离的 Docker 或 Podman。可以通过 qwen -s、QWEN_SANDBOX=true 变量或 settings.json 中的 "tools": {"sandbox": true} 启用沙箱。共有六个内置 Seatbelt 配置。默认的 permissive-open 限制写入但允许网络访问;-closed 配置会阻断网络,-proxied 配置则通过代理转发网络流量 [3]。设置保存在 ~/.qwen/settings.json 以及项目内的 .qwen/settings.json 中 [4]。

它连接到哪里

本文查阅的文档页面没有公布固定的域名列表。流量会发往你配置的模型提供方和端点、MCP 服务器或 shell 命令所联系的任何地方,以及(如果你使用 Qwen 账户登录)该服务。遥测和数据处理在该项目的服务条款和隐私声明中说明,README 中有相应链接。使用默认 Seatbelt 配置时网络是开放的,因此沙箱限制的是文件写入,并不决定智能体可以连接到哪里。

用 FireAI 监视 Qwen Code

FireAI 是一款在 Mac 上运行的 macOS 防火墙。其 Agent profile 功能可识别 19 种 AI 智能体,学习每种智能体通常连接到哪里,并标记新出现的情况。FireAI 的 Agent profile 页面把 Qwen Code 列为由 node、bun、deno 或 python 运行的智能体之一,FireAI 通过运行时所运行的脚本来识别这类智能体。因此,在 FireAI 的活动列表中,该连接会通过其脚本匹配到 Qwen Code,而不是显示为一个笼统的 node。

  • 在最初的 3 天里,FireAI 学习该智能体通常联系的目的地,并按域名分组,因此 api.anthropic.com 会归为 anthropic.com。在此期间不会标记任何内容。
  • 此后,基线之外首次出现的目的地会在 Suggestions、AI agents 卡片和 Quick Review 中被标记以供审查。向左滑动为拦截,向右滑动为“It’s fine”(没问题)。
  • 上传峰值也会被标记:某一小时内该智能体的上传量至少是其此前最繁忙一小时的 4 倍,且不少于 25 MB。
  • FireAI 只使用元数据,即主机名和字节数,从不读取连接的有效载荷。

为 Qwen Code 设置 FireAI

  1. 安装 FireAI,然后像平常一样使用该智能体。3 天学习期会自动开始,期间不会标记任何内容。
  2. 打开 Suggestions,找到 AI agents 卡片。学习期结束后,针对该智能体的标记会出现在那里以及 Quick Review 中。
  3. 审查每一个标记。选择 Block 会为发起连接的进程创建一条规则,选择“It’s fine”会把该目的地加入智能体的基线。
  4. 若要让智能体只访问它已经在用的地方,请在安全模式菜单中选择 Agent profile,它与 Home、Coffee shop、Paranoid 和 Under attack 并列。你的规则会像在 Home 模式中一样生效,而一旦智能体完成学习,连接到基线之外目的地的请求会被拦截,而不只是被标记。
  5. 被拦截的目的地会出现在 AI agents 卡片中,并附有 Allow 和 Keep blocked 两个选项。Allow 会把它加入基线,智能体随即可以访问。Keep blocked 会创建一条在所有模式下都有效的拦截规则。

你为网站、域名或地址编写的允许规则仍然优先,DNS 和你的本地网络也绝不会被拦截。对于 FireAI 未列出的智能体,请在按 App 设置规则中为其程序手动编写规则。Agent profile 模式需要 FireAI 1.0.3 或更高版本,识别 Qwen Code 需要 1.0.4。

局限

  • Auto 模式的分类器和沙箱配置属于 Qwen Code,是独立于 FireAI 的另一层。宽松的 Seatbelt 配置仍然允许网络访问,而这正是 FireAI 监视的部分。
  • Qwen Code 是根据运行时所运行的脚本来识别的,这意味着它只是被标注,而未经验证:只有 Claude Code、Claude 和 Cursor 会根据其开发者的签名进行核验。
  • FireAI 无法阻止提示注入。它通过标记数据离开你的 Mac 的路径并允许你拦截该路径来限制损害。
  • FireAI 看不到提示、MCP 工具的内容、文件访问或技能。TLS 隐藏了有效载荷,而且 FireAI 并不在智能体内部。
  • 很快就退出的子进程可能会被遗漏,而且子进程是按路径而非签名匹配的。
  • 在 3 天学习期内不会标记任何内容,上传峰值只会被标记,不会被拦截。
  • 在 Agent profile 模式下,直接连接到没有主机名的裸 IP 地址时,会按地址进行匹配,因此智能体常用服务的新地址在你允许之前会被拦截。

其他智能体

同样的方法适用于 FireAI 识别的每一种智能体。请参阅其他指南:Claude Code、Claude 桌面 App、Cursor、ChatGPT Mac App、OpenAI Codex CLI、OpenClaw、Hermes Agent、Gemini CLI、GitHub Copilot CLI、Amp、opencode、Aider、Goose、Crush、Windsurf、Kiro、Trae、Meta 的 Muse、在 python 或 node 上运行的任何其他 AI 智能体。完整的功能说明见 HisnLabs 发布的 Agent profile 文档页面。

FireAI 和 HisnLabs 在其中扮演的角色

FireAI 学习 Qwen Code 在你的 Mac 上通常连接到哪里,并标记首次出现的目的地或上传峰值,而不读取你的数据。

FireAI 是 HisnLabs 自己的产品:一款直接在 Mac 上运行的 AI 防火墙。它用通俗易懂的语言显示你的应用建立的每一个连接,并让你决定哪些数据可以离开你的 Mac——它的 AI 在本地运行,因此你的流量永远不会发送给我们或任何其他人。HisnLabs 的安全研究团队负责让这些判断保持准确:归类哪些域名只是普通的遥测、哪些属于真正的服务,追踪连接背后的国家和网络,并用真实的流量模式训练设备端模型(FireAI Pilot 功能)——这一切都不会离开你的 Mac。

你可以阅读它背后的技术决策,或试用 FireAI 17 天:HisnLabs 出品的 FireAI。

来源