FireAI 安全博客

作者 FireAI Security & Research Team · 发布于

Mac 上的 Gemini CLI 安全:监控它的网络连接

Mac 上的 Gemini CLI 安全:监控它的网络连接

Gemini CLI 是 Google 的开源命令行智能体。它会读取和编辑文件、运行 shell 命令并抓取网页,因此搜索“gemini cli security mac”或“is Gemini CLI safe”的人想知道它有哪些限制、流量去往何处。本文总结 Google 自己的文档,然后展示 HisnLabs 开发的 macOS 网络防火墙 FireAI 如何监视它。

Gemini CLI 是什么,如何在 Mac 上运行

其代码仓库将 Gemini CLI 描述为一个把 Gemini 带入终端的开源 AI 智能体。它由 Google 开发,采用 Apache License 2.0 许可证。它可以通过 npm(npm install -g @google/gemini-cli)或 Homebrew(brew install gemini-cli)安装,也可以通过 npx @google/gemini-cli 免安装运行。因此它是一个 Node.js 程序,可以使用 Google 账户(OAuth)、Gemini API 密钥或 Vertex AI 登录。

它能访问什么

其内置工具涵盖文件系统操作、shell 命令执行、基于 Google 搜索依据的网页抓取,以及用于自定义集成的 MCP 服务器。README 提到了使用情况跟踪,相关内容见其遥测文档,要查看该工具上报了什么,应当查阅那里。

文档所述的权限与沙箱模型

Google 记录了两项在 Mac 上相关的控制措施。

  • 沙箱:在 macOS 上,轻量级选项使用 Seatbelt(sandbox-exec)配置文件。默认配置文件 permissive-open 把写入限制在项目目录内,同时允许广泛的文件读取和网络访问。更严格的配置文件(包括经代理的变体)通过 SEATBELT_PROFILE 环境变量选择,Docker 或 Podman 容器则是另一种选择。可以通过 -s 或 --sandbox、GEMINI_SANDBOX 或 settings.json 启用。
  • 受信任文件夹(Trusted Folders):默认禁用。启用后,不受信任的文件夹会让 CLI 进入安全模式,关闭工作区设置、MCP 服务器连接、自定义命令和工具自动接受。

沙箱页面本身指出,沙箱可以降低风险,但不能消除所有风险。请注意,默认的 Seatbelt 配置文件仍然允许网络访问,因此它并不限制数据可以发送到哪里。

本文查阅的文档没有公布 Gemini CLI 所联系域名的完整列表。Google 登录、Gemini API 以及它抓取的任何网页是显而易见的候选,但只有你自己的观察才能加以确认。

用 FireAI 监视 Gemini CLI

FireAI 是 HisnLabs 开发的 macOS 设备端防火墙。其 Agent profile 功能把 Gemini CLI 列为它识别的 19 种 AI 智能体之一。由于 Gemini CLI 通过 node 运行,FireAI 通过运行时所运行的脚本来识别它,这是 Agent profile 针对 node、bun、deno 和 python 智能体所采用的方法。智能体的子进程,例如它启动的 shell、git 或 curl,会通过向上追溯父进程而归属于它。随后,FireAI 会在最初 3 天学习 Gemini CLI 通常联系哪些目的地,按域名分组,在此期间不标记任何内容。此后,首次出现的目的地会在 Suggestions、AI agents 卡片和 Quick Review 中被标记。上传峰值也会被标记:某一小时内该智能体的上传量至少是其此前最繁忙一小时的 4 倍,且不少于 25 MB。

FireAI 只使用元数据,即主机名和字节数,从不读取连接的有效载荷。默认情况下,它只作标记,把决定留给你。在 Agent profile 安全模式下,它会更进一步:学习结束后,连接到基线之外目的地的请求会被拦截,直到你点按 Allow;Keep blocked 则会把这次拦截变成一条在所有模式下都有效的规则。

逐步设置

  1. 安装 FireAI 并完成首次运行设置,参见 Install and finish setup。
  2. 像平常一样使用 Gemini CLI 3 天。FireAI 会在后台学习其目的地,此时还不会标记任何内容。
  3. 打开 Suggestions,找到 AI agents 卡片。出现标记时,阅读那句平实的说明,然后在 Quick Review 中向左滑动拦截,或向右滑动选择“It’s fine”(没问题)。
  4. 如果希望智能体只访问它已经在用的地方,请在安全模式菜单中选择 Agent profile,它与 Home、Coffee shop、Paranoid 和 Under attack 并列。
  5. 有内容被拦截时,打开 AI agents 卡片,选择 Allow 将其加入基线,或选择 Keep blocked 创建拦截规则。

局限

  • FireAI 无法阻止提示注入。它通过标记数据离开你的 Mac 的路径并允许你拦截该路径来限制损害。
  • FireAI 看不到 Gemini CLI 的提示、MCP 工具的内容、技能,也看不到它读取了哪些文件,因为 TLS 隐藏了有效载荷,而且 FireAI 并不在智能体内部。
  • Gemini CLI 是按脚本名称匹配的,因此 FireAI 只是对它进行标注,而不是验证:只有 Claude Code、Claude 和 Cursor 会根据其开发者的签名进行核验。
  • 智能体抓取的网页对它而言是正当的目的地,但对其基线来说可能是新的,因此当你让它进行调研时,预计会出现标记。
  • FireAI 与 Gemini CLI 的沙箱和受信任文件夹协同工作,而不是取代它们。
  • 在 3 天学习期内不会标记任何内容,上传峰值只会被标记,不会被拦截。
  • 由于目的地按域名分组,智能体已在使用的域名下的新服务器会被视为已知。

提示注入,即被抓取页面中的文字操纵智能体,已被 OWASP 收录。FireAI 无法阻止它。该功能的说明见 Agent profile 文档。

FireAI 识别的其他智能体也有各自的指南:Claude Code、Claude 桌面 App、Cursor、ChatGPT Mac App、OpenAI Codex CLI、OpenClaw、Hermes Agent、GitHub Copilot CLI、Amp、Qwen Code、opencode、Aider、Goose、Crush、Windsurf、Kiro、Trae、Meta 的 Muse、由 Python 或 Node 运行的任何 AI 智能体。

FireAI 和 HisnLabs 在其中扮演的角色

Gemini CLI 可以在你的终端中运行命令并抓取网页。FireAI 显示它接下来连接到哪里,并且可以拦截。

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

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

来源