FireAI 安全博客

作者 FireAI Security & Research Team · 发布于

用 FireAI 在 Mac 上监控 OpenAI Codex CLI 的网络访问

用 FireAI 在 Mac 上监控 OpenAI Codex CLI 的网络访问

Codex CLI 是 OpenAI 推出的编程智能体,在你的终端中运行。它会读取项目、提出修改并运行命令,OpenAI 为它记录了一套把沙箱与审批策略结合起来的双层安全模型。本文总结该模型在 macOS 上的适用情况,说明它关于网络流量说了什么、没说什么,并展示 FireAI 如何监视该程序。

Codex CLI 是什么,如何安装

该项目的代码仓库将 Codex CLI 描述为在终端中运行的轻量级编程智能体,由 OpenAI 开发,采用 Apache-2.0 许可证。仓库列出了三种安装途径:npm install -g @openai/codex、brew install --cask codex,以及通过 shell 脚本或 GitHub Releases 页面直接下载。它可以在搭载 Apple 芯片和 Intel 处理器的 macOS 上运行,也支持 Linux 和 Windows。

终端
# the documented install routes
npm install -g @openai/codex
brew install --cask codex

文档所述的沙箱与审批模型

OpenAI 关于智能体审批与安全的页面描述了沙箱模式与审批策略如何协同工作,并指出两者单独都不能提供完整的保护。沙箱模式有 read-only、workspace-write 和 danger-full-access 三种。在 read-only 模式下,受限边界之外的操作需要审批。在 workspace-write 模式下,Codex 可以在当前工作区内读取、编辑和运行命令,而网络访问和工作区之外的编辑需要审批。danger-full-access 会解除这些限制,不推荐使用。

审批策略包括:on-request,即标准的交互模式;never,它关闭审批询问,但保留沙箱约束;以及 granular,它针对特定类别的操作有选择地进行交互。

沙箱中的网络访问

据同一页面所述,网络连接默认禁用。若要在 workspace-write 模式下启用,需要在配置文件的 [sandbox_workspace_write] 下设置 network_access = true,而可选的 network_proxy 功能可以把流量限制在已配置的域名允许列表内。在 macOS 上,这一限制通过 sandbox-exec 使用 Seatbelt 策略来执行;在 Linux 上则使用 bwrap 加 seccomp。

config.toml
[sandbox_workspace_write]
network_access = true

这项设置管控的是在沙箱内运行的命令。它是一项有用的限制,但值得说明它不是什么:它不是连接日志,而智能体自身与模型服务之间的连接是另一回事。本文不列出 Codex 自己的域名,因为这里查阅的页面没有提供厂商记录的列表。

为什么网络视角仍有帮助

如果你为了让测试下载依赖而打开网络访问,或者使用 danger-full-access,沙箱就不再限制命令连接到哪里。此时,查看该程序实际访问过的目的地便是剩下的检查手段。它也能覆盖你忘记自己曾更改过该设置的情况。

用 FireAI 监视 Codex

FireAI 是 HisnLabs 开发的 macOS 防火墙,自 1.0.2 版起提供一项名为 Agent profile 的功能。它能识别 19 种 AI 智能体,学习每种智能体通常连接到哪里,并标记异常行为供你审查。Codex 是命令行智能体,因此 FireAI 按其程序名称来识别它。

Codex 是按其程序名称 codex 匹配的,这意味着 FireAI 只是对匹配结果进行标注,而不会根据开发者签名进行核验。只有 Claude Code、Claude 和 Cursor 会以这种方式核验。

FireAI 还会识别智能体的子进程,例如智能体运行的 shell、git 或 curl,方法是沿着进程的父进程向上追溯,直到找到该智能体。因此,这些连接会被计为智能体自己的连接。

FireAI 会标记什么

  1. 在最初的 3 天里,FireAI 学习该智能体通常联系的目的地,并按域名分组。在此学习期内不会标记任何内容。
  2. 此后,学习所得基线之外首次出现的目的地会被标记以供审查。
  3. 上传峰值也会被标记:某一小时内该智能体的上传量至少是其此前最繁忙一小时的 4 倍,且不少于 25 MB。

Agent profile 只使用元数据,即主机名和字节数。FireAI 从不读取连接的有效载荷,也无法读取加密连接的内部内容。

为 Codex 进行设置

  1. 安装 FireAI 并完成设置,然后像平常一样继续使用 Codex。3 天学习期从 FireAI 看到的内容开始计算。
  2. 打开 Suggestions,查看 AI agents 卡片。它列出 FireAI 已识别的智能体,以及它对每个智能体学到的内容。
  3. 当 Codex 访问一个它从未联系过的目的地时,标记会出现在 AI agents 卡片和 Quick Review 中。向左滑动为拦截,向右滑动为“It’s fine”(没问题)。
  4. Block 会为发起连接的进程创建一条规则。“It’s fine”会把该目的地加入智能体的基线,使其不再被标记。
  5. 若要让智能体只访问它已经在用的地方,请在安全模式菜单中选择 Agent profile,它与 Home、Coffee shop、Paranoid 和 Under attack 并列。智能体完成学习后,连接到基线之外目的地的请求会被拦截,而不只是被标记。
  6. 被拦截的目的地会出现在 AI agents 卡片中,并附有 Allow 和 Keep blocked 两个选项。Allow 会把它加入基线,智能体随即可以访问。Keep blocked 会创建一条拦截规则,使该目的地在所有模式下都保持被拦截。

局限

  • FireAI 无法阻止提示注入。隐藏在网页或文件中的提示仍可能操纵智能体。FireAI 能做的是标记数据离开你的 Mac 的路径,并允许你拦截该路径。
  • FireAI 看不到提示、MCP 工具的内容,也看不到 Codex 读取了哪些文件,例如 ~/.ssh。TLS 隐藏了有效载荷,而且 FireAI 并不在智能体内部。
  • 很快就退出的子进程可能会被遗漏,而且子进程是按路径而非签名匹配的。
  • 在 3 天学习期内不会标记任何内容。
  • 在 Agent profile 模式下,直接连接到没有主机名的裸 IP 地址时,会按地址进行匹配。如果智能体常用的某项服务从一个新地址响应,该连接在你允许之前会被拦截。
  • FireAI 对标记所作的平实说明依据的是它测量到的事实。它从不声称某个目的地安全或危险,决定权在你。

相关指南

同样的方法适用于 FireAI 识别的其他智能体:Claude Code、Claude 桌面 App、Cursor、ChatGPT Mac App、OpenClaw、Hermes Agent、Gemini CLI、GitHub Copilot CLI、Amp、Qwen Code、opencode、Aider、Goose、Crush、Windsurf、Kiro、Trae、Meta 的 Muse、由 Python 或 Node 运行的任何其他 AI 智能体。完整的功能说明见 Agent profile 文档。

FireAI 和 HisnLabs 在其中扮演的角色

Codex 默认关闭其沙箱的网络。FireAI 关注其余的部分。

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

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

来源