高权限 NAS Agent Skill 静态审计:为什么“有确认”仍不足以接入生产
#OpenClaw #Agent-Skill #供应链安全 #NAS
本文记录一次只做静态取证的高权限 NAS Skill 审计。结论不是“发现恶意代码”,而是:在来源、许可证、构建链和宿主侧权限治理均无法闭合时,功能再完整也不应直接接入生产 Agent。
一、审计边界
目标制品来自厂商官方论坛附件,包含一份 Skill 文档、模块参考、三个平台 wrapper,以及 macOS、Linux、Windows 五个预编译 CLI。审计期间坚持四条边界:
-
不安装、不执行、不导入 Agent;
-
不连接 NAS、OpenClaw 或其它生产服务;
-
文本复制到隔离目录,二进制只在原下载目录做格式、签名、字符串和 SHA-256 取证;
-
文件清单、字节数和哈希必须逐项复算。
制品共 34 个文件,约 26 MiB,其中五个二进制占绝大部分。隔离目录只保留 29 个文本文件,没有二进制落入后续工作区。
二、供应链先于功能
manifest 声明版本为 0.1.0,但制品没有提供:
-
源码仓库;
-
精确 commit 或 tag;
-
LICENSE、COPYING、NOTICE;
-
可复现构建说明;
-
发布签名或官方独立校验值。
Linux 产物已 stripped;macOS arm64 只有 ad-hoc/linker 签名,没有 Team ID,x64 产物完全未签名。静态字符串能证明多个平台产物都包含相似的 fnOS API、命令表和 Rust 运行时线索,但不能证明它们来自同一份公开源码,更不能证明二进制没有额外行为。
这也是本次最重要的判断:“来自官方帖子”只能证明分发入口,不能替代 revision、许可证、构建链和制品签名。
三、它实际拥有多大权限
这不是只读巡检 Skill。文档暴露了完整 NAS 管理面:
-
文件上传、删除、移动、共享目录和 ACL;
-
应用下载、FPK 上传、安装、更新、启停和卸载;
-
Docker 镜像与容器创建、修改、启停、kill、删除,mount 默认可读写;
-
HTTP、FTP、SFTP、磁力和种子下载任务;
-
日志清除、导出和归档策略修改;
-
用户、组、密码、管理员权限和 SSH 权限;
-
存储池创建、停止删除、加减盘、换盘、扩容、格式化和弹出。
部分高风险命令会询问确认或再次验证密码,这是有价值的客户端保护。但大量写命令支持 --yes 或 -y 跳过交互,因此它不能替代宿主侧审批。
还有几个容易被“dry-run”名称掩盖的细节:应用手动安装的 dry-run 仍会先把 FPK 上传到 NAS;连接参数允许远程明文 WebSocket、跳过 TLS 校验;session 也可降级保存到低信任文件。
四、为什么不满足生产 Agent 门禁
一个生产 Agent 的安全边界不能只依赖 Skill 中的自然语言提醒和 CLI 确认。至少还需要宿主权威控制:
-
身份、会话、run 和 tool call 绑定;
-
capability lease 与对象 fingerprint;
-
只读、隔离副本、可逆生产动作和不可逆动作分级;
-
审批票据、幂等键、执行 receipt;
-
固定目标 allowlist、网络和路径边界;
-
写前基线、写后回归和可验证回滚。
该 Skill 没有这些宿主侧合同。一旦高能力 Agent 可以自行拼接 --yes、目标地址和凭据,客户端的交互确认就可能退化为形式保护。
因此本次结论是“不晋级”,不是继续做真机试运行。缺失证据不能靠在生产 NAS 上执行来补齐。
五、仍然值得复用的部分
拒绝二进制和 fnOS API,不等于文档毫无价值。以下设计可以抽取到现有 Ubuntu + Docker + OpenClaw 治理中:
-
先只读探测,再执行单对象变更,最后只读回归;
-
文件路径、存储池 UUID、磁盘名必须按对象类型分别校验;
-
查询输出结构化,stdout 与 stderr 分离;
-
token、secret、密码和敏感环境变量统一脱敏;
-
session 安全存储失败时不得静默降级;
-
存储危险操作先形成分类矩阵,再映射到宿主 L1–L4 权限层。
复用的是治理模式,不是把通用 NAS 管理权交给 Agent。
六、最终门禁
只有上游补齐可验证源码仓库、精确 revision、许可证、构建说明和发布签名后,才值得开启新的代码级审计。即使代码审计通过,生产接入仍必须重新设计最小 capability,而不是直接导入整套 Skill。
OpenClaw 当前的能力分层、审批和后续任务见 《OpenClaw 后续功能规划与待办任务》。
七、后续:不移植,也能安全复用
后续没有导入该 Skill 的二进制、fnOS API 或 session,而是为 N100 独立实现了固定无参数、快照隔离的只读查询。架构和生产验收见 《N100 只读 NAS Observer:从高权限 Skill 到快照隔离》。
