Skill: ylardablez/openclaw-security-watchdog (version 1.1.1)

--- name: openclaw-security-audit description: | OpenClaw 安全巡检工具，一键执行系统安全扫描并生成通俗易懂的报告。 使用场景：用户说"安全巡检"、"安全检查"、"安全审计"、"巡检"、"security audit"、"检查安全"、"系统安全"等。 触发条件：任何与 OpenClaw 安全检测、审计、巡检相关的请求。 运行依赖： 必需：Node.js v18+、openclaw CLI（用于定时任务管理） 脚本调用的系统命令（缺失时对应检查项会 SKIP，不影响其他项）： macOS：find、lsof、netstat、ps、last、lastb、grep、awk、cat、sudo Linux：find、ss、lsof、ps、journalctl、last、lastb、grep、awk、cat、sudo Windows：wmic、netstat、tasklist、findstr 默认行为：本地离线模式，不产生任何网络请求。 ⚠️ --push 高风险提示：启用后会向远端发送设备标识（MAC 地址、主机名、持久化 agent_id）和本机完整 Skill 清单，且 agent_id 会在本机永久保存并每次复用。--push 只能在用户单次手动运行时使用；cron 定时任务中严禁包含 --push，以防止设备信息被长期自动上报。 数据上报端点（仅 --push 模式，由本技能作者运营的 Changeway 云端威胁情报服务）： https://auth.ctct.cn:10020/changeway-open/api/pushAuditData https://auth.ctct.cn:10020/changeway-open/api/skills/assessment 数据边界说明：脚本对每项检查生成两个字段——detail（完整命令输出，仅本地落盘，绝不上传）和 brief（人工编写的结果摘要，--push 模式下上传）。上传的 data[] 通过 `JSON_DATA.map(({ item, brief }) => ({ item, brief }))` 构造（脚本第 995 行），明确排除 detail 字段；包含 detail 的完整 outputObj 仅写入本地磁盘（脚本第 984 行）。 签名机制：请求头 X-SIGN 为 SHA-256(mac + hostname + timestamp + nonce) 的十六进制摘要，无独立密钥，仅用于服务端防重放校验。 本地写入：扫描报告保存至 ~/.openclaw/security-reports/（含 report-YYYY-MM-DD.txt 和 report.json），Skill 哈希基线保存至 ~/.openclaw/skill-hashes/，设备 ID 保存至 ~/.openclaw/.agent-id，首次运行标记文件 ~/.openclaw/.audit-first-run。 --- # 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](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 所在的目录）。 **输出要求**（严格遵守）： 脚本执行完毕后，**不要把脚本的完整控制台输出发给用户**。脚本输出内容很长、包含大量技术细节，直接展示会让用户困惑。 你需要从脚本输出中**只提取以下信息**，然后按下面的格式发给用户： 1. 从输出末尾找到 `PASS X FAIL X SKIP X` 这一行，提取 PASS、FAIL、SKIP 的数量 2. 仅在完整检测模式（--push）下，从输出末尾找到 `系统安全得分: XX / 100` 这一行，提取得分；本地模式无此行，得分显示为"—" 3. 从输出末尾找到 `详细审计报告已保存至: ...` 这一行，提取报告文件路径 然后**只向用户发送以下内容**（不要多写，不要少写）： ``` 检测统计: 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 是 ⚠️ 还是 🚨 的标准**： - 如果报告里提到"篡改"、"恶意"、"爆破"、"危险"、"高危" → 用 🚨 - 如果报告里提到"首次运行"、"缺失基线"、"权限过宽"、"未知请求" → 用 ⚠️ ## 定时任务配置 当用户后续要求"设置定时巡检"、"修改定时任务"、"自动巡检"时： 1. 读取 [references/cron-setup.md](references/cron-setup.md) 文件 2. 在执行任何配置命令前，向用户确认以下信息并等待明确同意： - 定时任务将在后台持续运行，每次执行会在本地生成报告 - 必须使用 `openclaw cron add` 而非系统 crontab，因为 openclaw cron 管理独立的调度会话和超时，这意味着定时任务依赖 OpenClaw 自身的运行环境 - 如果配置了 `--announce/--channel/--to` 参数，每次巡检结果还会通过 OpenClaw 消息通道（如 Telegram）发送通知到指定 chat ID，这是一条额外的外部消息路径 - 如果在 `--message` 中添加了 `--push`，定时任务也会定期向 `https://auth.ctct.cn:10020` 上报审计摘要和 Skill 清单 - 询问用户："确认要设置定时巡检吗？（是/否）"，收到"是"后再继续 3. 严格按照 cron-setup.md 中的步骤执行 4. 必须使用 `openclaw cron add` 命令，禁止使用系统 crontab


Security scan verdicts — ClawScan: clean | static analysis: suspicious | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)