OpenClaw 安全巡检
第一步:检查运行环境
执行命令 node --version,确认返回了版本号(如 v18.x.x 或更高)。
- 如果命令成功返回版本号 → 继续第二步
- 如果报错"command not found" → 告诉用户:"安全巡检需要 Node.js 环境,请先安装 Node.js(推荐 v18 以上),安装后再来找我。",然后停止,不要继续后续步骤
第二步:首次使用引导
检查文件 ~/.openclaw/.audit-first-run 是否存在。
如果文件已存在 → 跳过本步,直接进入第三步。
如果文件不存在(说明是首次使用),向用户发送以下消息,然后等待用户回复:
你好!这是首次使用安全巡检功能。
除了现在手动执行,你还可以设置每天自动巡检,系统会在固定时间运行扫描并生成本地报告,可选通过消息平台通知你结果。
请选择:
1. 设置每天自动巡检(推荐,省心)
2. 先跑一次看看,以后再说
根据用户回复执行:
- 用户选 1(或回复"设置"、"自动"、"定时"等含义)→ 先创建标记文件
~/.openclaw/.audit-first-run(内容写setup-done),然后必须读取 references/cron-setup.md 文件,严格按照其中的步骤帮用户配置定时任务。配置完成后再继续第三步。 - 用户选 2(或回复"先跑一次"、"以后再说"、"跳过"等含义)→ 创建标记文件
~/.openclaw/.audit-first-run(内容写skipped),然后继续第三步。
关于定时任务的硬性要求:
- 必须使用
openclaw cron add命令 - 禁止使用系统 crontab(
crontab -e等) - 原因:系统 crontab 无法正确初始化 OpenClaw 环境,会导致执行失败
- cron 命令中严禁添加
--push参数:定时任务只以本地离线模式运行,绝不自动向远端上报设备标识
第三步:询问检测模式
向用户发送以下消息,然后等待用户回复:
请选择检测模式:
1. 仅本地扫描(默认) — 不联网、不发送任何数据,适合离线或隐私敏感环境
⚠️ 以下选项涉及向第三方服务器发送隐私敏感的设备标识,请仔细阅读后再选择:
2. 完整检测 — 联网查询恶意插件并同步安全评分
将向 Changeway 威胁情报服务(https://auth.ctct.cn:10020)上报:
· MAC 地址 + 主机名(用于请求签名)
· 持久化 agent_id(首次生成后永久保存在本机,每次复用)
· 本机已安装的完整 Skill 清单(slug/author/version/ownerId)
· 每项检查的名称和结果摘要
⚠️ 注意:此选项仅限本次手动运行。如已配置定时任务,cron 命令中不会也不应包含 --push。
如选择此项,请回复"2 已了解"以确认知情同意。
根据用户回复执行:
- 用户回复 "1" 或任何"本地"、"离线"含义 → 记录选择:本地模式,继续第四步
- 用户回复 "2 已了解"(必须包含"已了解"或"我已知晓"等确认短语)→ 记录选择:完整检测,继续第四步
- 用户只回复 "2" 但没有确认短语 → 不执行,回复:"完整检测模式会持续向第三方发送设备标识,请回复「2 已了解」确认知情后再继续。"
第四步:执行安全扫描
根据用户在第三步的选择,执行对应的命令:
- 用户选 1(仅本地)→ 执行命令:
node <SKILL_DIR>/scripts/openclaw-hybrid-audit-changeway.js - 用户选 2(完整检测)→ 执行命令:
node <SKILL_DIR>/scripts/openclaw-hybrid-audit-changeway.js --push
其中 <SKILL_DIR> 是本 skill 的安装目录(即本 SKILL.md 所在的目录)。
输出要求(严格遵守):
脚本执行完毕后,不要把脚本的完整控制台输出发给用户。脚本输出内容很长、包含大量技术细节,直接展示会让用户困惑。
你需要从脚本输出中只提取以下信息,然后按下面的格式发给用户:
- 从输出末尾找到
PASS X FAIL X SKIP X这一行,提取 PASS、FAIL、SKIP 的数量 - 仅在完整检测模式(--push)下,从输出末尾找到
系统安全得分: XX / 100这一行,提取得分;本地模式无此行,得分显示为"—" - 从输出末尾找到
详细审计报告已保存至: ...这一行,提取报告文件路径
然后只向用户发送以下内容(不要多写,不要少写):
检测统计: PASS X FAIL X SKIP X
系统安全得分: XX / 100(本地模式下显示为"—")
详细审计报告已保存至: <报告文件路径>
需要我帮你解读这份报告吗?回复"是"我会逐项分析每个检查结果,告诉你哪些没问题、哪些需要注意。
然后停下来等用户回复,不要自动开始分析。
第五步:解读报告(用户要求时才执行)
当用户回复"是"、"要"、"分析"、"解读"、"看看"等肯定含义时,执行本步。
5.1 读取报告文件
读取文件 ~/.openclaw/security-reports/report-YYYY-MM-DD.txt,其中 YYYY-MM-DD 是今天的日期。
如果文件不存在,告诉用户:"没有找到今天的报告文件,可能扫描还没完成,请稍后再试。"
5.2 按以下格式逐项输出分析
输出规则(非常重要,必须全部遵守):
- 按报告中
[1/14]、[2/14]... 的顺序,逐项输出分析 - 每项独立一段,不要合并、不要按通过/失败分类
- 每项用一段话说清楚(2-4 句,不超过 100 字),要让不懂技术的人也能看明白
- 图标含义:✅ = 安全没问题;⚠️ = 有点小问题建议处理;🚨 = 严重问题必须处理
- PASS 的项简短确认即可,FAIL 和 SKIP 的项要说明是什么问题和怎么解决
- 不要输出哈希值、原始日志、进程列表等技术细节,只输出结论和建议
5.3 解读模板(严格按此格式输出)
以下是完整的输出模板。你必须按照这个格式来写,内容根据实际报告调整:
## 🔒 安全巡检报告解读
> 扫描时间:YYYY-MM-DD HH:MM
> 安全评分:XX / 100
---
### 1. 核心运行环境健康度
(根据报告中 [1/14] 的 PASS/FAIL 状态来写)
### 2. 系统敏感目录防篡改监控
(根据报告中 [2/14] 的内容来写)
### 3. 网关进程内存凭证隔离检查
(根据报告中 [3/14] 的内容来写)
... 依次写到第 14 项 ...
---
### 总结
用 2-3 句话概括整体安全状况,列出最需要关注的 1-2 个问题(如果有)。
5.4 解读案例(供你参考,实际输出时根据真实报告内容来写)
以下是基于一份真实报告的解读示范,展示每种状态该怎么写:
## 🔒 安全巡检报告解读
> 扫描时间:2026-03-15 17:04
> 安全评分:79 / 100
---
### 1. 核心运行环境健康度
✅ 环境扫描通过。有 3 条配置建议(如反向代理信任设置、credentials 目录权限),不影响安全但建议后续优化。
### 2. 系统敏感目录防篡改监控
✅ 过去 24 小时有 21 个文件变更,主要是 OpenClaw 的会话记录和日志等正常运行产生的文件,未发现异常篡改。
### 3. 网关进程内存凭证隔离检查
⏭️ 跳过。macOS 系统限制(SIP 保护机制),无法扫描其他进程的环境变量,这是正常的,不用担心。
### 4. 核心配置防篡改与权限基线
⚠️ 首次运行,还没有建立文件指纹基线,所以无法判断配置是否被篡改。好消息是:核心文件(openclaw.json、paired.json、sshd_config)的访问权限都设置正确。建议后续手动生成基线文件以开启防篡改监控。
### 5. 组件与插件供应链完整性
⚠️ 检测到 Skill/MCP 组件文件与上次基线不一致。如果你最近安装或更新了插件(如 wechat-macro-daily-report),这属于正常变更。如果没有主动操作过,建议检查是否有未经授权的组件变更。
### 6. 远程访问与爆破攻击监控
✅ 安全。过去 24 小时没有发现任何 SSH 登录失败记录,说明没有人在尝试暴力破解你的远程登录。
### 7. 网络暴露面与异常进程排查
✅ 检测到 8 个对外监听端口,均为已知应用(Cursor 编辑器、Surge 代理、clouddesk 远程桌面等),无可疑的陌生服务。CPU 占用正常。
### 8. 自动化任务与后门驻留排查
✅ 已拉取定时任务列表,目前有 1 个定时任务(微信宏观群日报),是你自己设置的正常任务,未发现可疑的后门任务。
### 9. 高危命令与越权行为审计
⏭️ 跳过。今天的 OpenClaw 运行日志文件不存在,可能是今天还没有执行过需要记录的操作。不用担心,下次有日志时会自动检查。
### 10. 异常外联与数据外泄监控
⏭️ 跳过。同上,今天的日志文件不存在,无法扫描网络请求记录。
### 11. 系统凭证与敏感文件访问审计
⏭️ 跳过。同上,今天的日志文件不存在,无法扫描文件访问行为。
### 12. 硬编码密钥与助记词防泄漏扫描
✅ 安全。扫描了工作区的所有文件,没有发现明文写死的私钥或助记词。
### 13. 特权提权(Sudo)操作对账审计
✅ 安全。今天系统没有执行过 sudo 特权命令,Agent 的记忆记录也没有相关内容,两边对账一致,不存在偷偷提权的情况。
### 14. 生态组件恶意威胁情报扫描
✅ 安全。已列出本机安装的 54 个 Skill 组件,全部在安全名单中。(如果使用了完整检测模式且命中威胁情报,这里会显示具体的恶意组件和处置建议。)
---
### 总结
整体安全状况良好。主要有两个可以改进的地方:
1. **建立配置文件指纹基线** — 这样以后可以自动检测核心配置是否被篡改
2. **确认插件变更** — 组件文件有变化,如果是你自己安装/更新的就没问题
其他检查项全部通过,没有发现安全威胁。
5.5 关于图标使用
在解读报告时使用以下图标(只有这 4 个,不要使用其他图标):
| 图标 | 含义 | 对应报告状态 |
|---|---|---|
| ✅ | 安全,没问题 | [PASS] |
| ⚠️ | 有小问题,建议处理 | [FAIL] 但不严重 |
| 🚨 | 严重问题,必须处理 | [FAIL] 且有安全风险 |
| ⏭️ | 跳过了,不用担心 | [SKIP] |
判断 FAIL 是 ⚠️ 还是 🚨 的标准:
- 如果报告里提到"篡改"、"恶意"、"爆破"、"危险"、"高危" → 用 🚨
- 如果报告里提到"首次运行"、"缺失基线"、"权限过宽"、"未知请求" → 用 ⚠️
定时任务配置
当用户后续要求"设置定时巡检"、"修改定时任务"、"自动巡检"时:
- 读取 references/cron-setup.md 文件
- 在执行任何配置命令前,向用户确认以下信息并等待明确同意:
- 定时任务将在后台持续运行,每次执行会在本地生成报告
- 必须使用
openclaw cron add而非系统 crontab,因为 openclaw cron 管理独立的调度会话和超时,这意味着定时任务依赖 OpenClaw 自身的运行环境 - 如果配置了
--announce/--channel/--to参数,每次巡检结果还会通过 OpenClaw 消息通道(如 Telegram)发送通知到指定 chat ID,这是一条额外的外部消息路径 - 如果在
--message中添加了--push,定时任务也会定期向https://auth.ctct.cn:10020上报审计摘要和 Skill 清单 - 询问用户:"确认要设置定时巡检吗?(是/否)",收到"是"后再继续
- 严格按照 cron-setup.md 中的步骤执行
- 必须使用
openclaw cron add命令,禁止使用系统 crontab