安全审计 + 仅追加日志 + 监控,针对 OpenClaw 技能(文件级差异、基线审批、SHA‑256 完整性)
技能审计( 技能- 审计)是一项面向实际任务的技能,主要用于安全管理 OpenClaw 技能的面向安全的技能;此软件包包括可执行的 Python 脚本( 不仅仅是指令) , 有六个核心能力 :.。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
一种面向安全的技能,用于安全地管理 OpenClaw 技能。该包包含可执行的 Python 脚本(非纯指令型),具备六大核心能力:
该技能执行的是对被审计技能的 静态分析 —— 它 不会执行被审计技能自身的代码。但审计工具本身会执行 本地可信命令/子进程,例如
git、Python 辅助脚本,以及为快照生成、差异比对和通知生成所必需的受控本地进程调用。
scripts/requirements.txtskills_audit.py 对已安装的技能目录执行静态检查。若配置了 QianXin Token,则会基于 整个 workspace/skills 包的稳定 MD5 值 向 QianXin SafeSkill 查询,而非上传包本身:
curl/wget/requests 的使用情况curl|sh、wget|bash、eval、动态 exec、base64 管道~/.ssh、~/.aws、/etc)workspace/skills 包进行稳定 MD5 查询输出字段:
risk.level:low | medium | high | extremerisk.decision:allow | allow_with_caution | require_sandbox | denyrisk.risk_signals[]:证据(文件 + 代码片段)risk.network.domains[]:提取出的域名列表risk.source:local 或 qianxin-md5QianXin 配置说明:
config/intelligent.jsonenabled: falsetoken 默认为空字符串enabled 设为 true 来启用所有检测结果均以 NDJSON 格式追加写入:
~/.openclaw/skills-audit/logs.ndjson用于差异比对的状态快照:
~/.openclaw/skills-audit/state.jsonSchema 定义于 log-template.json。关键字段说明:
sha256:SKILL.md 的 SHA-256 值(完整性校验字段)diff:git 提交信息 + 各文件统计信息file_changes:文件级新增 / 删除 / 修改列表approved:基线审批状态周期性监控 workspace/skills 目录中的新增、变更与删除操作。
通知模板:templates/notify.txt(定制方法参见 templates/README.md)。
每次扫描均将 skills 目录快照为本地 git 仓库(~/.openclaw/skills-audit/snapshots/):
git diff HEAD~1 HEAD 检测变更分级显示策略:
查看完整差异:
git -C ~/.openclaw/skills-audit/snapshots diff HEAD~1 HEAD git -C ~/.openclaw/skills-audit/snapshots diff HEAD~1 HEAD -- skills// git -C ~/.openclaw/skills-audit/snapshots log --oneline
每次扫描还会在审计日志中生成 semantic_analysis 字段:
eval、exec、os.system、subprocess(含 shell=True)、curl|sh、wget|bash 等模式level / decision / reason注意事项:
skills_audit.py scan 时必须经过语义分析semantic_analysis 缺失或无法生成结果,扫描应失败,而非静默跳过config/semantic-patterns.json)将从高权重危险函数评分中排除real_execution / rule_sample / doc_example / config_sampleskills_audit.py 自身,语义检测与风险扫描均优先关注真实执行路径,而非默认将模式字符串表视为危险执行subprocess.run([...], shell=False) 且 argv 固定)被视为工程能力,而非自动判定为恶意意图通过 ~/.openclaw/skills-audit/baseline.json 管理已批准技能:
python3 {baseDir}/scripts/skills_audit.py approve --skill weather --workspace
python3 {baseDir}/scripts/skills_audit.py approve --all --workspace
python3 {baseDir}/scripts/skills_audit.py baseline --list
python3 {baseDir}/scripts/skills_audit.py baseline --revoke --skill weather
当 Agent 首次加载此技能时,可能执行 本地初始化,但 不得自动创建 cron 任务。相反,它应引导用户显式创建监控:
~/.openclaw/skills-audit/state.json 是否存在python3 {baseDir}/scripts/skills_audit.py init --workspace
skills-audit-watch 的 cron 任务(openclaw cron list)openclaw cron add
--name "skills-audit-watch"
--cron "*/1 * * * *"
--tz "Asia/Shanghai"
--session isolated
--message "python3 {baseDir}/scripts/skills_watch_and_notify.py --workspace "
--announce
--channel
--to
设计原则:
skills-audit仅负责扫描、日志记录与通知文本生成;调度与投递应由用户主导,而非默认自动创建。
⚠️ 强制性规则:当用户询问技能变更详情时,Agent 必须 使用
show命令获取结构化变更数据。默认应先提供 安全摘要,而非直接向外发送完整原始差异内容。
触发语句(用户可能表达):
固定执行流程(不可跳过):
python3 {baseDir}/scripts/skills_audit.py show --skill
python3 {baseDir}/scripts/skills_audit.py show
show 输出的 安全摘要(变更文件、行数、主要变更点),以避免对外暴露敏感差异内容show 输出,并应警示用户:差异中可能出现敏感信息--commit-range:python3 {baseDir}/scripts/skills_audit.py show --commit-range HEAD~3..HEAD~2
禁止行为:
show 输出路径,直接运行 git diffshow 的安全摘要;仅在用户明确请求时提供完整原始内容python3 {baseDir}/scripts/skills_audit.py init --workspace /root/.openclaw/workspace
python3 {baseDir}/scripts/skills_audit.py scan --workspace /root/.openclaw/workspace --who user --channel local
python3 {baseDir}/scripts/skills_watch_and_notify.py --workspace /root/.openclaw/workspace
risk.level 为 high 或 extreme 时,必须经人工复核或置于 sandbox 中执行。cron add / cron edit 进行任务调度。