Robomba/airlock

GitHub: Robomba/airlock

Airlock 是一款本地优先的 AI agent 安全防护栏,通过追踪数据流向而非关键词匹配来检测密钥外泄和危险操作。

Stars: 0 | Forks: 0

# Airlock [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/Robomba/airlock/actions/workflows/ci.yml)  ·  MIT  ·  零运行时依赖  ·  完全在你的机器上运行 ### 别再死盯着你的 agent 了。 你之所以时刻盯着你的编程 agent,并不是因为它危险。而是因为你根本分不清它到底是在*读取文件*,还是在*读取你的 `.env` 并将其 POST 到它在 README 里找到的某个 IP 地址。* Airlock 能分清。所以你可以放手去做别的事。 ``` pip install airlock-agent airlock report ``` 无需配置。它会读取你的 agent 已经生成的日志,并告诉你它都干了些什么。 ``` This session — 8 agent actions: 1 file reads touched credentials (/home/dev/app/.env) 3 network calls to 3 domains (docs.example.com, collect.evil.example, api.github.com) 1 destructive commands (no confirmation asked) 1 outbound payload carried a secret read earlier <- this is the one 2 action(s) taken shortly after reading untrusted content ``` **免费。MIT 协议。完全在你的机器上运行。自身不进行任何网络调用。** ## 为什么它与众不同 其他所有的防护栏都在匹配**关键词**。我们发布的基准测试表明这根本没用:一个完全没有模型的词袋分类器在标准危害基准测试中得分为 **0.967** —— 而当攻击者停止使用那些显而易见的词汇时,得分瞬间降到了 **0.493(瞎猜的水平)**。关键词防护栏检测的根本不是意图,而是词汇量。([AICES 论文](https://github.com/Robomba/ai-control-eval-suite) · [数据集](https://huggingface.co/datasets/Robomb/aices-minpair-control)) Airlock 监控的是**数据从哪来,又要到哪去。**它会追踪哪些工具的返回结果是不可信的(网页/邮件/文件/MCP),在 agent 读取它们时对会话进行污染标记,并对它看到的每一个密钥进行指纹提取,以便它能敏锐察觉该密钥离开本机的行为——**即使是 base64 编码的也逃不掉。**“*agent 读取了 `evil.com`,然后试图把你的 `.env` POST 出去*”这根本不是措辞的问题。你没法靠重新组织语言来绕过哈希比对。 ## 开启功能(实时拦截) Airlock 以两个 hook 的形式接入 Claude Code。**你需要同时启用两者。** ``` // ~/.claude/settings.json { "hooks": { "PreToolUse": [{ "matcher": "*", "hooks": [{ "type": "command", "command": "airlock hook" }] }], "PostToolUse": [{ "matcher": "*", "hooks": [{ "type": "command", "command": "airlock watch" }] }] } } ``` 为什么要两个?`PreToolUse` 会在工具运行*之前*触发,所以它永远看不到**结果**—— 没有结果,就没有包含密钥的字节,也就无从提取指纹。`airlock watch`(PostToolUse) 是唯一能够真正捕获密钥的环节。**如果没有 `watch`,Airlock 只能孤立地评判单次操作,无法检测出跨调用的数据外泄。** 有了它,“在第 3 步读取了 `.env`,然后在第 19 步将其 POST 到未知主机”的行径就会 被捕获——因为在第 19 步单独看似乎无害的 payload,在整体行为下就会原形毕露。 ### 模式 | 模式 | 行为 | 适用场景 | |---|---|---| | `observe` | 对一切进行评分和记录,**全部放行**。不会阻断 agent。 | 当你正在建立信任感,或者 agent 无人值守且绝不能被阻塞时。 | | `enforce` *(默认)* | 遇到硬性拦截时会向你发送**询问**。其他所有操作则自动批准。 | 当你坐在键盘前时。 | | `enforce --headless` | 遇到硬性拦截时会直接**拒绝**,而不是询问。 | 当无人值守时——一个没人回答的“询问”只会导致死挂,算不上防护栏。 | 通过 `--mode`、`$AIRLOCK_MODE` 或 `~/.airlock-mode` 文件进行设置。 **紧急关闭开关:**`echo observe > ~/.airlock-mode` —— 立即恢复为仅记录模式, 无需重启,也无需修改配置。 ### 它绝对不会做的事 Airlock **绝不会将你的密钥写入磁盘。**会话状态中只保存滚动哈希 指纹和加盐哈希——这足以识别出那些试图离开本机的字节, 但不足以重构出它们的内容。哪怕状态文件被窃取,也榨不出任何信息。(状态文件存放在 `~/.cache/airlock/sessions`,权限为 `0600`,7 天后过期。) 此外,它**被刻意设计为失败放行(fails open)**:如果 Airlock 自身报错, 该工具调用将被允许执行,同时错误会被记录下来。损坏的防护栏绝对不能把它 所监控的 agent 也搞瘫痪。这是一个经过深思熟虑的权衡,也是我们坦诚相告的一点: **Airlock 是一张安全网,而非绝对保证。**它会有漏网之鱼。千万不要把它当作阻挡 agent 与无法挽回的灾难之间的唯一防线。 ## 我们的承诺 这些是我们的承诺,而非单纯的功能。这正是你可以放心使用一款并非由你编写的安全工具的原因。 **1. 我们绝不主动联网。**零遥测、零分析,Airlock 自身永远不发起任何网络调用。如果一款旨在防止数据外泄的安全工具,却为了自证清白而外泄你的数据,那简直是个笑话。代码基于 MIT 协议开源,请自行验证。 **2. 每次发布我们都会公布误报率。**我们公布的不是捕获率——因为只要一刀切拦截所有操作,任何人都能达到 100% 的捕获率。真正有意义的数字是**我们到底有多经常无端打断你**,无论这个数字是好是坏,我们都会如实打印出来。没有其他防护栏会公布这一点。去问问他们为什么吧。 **3. 六十秒内上手,否则就是我们的失败。**从安装到获得初步洞察,无需配置文件、无需学习策略语法、无需注册账号。如果你非得先去*学习*怎么用 Airlock 才能获得帮助,那就是我们把产品做砸了。 **4. 有些操作必须停下来等人类确认。**资金流转、生产环境、任何不可逆的操作——无论你的策略怎么写,遇到这些情况都会立刻唤醒你。任何所谓的“信任级别”都永远无法凌驾于此。如果某个工具提议让你实现完全自动化的资金消费,请直接关掉那个网页。 **5. 我们会明确告知你我们做不到什么。**(见下文——这段内容会永久保留在 README 中。) **6. 我们绝不会通过展示攻击手段来推销防御产品。**我们的演示使用的是虚拟的 Canary token 和本地接收端。我们绝不发布武器化代码。 **7. 永久免费,遵循 MIT 协议。**而且我们用来考核自身的基准测试是完全公开的——尽管拿它来测试我们,以及所有其他竞品。 ## ⚠ 免责声明 **Airlock 尽力而为,但仍会犯错。**它可能会漏掉真实的攻击,也可能会误拦安全的 操作。它**并不是安全的绝对保障**,不能替代代码审查或操作系统层面的 沙箱隔离,且在 **MIT 许可下“按原样”提供,不提供任何担保**。基准测试的数据源自一个 小型的、未经人工审计的种子集,仅供参考,并非定论。**你的 agent 的所作所为,责任由你自行承担。**全文请见:[DISCLAIMER.md](DISCLAIMER.md)。 ## Airlock 无法捕获的内容 夸大其词的安全工具比没有更糟糕。Airlock 只能看到**行为,而看不透想法。** - **拥有隐蔽通信渠道的、真正恶意的模型。**如果模型本身就是恶意的,并将意图隐藏在看似无害的行为中,Airlock 无法看透它的心思。 - **任何超出工具调用边界的事物。**如果不经过 Airlock 能够看到的工具调用,Airlock 就无法察觉。 - **封闭的聊天界面**(如 ChatGPT / Claude 网页版)。那里不存在拦截点。 - **它不能替代操作系统级别的沙箱隔离。**请在容器/虚拟机中运行不受信任的 agent。Airlock 是在此基础之上的一层防护,而不是替代品。 Airlock **能减少你盯梢的精力,但无法彻底消除风险。** ## 状态 **已交付(本地测试,已验证):** - `airlock report` —— 只读、零配置:展示你的 agent 一直在做什么。 - `airlock digest` —— 会话回执:展示了哪些操作被放行以及*为什么它们是安全的*。 - `airlock learn` —— 根据你自己的会话生成可编辑的允许策略(可选的调优功能)。 - `airlock run` —— 无人值守监督:**自动批准符合策略的操作,硬性拦截不可逆的操作。**涉及资金、生产环境、破坏性操作、登入操作、安装,以及任何试图离开本机的密钥时,一律会停下来等待人类确认——任何策略都无法越过这道红线。 - `airlock hook` —— Claude Code 实时的 PreToolUse 拦截闸门(根据每次工具调用返回 允许 / 询问)。 **下一步计划:**`airlock eval` —— 公共精准度基准测试(每 1,000 次操作的误报率)。 ## 许可证 MIT 协议。本地优先。自身不进行任何网络调用。
标签:AI代理安全, DLL 劫持, 大语言模型, 安全助手, 敏感信息泄露防护, 数据流监控, 本地部署, 逆向工具, 零依赖