Robomba/airlock
GitHub: Robomba/airlock
Airlock 是一款本地优先的 AI agent 安全防护栏,通过追踪数据流向而非关键词匹配来检测密钥外泄和危险操作。
Stars: 0 | Forks: 0
# Airlock
[](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 劫持, 大语言模型, 安全助手, 敏感信息泄露防护, 数据流监控, 本地部署, 逆向工具, 零依赖