ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Evolver沙箱执行器深度解析:验证器任务的安全执行边界

Evolver沙箱执行器深度解析:验证器任务的安全执行边界 Evolver沙箱执行器深度解析验证器任务的安全执行边界【免费下载链接】evolverThe GEP-powered self-evolving engine for AI agents. Auditable evolution with Genes, Capsules, and Events. | evomap.ai项目地址: https://gitcode.com/GitHub_Trending/evolv/evolverEvolver 是一个基于 GEP 协议的 AI 智能体自进化引擎它的验证器Validator角色会从中心 Hub 拉取验证任务并执行其中的命令。本文带你完整解析 Evolver 沙箱执行器sandboxExecutor是如何为这些来自外部的验证命令划出安全执行边界的——从一次性沙箱目录、命令白名单、危险参数拦截到超时熔断、输出截断与审计报告帮助你理解一个可审计进化系统在安全工程上的真实做法。1️⃣ 先搞清楚验证器任务为什么必须进沙箱Evolver 的验证器节点会周期性地向 Hub 拉取验证任务validation task。任务里带有一组validation_commands也就是要执行的命令字符串。这里有一个天然的安全风险这些命令不是本机用户自己写的而是由远程 Hub 下发、经由基因Gene作者提供的。如果直接以普通进程身份执行等同于把整台主机暴露在命令注入、任意代码执行的攻击面下。因此 Evolver 的设计原则很明确见 sandboxExecutor.js 头部注释 第1-17行永远不在 evolver 自己的工作区或仓库根目录里运行每个任务新建一个全新的空目录用完即毁单命令超时默认 60 秒、硬上限 120 秒整批默认 180 秒标准输出/错误各截断到 4000 字符。 一句话概括不信任任何来自 Hub 的载荷只执行命令本身且只执行一次。整个验证器入口在 src/gep/validator/index.js 中runValidatorCycle()每轮先做环境自检再取任务、进沙箱执行、回传报告所有失败路径都是非致命、下轮重试。2️⃣ 沙箱目录一次性隔离工作区每次执行前createSandboxDir() 会在系统临时目录下os.tmpdir()/evolver-validator创建形如task_时间戳_随机数的独立目录。这个目录名带了 4 字节随机数避免碰撞。它做了三层防御比简单 mkdir讲究得多防护点应对的攻击基础路径若被预建为符号链接则直接拒绝攻击者把沙箱工作目录重定向到任意位置目录所有者不是当前用户则拒绝执行共享主机上其他用户篡改/替换任务目录权限被放松时自动收紧为0700防止同机其他用户窥探中间产物执行结束后的finally块里调用 cleanupDir() 无条件删除整个目录——沙箱是真正的一次性的不留下任何状态给下一个任务。3️⃣ 三道关卡命令解析与白名单拦截这是整个安全边界的核心也是安全团队反复加固对应仓库中的 GHSA 公告与 Issue #451、#607-609最多的部分。关卡一不用 Shell逐字符解析parseCommand() 实现了一个极简的命令词法解析器只识别空格、制表符和引号遇到|;$这类 shell 元字符直接抛错拒绝。也就是说node idx.js; rm -rf /这种经典注入在解析阶段就被拦下连进程都创建不出来。关卡二可执行文件硬白名单ALLOWED_EXECUTABLES new Set([node]) // 只认 node注意一个有意思的历史细节npm和npx曾经也在白名单里后被移除。原因是 npm 会运行包的 install 生命周期脚本、npx 会拉取远程包的 bin 入口——它们本质上是按设计执行任意代码。保留它们等于给被劫持的 Hub 留了一条远程代码执行通道。现在唯一的合法形态就是node 脚本文件。关卡三node 危险参数黑名单即使只允许node仍有内联执行后门。BLOCKED_NODE_FLAGS 拦截了所有能把 node 变成任意代码求值器的参数求值类-e/--eval、-p/--print、-i交互式加载类-r/--require、--loader、--import、--env-file调试端口--inspect系列——它会打开一个无认证的远程调试端口是实打实的 RCE 通道挂起类--watch系列——让进程赖着不走直到超时属于自伤式拒绝服务模块解析劫持--conditions/-C。同时要求命令必须带一个脚本文件参数唯一例外是--version、-v、--help这类纯信息查询参数它们不执行任何用户代码。回归测试见 test/sandboxExecutor.security.test.js覆盖了每一类注入样本。4️⃣ 资源与环境的双保险超时、截断、环境剥离即使命令本身合法Evolver 仍限制它能做什么、能做多久、能看到什么⏱ 时间维度单命令默认 60s硬上限 120s到点直接SIGKILL结果标记timedOut整批命令默认 180s且每条命令的超时会被压缩到批次剩余时间内防止批量挂死遇到第一条失败命令立即停止后续命令不做无谓执行。 输出维度stdout/stderr 边收集边限长最终各自截断到 4000 字符并打上...[truncated]标记——既防止刷屏式的内存占用也保证回传报告体积可控。 环境维度buildSandboxEnv() 构建了最小环境除了保留PATH否则找不到 node 本体其余全部丢弃并把HOME、TMPDIR、USERPROFILE等统一重定向到空临时目录。这意味着沙箱里任何想读~/.ssh/*、~/.aws/credentials、~/.npmrc的操作拿到的都只是空目录。另外注入NODE_ENVsandbox、EVOLVER_SANDBOX1两个标记便于行为识别。5️⃣ 上岗前的两道检查环境自检与质押验证预检PreflightrunPreflight() 会在启动时真正跑一次node __evolver_preflight.js。如果连写个文件、用 node 跑个文件都做不到常见于无头环境下 PATH 缺失、TMPDIR 不可写验证器会主动静默退出而不是向 Hub 疯狂上报env_fail把自己搞进隔离名单。这个自检结果每个进程只算一次并被缓存。质押StakestakeBootstrap.js 保证节点在消费验证任务前已在 Hub 上持有有效质押失败时按瞬时错误 / 积分不足走不同的指数退避策略5 分钟 → 15 分钟 → 1 小时 → 4 小时封顶状态持久化到~/.evomap/validator_stake_state.json避免短命进程反复锤 Hub。验证器如何开关开关采用三级解析isValidatorEnabled()本地环境变量EVOLVER_VALIDATOR_ENABLED最高优先级 → 磁盘持久化的 feature flag → 代码默认值开启。开启后台守护模式时会打印一条显式提示CPU、带宽与质押积分将被消耗不想要可以设置为false。6️⃣ 审计闭环一份可验证的 ValidationReport执行结果由 reporter.js 组装成报告回传 Hub关键字段buildReportPayload()task_idnonce任务回执凭证overall_ok/commands_passed/commands_total/reproduction_score通过统计execution_log_hash整条执行日志的SHA-256 哈希——Hub 端无需信任节点口述可随时复核env_fingerprint执行环境指纹用于跨节点对比同一基因在不同环境的结果差异failure_class失败归因分类最多回传 8 条命令明细、每条 stderr 尾部 240 字符。失败归因分类值得展开它让 Hub 能区分节点环境坏了和基因真的错了FAILURE_CLASSfailure_class含义常见原因ok全部通过—parse_failed命令解析失败含 shell 元字符等注入特征executable_not_allowed可执行文件不在白名单尝试调用 npm / bash 等sandbox_block_node_flagnode 危险参数被拦截使用了-e、--require等spawn_failed进程创建失败node 不在 PATH、权限问题timeout超时被 SIGKILL死循环、网络等待exit_nonzero脚本自身断言失败基因逻辑问题这种失败语义化设计正是可审计进化的精髓一次验证失败到底是环境噪声还是基因缺陷数据说了算而不是节点说了算。7️⃣ 相关模块路径速查沙箱执行器核心src/gep/validator/sandboxExecutor.js验证器入口 / 任务拉取 / 守护循环src/gep/validator/index.js报告构建与提交src/gep/validator/reporter.js质押与退避策略src/gep/validator/stakeBootstrap.js安全回归测试注入样本全集test/sandboxExecutor.security.test.js守护进程韧性测试test/validatorDaemon.test.js8️⃣ 总结这套安全边界好在哪纵深防御解析拒绝注入 → 白名单限定程序 → 黑名单限定参数 → 超时/截断限制资源 → 环境剥离切断凭据每一层都能独立挡住一类攻击零残留一次性目录 最小环境 输出截断执行完不留任何可被后续利用的状态可审计SHA-256 日志哈希 失败归因分类 环境指纹让验证结果本身成为可复核的数据而非节点的单方面声明⚖️务实取舍白名单收窄到只剩node script一种合法形态把灵活性换成了确定性——这正是运行远程下发命令场景下最正确的取舍。对于想给自己的 Agent 系统设计远程任务执行能力的开发者来说sandboxExecutor.js 这 500 行不到、零外部依赖的代码本身就是一份可以直接借鉴的沙箱安全清单。【免费下载链接】evolverThe GEP-powered self-evolving engine for AI agents. Auditable evolution with Genes, Capsules, and Events. | evomap.ai项目地址: https://gitcode.com/GitHub_Trending/evolv/evolver创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表