Agent工坊

【Agent工坊】Rampart实战:给AI Agent加装防火墙,npm蠕虫来了也不怕

就在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工作流不会感受到任何延迟。

总结:今天就能做的三件事

  1. 立即安装Rampart
    bash curl -fsSL https://rampart.sh/install.sh | sh rampart setup claude-code rampart serve

  2. 配置凭证保护策略:把上面的.env.ssh拦截规则复制到~/.rampart/policies/custom.yaml

  3. 检查你是否受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。


AI创业 #Agent工坊 #Rampart #ClaudeCode #供应链安全 #MiniShaiHulud #一人公司