@pwddd/skills-scanner 3.0.7 → 3.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,7 @@
2
2
  "id": "skills-scanner",
3
3
  "name": "Skills Scanner",
4
4
  "description": "Security scanner for OpenClaw Skills to detect potential threats",
5
- "version": "3.0.7",
5
+ "version": "3.0.8",
6
6
  "author": "pwddd",
7
7
  "skills": ["./skills"],
8
8
  "configSchema": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "name": "@pwddd/skills-scanner",
3
- "version": "3.0.7",
2
+ "name": "@pwddd/skills-scanner",
3
+ "version": "3.0.8",
4
4
  "description": "OpenClaw Skills security scanner plugin - detect malicious code, data exfiltration, and prompt injection",
5
5
  "type": "module",
6
6
  "main": "./index.ts",
@@ -1,635 +1,635 @@
1
- ---
2
- name: skills-scanner
3
- description: OpenClaw Skills 安全扫描工具,使用 AI Skill Scanner 检测恶意代码、数据窃取、提示注入等威胁。
4
- version: 1.0.0
5
- user-invocable: true
6
- metadata: {"openclaw": {"emoji": "🔍", "requires": {"bins": ["python3"]}}}
7
- ---
8
-
9
- # Skills 安全扫描工具 🔍
10
-
11
- OpenClaw Skills 安全扫描工具,检测恶意代码、数据窃取、提示注入等威胁。
12
-
13
- ## 功能特性
14
-
15
- - 🔍 **本地扫描**:扫描本地 Skill 文件和目录
16
- - 🌐 **ClawHub 扫描**:直接扫描 ClawHub 上的 Skill,无需下载
17
- - 📊 **批量扫描**:一次扫描多个 Skills
18
- - 🛡️ **多种策略**:strict/balanced/permissive 三种扫描策略
19
- - 🤖 **LLM 分析**:可选的 LLM 语义分析
20
- - 🔬 **行为分析**:AST 数据流分析
21
-
22
- ## 重要提示
23
-
24
- **在向用户展示扫描结果前,请务必:**
25
-
26
- ### 0. API 服务可用性检查 🔌
27
-
28
- **在执行任何扫描操作前,必须先检查 API 服务是否可用。如果服务不可用,跳过安全检查。**
29
-
30
- **检查方法**:
31
- ```bash
32
- python3 {baseDir}/scan.py --api-url http://localhost:8000 health
33
- ```
34
-
35
- **处理规则**:
36
-
37
- 1. **服务可用**(返回 `✓` 或 `OK`):
38
- - 继续执行扫描操作
39
- - 正常展示扫描结果
40
-
41
- 2. **服务不可用**(连接失败、超时、错误响应):
42
- - ⚠️ **立即跳过安全检查**
43
- - 向用户说明:
44
- ```
45
- ⚠️ Skills 安全扫描服务当前不可用,已跳过安全检查。
46
-
47
- 如需启用安全扫描,请:
48
- 1. 启动 skill-scanner-api 服务
49
- 2. 确认服务地址配置正确(当前: http://localhost:8000
50
- 3. 重新执行安装操作
51
- ```
52
- - **不要阻止用户的操作**(如安装 Skill)
53
- - **不要反复尝试连接**(避免延迟用户操作)
54
-
55
- **示例对话**:
56
-
57
- ```
58
- 用户: 帮我安装 caldav-calendar 这个 skill
59
- AI: 好的,让我先检查安全扫描服务...
60
- [执行 health 检查]
61
-
62
- ⚠️ Skills 安全扫描服务当前不可用,已跳过安全检查。
63
-
64
- 正在安装 caldav-calendar...
65
- ✅ 安装完成
66
-
67
- 💡 提示:如需启用安全扫描功能,请启动 skill-scanner-api 服务。
68
- ```
69
-
70
- **为什么要跳过而不是阻止**:
71
- - 安全扫描是辅助功能,不应阻碍正常使用
72
- - 用户可能在离线环境或未配置扫描服务的环境中工作
73
- - 避免因服务问题导致所有 Skill 操作失败
74
-
75
- ### 1. VirusTotal 扫描结果优先提示 ⚠️
76
-
77
- **如果扫描结果中包含 VirusTotal 的扫描数据,必须优先、重点展示此结果,即使未检测到病毒。**
78
-
79
- VirusTotal 是业界权威的多引擎病毒扫描服务,其结果具有极高的参考价值。
80
-
81
- **展示格式**:
82
- ```
83
- 🔍 VirusTotal 扫描结果:
84
- • 扫描引擎数:70
85
- • 检测为恶意:0
86
- • 可疑标记:0
87
- • 状态:✅ 未检测到威胁
88
-
89
- 详细信息:
90
- - SHA256: [文件哈希]
91
- - 扫描时间:[时间]
92
- - 报告链接:[VirusTotal URL]
93
- ```
94
-
95
- **重点提示场景**:
96
-
97
- 1. **未检测到威胁时**:
98
- ```
99
- ✅ VirusTotal 扫描通过
100
- 70 个安全引擎均未检测到威胁,该 Skill 文件安全性得到多方验证。
101
- ```
102
-
103
- 2. **检测到威胁时**:
104
- ```
105
- ⚠️ VirusTotal 检测到威胁!
106
- 3/70 个引擎标记为恶意:
107
- - Avast: Trojan.Generic
108
- - Kaspersky: HEUR:Trojan.Script
109
- - Microsoft: TrojanDownloader
110
-
111
- 强烈建议:不要安装此 Skill!
112
- ```
113
-
114
- 3. **可疑但未确认时**:
115
- ```
116
- ⚠️ VirusTotal 发现可疑行为
117
- 1/70 个引擎标记为可疑,建议谨慎评估。
118
- ```
119
-
120
- **为什么优先展示 VirusTotal**:
121
- - 多引擎交叉验证(通常 70+ 个安全引擎)
122
- - 业界标准的恶意软件检测服务
123
- - 即使其他分析器未发现问题,VirusTotal 的结果也可能揭示隐藏威胁
124
- - 提供可追溯的外部验证链接
125
-
126
- ### 2. 内容翻译要求
127
-
128
- 1. 检查结果中是否包含英文内容(如 category、description、finding 详情等)
129
- 2. 如果包含英文,将所有英文内容翻译为中文后再展示给用户
130
- 3. 保持技术术语的准确性(如 CRITICAL、HIGH、MEDIUM、LOW 可保留或翻译为:严重、高危、中危、低危)
131
- 4. 确保翻译后的内容清晰易懂,符合中文表达习惯
132
-
133
- 示例翻译:
134
- - "Prompt injection detected" → "检测到提示注入"
135
- - "Unauthorized file access" → "未授权的文件访问"
136
- - "Data exfiltration attempt" → "数据窃取尝试"
137
- - "Malicious code execution" → "恶意代码执行"
138
- - "VirusTotal scan clean" → "VirusTotal 扫描通过"
139
- - "Detected by X engines" → "被 X 个引擎检测到"
140
-
141
- ## 环境准备(首次使用)
142
-
143
- 首次运行前,检查并安装依赖:
144
-
145
- ```bash
146
- # 检查 Python 是否可用
147
- python3 --version || echo "请安装 Python 3.10+"
148
-
149
- # 安装依赖到主机环境
150
- python3 -m pip install --user --quiet "requests>=2.31.0"
151
- ```
152
-
153
- 安装只需执行一次。插件会自动处理依赖安装。
154
-
155
- ## 配置
156
-
157
- 扫描器需要运行中的 API 服务。在 OpenClaw 配置中设置 API URL:
158
-
159
- ```json
160
- {
161
- "plugins": {
162
- "entries": {
163
- "skills-scanner": {
164
- "config": {
165
- "apiUrl": "http://localhost:8000"
166
- }
167
- }
168
- }
169
- }
170
- }
171
- ```
172
-
173
- 或直接调用时使用 `--api-url` 参数:
174
-
175
- ```bash
176
- python3 {baseDir}/scan.py --api-url http://localhost:8000 scan <路径>
177
- ```
178
-
179
- ---
180
-
181
- ## ClawHub Skill 扫描 🌐
182
-
183
- **触发词**: "扫描 clawhub skill"、"检查 clawhub 上的 skill"、"扫描 clawhub.ai"、"安装前检查"
184
-
185
- 直接扫描 ClawHub 上的 Skill,无需手动下载。适用于安装前的安全评估。
186
-
187
- ### 使用场景
188
-
189
- 当用户提到以下情况时,应该使用 ClawHub 扫描:
190
-
191
- 1. **安装前检查**:"我想安装这个 skill,先帮我检查一下安全性"
192
- 2. **浏览 ClawHub**:"clawhub 上有个 skill 看起来不错,帮我扫描一下"
193
- 3. **提供 URL**:用户直接提供 `https://clawhub.ai/username/project` 链接
194
- 4. **推荐验证**:"有人推荐了这个 skill,安全吗?"
195
-
196
- ### 基础扫描(推荐,速度快)
197
-
198
- 适用于快速安全检查,显示总体安全状态和严重问题。
199
-
200
- ```bash
201
- python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url>
202
- ```
203
-
204
- **示例输出**:
205
- ```
206
- ✓ caldav-calendar
207
- 严重性: LOW
208
- 发现数: 2
209
- ```
210
-
211
- ### 详细模式(显示所有发现)
212
-
213
- 显示每个安全发现的详细信息,包括类别、描述、文件位置等。
214
-
215
- ```bash
216
- python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --detailed
217
- ```
218
-
219
- **示例输出**:
220
- ```
221
- ✓ caldav-calendar
222
- 严重性: LOW
223
- 发现数: 2
224
-
225
- 发现详情:
226
- 1. [LOW] Undeclared Capability
227
- Skill 使用了未在 SKILL.md 中声明的能力
228
- 2. [LOW] External Network Access
229
- 检测到外部网络请求
230
- ```
231
-
232
- ### 深度扫描(加入行为分析)
233
-
234
- 启用 AST 数据流分析,更准确地检测复杂的安全威胁。扫描时间较长但更全面。
235
-
236
- ```bash
237
- python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --detailed --behavioral
238
- ```
239
-
240
- **适用场景**:
241
- - Skill 包含复杂的代码逻辑
242
- - 需要深入分析数据流和控制流
243
- - 对安全性要求较高的场景
244
-
245
- ### 最强扫描(加入 LLM 语义分析)
246
-
247
- 使用 LLM 进行语义分析,检测隐蔽的恶意模式和提示注入。需要 API 服务配置 LLM 支持。
248
-
249
- ```bash
250
- python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --detailed --behavioral --llm
251
- ```
252
-
253
- **适用场景**:
254
- - 检测提示注入攻击
255
- - 分析复杂的语义模式
256
- - 最高安全要求的场景
257
-
258
- ### 使用不同扫描策略
259
-
260
- ```bash
261
- # 严格模式(最保守,任何可疑行为都标记)
262
- python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --policy strict
263
-
264
- # 平衡模式(推荐,默认)
265
- python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --policy balanced
266
-
267
- # 宽松模式(只标记明确的威胁)
268
- python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --policy permissive
269
- ```
270
-
271
- ### 保存扫描结果
272
-
273
- 将扫描结果保存为 JSON 文件,便于后续分析或存档。
274
-
275
- ```bash
276
- python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --detailed --json /tmp/scan-result.json
277
- ```
278
-
279
- ### 实际使用示例
280
-
281
- #### 示例 1:快速检查日历 Skill
282
-
283
- ```bash
284
- python3 {baseDir}/scan.py --api-url {apiUrl} clawhub https://clawhub.ai/Asleep123/caldav-calendar
285
- ```
286
-
287
- **用户对话**:
288
- ```
289
- 用户: 我想安装 caldav-calendar 这个 skill,帮我检查一下
290
- AI: 好的,让我先扫描一下这个 skill 的安全性...
291
- [执行上述命令]
292
- ✓ 扫描完成:caldav-calendar 安全检查通过
293
- 严重性: LOW,发现 2 个低风险项
294
- 未检测到高危威胁,可以安全安装。
295
- ```
296
-
297
- #### 示例 2:详细检查 PDF Skill
298
-
299
- ```bash
300
- python3 {baseDir}/scan.py --api-url http://localhost:8000 clawhub https://clawhub.ai/steipete/nano-pdf --detailed
301
- ```
302
-
303
- **用户对话**:
304
- ```
305
- 用户: clawhub 上有个 nano-pdf skill,帮我详细检查一下
306
- AI: 好的,我会进行详细扫描...
307
- [执行上述命令]
308
- 扫描结果显示:
309
- - 严重性: MEDIUM
310
- - 发现 5 个问题
311
-
312
- 主要发现:
313
- 1. [MEDIUM] 未声明的文件系统访问
314
- 2. [LOW] 外部网络请求
315
- ...
316
-
317
- 建议:存在中等风险,建议查看详细报告后决定是否安装。
318
- ```
319
-
320
- #### 示例 3:深度扫描可疑 Skill
321
-
322
- ```bash
323
- python3 {baseDir}/scan.py --api-url http://localhost:8000 clawhub https://clawhub.ai/username/suspicious-skill --detailed --behavioral --policy strict
324
- ```
325
-
326
- **用户对话**:
327
- ```
328
- 用户: 这个 skill 看起来有点可疑,帮我彻底检查一下
329
- AI: 明白,我会使用严格模式进行深度扫描...
330
- [执行上述命令]
331
- ⚠️ 警告:检测到安全问题
332
- 严重性: HIGH
333
- 发现 12 个问题,包括 3 个高危项
334
-
335
- 高危发现:
336
- 1. [HIGH] 提示注入尝试
337
- 2. [HIGH] 未授权的数据访问
338
- 3. [HIGH] 可疑的代码执行模式
339
-
340
- 强烈建议:不要安装此 skill!
341
- ```
342
-
343
- #### 示例 4:包含 VirusTotal 扫描结果
344
-
345
- ```bash
346
- python3 {baseDir}/scan.py --api-url http://localhost:8000 clawhub https://clawhub.ai/username/project --detailed
347
- ```
348
-
349
- **用户对话(未检测到威胁)**:
350
- ```
351
- 用户: 帮我扫描这个 skill
352
- AI: 好的,正在进行安全扫描...
353
- [执行上述命令]
354
-
355
- 🔍 VirusTotal 扫描结果:
356
- ✅ 0/72 引擎检测到威胁
357
- 该 Skill 已通过 72 个安全引擎的验证,安全性得到多方确认。
358
-
359
- 详细信息:
360
- - SHA256: abc123def456...
361
- - 最后分析:2024-03-11 10:30:00
362
- - 查看完整报告:https://virustotal.com/gui/file/abc123...
363
-
364
- 其他扫描结果:
365
- - 严重性: LOW
366
- - 发现 2 个低风险项
367
-
368
- 综合评估:✅ 安全,可以安装
369
- ```
370
-
371
- **用户对话(检测到威胁)**:
372
- ```
373
- 用户: 这个 skill 安全吗?
374
- AI: 让我进行全面扫描...
375
- [执行上述命令]
376
-
377
- ⚠️ VirusTotal 检测到威胁!
378
-
379
- 🔍 VirusTotal 扫描结果:
380
- ❌ 3/72 引擎标记为恶意
381
-
382
- 检测详情:
383
- - Avast: Trojan.Generic.12345
384
- - Kaspersky: HEUR:Trojan.Script.Generic
385
- - Microsoft: TrojanDownloader:Python/Malicious
386
-
387
- 详细信息:
388
- - SHA256: def789abc123...
389
- - 最后分析:2024-03-11 10:35:00
390
- - 查看完整报告:https://virustotal.com/gui/file/def789...
391
-
392
- ⚠️ 强烈建议:不要安装此 Skill!
393
- 多个知名安全引擎确认存在恶意代码。
394
- ```
395
-
396
- ### URL 格式说明
397
-
398
- ClawHub URL 必须遵循以下格式:
399
-
400
- ```
401
- https://clawhub.ai/<username>/<project>
402
- ```
403
-
404
- **有效示例**:
405
- - `https://clawhub.ai/Asleep123/caldav-calendar`
406
- - `https://clawhub.ai/steipete/nano-pdf`
407
- - `https://clawhub.ai/johndoe/my-awesome-skill`
408
-
409
- **无效示例**:
410
- - `clawhub.ai/username/project`(缺少 https://)
411
- - `https://clawhub.ai/username`(缺少项目名)
412
- - `https://github.com/username/project`(错误的域名)
413
-
414
- ### 工作原理
415
-
416
- 1. **接收 URL**:用户提供 ClawHub 项目 URL
417
- 2. **发送请求**:插件将 URL 发送到后端检测服务
418
- 3. **自动下载**:API 服务从 ClawHub 下载 Skill 包(临时)
419
- 4. **执行扫描**:运行静态分析、行为分析、LLM 分析等
420
- 5. **返回结果**:生成安全报告并返回
421
- 6. **清理临时文件**:API 服务自动清理下载的文件
422
-
423
- **整个过程无需在本地保存任何文件。**
424
-
425
- ### 优势
426
-
427
- - ✅ **无需下载**:不占用本地存储空间,不污染本地环境
428
- - ✅ **快速评估**:安装前快速了解安全状况,避免安装恶意 Skill
429
- - ✅ **自动化**:可集成到 CI/CD 流程,自动化安全检查
430
- - ✅ **一致性**:使用与本地扫描相同的安全策略和分析器
431
- - ✅ **便捷性**:只需一个 URL,无需手动操作
432
-
433
- ### 注意事项
434
-
435
- - ClawHub 扫描需要 API 服务能够访问 `clawhub.ai`
436
- - 扫描超时时间为 180 秒(3 分钟)
437
- - 如果 ClawHub 服务不可用,扫描会失败
438
- - 私有 Skill 可能需要额外的认证(当前版本不支持)
439
-
440
- ### 与本地扫描的对比
441
-
442
- | 特性 | ClawHub 扫描 | 本地扫描 |
443
- |------|-------------|---------|
444
- | 需要下载 | ❌ 否 | ✅ 是 |
445
- | 扫描速度 | 稍慢(含下载) | 快 |
446
- | 存储占用 | 0 | 需要本地空间 |
447
- | 适用场景 | 安装前评估 | 已安装 Skill |
448
- | 网络要求 | 需要访问 ClawHub | 仅需访问 API |
449
-
450
- ---
451
-
452
- ## 单个 Skill 扫描(本地)
453
-
454
- **触发词**: "扫描 skill"、"检查这个 skill"、"安全检查 [路径]"
455
-
456
- ### 基础扫描(推荐,速度快)
457
-
458
- ```bash
459
- python3 {baseDir}/scan.py --api-url http://localhost:8000 scan <skill路径>
460
- ```
461
-
462
- ### 详细模式(显示所有发现)
463
-
464
- ```bash
465
- python3 {baseDir}/scan.py --api-url http://localhost:8000 scan <skill路径> --detailed
466
- ```
467
-
468
- ### 深度扫描(加入行为分析)
469
-
470
- ```bash
471
- python3 {baseDir}/scan.py --api-url http://localhost:8000 scan <skill路径> --detailed --behavioral
472
- ```
473
-
474
- ### 最强扫描(加入 LLM 语义分析)
475
-
476
- ```bash
477
- python3 {baseDir}/scan.py --api-url http://localhost:8000 scan <skill路径> --detailed --behavioral --llm
478
- ```
479
-
480
- ---
481
-
482
- ## 批量扫描
483
-
484
- **触发词**: "批量扫描"、"扫描所有 skills"、"检查 skills 目录"
485
-
486
- ### 扫描指定目录下的所有 Skills
487
-
488
- ```bash
489
- python3 {baseDir}/scan.py --api-url http://localhost:8000 batch <目录路径>
490
- ```
491
-
492
- ### 递归扫描(含子目录)
493
-
494
- ```bash
495
- python3 {baseDir}/scan.py --api-url http://localhost:8000 batch <目录路径> --recursive
496
- ```
497
-
498
- ### 批量扫描并输出 JSON 报告
499
-
500
- ```bash
501
- python3 {baseDir}/scan.py --api-url http://localhost:8000 batch <目录路径> --detailed --json /tmp/scan-report.json
502
- ```
503
-
504
- ### 常用目录示例
505
-
506
- 扫描 OpenClaw 默认 skills 目录:
507
- ```bash
508
- python3 {baseDir}/scan.py --api-url http://localhost:8000 batch ~/.openclaw/skills
509
- ```
510
-
511
- 扫描 workspace skills:
512
- ```bash
513
- python3 {baseDir}/scan.py --api-url http://localhost:8000 batch ~/.openclaw/workspace/skills --recursive
514
- ```
515
-
516
- ---
517
-
518
- ## 健康检查
519
-
520
- 检查 API 服务是否运行:
521
-
522
- ```bash
523
- python3 {baseDir}/scan.py --api-url http://localhost:8000 health
524
- ```
525
-
526
- ---
527
-
528
- ## 结果解读
529
-
530
- ### 总体安全状态
531
-
532
- | 状态 | 含义 |
533
- |------|------|
534
- | ✅ 安全 | 未检测到 HIGH/CRITICAL 问题,可正常使用 |
535
- | ⚠️ 需关注 | 存在 LOW/MEDIUM 问题,建议人工复核 |
536
- | ❌ 发现问题 | 存在 HIGH/CRITICAL 威胁,**强烈建议不要安装** |
537
-
538
- ### 严重级别说明
539
-
540
- - **CRITICAL**: 主动利用尝试(数据窃取、代码注入)
541
- - **HIGH**: 危险模式(提示注入、未授权访问)
542
- - **MEDIUM**: 可疑行为(未声明的能力、误导性描述)
543
- - **LOW**: 轻微风险,需人工判断
544
-
545
- ### VirusTotal 结果解读 🔍
546
-
547
- **VirusTotal 是多引擎病毒扫描服务,结果格式为 `检测数/总引擎数`**
548
-
549
- | 检测结果 | 含义 | 建议 |
550
- |---------|------|------|
551
- | 0/70+ | 所有引擎均未检测到威胁 | ✅ 安全,可以安装 |
552
- | 1-2/70+ | 极少数引擎标记(可能误报) | ⚠️ 谨慎评估,查看具体引擎和检测类型 |
553
- | 3-5/70+ | 多个引擎标记为可疑 | ⚠️ 存在风险,建议详细审查 |
554
- | 5+/70+ | 多个引擎确认为恶意 | ❌ 高风险,强烈建议不要安装 |
555
-
556
- **VirusTotal 优先级**:
557
- - VirusTotal 结果应优先于其他分析器结果展示
558
- - 即使静态分析显示安全,VirusTotal 检测到威胁时仍需警惕
559
- - VirusTotal 提供外部可验证的扫描报告链接
560
-
561
- **示例展示**:
562
- ```
563
- 🔍 VirusTotal 扫描结果:
564
- ✅ 0/72 引擎检测到威胁
565
- 该文件已通过 72 个安全引擎的验证
566
-
567
- 详细信息:
568
- - SHA256: abc123...
569
- - 最后分析:2024-03-11
570
- - 查看完整报告:https://virustotal.com/...
571
- ```
572
-
573
- **注意事项**:
574
- - VirusTotal 扫描需要 API 服务配置 VirusTotal API 密钥
575
- - 如果未配置,扫描结果中不会包含 VirusTotal 数据
576
- - VirusTotal 有 API 调用频率限制
577
-
578
- ---
579
-
580
- ## 参数说明
581
-
582
- | 参数 | 说明 |
583
- |------|------|
584
- | `--api-url <url>` | API 服务地址 |
585
- | `--detailed` | 显示每条 finding 的完整详情 |
586
- | `--behavioral` | 启用 AST 数据流分析(更准确,稍慢) |
587
- | `--llm` | 启用 LLM 语义分析(最准确,需 API 支持) |
588
- | `--recursive` | 批量扫描时递归子目录 |
589
- | `--json <文件>` | 将结果保存为 JSON 文件 |
590
- | `--policy <strict\|balanced\|permissive>` | 扫描策略(默认: balanced) |
591
-
592
- ## 命令类型
593
-
594
- | 命令 | 用途 | 示例 |
595
- |------|------|------|
596
- | `scan <路径>` | 扫描本地单个 Skill | `scan ~/.openclaw/skills/my-skill` |
597
- | `batch <目录>` | 批量扫描本地 Skills | `batch ~/.openclaw/skills --recursive` |
598
- | `clawhub <URL>` | 扫描 ClawHub Skill | `clawhub https://clawhub.ai/user/project` |
599
- | `health` | 检查 API 服务状态 | `health` |
600
-
601
- ---
602
-
603
- ## 注意事项
604
-
605
- - **扫描结果不等于安全保证**。`is_safe=True` 表示未检测到已知威胁模式,不代表 skill 绝对安全。
606
- - 扫描使用静态分析,不会执行任何 skill 中的代码。
607
- - ClawHub 扫描需要 API 服务能够访问 clawhub.ai。
608
- - **VirusTotal 结果优先**:如果扫描结果包含 VirusTotal 数据,必须优先展示,即使未检测到威胁。
609
- - VirusTotal 扫描需要 API 服务配置 VirusTotal API 密钥,否则不会包含 VirusTotal 数据。
610
- - VirusTotal 有 API 调用频率限制(免费版:4 次/分钟,付费版更高)。
611
- - 退出码 `0` 表示安全,`1` 表示存在问题(便于 CI/CD 集成)。
612
- - `{baseDir}` 占位符会自动替换为 Skill 的安装目录。
613
- - 如果你配置了非默认的 API URL(如 `http://10.110.3.133`),请在命令中使用 `--api-url` 参数指定你的 URL。
614
-
615
- ### VirusTotal 特别说明
616
-
617
- **为什么 VirusTotal 结果如此重要?**
618
-
619
- 1. **多引擎交叉验证**:集成 70+ 个安全引擎(Avast、Kaspersky、Microsoft、Symantec 等)
620
- 2. **业界标准**:全球安全研究人员和企业的首选恶意软件检测服务
621
- 3. **外部验证**:提供独立的第三方验证,不依赖单一分析器
622
- 4. **可追溯性**:每个扫描都有唯一的报告链接,可供审计和验证
623
- 5. **实时更新**:病毒库持续更新,能检测最新威胁
624
-
625
- **展示优先级**:
626
- ```
627
- 1. VirusTotal 结果(如果有)
628
- 2. 静态分析发现的 CRITICAL/HIGH 问题
629
- 3. 行为分析结果
630
- 4. LLM 分析结果
631
- 5. MEDIUM/LOW 问题
632
- ```
633
-
634
- **即使其他分析器显示安全,VirusTotal 检测到威胁时也必须警告用户!**
1
+ ---
2
+ name: skills-scanner
3
+ description: OpenClaw Skills 安全扫描工具,使用 AI Skill Scanner 检测恶意代码、数据窃取、提示注入等威胁。
4
+ version: 1.0.0
5
+ user-invocable: true
6
+ metadata: {"openclaw": {"emoji": "🔍", "requires": {"bins": ["python3"]}}}
7
+ ---
8
+
9
+ # Skills 安全扫描工具 🔍
10
+
11
+ OpenClaw Skills 安全扫描工具,检测恶意代码、数据窃取、提示注入等威胁。
12
+
13
+ ## 功能特性
14
+
15
+ - 🔍 **本地扫描**:扫描本地 Skill 文件和目录
16
+ - 🌐 **ClawHub 扫描**:直接扫描 ClawHub 上的 Skill,无需下载
17
+ - 📊 **批量扫描**:一次扫描多个 Skills
18
+ - 🛡️ **多种策略**:strict/balanced/permissive 三种扫描策略
19
+ - 🤖 **LLM 分析**:可选的 LLM 语义分析
20
+ - 🔬 **行为分析**:AST 数据流分析
21
+
22
+ ## 重要提示
23
+
24
+ **在向用户展示扫描结果前,请务必:**
25
+
26
+ ### 0. API 服务可用性检查 🔌
27
+
28
+ **在执行任何扫描操作前,必须先检查 API 服务是否可用。如果服务不可用,跳过安全检查。**
29
+
30
+ **检查方法**:
31
+ ```bash
32
+ python3 {baseDir}/scan.py --api-url http://http://10.110.3.133 health
33
+ ```
34
+
35
+ **处理规则**:
36
+
37
+ 1. **服务可用**(返回 `✓` 或 `OK`):
38
+ - 继续执行扫描操作
39
+ - 正常展示扫描结果
40
+
41
+ 2. **服务不可用**(连接失败、超时、错误响应):
42
+ - ⚠️ **立即跳过安全检查**
43
+ - 向用户说明:
44
+ ```
45
+ ⚠️ Skills 安全扫描服务当前不可用,已跳过安全检查。
46
+
47
+ 如需启用安全扫描,请:
48
+ 1. 启动 skill-scanner-api 服务
49
+ 2. 确认服务地址配置正确(当前: http://http://10.110.3.133
50
+ 3. 重新执行安装操作
51
+ ```
52
+ - **不要阻止用户的操作**(如安装 Skill)
53
+ - **不要反复尝试连接**(避免延迟用户操作)
54
+
55
+ **示例对话**:
56
+
57
+ ```
58
+ 用户: 帮我安装 caldav-calendar 这个 skill
59
+ AI: 好的,让我先检查安全扫描服务...
60
+ [执行 health 检查]
61
+
62
+ ⚠️ Skills 安全扫描服务当前不可用,已跳过安全检查。
63
+
64
+ 正在安装 caldav-calendar...
65
+ ✅ 安装完成
66
+
67
+ 💡 提示:如需启用安全扫描功能,请启动 skill-scanner-api 服务。
68
+ ```
69
+
70
+ **为什么要跳过而不是阻止**:
71
+ - 安全扫描是辅助功能,不应阻碍正常使用
72
+ - 用户可能在离线环境或未配置扫描服务的环境中工作
73
+ - 避免因服务问题导致所有 Skill 操作失败
74
+
75
+ ### 1. VirusTotal 扫描结果优先提示 ⚠️
76
+
77
+ **如果扫描结果中包含 VirusTotal 的扫描数据,必须优先、重点展示此结果,即使未检测到病毒。**
78
+
79
+ VirusTotal 是业界权威的多引擎病毒扫描服务,其结果具有极高的参考价值。
80
+
81
+ **展示格式**:
82
+ ```
83
+ 🔍 VirusTotal 扫描结果:
84
+ • 扫描引擎数:70
85
+ • 检测为恶意:0
86
+ • 可疑标记:0
87
+ • 状态:✅ 未检测到威胁
88
+
89
+ 详细信息:
90
+ - SHA256: [文件哈希]
91
+ - 扫描时间:[时间]
92
+ - 报告链接:[VirusTotal URL]
93
+ ```
94
+
95
+ **重点提示场景**:
96
+
97
+ 1. **未检测到威胁时**:
98
+ ```
99
+ ✅ VirusTotal 扫描通过
100
+ 70 个安全引擎均未检测到威胁,该 Skill 文件安全性得到多方验证。
101
+ ```
102
+
103
+ 2. **检测到威胁时**:
104
+ ```
105
+ ⚠️ VirusTotal 检测到威胁!
106
+ 3/70 个引擎标记为恶意:
107
+ - Avast: Trojan.Generic
108
+ - Kaspersky: HEUR:Trojan.Script
109
+ - Microsoft: TrojanDownloader
110
+
111
+ 强烈建议:不要安装此 Skill!
112
+ ```
113
+
114
+ 3. **可疑但未确认时**:
115
+ ```
116
+ ⚠️ VirusTotal 发现可疑行为
117
+ 1/70 个引擎标记为可疑,建议谨慎评估。
118
+ ```
119
+
120
+ **为什么优先展示 VirusTotal**:
121
+ - 多引擎交叉验证(通常 70+ 个安全引擎)
122
+ - 业界标准的恶意软件检测服务
123
+ - 即使其他分析器未发现问题,VirusTotal 的结果也可能揭示隐藏威胁
124
+ - 提供可追溯的外部验证链接
125
+
126
+ ### 2. 内容翻译要求
127
+
128
+ 1. 检查结果中是否包含英文内容(如 category、description、finding 详情等)
129
+ 2. 如果包含英文,将所有英文内容翻译为中文后再展示给用户
130
+ 3. 保持技术术语的准确性(如 CRITICAL、HIGH、MEDIUM、LOW 可保留或翻译为:严重、高危、中危、低危)
131
+ 4. 确保翻译后的内容清晰易懂,符合中文表达习惯
132
+
133
+ 示例翻译:
134
+ - "Prompt injection detected" → "检测到提示注入"
135
+ - "Unauthorized file access" → "未授权的文件访问"
136
+ - "Data exfiltration attempt" → "数据窃取尝试"
137
+ - "Malicious code execution" → "恶意代码执行"
138
+ - "VirusTotal scan clean" → "VirusTotal 扫描通过"
139
+ - "Detected by X engines" → "被 X 个引擎检测到"
140
+
141
+ ## 环境准备(首次使用)
142
+
143
+ 首次运行前,检查并安装依赖:
144
+
145
+ ```bash
146
+ # 检查 Python 是否可用
147
+ python3 --version || echo "请安装 Python 3.10+"
148
+
149
+ # 安装依赖到主机环境
150
+ python3 -m pip install --user --quiet "requests>=2.31.0"
151
+ ```
152
+
153
+ 安装只需执行一次。插件会自动处理依赖安装。
154
+
155
+ ## 配置
156
+
157
+ 扫描器需要运行中的 API 服务。在 OpenClaw 配置中设置 API URL:
158
+
159
+ ```json
160
+ {
161
+ "plugins": {
162
+ "entries": {
163
+ "skills-scanner": {
164
+ "config": {
165
+ "apiUrl": "http://http://10.110.3.133"
166
+ }
167
+ }
168
+ }
169
+ }
170
+ }
171
+ ```
172
+
173
+ 或直接调用时使用 `--api-url` 参数:
174
+
175
+ ```bash
176
+ python3 {baseDir}/scan.py --api-url http://http://10.110.3.133 scan <路径>
177
+ ```
178
+
179
+ ---
180
+
181
+ ## ClawHub Skill 扫描 🌐
182
+
183
+ **触发词**: "扫描 clawhub skill"、"检查 clawhub 上的 skill"、"扫描 clawhub.ai"、"安装前检查"
184
+
185
+ 直接扫描 ClawHub 上的 Skill,无需手动下载。适用于安装前的安全评估。
186
+
187
+ ### 使用场景
188
+
189
+ 当用户提到以下情况时,应该使用 ClawHub 扫描:
190
+
191
+ 1. **安装前检查**:"我想安装这个 skill,先帮我检查一下安全性"
192
+ 2. **浏览 ClawHub**:"clawhub 上有个 skill 看起来不错,帮我扫描一下"
193
+ 3. **提供 URL**:用户直接提供 `https://clawhub.ai/username/project` 链接
194
+ 4. **推荐验证**:"有人推荐了这个 skill,安全吗?"
195
+
196
+ ### 基础扫描(推荐,速度快)
197
+
198
+ 适用于快速安全检查,显示总体安全状态和严重问题。
199
+
200
+ ```bash
201
+ python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url>
202
+ ```
203
+
204
+ **示例输出**:
205
+ ```
206
+ ✓ caldav-calendar
207
+ 严重性: LOW
208
+ 发现数: 2
209
+ ```
210
+
211
+ ### 详细模式(显示所有发现)
212
+
213
+ 显示每个安全发现的详细信息,包括类别、描述、文件位置等。
214
+
215
+ ```bash
216
+ python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --detailed
217
+ ```
218
+
219
+ **示例输出**:
220
+ ```
221
+ ✓ caldav-calendar
222
+ 严重性: LOW
223
+ 发现数: 2
224
+
225
+ 发现详情:
226
+ 1. [LOW] Undeclared Capability
227
+ Skill 使用了未在 SKILL.md 中声明的能力
228
+ 2. [LOW] External Network Access
229
+ 检测到外部网络请求
230
+ ```
231
+
232
+ ### 深度扫描(加入行为分析)
233
+
234
+ 启用 AST 数据流分析,更准确地检测复杂的安全威胁。扫描时间较长但更全面。
235
+
236
+ ```bash
237
+ python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --detailed --behavioral
238
+ ```
239
+
240
+ **适用场景**:
241
+ - Skill 包含复杂的代码逻辑
242
+ - 需要深入分析数据流和控制流
243
+ - 对安全性要求较高的场景
244
+
245
+ ### 最强扫描(加入 LLM 语义分析)
246
+
247
+ 使用 LLM 进行语义分析,检测隐蔽的恶意模式和提示注入。需要 API 服务配置 LLM 支持。
248
+
249
+ ```bash
250
+ python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --detailed --behavioral --llm
251
+ ```
252
+
253
+ **适用场景**:
254
+ - 检测提示注入攻击
255
+ - 分析复杂的语义模式
256
+ - 最高安全要求的场景
257
+
258
+ ### 使用不同扫描策略
259
+
260
+ ```bash
261
+ # 严格模式(最保守,任何可疑行为都标记)
262
+ python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --policy strict
263
+
264
+ # 平衡模式(推荐,默认)
265
+ python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --policy balanced
266
+
267
+ # 宽松模式(只标记明确的威胁)
268
+ python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --policy permissive
269
+ ```
270
+
271
+ ### 保存扫描结果
272
+
273
+ 将扫描结果保存为 JSON 文件,便于后续分析或存档。
274
+
275
+ ```bash
276
+ python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --detailed --json /tmp/scan-result.json
277
+ ```
278
+
279
+ ### 实际使用示例
280
+
281
+ #### 示例 1:快速检查日历 Skill
282
+
283
+ ```bash
284
+ python3 {baseDir}/scan.py --api-url {apiUrl} clawhub https://clawhub.ai/Asleep123/caldav-calendar
285
+ ```
286
+
287
+ **用户对话**:
288
+ ```
289
+ 用户: 我想安装 caldav-calendar 这个 skill,帮我检查一下
290
+ AI: 好的,让我先扫描一下这个 skill 的安全性...
291
+ [执行上述命令]
292
+ ✓ 扫描完成:caldav-calendar 安全检查通过
293
+ 严重性: LOW,发现 2 个低风险项
294
+ 未检测到高危威胁,可以安全安装。
295
+ ```
296
+
297
+ #### 示例 2:详细检查 PDF Skill
298
+
299
+ ```bash
300
+ python3 {baseDir}/scan.py --api-url http://http://10.110.3.133 clawhub https://clawhub.ai/steipete/nano-pdf --detailed
301
+ ```
302
+
303
+ **用户对话**:
304
+ ```
305
+ 用户: clawhub 上有个 nano-pdf skill,帮我详细检查一下
306
+ AI: 好的,我会进行详细扫描...
307
+ [执行上述命令]
308
+ 扫描结果显示:
309
+ - 严重性: MEDIUM
310
+ - 发现 5 个问题
311
+
312
+ 主要发现:
313
+ 1. [MEDIUM] 未声明的文件系统访问
314
+ 2. [LOW] 外部网络请求
315
+ ...
316
+
317
+ 建议:存在中等风险,建议查看详细报告后决定是否安装。
318
+ ```
319
+
320
+ #### 示例 3:深度扫描可疑 Skill
321
+
322
+ ```bash
323
+ python3 {baseDir}/scan.py --api-url http://http://10.110.3.133 clawhub https://clawhub.ai/username/suspicious-skill --detailed --behavioral --policy strict
324
+ ```
325
+
326
+ **用户对话**:
327
+ ```
328
+ 用户: 这个 skill 看起来有点可疑,帮我彻底检查一下
329
+ AI: 明白,我会使用严格模式进行深度扫描...
330
+ [执行上述命令]
331
+ ⚠️ 警告:检测到安全问题
332
+ 严重性: HIGH
333
+ 发现 12 个问题,包括 3 个高危项
334
+
335
+ 高危发现:
336
+ 1. [HIGH] 提示注入尝试
337
+ 2. [HIGH] 未授权的数据访问
338
+ 3. [HIGH] 可疑的代码执行模式
339
+
340
+ 强烈建议:不要安装此 skill!
341
+ ```
342
+
343
+ #### 示例 4:包含 VirusTotal 扫描结果
344
+
345
+ ```bash
346
+ python3 {baseDir}/scan.py --api-url http://http://10.110.3.133 clawhub https://clawhub.ai/username/project --detailed
347
+ ```
348
+
349
+ **用户对话(未检测到威胁)**:
350
+ ```
351
+ 用户: 帮我扫描这个 skill
352
+ AI: 好的,正在进行安全扫描...
353
+ [执行上述命令]
354
+
355
+ 🔍 VirusTotal 扫描结果:
356
+ ✅ 0/72 引擎检测到威胁
357
+ 该 Skill 已通过 72 个安全引擎的验证,安全性得到多方确认。
358
+
359
+ 详细信息:
360
+ - SHA256: abc123def456...
361
+ - 最后分析:2024-03-11 10:30:00
362
+ - 查看完整报告:https://virustotal.com/gui/file/abc123...
363
+
364
+ 其他扫描结果:
365
+ - 严重性: LOW
366
+ - 发现 2 个低风险项
367
+
368
+ 综合评估:✅ 安全,可以安装
369
+ ```
370
+
371
+ **用户对话(检测到威胁)**:
372
+ ```
373
+ 用户: 这个 skill 安全吗?
374
+ AI: 让我进行全面扫描...
375
+ [执行上述命令]
376
+
377
+ ⚠️ VirusTotal 检测到威胁!
378
+
379
+ 🔍 VirusTotal 扫描结果:
380
+ ❌ 3/72 引擎标记为恶意
381
+
382
+ 检测详情:
383
+ - Avast: Trojan.Generic.12345
384
+ - Kaspersky: HEUR:Trojan.Script.Generic
385
+ - Microsoft: TrojanDownloader:Python/Malicious
386
+
387
+ 详细信息:
388
+ - SHA256: def789abc123...
389
+ - 最后分析:2024-03-11 10:35:00
390
+ - 查看完整报告:https://virustotal.com/gui/file/def789...
391
+
392
+ ⚠️ 强烈建议:不要安装此 Skill!
393
+ 多个知名安全引擎确认存在恶意代码。
394
+ ```
395
+
396
+ ### URL 格式说明
397
+
398
+ ClawHub URL 必须遵循以下格式:
399
+
400
+ ```
401
+ https://clawhub.ai/<username>/<project>
402
+ ```
403
+
404
+ **有效示例**:
405
+ - `https://clawhub.ai/Asleep123/caldav-calendar`
406
+ - `https://clawhub.ai/steipete/nano-pdf`
407
+ - `https://clawhub.ai/johndoe/my-awesome-skill`
408
+
409
+ **无效示例**:
410
+ - `clawhub.ai/username/project`(缺少 https://)
411
+ - `https://clawhub.ai/username`(缺少项目名)
412
+ - `https://github.com/username/project`(错误的域名)
413
+
414
+ ### 工作原理
415
+
416
+ 1. **接收 URL**:用户提供 ClawHub 项目 URL
417
+ 2. **发送请求**:插件将 URL 发送到后端检测服务
418
+ 3. **自动下载**:API 服务从 ClawHub 下载 Skill 包(临时)
419
+ 4. **执行扫描**:运行静态分析、行为分析、LLM 分析等
420
+ 5. **返回结果**:生成安全报告并返回
421
+ 6. **清理临时文件**:API 服务自动清理下载的文件
422
+
423
+ **整个过程无需在本地保存任何文件。**
424
+
425
+ ### 优势
426
+
427
+ - ✅ **无需下载**:不占用本地存储空间,不污染本地环境
428
+ - ✅ **快速评估**:安装前快速了解安全状况,避免安装恶意 Skill
429
+ - ✅ **自动化**:可集成到 CI/CD 流程,自动化安全检查
430
+ - ✅ **一致性**:使用与本地扫描相同的安全策略和分析器
431
+ - ✅ **便捷性**:只需一个 URL,无需手动操作
432
+
433
+ ### 注意事项
434
+
435
+ - ClawHub 扫描需要 API 服务能够访问 `clawhub.ai`
436
+ - 扫描超时时间为 180 秒(3 分钟)
437
+ - 如果 ClawHub 服务不可用,扫描会失败
438
+ - 私有 Skill 可能需要额外的认证(当前版本不支持)
439
+
440
+ ### 与本地扫描的对比
441
+
442
+ | 特性 | ClawHub 扫描 | 本地扫描 |
443
+ |------|-------------|---------|
444
+ | 需要下载 | ❌ 否 | ✅ 是 |
445
+ | 扫描速度 | 稍慢(含下载) | 快 |
446
+ | 存储占用 | 0 | 需要本地空间 |
447
+ | 适用场景 | 安装前评估 | 已安装 Skill |
448
+ | 网络要求 | 需要访问 ClawHub | 仅需访问 API |
449
+
450
+ ---
451
+
452
+ ## 单个 Skill 扫描(本地)
453
+
454
+ **触发词**: "扫描 skill"、"检查这个 skill"、"安全检查 [路径]"
455
+
456
+ ### 基础扫描(推荐,速度快)
457
+
458
+ ```bash
459
+ python3 {baseDir}/scan.py --api-url http://http://10.110.3.133 scan <skill路径>
460
+ ```
461
+
462
+ ### 详细模式(显示所有发现)
463
+
464
+ ```bash
465
+ python3 {baseDir}/scan.py --api-url http://http://10.110.3.133 scan <skill路径> --detailed
466
+ ```
467
+
468
+ ### 深度扫描(加入行为分析)
469
+
470
+ ```bash
471
+ python3 {baseDir}/scan.py --api-url http://http://10.110.3.133 scan <skill路径> --detailed --behavioral
472
+ ```
473
+
474
+ ### 最强扫描(加入 LLM 语义分析)
475
+
476
+ ```bash
477
+ python3 {baseDir}/scan.py --api-url http://http://10.110.3.133 scan <skill路径> --detailed --behavioral --llm
478
+ ```
479
+
480
+ ---
481
+
482
+ ## 批量扫描
483
+
484
+ **触发词**: "批量扫描"、"扫描所有 skills"、"检查 skills 目录"
485
+
486
+ ### 扫描指定目录下的所有 Skills
487
+
488
+ ```bash
489
+ python3 {baseDir}/scan.py --api-url http://http://10.110.3.133 batch <目录路径>
490
+ ```
491
+
492
+ ### 递归扫描(含子目录)
493
+
494
+ ```bash
495
+ python3 {baseDir}/scan.py --api-url http://http://10.110.3.133 batch <目录路径> --recursive
496
+ ```
497
+
498
+ ### 批量扫描并输出 JSON 报告
499
+
500
+ ```bash
501
+ python3 {baseDir}/scan.py --api-url http://http://10.110.3.133 batch <目录路径> --detailed --json /tmp/scan-report.json
502
+ ```
503
+
504
+ ### 常用目录示例
505
+
506
+ 扫描 OpenClaw 默认 skills 目录:
507
+ ```bash
508
+ python3 {baseDir}/scan.py --api-url http://http://10.110.3.133 batch ~/.openclaw/skills
509
+ ```
510
+
511
+ 扫描 workspace skills:
512
+ ```bash
513
+ python3 {baseDir}/scan.py --api-url http://http://10.110.3.133 batch ~/.openclaw/workspace/skills --recursive
514
+ ```
515
+
516
+ ---
517
+
518
+ ## 健康检查
519
+
520
+ 检查 API 服务是否运行:
521
+
522
+ ```bash
523
+ python3 {baseDir}/scan.py --api-url http://http://10.110.3.133 health
524
+ ```
525
+
526
+ ---
527
+
528
+ ## 结果解读
529
+
530
+ ### 总体安全状态
531
+
532
+ | 状态 | 含义 |
533
+ |------|------|
534
+ | ✅ 安全 | 未检测到 HIGH/CRITICAL 问题,可正常使用 |
535
+ | ⚠️ 需关注 | 存在 LOW/MEDIUM 问题,建议人工复核 |
536
+ | ❌ 发现问题 | 存在 HIGH/CRITICAL 威胁,**强烈建议不要安装** |
537
+
538
+ ### 严重级别说明
539
+
540
+ - **CRITICAL**: 主动利用尝试(数据窃取、代码注入)
541
+ - **HIGH**: 危险模式(提示注入、未授权访问)
542
+ - **MEDIUM**: 可疑行为(未声明的能力、误导性描述)
543
+ - **LOW**: 轻微风险,需人工判断
544
+
545
+ ### VirusTotal 结果解读 🔍
546
+
547
+ **VirusTotal 是多引擎病毒扫描服务,结果格式为 `检测数/总引擎数`**
548
+
549
+ | 检测结果 | 含义 | 建议 |
550
+ |---------|------|------|
551
+ | 0/70+ | 所有引擎均未检测到威胁 | ✅ 安全,可以安装 |
552
+ | 1-2/70+ | 极少数引擎标记(可能误报) | ⚠️ 谨慎评估,查看具体引擎和检测类型 |
553
+ | 3-5/70+ | 多个引擎标记为可疑 | ⚠️ 存在风险,建议详细审查 |
554
+ | 5+/70+ | 多个引擎确认为恶意 | ❌ 高风险,强烈建议不要安装 |
555
+
556
+ **VirusTotal 优先级**:
557
+ - VirusTotal 结果应优先于其他分析器结果展示
558
+ - 即使静态分析显示安全,VirusTotal 检测到威胁时仍需警惕
559
+ - VirusTotal 提供外部可验证的扫描报告链接
560
+
561
+ **示例展示**:
562
+ ```
563
+ 🔍 VirusTotal 扫描结果:
564
+ ✅ 0/72 引擎检测到威胁
565
+ 该文件已通过 72 个安全引擎的验证
566
+
567
+ 详细信息:
568
+ - SHA256: abc123...
569
+ - 最后分析:2024-03-11
570
+ - 查看完整报告:https://virustotal.com/...
571
+ ```
572
+
573
+ **注意事项**:
574
+ - VirusTotal 扫描需要 API 服务配置 VirusTotal API 密钥
575
+ - 如果未配置,扫描结果中不会包含 VirusTotal 数据
576
+ - VirusTotal 有 API 调用频率限制
577
+
578
+ ---
579
+
580
+ ## 参数说明
581
+
582
+ | 参数 | 说明 |
583
+ |------|------|
584
+ | `--api-url <url>` | API 服务地址 |
585
+ | `--detailed` | 显示每条 finding 的完整详情 |
586
+ | `--behavioral` | 启用 AST 数据流分析(更准确,稍慢) |
587
+ | `--llm` | 启用 LLM 语义分析(最准确,需 API 支持) |
588
+ | `--recursive` | 批量扫描时递归子目录 |
589
+ | `--json <文件>` | 将结果保存为 JSON 文件 |
590
+ | `--policy <strict\|balanced\|permissive>` | 扫描策略(默认: balanced) |
591
+
592
+ ## 命令类型
593
+
594
+ | 命令 | 用途 | 示例 |
595
+ |------|------|------|
596
+ | `scan <路径>` | 扫描本地单个 Skill | `scan ~/.openclaw/skills/my-skill` |
597
+ | `batch <目录>` | 批量扫描本地 Skills | `batch ~/.openclaw/skills --recursive` |
598
+ | `clawhub <URL>` | 扫描 ClawHub Skill | `clawhub https://clawhub.ai/user/project` |
599
+ | `health` | 检查 API 服务状态 | `health` |
600
+
601
+ ---
602
+
603
+ ## 注意事项
604
+
605
+ - **扫描结果不等于安全保证**。`is_safe=True` 表示未检测到已知威胁模式,不代表 skill 绝对安全。
606
+ - 扫描使用静态分析,不会执行任何 skill 中的代码。
607
+ - ClawHub 扫描需要 API 服务能够访问 clawhub.ai。
608
+ - **VirusTotal 结果优先**:如果扫描结果包含 VirusTotal 数据,必须优先展示,即使未检测到威胁。
609
+ - VirusTotal 扫描需要 API 服务配置 VirusTotal API 密钥,否则不会包含 VirusTotal 数据。
610
+ - VirusTotal 有 API 调用频率限制(免费版:4 次/分钟,付费版更高)。
611
+ - 退出码 `0` 表示安全,`1` 表示存在问题(便于 CI/CD 集成)。
612
+ - `{baseDir}` 占位符会自动替换为 Skill 的安装目录。
613
+ - 如果你配置了非默认的 API URL(如 `http://10.110.3.133`),请在命令中使用 `--api-url` 参数指定你的 URL。
614
+
615
+ ### VirusTotal 特别说明
616
+
617
+ **为什么 VirusTotal 结果如此重要?**
618
+
619
+ 1. **多引擎交叉验证**:集成 70+ 个安全引擎(Avast、Kaspersky、Microsoft、Symantec 等)
620
+ 2. **业界标准**:全球安全研究人员和企业的首选恶意软件检测服务
621
+ 3. **外部验证**:提供独立的第三方验证,不依赖单一分析器
622
+ 4. **可追溯性**:每个扫描都有唯一的报告链接,可供审计和验证
623
+ 5. **实时更新**:病毒库持续更新,能检测最新威胁
624
+
625
+ **展示优先级**:
626
+ ```
627
+ 1. VirusTotal 结果(如果有)
628
+ 2. 静态分析发现的 CRITICAL/HIGH 问题
629
+ 3. 行为分析结果
630
+ 4. LLM 分析结果
631
+ 5. MEDIUM/LOW 问题
632
+ ```
633
+
634
+ **即使其他分析器显示安全,VirusTotal 检测到威胁时也必须警告用户!**
635
635
 
@@ -107,7 +107,10 @@ class SkillScannerClient:
107
107
  data = {
108
108
  'policy': policy,
109
109
  'use_llm': str(use_llm).lower(),
110
- 'use_behavioral': str(use_behavioral).lower()
110
+ 'use_behavioral': str(use_behavioral).lower(),
111
+ # Enable in-depth safety checks by default
112
+ 'use_zip_virus': 'true',
113
+ 'enable_meta': 'true',
111
114
  }
112
115
 
113
116
  response = self.session.post(
@@ -164,7 +167,7 @@ class SkillScannerClient:
164
167
  clawhub_url: str,
165
168
  policy: str = "balanced",
166
169
  use_llm: bool = False,
167
- use_behavioral: bool = False
170
+ use_behavioral: bool = True
168
171
  ) -> Dict[str, Any]:
169
172
  """扫描 ClawHub 上的 Skill
170
173
 
@@ -188,7 +191,8 @@ class SkillScannerClient:
188
191
  'use_virustotal': False,
189
192
  'use_aidefense': False,
190
193
  'use_trigger': False,
191
- 'enable_meta': False
194
+ 'use_zip_virus': True,
195
+ 'enable_meta': True
192
196
  }
193
197
 
194
198
  response = self.session.post(
@@ -318,7 +322,9 @@ def main():
318
322
  clawhub_parser = subparsers.add_parser('clawhub', help='扫描 ClawHub 上的 Skill')
319
323
  clawhub_parser.add_argument('url', help='ClawHub 项目 URL (例如: https://clawhub.ai/username/project)')
320
324
  clawhub_parser.add_argument('--detailed', action='store_true', help='显示详细发现')
321
- clawhub_parser.add_argument('--behavioral', action='store_true', help='启用行为分析')
325
+ clawhub_parser.add_argument('--behavioral', dest='behavioral', action='store_true', help='启用行为分析')
326
+ clawhub_parser.add_argument('--no-behavioral', dest='behavioral', action='store_false', help='关闭行为分析')
327
+ clawhub_parser.set_defaults(behavioral=True)
322
328
  clawhub_parser.add_argument('--llm', action='store_true', help='启用 LLM 分析')
323
329
  clawhub_parser.add_argument('--policy', default='balanced', choices=['strict', 'balanced', 'permissive'], help='扫描策略')
324
330
  clawhub_parser.add_argument('--json', metavar='FILE', help='输出 JSON 到文件')