ClawSkills logoClawSkills

Dont Hack Me

別駭我!基本安全檢測 — Security self-check for Clawdbot/Moltbot. Run a quick audit of your clawdbot.json to catch dangerous misconfigurations — exposed gateway, missing a

介绍

# dont-hack-me

Clawdbot / Moltbot 的安全自检技能。 读取 `~/.clawdbot/clawdbot.json` 并检查涵盖最常见的错误配置的 7 个项目。输出简单的 PASS / FAIL / WARN 报告。

## 如何运行

说以下任意一句:

- "run a security check" - "check my security settings" - "audit my clawdbot config" - "am I secure?"

## 检查清单 — 逐步执行

当此技能被触发时,请**严格**遵循以下步骤:

### Step 0 — 读取配置

使用 `read` 工具打开 `~/.clawdbot/clawdbot.json`。 解析 JSON 内容。如果文件不存在或不可读, 报告错误并停止。

同时运行一个 shell 命令来获取文件权限: ``` stat -f '%Lp' ~/.clawdbot/clawdbot.json ``` (在 Linux 上:`stat -c '%a' ~/.clawdbot/clawdbot.json`)

### Step 1 — 网关绑定

- **Path:** `gateway.bind` - **Expected:** `"loopback"` 或 `"localhost"` 或 `"127.0.0.1"` 或 `"::1"` - **PASS** 如果值是上述之一,或者键不存在(默认为 `"loopback"`) - **FAIL** 如果值是 `"0.0.0.0"`、`"::"` 或任何非回环地址 - **Severity:** CRITICAL — 非回环绑定会将您的代理暴露给网络

### Step 2 — 网关认证模式

- **Path:** `gateway.auth.mode` - **Expected:** `"token"` 或 `"password"` - **PASS** 如果值是 `"token"` 或 `"password"`,或者键不存在(默认为 `"token"`) - **FAIL** 如果值是 `"off"` 或 `"none"` - **Severity:** CRITICAL — 没有认证,任何能访问网关的人都可以控制您的代理

### Step 3 — 令牌强度

- **Path:** `gateway.auth.token` - **Expected:** 32 个或更多字符 - **PASS** 如果令牌 >= 32 个字符 - **WARN** 如果令牌为 16–31 个字符 - **FAIL** 如果令牌 < 16 个字符或为空 - **SKIP** 如果认证模式为 `"password"`(密码由用户选择,不判断长度) - **Severity:** HIGH — 短令牌容易受到暴力破解

### Step 4 — 私信策略(针对每个频道)

- **Path:** 每个频道的 `channels.<name>.dmPolicy` - **Expected:** `"pairing"` — 或者如果是 `"open"`,则必须有一个非空的 `allowFrom` 数组 - **PASS** 如果 `dmPolicy` 是 `"pairing"`,或者 `allowFrom` 至少有一个条目 - **FAIL** 如果 `dmPolicy` 是 `"open"` 且 `allowFrom` 缺失或为空 - **SKIP** 如果没有配置频道 - **Severity:** HIGH — 开放式私信策略允许任何人向您的代理发送命令

### Step 5 — 群组策略(针对每个频道)

- **Path:** 每个频道的 `channels.<name>.groupPolicy` - **Expected:** `"allowlist"` - **PASS** 如果 `groupPolicy` 是 `"allowlist"` 或不存在(默认为 `"allowlist"`) - **FAIL** 如果 `groupPolicy` 是 `"open"` 或 `"any"` - **SKIP** 如果没有配置频道 - **Severity:** HIGH — 非白名单群组策略允许任何群组触发您的代理

### Step 6 — 文件权限

- **Check:** `~/.clawdbot/clawdbot.json` 的文件模式 - **Expected:** `600` 或 `400`(仅所有者读/写) - **PASS** 如果权限是 `600` 或 `400` - **WARN** 如果权限是 `644` 或 `640`(群组/其他人可读) - **FAIL** 如果权限是 `777`、`755`、`666` 或任何可写的权限 - **Severity:** MEDIUM — 宽松的权限允许系统上的其他用户读取您的令牌

### Step 7 — 明文密钥扫描

- **Check:** 扫描 JSON 中所有的字符串值,查找名为 `password`、`secret`、`apiKey`、`api_key`、`privateKey`、`private_key`(不区分大小写)且包含非空字符串值的键 - **PASS** 如果未找到此类键 - **WARN** 如果此类键存在 — 提醒用户考虑使用环境变量或密钥管理器 - **Note:** 用于网关认证的 `token` 字段是预期的,不应标记 - **Severity:** MEDIUM — 配置文件中的明文密钥可能会通过备份、日志或版本控制泄露

## 输出格式

完成所有检查后,按以下确切格式输出报告:

``` 🔒 Security Check Report

1. Gateway Bind <ICON> <STATUS> — <detail> 2. Gateway Auth <ICON> <STATUS> — <detail> 3. Token Strength <ICON> <STATUS> — <detail> 4. DM Policy <ICON> <STATUS> — <detail> 5. Group Policy <ICON> <STATUS> — <detail> 6. File Permissions <ICON> <STATUS> — <detail> 7. Secrets Scan <ICON> <STATUS> — <detail>

Score: X/7 PASS, Y WARN, Z FAIL ```

其中: - `<ICON>` 是以下之一:✅ (PASS), ⚠️ (WARN), ❌ (FAIL), ⏭️ (SKIP) - `<STATUS>` 是以下之一:`PASS`, `WARN`, `FAIL`, `SKIP` - `<detail>` 是简短的解释(例如 "loopback"、"token mode"、"48 chars"、"permissions 600")

## 自动修复流程

如果**任何**项目为 FAIL 或 WARN,请执行以下操作:

1. 首先显示报告(如上所述)。 2. 列出每个可修复的项目,并附带关于将更改内容的简短描述。 3. 询问用户:**"Want me to fix these? (yes / no / pick)"** - **yes** — 自动修复所有 FAIL 和 WARN 项目。 - **no** — 停止,不做任何操作。 - **pick** — 让用户选择要修复的项目。 4. 应用修复(见下文的修复方案)。 5. 应用后,重新读取配置并重新运行完整检查以确认一切为 PASS。 6. 如果配置已更改,提醒用户:**"Run `clawdbot gateway restart` to apply the new settings."**

### 修复方案

对每个项目使用这些确切的修复方法。使用 edit/write 工具编辑 `~/.clawdbot/clawdbot.json`。

#### #1 Gateway Bind — FAIL 将 `gateway.bind` 设置为 `"loopback"`: ```json { "gateway": { "bind": "loopback" } } ```

#### #2 Gateway Auth — FAIL 将 `gateway.auth.mode` 设置为 `"token"`。如果尚不存在令牌,则生成一个: ```json { "gateway": { "auth": { "mode": "token", "token": "<GENERATED>" } } } ``` 使用以下命令生成令牌: ```bash openssl rand -hex 24 ``` 这将生成一个 48 字符的十六进制字符串(192 位熵)。

#### #3 Token Strength — FAIL / WARN 用新的强令牌替换现有令牌: ```bash openssl rand -hex 24 ``` 将输出写入 `gateway.auth.token`。

#### #4 DM Policy — FAIL 将每个受影响频道的 `dmPolicy` 设置为 `"pairing"`: ```json { "channels": { "<name>": { "dmPolicy": "pairing" } } } ```

#### #5 Group Policy — FAIL 将每个受影响频道的 `groupPolicy` 设置为 `"allowlist"`: ```json { "channels": { "<name>": { "groupPolicy": "allowlist" } } } ```

#### #6 File Permissions — FAIL / WARN 运行: ```bash chmod 600 ~/.clawdbot/clawdbot.json ```

#### #7 Secrets Scan — WARN 此项无法安全地自动修复。相反,列出每个标记的键并 提醒用户: - 将值移动到环境变量 - 或使用密钥管理器 - 如果平台支持,在配置中引用它为 `"$ENV_VAR_NAME"`

### 自动修复的重要规则

- **始终先备份。** 在写入任何更改之前,复制原始文件: ```bash cp ~/.clawdbot/clawdbot.json ~/.clawdbot/clawdbot.json.bak ``` - **合并,不要覆盖。** 读取完整的 JSON,仅修改特定的 键,写回完整的 JSON。永远不要丢失现有设置。 - **保留格式。** 写入 JSON 时使用 2 空格缩进。 - **一次写入操作。** 收集所有 JSON 修复,在单个 写入中应用它们,以避免部分状态。 - **令牌更换需要重启。** 如果网关令牌已更改, 用户必须使用新令牌更新任何已配对的客户端。 警告:"Your gateway token was changed. Any paired devices will need the new token to reconnect."

## 此技能不检查的内容

- 沙箱配置(大多数设置不需要) - 网络隔离 / Docker(macOS 原生设置不使用它) - MCP 工具权限(对于基本审计来说太复杂) - 您的操作系统防火墙是否已配置 - 您的代理代码是否存在漏洞

如需更全面的审计,请参阅社区工具,如 `clawdbot-security-check`。

## 参考

基于社区整理的 "Top 10 Clawdbot/Moltbot Security Vulnerabilities" 列表。 涵盖了适用于典型 macOS 原生部署的 10 个项目中的 7 个。

---

*小安 Ann Agent — Taiwan 台灣* *Building skills and local MCP services for all AI agents, everywhere.* *為所有 AI Agent 打造技能與在地 MCP 服務,不限平台。*

更多产品