Skill: zsyjx0115/openclaw-security-patrol (version 1.0.8)

--- name: openclaw-security-patrol description: | OpenClaw 多模式安全巡检工具：默认本地离线扫描，可选联网威胁情报上报。 功能范围：读取系统敏感信息（MAC 地址、主机名、系统日志、完整 Skill 清单）执行本地安全检测；在本机持久化保存扫描报告与安全基线；可选通过 --push 模式将摘要数据上传至 auth.ctct.cn 获取威胁情报评分（需用户显式同意）；可选通过 openclaw cron 设置定时任务（绑定 openclaw 基础设施，可跳过）。 运行依赖：Node.js v18+。本技能由 Changeway 团队（auth.ctct.cn 运营方）开发。 使用场景：用户说"安全巡检"、"安全检查"、"安全审计"、"巡检"、"security audit"、"检查安全"、"系统安全"等。 触发条件：任何与 OpenClaw 安全检测、审计、巡检相关的请求。 runtime: "node>=18" credentials: none privacy: | 本技能有两种运行模式，隐私风险等级不同： **模式 1：本地离线模式（默认）** - 零网络请求，零数据上报 - 注意：即使在离线模式下，扫描过程也会读取以下敏感系统信息（仅本地分析使用，不离开本机）：MAC 地址、主机名、本机完整 Skill 清单（用于威胁情报项）、系统日志及临时文件路径 - 扫描报告、安全基线文件均持久化保存在 ~/.openclaw/ 目录下 **模式 2：完整检测模式（--push，需明确确认）** - 启用后向 Changeway 威胁情报服务上报隐私敏感数据 - 上报内容：MAC 地址、主机名、持久化 agent_id（首次 --push 时生成并永久保存在本机）、本机完整 Skill 清单、本次扫描汇总统计 - ⚠️ 长期指纹化风险：agent_id 为持久化唯一标识，多次手动选择完整检测均复用同一 ID，服务端将积累该设备的历史安全档案；Skill 清单揭示本机工具组合，每次上传均与 agent_id 绑定。如对隐私敏感度较高，建议始终使用本地模式 - 上报频率：仅在用户单次手动运行时上报一次；定时任务（cron）严禁使用 --push - 防重放机制：每次请求附带 Unix 时间戳 + 随机 nonce，服务端校验时间窗口，防止请求被重放；SHA-256(mac + hostname + timestamp + nonce) 作为请求指纹附在 X-SIGN 头部，但此机制**不构成设备身份认证**（无预共享密钥，服务端无法单凭签名验证请求来源的合法性） - **用户必须在知情同意前提下明确选择此模式** network_endpoints: | 仅在 --push 模式下访问（需要用户显式确认）： - https://auth.ctct.cn:10020/changeway-open/api/pushAuditData - https://auth.ctct.cn:10020/changeway-open/api/skills/assessment 端点归属：auth.ctct.cn 由本 Skill 的发布方 Changeway 自行运营，非第三方平台。 用户在选择 --push 模式前应自行判断是否信任该服务。 dependencies: | 运行依赖： 必需：Node.js v18+ 可选：openclaw CLI（用于定时任务管理；若使用定时巡检功能，需依赖 openclaw cron 命令） 脚本调用的系统命令（缺失时对应检查项会 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 security_notes: | 命令执行安全性： - 脚本通过 Node.js 内置的 spawnSync（非 exec/execSync）调用系统命令 - Unix/Linux：shell 严格禁用（shell: false）；Windows：仅对 .cmd 可执行包装器局部启用 shell: true（Node.js 平台限制），但参数均为硬编码数组，无用户输入，不存在注入风险 - 所有 spawnSync 调用（共 17 处）只允许以下固定命令名白名单： openclaw、openclaw-cn、find、pgrep、journalctl、log、ss、ps、lsof、diff、wevtutil、netstat、tasklist、powershell、icacls - 以上命令均为只读系统状态查询，不执行写入、删除或提权操作 数据处理边界： - 脚本对每项检查生成两个字段：detail（完整命令输出，仅本地落盘，不上传）和 brief（结果摘要） - 上传时明确排除 detail 字段，仅上传 item 和 brief 本地文件存储： - 扫描报告：~/.openclaw/security-reports/report-YYYY-MM-DD.{txt,json} - Skill 哈希基线：~/.openclaw/security-baselines/（skill-mcp-current.sha256、skill-mcp-baseline.sha256） - 持久化 agent_id：~/.openclaw/.agent-id（仅在 --push 模式首次运行时创建） - 首次运行标记：~/.openclaw/.audit-first-run 脚本完整性验证： - 脚本头部注释（第 14 行）包含 @integrity sha256 哈希值，可用于确认脚本未被篡改 - 安装后核对命令： macOS/Linux：shasum -a 256 scripts/openclaw-hybrid-audit-changeway.js Windows：certutil -hashfile scripts\openclaw-hybrid-audit-changeway.js SHA256 - 将输出结果与脚本注释中的 sha256 值比对，一致则未被篡改 --- # OpenClaw 安全巡检 ## 使用前须知：本技能的功能范围 本技能并非纯本地扫描工具，在运行前请确认你已了解以下行为： **所有模式均会（包括默认本地模式）：** - 读取系统敏感信息：MAC 地址、主机名、系统日志、完整 Skill 清单 - 在本机持久化保存文件：扫描报告、安全基线（均保存在 `~/.openclaw/`） **仅在用户选择 --push 模式（需显式同意）时还会：** - 生成并永久保存 `agent_id`（`~/.openclaw/.agent-id`），形成持久设备标识 - 将摘要数据上传至 `auth.ctct.cn`（Changeway 自营服务），可用于多次上传后的设备历史关联 **仅在用户选择设置定时任务时还会：** - 通过 `openclaw cron` 添加定时任务，执行与 openclaw 基础设施绑定（**可跳过，不影响手动执行**） 如对上述任一行为有顾虑，可仅使用本地模式并拒绝定时任务设置。 --- ## 第一步：检查运行环境 执行命令 `node --version`，确认返回了版本号（如 `v18.x.x` 或更高）。 - 如果命令成功返回版本号 → 继续第二步 - 如果报错"command not found" → 告诉用户："安全巡检需要 Node.js 环境，请先安装 Node.js（推荐 v18 以上），安装后再来找我。"，然后**停止**，不要继续后续步骤 ## 第二步：首次使用引导 检查文件 `~/.openclaw/.audit-first-run` 是否存在。 **如果文件已存在** → 跳过本步，直接进入第三步。 **如果文件不存在**（说明是首次使用），向用户发送以下消息，然后等待用户回复： ``` 你好！这是首次使用安全巡检功能。 除了现在手动执行，你还可以设置每天自动巡检，系统会自动检查并把结果推送给你。**（默认执行时间为 23:45，也可以自定义为其他时间）** 请选择： 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 环境，会导致执行失败 - ⚠️ 基础设施绑定说明：使用 `openclaw cron` 会将定时执行与 openclaw 基础设施绑定；如不希望依赖此基础设施，可不设置定时任务，改为手动执行 - **cron 命令中严禁添加 `--push` 参数**：定时任务只以本地离线模式运行，绝不自动向远端上报设备标识 ## 第三步：询问检测模式 向用户发送以下消息，然后等待用户回复： ``` 请选择检测模式： 1. 仅本地扫描（默认）— 不联网、不发送任何数据 · 所有扫描报告仅保存在本地 ~/.openclaw/security-reports/ · 适合离线环境或隐私敏感场景 · 无任何网络请求 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ⚠️ 注意：下面的完整检测模式会向外部服务器发送隐私敏感数据 请仔细阅读数据上报内容后再决定 2. 完整检测（--push）— 联网查询威胁情报并同步安全评分 📡 网络请求目标（仅在用户同意时）： - 服务器：https://auth.ctct.cn:10020（Changeway 自营服务器，本 Skill 的发布方，非第三方平台） - 端点1：/changeway-open/api/pushAuditData - 端点2：/changeway-open/api/skills/assessment 📊 上报的隐私敏感数据包括： · MAC 地址（如 a1:b2:c3:d4:e5:f6） · 主机名（如 MacBook-Pro.local） · agent_id（首次自动生成并永久保存在 ~/.openclaw/.agent-id，后续复用） · 本机已安装的完整 Skill 清单（包含名称、作者、版本、所有者 ID） · 每项安全检查的名称和结果摘要（不包含详细命令输出） 🔐 请求防重放机制（非设备认证）： · 每次请求附带时间戳 + 随机 nonce，服务端校验时间窗口防重放 · X-SIGN = SHA-256(mac + hostname + timestamp + nonce)，用作请求指纹 · 注意：此机制无预共享密钥，不构成设备身份认证；服务端以 agent_id 标识设备来源 · 完整命令输出和敏感日志仅保存本地，不上传 ⚠️ 长期指纹化风险与重要限制： · 此选项仅限本次手动执行（一次性） · 定时巡检（cron）中绝不自动启用 --push，防止设备信息被长期自动上报 · agent_id 为持久化唯一标识，多次手动选择完整检测均复用同一 ID，服务端将积累该设备的历史安全档案 · Skill 清单揭示本机工具组合情况，每次上传均与 agent_id 绑定，形成可追溯的设备指纹 · 如对隐私有较高要求，建议始终选择本地模式（选项 1） 🎯 如同意数据上报，请回复：2 已了解 ``` 根据用户回复执行： - 用户回复 **"1"** 或任何"本地"、"离线"含义 → 记录选择：本地模式，继续第四步 - 用户回复 **"2 已了解"**（必须包含"已了解"或"我已知晓"等确认短语）→ 记录选择：完整检测，继续第四步 - 用户只回复 **"2"** 但没有确认短语 → 不执行，回复："完整检测模式会向 Changeway 服务器上报 MAC 地址、主机名、agent_id 和 Skill 清单等隐私敏感数据，请回复「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/security-reports/） - 必须使用 `openclaw cron add` 而非系统 crontab（openclaw cron 管理独立的调度会话和超时，系统 crontab 无法正确初始化 OpenClaw 环境） **隐私和网络行为**： - **默认行为**：定时任务仅在本地运行，不产生任何网络请求 - **如果启用通知** `--announce/--channel/--to` 参数：每次巡检结果会通过 OpenClaw 消息通道（如 Telegram、钉钉）发送通知到指定 chat ID，这是额外的外部消息路径，需要用户明确知晓 - **严禁在定时任务中使用 --push**：定时任务的命令中绝不应该包含 `--push`，因为 --push 会让定时任务定期向 Changeway 服务器上报设备标识和 Skill 清单，造成隐私敏感数据的长期自动上报。--push 仅限用户单次手动运行时显式指定 **用户确认**： - 询问用户："确认要设置定时巡检吗？定时任务会每天运行扫描并保存本地报告。(是/否)"，收到"是"后再继续 - 如果用户问及通知功能，补充："通知功能会让结果发送到你的 Telegram/钉钉等，可选配置。" 3. 严格按照 cron-setup.md 中的步骤执行 4. **关键安全要求**： - 必须使用 `openclaw cron add` 命令，禁止使用系统 crontab - 定时任务的命令中严禁添加 `--push` 参数 - 审查用户最终的 cron 命令，确保不含 --push


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