就在48小时前,一个叫Mini Shai-Hulud的npm蠕虫感染了169个包,在Claude Code和VS Code里植入持久化钩子——你的Agent可能正在偷你的GitHub Token。
为什么你现在就需要这个工具
2026年5月11日,安全公司Aikido发出红色警报:Mini Shai-Hulud供应链攻击全面升级。373个恶意版本横跨169个npm包名,@tanstack的全部42个核心包(react-router、router-core等)、@mistralai/mistralai SDK、@uipath的66条记录全部沦陷。
最致命的是:恶意代码在Claude Code和VS Code中建立持久化钩子。这意味着即使你杀掉了恶意进程,重启IDE后stealer会自动复活。它还会安装gh-token-monitor服务,持续监控并窃取你新生成的GitHub token。
而这背后的技术原因很简单:Claude Code的--dangerously-skip-permissions模式,以及Cline、Codex等工具的自主模式,给了Agent不受限制的Shell访问权限。你的Agent可以读SSH密钥、窃取.env文件、甚至rm -rf /——没有护栏。
Rampart就是为这个场景设计的。
Rampart是什么
Rampart 是一个开源的AI Agent防火墙/安全策略引擎。它坐在AI编程Agent和你的系统之间,在每一个命令、每一次文件访问、每一个网络请求执行前进行策略评估。
核心特点:
- 微秒级决策:95%以上的判断在个位数微秒内完成(实测rm -rf /拒绝仅需8μs)
- 原生集成:通过Claude Code的PreToolUse hooks、OpenClaw插件等原生方式嵌入
- 防篡改审计:哈希链式审计日志,Agent无法修改
- 实时仪表盘:localhost:9090/dashboard 可视化所有Agent活动
- 完全免费:MIT开源协议
支持的Agent:
| Agent | 集成方式 |
|-------|---------|
| Claude Code | 原生 PreToolUse hooks |
| OpenClaw | 原生插件 + 审批卡片 |
| Cline | 原生 hooks |
| Codex CLI | Wrapper模式 |
| 任意Agent | Shell wrapping / LD_PRELOAD |
5分钟上手
第一步:安装
# macOS / Linux
curl -fsSL https://rampart.sh/install.sh | sh
# 或者用 Homebrew
brew install rampart
# 或者用 Go 直接安装
go install github.com/peg/rampart/cmd/rampart@latest
第二步:配置Claude Code集成
# 一键配置——Rampart会自动修改 ~/.claude/settings.json
rampart setup claude-code
这个命令做了什么?它在你的Claude Code设置里注入了PreToolUse hook,让Claude Code在执行每个工具调用前先经过Rampart的策略引擎审批。
验证安装:
rampart doctor
# 输出:✓ daemon running ✓ claude-code hooks active ✓ policies loaded: 47
第三步:启动并观察
# 启动Rampart守护进程
rampart serve
# 另一个终端:实时监控Agent活动
rampart watch
你会看到这样的实时决策流:
ALLOW 14:23:01 exec "npm test" [allow-dev]
ALLOW 14:23:03 read ~/project/src/main.go [default]
DENY 14:23:05 exec "rm -rf /tmp/*" [block-destructive]
LOG 14:23:08 exec "curl https://api.example.com" [log-network]
ASK 14:23:10 exec "kubectl apply -f prod.yaml" [ask]
DENY 14:23:12 resp read .env [block-credential-leak]
→ blocked: response contained AWS_SECRET_ACCESS_KEY
最后一条特别关键——Rampart不仅能拦截命令,还能审查Agent的响应内容。当Agent试图读取.env文件时,Rampart检测到响应中包含AWS_SECRET_ACCESS_KEY,直接拦截。
进阶:编写自定义安全策略
策略文件默认位置:~/.rampart/policies/custom.yaml,支持热加载(修改后无需重启)。
策略1:防御供应链攻击中的恶意脚本
针对Mini Shai-Hulud的攻击模式——通过prepare脚本在npm install时执行恶意Bun代码:
# ~/.rampart/policies/custom.yaml
# 阻止通过npx/bun执行未知来源的远程脚本
- match: "npx.*-y.*"
action: ask
priority: 10
note: "npx with -y flag bypasses confirmation"
- match: "bun.*https://.*"
action: deny
priority: 5
note: "Block bun executing remote scripts"
# 阻止安装期间的prepare脚本访问敏感路径
- match: "*/node_modules/.bin/*"
action: watch
priority: 20
note: "Monitor bin execution from node_modules"
策略2:防止Agent读取凭据文件
# 阻止读取任何凭据相关文件
- match: ".env"
action: deny
priority: 1
- match: ".env.*"
action: deny
priority: 1
- match: "*.pem"
action: deny
priority: 2
note: "SSH private keys"
- match: "~/.ssh/*"
action: deny
priority: 2
- match: "*.tfstate*"
action: deny
note: "Terraform state may contain secrets"
# 阻止响应中包含凭据格式
- match: "resp:.*AKIA[0-9A-Z]{16}"
action: deny
priority: 3
note: "Block AWS access key in responses"
- match: "resp:.*ghp_[0-9a-zA-Z]{36}"
action: deny
priority: 3
note: "Block GitHub PAT in responses"
策略3:生产环境保护
# 生产环境kubectl操作需要审批
- match: "kubectl apply.*prod"
action: ask
priority: 10
- match: "kubectl delete.*prod"
action: deny
priority: 5
# 限制网络出站(防止数据外泄)
- match: "curl.*pastebin"
action: deny
note: "Block pastebin uploads"
- match: "curl.*transfer.sh"
action: deny
note: "Block file transfer services"
项目级策略(团队共享)
在Git仓库根目录创建.rampart/policy.yaml,提交到版本控制:
# .rampart/policy.yaml —— 整个团队强制执行
# 禁止删除git历史
- match: "git push.*--force"
action: deny
note: "Force push protection"
# CI/CD安全
- match: "gh secret set"
action: ask
note: "GitHub secret changes need approval"
# 依赖安装审计
- match: "npm install.*--legacy-peer-deps"
action: watch
note: "Legacy peer deps may pull vulnerable packages"
在不受信任的第三方仓库中,可以禁用项目策略:
RAMPART_NO_PROJECT_POLICY=1 claude
三层深度防护:Rampart + Docker + 系统级
Rampart是应用层防护。对于生产级安全,叠加以下两层:
第一层:Docker容器隔离
docker run --rm -it \
--security-opt no-new-privileges \
--security-opt seccomp=/path/to/seccomp-profile.json \
--tmpfs /home/agent:rw,noexec,nosuid,size=500m \
--cap-drop ALL \
--read-only \
-v /path/to/code:/workspace:ro \
agent-image
第二层:Rampart(本文重点)
rampart setup claude-code
rampart serve
第三层:LD_PRELOAD系统级拦截
# 拦截所有execve/system/popen/posix_spawn调用
rampart preload -- claude
三层叠加后,攻击者需要同时突破容器沙箱、策略引擎和系统调用拦截,攻防成本呈指数级增长。
性能数据:零感知延迟
实测数据(来自Rampart GitHub benchmarks):
| 命令 | 决策 | 耗时 |
|---|---|---|
rm -rf / |
deny | 8μs |
sudo reboot |
watch | 6μs |
.ssh/id_rsa 读取 |
deny | 3μs |
git status |
allow | 4μs |
curl ngrok.io |
deny | 3μs |
8微秒是什么概念?一个HTTP请求到localhost的延迟大约是100-500μs。Rampart的策略判断比本地网络请求还快50倍。你的Agent工作流不会感受到任何延迟。
总结:今天就能做的三件事
-
立即安装Rampart:
bash curl -fsSL https://rampart.sh/install.sh | sh rampart setup claude-code rampart serve -
配置凭证保护策略:把上面的
.env和.ssh拦截规则复制到~/.rampart/policies/custom.yaml -
检查你是否受Mini Shai-Hulud影响:
bash # 搜索lockfile中的受影响包 grep -r "tanstack\|mistralai" package-lock.json yarn.lock pnpm-lock.yaml 2>/dev/null # 检查持久化钩子文件 find . -name "router_init.js" -o -name "tanstack_runner.js" 2>/dev/null # 检查CI日志中的意外Bun执行 grep -r "bun" .github/workflows/ 2>/dev/null
AI Agent是生产力放大器,但它也会放大你的安全攻击面。 Mini Shai-Hulud证明了攻击者已经开始系统性针对AI开发者。Rampart让安全不再是事后补救,而是Agent工作流的内置基础设施。
成本:0元。部署时间:5分钟。保护范围:所有AI Agent。
