CloddsBot沙箱执行指南:exec_python与命令注入防护的完整安全设计
【免费下载链接】CloddsBotOpen Source AI trading agent that operates autonomously across 1000+ markets - Polymarket, Kalshi, Binance, Hyperliquid, Solana DEXs, 5 EVM chains. Scans for edge, executes instantly, manages risk while you sleep. Agent commerce protocol for machine-to-machine payments. Self-hosted. Built on Claude.项目地址: https://gitcode.com/GitHub_Trending/cl/CloddsBot
CloddsBot是一款开源 AI 交易代理,可自主运行于 Polymarket、Kalshi、Binance、Hyperliquid 等 1000+ 市场,在无人值守时扫描套利机会并自动执行。当 AI Agent 获得"执行 Python 代码"和"运行 shell 命令"的能力后,沙箱执行与命令注入防护就成了安全命门。本文带你快速看懂 CloddsBot 是如何用四层防护,让exec_python工具既好用又安全的。
一、为什么交易 Agent 必须有沙箱?
想象一下:Agent 为了分析行情,被允许执行任意 shell 命令。如果输入未经校验,一段恶意提示词(prompt injection)就可能诱导它执行rm -rf、外传私钥,甚至 fork 炸弹拖垮服务器。
CloddsBot 的解法不是"一刀切禁用",而是分权分级:
| 层级 | 机制 | 作用 |
|---|---|---|
| 第 1 层 | 输入清洗 + 注入检测 | 拦截危险字符与恶意模式 |
| 第 2 层 | 命令审批系统(allowlist) | 白名单之外的命令必须人工批准 |
| 第 3 层 | 安全二进制列表 + 沙箱路径校验 | 防路径穿越、防符号链接逃逸 |
| 第 4 层 | Docker 容器隔离 | 系统调用级兜底隔离 |
这套设计在 docs/SECURITY_AUDIT.md 中有完整审计记录,官方已修复 15+ 个注入点。
二、exec_python:Python 代码如何被安全执行?
exec_python是 Agent 的核心执行工具,用于跑交易脚本、数据分析或自定义自动化,定义见 src/agents/index.ts。它的执行逻辑很简洁,但有两个关键安全细节:
细节 1:不经过 shell。代码先写入临时文件,然后用数组参数方式调用python3,而不是把代码字符串拼进命令行——这是防御 shell 注入最经典的做法:
- 执行位置:src/agents/index.ts
- 由于参数以数组传递,
$(...)、反引号、&&等 shell 元字符不会被二次解释。
细节 2:强制超时 + 工作目录锁定。脚本在 workspace 目录下运行,默认 30 秒超时(可通过timeout参数覆盖),超时即被强杀,避免恶意或卡死的脚本占满资源。
三、四层命令注入防护详解
1. 输入清洗与注入检测
exec_shell在执行前会先经过两道安检(见 src/agents/index.ts):
- 调用
sanitize()清洗输入,再用detectInjection()扫描 SQL 注入、命令注入、XSS、路径穿越等模式(实现位于 src/security/sanitizer.ts); - 匹配内置危险模式黑名单:
rm -rf /、mkfs、dd if=、fork 炸弹:(){等,命中直接返回"Command blocked for safety"。
2. 命令链拆分 + 审批系统
真正的第一道闸门是 src/permissions/index.ts 中的ExecApprovalsManager。它的精髓在于:不允许"整条命令整体放行"。
splitCommandChain()会把a && b | c ; d按&&、||、|、;拆成独立命令逐条校验(src/permissions/index.ts),防止"白名单命令 + 危险尾巴"的组合攻击;- 三种安全模式:deny(全禁)/allowlist(白名单,默认)/full(全放行);
- 白名单未命中时,根据
ask模式弹出审批请求,支持allow-once(本次放行)、allow-always(自动加入白名单)、deny,默认 60 秒超时未响应则拒绝; - 正则类白名单模式限制长度 ≤ 200、命令截断 10000 字符,顺带防御了 ReDoS 攻击。
3. 安全二进制白名单与沙箱路径校验
- SAFE_BINS 安全二进制列表:
jq、grep、awk、ls、base64等 50 余个低风险工具预审批通过,减少日常噪音(src/permissions/index.ts); - 路径沙箱:
assertSandboxPath()会拒绝含空字节的路径、拦截超出 workspace 根目录的路径,并解析符号链接真实指向防止逃逸(src/permissions/index.ts)。
4. Docker 容器隔离:最后一道墙
当配置CLODDS_SANDBOX_MODE=docker时,所有命令都会丢进一次性容器执行(src/tools/exec.ts),容器参数堪称"最小权限教科书":
--cap-drop ALL:丢弃全部 Linux capabilities;--security-opt no-new-privileges:禁止提权;--network none:默认断网(可显式开启);- 工作区挂载为
/workspace,支持:ro只读模式; - 可配置
pids-limit、内存、CPU 上限,超时先 SIGTERM 后 SIGKILL 强杀。
另外,源码里还有一处值得新手学习的细节:提权执行时绝不把命令字符串插值进sudo -c,而是直接 spawnsudo并把命令作为单一参数传给嵌套sh -c,从根源上避免双重 shell 解释(src/tools/exec.ts)。
四、Python Runner 的参数消毒
除了通用执行通道,调用 Bittensor 等 Python 生态工具时走的是专用 Python Runner(src/bittensor/python-runner.ts)。它用正则[;&|$(){}[]<>!#~]把所有 shell 元字符从参数中**物理剥离**并记录警告日志,再配合无 shell 的execFile` 与超时强杀,形成"洗白 + 隔离"双保险。
五、新手快速上手:三步启用沙箱
- 设置环境变量
CLODDS_SANDBOX_MODE=docker,所有命令自动进入容器执行; - 按需加白:对经常使用的命令选择
allow-always,自动写入白名单(配置存储于~/.clodds/exec-approvals.json); - 查看审计:通过 SECURITY.md 与 docs/SECURITY_AUDIT.md 了解各防护点的具体修复方式。
相关模块速查:
- 执行工具:src/tools/exec.ts
- 权限与审批:src/permissions/index.ts
- 注入清洗:src/security/sanitizer.ts、src/security/code-scanner.ts
- Docker 封装:src/docker/index.ts
总结
CloddsBot 的沙箱执行安全不是靠某一行"if 拦截",而是输入清洗 → 命令链逐条审批 → 路径/二进制白名单 → 容器隔离的纵深防御。对新手来说,最值得借鉴的思路只有一条:永远不要信任 AI 的输入,永远不要让命令裸奔进 shell。理解了这套设计,你也能给自己的 Agent 项目搭一套同等水准的安全地基。
【免费下载链接】CloddsBotOpen Source AI trading agent that operates autonomously across 1000+ markets - Polymarket, Kalshi, Binance, Hyperliquid, Solana DEXs, 5 EVM chains. Scans for edge, executes instantly, manages risk while you sleep. Agent commerce protocol for machine-to-machine payments. Self-hosted. Built on Claude.项目地址: https://gitcode.com/GitHub_Trending/cl/CloddsBot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考