通过 Airgap 隐藏 AI 代理的秘密和 NPM 安装
在 AI 时代,我们允许 AI 代理在我们的项目中读取和写入文件,并从互联网上安装技能或插件。npm 恶意软件在安装时窃取秘密。AI 代理也会运行命令并安装 npm 包,有时这些包是幻觉或恶意的。airgap 是一个在命名空间内运行程序的封装。文件中的敏感秘密被隐藏,AI 代理仍然可以与文件进行交互,但从未看到实际值。包管理器是有门槛的:在尝试访问不应访问的文件之前会询问你。仅限 Linux,macOS 支持尚在开发中。 airgap 防护的内容 你的秘密存储在像 .env、~/.ssh 和 ~/.npmrc 这样的纯文本文件中。如今,我们或我们的 AI 代理运行大量的不可信代码,这可能会读取这些文件。这是如何发生的两种方式: 1. AI 代理。例如,像 claude 或 opencode 这样的代理会扫描你的项目和主目录,它读取的一切可能会发送给模型提供商。一个 .env 值或 SSH 密钥可能在你注意不到的时候出现在提示中。恶意插件或技能可能故意抓取敏感文件。 2. npm 包。恶意的 npm 包并不新鲜,但最近的潮流非常成功并迅速传播。一个依赖项可以添加一个 preinstall 或 postinstall 钩子,在你安装时运行任意代码,该代码会攻击你的 .env 文件、SSH 密钥和云凭证。像 Shai-Hulud、Miasma、pgserve 和假 tanstack 包这样的活动都做同样的事情:在安装时运行,抓取秘密,并发送出去。有些还会留下持久的坏状态。而且代理会对其虚构的包运行 npm install,这是攻击者现在提前注册的名字(slopsquatting)。 Shai-Hulud 虫 最清晰的例子是 Shai-Hulud,这是一个自我复制的虫子,于 2025 年末通过 npm 蔓延。当你安装一个被感染的包时,它的钩子会寻找 .npmrc(npm 令牌)、环境变量以及存储 GitHub PAT 和 AWS、GCP、Azure 云密钥的配置文件。它将这些发送给攻击者。借助被窃取的 npm 令牌,它重新发布开发者维护的其他包的植入版本,因此每次安装这些包都会再次传播它。2025 年末的 2.0 活动将代码移动到 preinstall,这也会影响 CI/CD 管道。 airgap 如何制止它们 这些恶意软件只有在能够从磁盘窃取你的秘密时才有效。airgap 的目的就是防止这种情况。当它读取 .env、私钥或 ~/.npmrc 时,返回的是已编辑的内容。任何其他意外的文件,如 ~/.aws/credentials,首先会询问你的许可。 保护内容:文件中的秘密(.env 等)、SSH 和 PGP 私钥、npm 令牌(.npmrc)。在你的项目和主目录中。我们正在不断增加。 工作原理 airgap 在新的挂载和用户命名空间中生成目标程序,并将你的主目录和当前工作目录(如果与主目录不同)挂载为 FUSE 文件系统。每次文件系统访问都经过 airgap 的处理程序。从那里我们编辑秘密,或者询问你确认程序是否应该访问该文件。 安装 从 crates.io 安装:cargo install airgap 使用方式 airgap <程序> [参数...] airgap 有一个程序允许列表,每个程序都有特定规则。目前支持的程序有: - AI 代理:claude、opencode - 仅以编辑模式运行。 - 包管理器:npm - 以编辑模式和交互文件门控运行。像 ~/.gitconfig、node_modules 和锁文件这样的良性路径是预先批准的。更多工具将被添加。如果你想支持另一个程序,请提交问题。 秘密编辑 .env 文件: $ cat .env API_KEY=sk-live-9f8c2a1b4e7d DB_PASSWORD=hunter2 $ airgap cat .env API_KEY=<已编辑值> DB_PASSWORD=<已编辑值> 该文件对 AI 代理仍然可读可编辑,只有秘密被隐藏。 npm install 文件门控 在 airgap 下运行npm,安装钩子运行,但每个新文件读取都会触发提示: $ airgap npm install bad-package airgap:允许读取 /home/sven/.ssh/id_rsa?[y/N] n airgap:阻止了 /home/sven/.ssh/id_rsa 2秒内添加了42个包 尝试读取 ~/.ssh/id_rsa 的 postinstall 脚本被拦截并拒绝。安装仍在继续,钩子无法获取任何内容。正常读取,如 package.json、锁文件和 npm 缓存是预先批准的,因此你只会在不期望的文件上收到提示。 与 AI 代理一同使用 $ airgap claude > 给我显示 ./.env 内容 读取1个文件 这是文件: DATABASE_URL="<已编辑值>" API_KEY="<已编辑值>" AWS_SECRET_ACCESS_KEY="<已编辑值>" 代理可以在实际文件上工作,但只看到编辑后的秘密。 通过别名使其透明 要始终在 airgap 下运行你的代理或包管理器,请在你的 shell 配置(~/.bashrc、~/.zshrc 等)中添加别名: alias claude="airgap claude" alias opencode="airgap opencode" alias npm="airgap npm" 现在 npm install 和你的代理在 airgap 下运行,而无需你将精力投入其中。 没有安全层是完美的,airgap 是其中之一。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡