@pwddd/skills-scanner 3.0.22 → 4.0.0
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.
- package/README.md +3 -509
- package/index.ts +210 -212
- package/openclaw.plugin.json +112 -70
- package/package.json +64 -49
- package/skills/skills-scanner/SKILL.md +245 -1062
- package/src/api-client.ts +275 -0
- package/src/before-install-hook.ts +274 -0
- package/src/cache.ts +138 -0
- package/src/commands.ts +56 -152
- package/src/config-validator.ts +94 -0
- package/src/config.ts +187 -170
- package/src/cron-manager.ts +158 -0
- package/src/debug.ts +40 -0
- package/src/error-handler.ts +103 -0
- package/src/metrics.ts +140 -0
- package/src/prompt-guidance.ts +42 -250
- package/src/rate-limiter.ts +102 -0
- package/src/scanner.ts +230 -54
- package/src/state.ts +119 -71
- package/src/structured-logger.ts +97 -0
- package/src/types.ts +72 -50
- package/skills/skills-scanner/__pycache__/scan.cpython-314.pyc +0 -0
- package/skills/skills-scanner/scan.py +0 -446
- package/src/cron.ts +0 -292
- package/src/deps.ts +0 -77
- package/src/high-risk-operation-guard.ts +0 -62
- package/src/prompt-injection-guard.ts +0 -56
- package/src/report.ts +0 -100
- package/src/watcher.ts +0 -125
|
@@ -1,1062 +1,245 @@
|
|
|
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": "🔍"
|
|
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
|
-
###
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
openclaw
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
-
|
|
193
|
-
-
|
|
194
|
-
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
-
|
|
223
|
-
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
**对于每个检测到的问题,按以下步骤分析**:
|
|
247
|
-
|
|
248
|
-
1. **阅读问题描述**
|
|
249
|
-
- 理解检测器标记的具体问题
|
|
250
|
-
- 查看问题的严重级别(CRITICAL/HIGH/MEDIUM/LOW)
|
|
251
|
-
- 获取问题的上下文(文件位置、代码片段)
|
|
252
|
-
|
|
253
|
-
2. **查看 SKILL.md 声明**
|
|
254
|
-
- 检查 Skill 是否在 metadata 中声明了相关能力
|
|
255
|
-
- 确认 description 是否说明了该功能
|
|
256
|
-
- 验证声明与实际行为是否一致
|
|
257
|
-
|
|
258
|
-
3. **分析代码上下文**
|
|
259
|
-
- 查看完整的代码逻辑,不要只看单行
|
|
260
|
-
- 理解代码的意图和功能
|
|
261
|
-
- 判断是否有安全措施(输入验证、错误处理、权限检查)
|
|
262
|
-
|
|
263
|
-
4. **评估实际风险**
|
|
264
|
-
- 该行为是否为 Skill 核心功能所必需
|
|
265
|
-
- 是否有滥用的可能性
|
|
266
|
-
- 对用户数据和系统的实际影响
|
|
267
|
-
|
|
268
|
-
5. **给出明确结论**
|
|
269
|
-
- ✅ **误报**:合法功能,无需担心
|
|
270
|
-
- ⚠️ **需关注**:功能合法但实现有改进空间
|
|
271
|
-
- ❌ **真实威胁**:确实存在安全风险
|
|
272
|
-
|
|
273
|
-
#### 展示格式
|
|
274
|
-
|
|
275
|
-
**误报示例**:
|
|
276
|
-
```
|
|
277
|
-
扫描发现 3 个问题,经深度分析:
|
|
278
|
-
|
|
279
|
-
✅ 1. [LOW] External Network Access - 误报
|
|
280
|
-
检测:发现 HTTP 请求到 api.openweathermap.org
|
|
281
|
-
分析:这是天气查询 Skill 的核心功能,请求目标为知名天气 API
|
|
282
|
-
结论:合法的 API 调用,已在 SKILL.md 中声明网络访问需求
|
|
283
|
-
|
|
284
|
-
⚠️ 2. [MEDIUM] Undeclared File Write - 需关注
|
|
285
|
-
检测:写入文件到 ~/.openclaw/cache/
|
|
286
|
-
分析:用于缓存天气数据,提升响应速度
|
|
287
|
-
建议:功能合理,但建议在 SKILL.md 中明确声明文件写入需求
|
|
288
|
-
|
|
289
|
-
❌ 3. [HIGH] Suspicious Data Upload - 真实威胁
|
|
290
|
-
检测:上传用户输入到未知服务器 suspicious-domain.com
|
|
291
|
-
分析:该域名不在 SKILL.md 声明中,且无明确的功能说明
|
|
292
|
-
结论:存在数据泄露风险,强烈建议不要安装!
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
**综合评估**:
|
|
296
|
-
```
|
|
297
|
-
深度分析结果:
|
|
298
|
-
- 误报:1 个(已排除)
|
|
299
|
-
- 需关注:1 个(建议改进但可接受)
|
|
300
|
-
- 真实威胁:1 个(高风险)
|
|
301
|
-
|
|
302
|
-
最终建议:❌ 不建议安装
|
|
303
|
-
原因:存在未声明的数据上传行为,可能导致隐私泄露。
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
#### 分析时的注意事项
|
|
307
|
-
|
|
308
|
-
1. **不要过度信任检测器**
|
|
309
|
-
- 静态分析工具有局限性,会产生误报
|
|
310
|
-
- 需要结合 Skill 的实际功能进行判断
|
|
311
|
-
- 优先考虑用户体验和实用性
|
|
312
|
-
|
|
313
|
-
2. **不要过度宽松**
|
|
314
|
-
- 即使是"合理"的功能,如果未声明也应标记
|
|
315
|
-
- 对于 CRITICAL/HIGH 级别的问题,保持谨慎
|
|
316
|
-
- 宁可多提醒,不要漏掉真实威胁
|
|
317
|
-
|
|
318
|
-
3. **提供可操作的建议**
|
|
319
|
-
- 对于误报,解释为什么是误报
|
|
320
|
-
- 对于需关注的问题,给出改进建议
|
|
321
|
-
- 对于真实威胁,明确说明风险和后果
|
|
322
|
-
|
|
323
|
-
4. **保持客观中立**
|
|
324
|
-
- 基于事实和证据进行分析
|
|
325
|
-
- 不要因为 Skill 来源(官方/社区)而有偏见
|
|
326
|
-
- 让用户了解真实情况,自主决策
|
|
327
|
-
|
|
328
|
-
#### 特殊场景处理
|
|
329
|
-
|
|
330
|
-
**场景 1:所有问题都是误报**
|
|
331
|
-
```
|
|
332
|
-
扫描发现 5 个问题,经深度分析全部为误报:
|
|
333
|
-
|
|
334
|
-
✅ 所有检测项均为 Skill 正常功能,已在 SKILL.md 中声明
|
|
335
|
-
- 网络请求:用于 API 调用(已声明)
|
|
336
|
-
- 文件访问:用于配置存储(已声明)
|
|
337
|
-
- 环境变量:用于读取 API 密钥(标准做法)
|
|
338
|
-
|
|
339
|
-
综合评估:✅ 安全,可以安装
|
|
340
|
-
备注:静态分析工具对合法功能产生了误报,实际无风险。
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
**场景 2:混合情况(部分误报,部分真实)**
|
|
344
|
-
```
|
|
345
|
-
扫描发现 8 个问题,经深度分析:
|
|
346
|
-
- 误报:5 个(合法功能)
|
|
347
|
-
- 需关注:2 个(建议改进)
|
|
348
|
-
- 真实威胁:1 个(高风险)
|
|
349
|
-
|
|
350
|
-
关键问题:
|
|
351
|
-
❌ [HIGH] 未加密的敏感数据传输
|
|
352
|
-
检测:通过 HTTP(非 HTTPS)传输 API 密钥
|
|
353
|
-
分析:这会导致密钥在网络传输中被窃取
|
|
354
|
-
建议:必须使用 HTTPS 或不要安装
|
|
355
|
-
|
|
356
|
-
综合评估:❌ 不建议安装
|
|
357
|
-
原因:存在明确的安全漏洞,可能导致 API 密钥泄露。
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
**场景 3:无法判断(信息不足)**
|
|
361
|
-
```
|
|
362
|
-
扫描发现 3 个问题,其中 1 个无法明确判断:
|
|
363
|
-
|
|
364
|
-
❓ [MEDIUM] Obfuscated Code Pattern
|
|
365
|
-
检测:发现混淆的代码模式
|
|
366
|
-
分析:代码使用了 base64 编码和动态执行,无法确定意图
|
|
367
|
-
建议:需要人工审查源代码,或联系 Skill 作者说明
|
|
368
|
-
|
|
369
|
-
综合评估:⚠️ 谨慎安装
|
|
370
|
-
原因:存在无法解释的可疑模式,建议等待进一步确认。
|
|
371
|
-
```
|
|
372
|
-
|
|
373
|
-
### 2. VirusTotal 扫描结果优先提示 ⚠️
|
|
374
|
-
|
|
375
|
-
**如果扫描结果中包含 VirusTotal 的扫描数据,必须优先、重点展示此结果,即使未检测到病毒。**
|
|
376
|
-
|
|
377
|
-
VirusTotal 是业界权威的多引擎病毒扫描服务,其结果具有极高的参考价值。
|
|
378
|
-
|
|
379
|
-
**展示格式**:
|
|
380
|
-
```
|
|
381
|
-
🔍 VirusTotal 扫描结果:
|
|
382
|
-
• 扫描引擎数:70
|
|
383
|
-
• 检测为恶意:0
|
|
384
|
-
• 可疑标记:0
|
|
385
|
-
• 状态:✅ 未检测到威胁
|
|
386
|
-
|
|
387
|
-
详细信息:
|
|
388
|
-
- SHA256: [文件哈希]
|
|
389
|
-
- 扫描时间:[时间]
|
|
390
|
-
- 报告链接:[VirusTotal URL]
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
**重点提示场景**:
|
|
394
|
-
|
|
395
|
-
1. **未检测到威胁时**:
|
|
396
|
-
```
|
|
397
|
-
✅ VirusTotal 扫描通过
|
|
398
|
-
70 个安全引擎均未检测到威胁,该 Skill 文件安全性得到多方验证。
|
|
399
|
-
```
|
|
400
|
-
|
|
401
|
-
2. **检测到威胁时**:
|
|
402
|
-
```
|
|
403
|
-
⚠️ VirusTotal 检测到威胁!
|
|
404
|
-
3/70 个引擎标记为恶意:
|
|
405
|
-
- Avast: Trojan.Generic
|
|
406
|
-
- Kaspersky: HEUR:Trojan.Script
|
|
407
|
-
- Microsoft: TrojanDownloader
|
|
408
|
-
|
|
409
|
-
强烈建议:不要安装此 Skill!
|
|
410
|
-
```
|
|
411
|
-
|
|
412
|
-
3. **可疑但未确认时**:
|
|
413
|
-
```
|
|
414
|
-
⚠️ VirusTotal 发现可疑行为
|
|
415
|
-
1/70 个引擎标记为可疑,建议谨慎评估。
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
**为什么优先展示 VirusTotal**:
|
|
419
|
-
- 多引擎交叉验证(通常 70+ 个安全引擎)
|
|
420
|
-
- 业界标准的恶意软件检测服务
|
|
421
|
-
- 即使其他分析器未发现问题,VirusTotal 的结果也可能揭示隐藏威胁
|
|
422
|
-
- 提供可追溯的外部验证链接
|
|
423
|
-
|
|
424
|
-
### 3. 内容翻译要求
|
|
425
|
-
|
|
426
|
-
1. 检查结果中是否包含英文内容(如 category、description、finding 详情等)
|
|
427
|
-
2. 如果包含英文,将所有英文内容翻译为中文后再展示给用户
|
|
428
|
-
3. 保持技术术语的准确性(如 CRITICAL、HIGH、MEDIUM、LOW 可保留或翻译为:严重、高危、中危、低危)
|
|
429
|
-
4. 确保翻译后的内容清晰易懂,符合中文表达习惯
|
|
430
|
-
|
|
431
|
-
示例翻译:
|
|
432
|
-
- "Prompt injection detected" → "检测到提示注入"
|
|
433
|
-
- "Unauthorized file access" → "未授权的文件访问"
|
|
434
|
-
- "Data exfiltration attempt" → "数据窃取尝试"
|
|
435
|
-
- "Malicious code execution" → "恶意代码执行"
|
|
436
|
-
- "VirusTotal scan clean" → "VirusTotal 扫描通过"
|
|
437
|
-
- "Detected by X engines" → "被 X 个引擎检测到"
|
|
438
|
-
|
|
439
|
-
## 环境准备(首次使用)
|
|
440
|
-
|
|
441
|
-
首次运行前,检查并安装依赖:
|
|
442
|
-
|
|
443
|
-
**macOS / Linux**
|
|
444
|
-
```bash
|
|
445
|
-
# 检查 Python 是否可用
|
|
446
|
-
python3 --version || echo "请安装 Python 3.10+"
|
|
447
|
-
|
|
448
|
-
# 安装依赖到主机环境
|
|
449
|
-
python3 -m pip install --user --quiet "requests>=2.31.0"
|
|
450
|
-
```
|
|
451
|
-
|
|
452
|
-
**Windows**
|
|
453
|
-
```cmd
|
|
454
|
-
# 检查 Python 是否可用
|
|
455
|
-
python --version
|
|
456
|
-
|
|
457
|
-
# 如果未安装,从 https://www.python.org/downloads/ 下载安装
|
|
458
|
-
# 安装时务必勾选 "Add Python to PATH"
|
|
459
|
-
|
|
460
|
-
# 安装依赖到主机环境
|
|
461
|
-
python -m pip install --user --quiet "requests>=2.31.0"
|
|
462
|
-
```
|
|
463
|
-
|
|
464
|
-
安装只需执行一次。插件会自动处理依赖安装。
|
|
465
|
-
|
|
466
|
-
**注意**:
|
|
467
|
-
- Windows 系统通常使用 `python` 命令而不是 `python3`
|
|
468
|
-
- 插件会自动检测可用的 Python 命令(`python3` 或 `python`)
|
|
469
|
-
- 确保 Python 已添加到系统 PATH 环境变量
|
|
470
|
-
|
|
471
|
-
## 配置
|
|
472
|
-
|
|
473
|
-
扫描器需要运行中的 API 服务。在 OpenClaw 配置中设置 API URL:
|
|
474
|
-
|
|
475
|
-
```json
|
|
476
|
-
{
|
|
477
|
-
"plugins": {
|
|
478
|
-
"entries": {
|
|
479
|
-
"skills-scanner": {
|
|
480
|
-
"config": {
|
|
481
|
-
"apiUrl": "http://10.110.3.133"
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
```
|
|
488
|
-
|
|
489
|
-
或直接调用时使用 `--api-url` 参数:
|
|
490
|
-
|
|
491
|
-
```bash
|
|
492
|
-
python3 {baseDir}/scan.py --api-url http://10.110.3.133 scan <路径>
|
|
493
|
-
```
|
|
494
|
-
|
|
495
|
-
---
|
|
496
|
-
|
|
497
|
-
## ClawHub Skill 扫描 🌐
|
|
498
|
-
|
|
499
|
-
**触发词**: "扫描 clawhub skill"、"检查 clawhub 上的 skill"、"扫描 clawhub.ai"、"安装前检查"
|
|
500
|
-
|
|
501
|
-
直接扫描 ClawHub 上的 Skill,无需手动下载。适用于安装前的安全评估。
|
|
502
|
-
|
|
503
|
-
### 使用场景
|
|
504
|
-
|
|
505
|
-
当用户提到以下情况时,应该使用 ClawHub 扫描:
|
|
506
|
-
|
|
507
|
-
1. **安装前检查**:"我想安装这个 skill,先帮我检查一下安全性"
|
|
508
|
-
2. **浏览 ClawHub**:"clawhub 上有个 skill 看起来不错,帮我扫描一下"
|
|
509
|
-
3. **提供 URL**:用户直接提供 `https://clawhub.ai/username/project` 链接
|
|
510
|
-
4. **推荐验证**:"有人推荐了这个 skill,安全吗?"
|
|
511
|
-
|
|
512
|
-
### 基础扫描(推荐,速度快)
|
|
513
|
-
|
|
514
|
-
适用于快速安全检查,显示总体安全状态和严重问题。
|
|
515
|
-
|
|
516
|
-
```bash
|
|
517
|
-
python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url>
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
**示例输出**:
|
|
521
|
-
```
|
|
522
|
-
✓ caldav-calendar
|
|
523
|
-
严重性: LOW
|
|
524
|
-
发现数: 2
|
|
525
|
-
```
|
|
526
|
-
|
|
527
|
-
### 详细模式(显示所有发现)
|
|
528
|
-
|
|
529
|
-
显示每个安全发现的详细信息,包括类别、描述、文件位置等。
|
|
530
|
-
|
|
531
|
-
```bash
|
|
532
|
-
python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --detailed
|
|
533
|
-
```
|
|
534
|
-
|
|
535
|
-
**示例输出**:
|
|
536
|
-
```
|
|
537
|
-
✓ caldav-calendar
|
|
538
|
-
严重性: LOW
|
|
539
|
-
发现数: 2
|
|
540
|
-
|
|
541
|
-
发现详情:
|
|
542
|
-
1. [LOW] Undeclared Capability
|
|
543
|
-
Skill 使用了未在 SKILL.md 中声明的能力
|
|
544
|
-
2. [LOW] External Network Access
|
|
545
|
-
检测到外部网络请求
|
|
546
|
-
```
|
|
547
|
-
|
|
548
|
-
### 深度扫描(加入行为分析)
|
|
549
|
-
|
|
550
|
-
启用 AST 数据流分析,更准确地检测复杂的安全威胁。扫描时间较长但更全面。
|
|
551
|
-
|
|
552
|
-
```bash
|
|
553
|
-
python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --detailed --behavioral
|
|
554
|
-
```
|
|
555
|
-
|
|
556
|
-
**适用场景**:
|
|
557
|
-
- Skill 包含复杂的代码逻辑
|
|
558
|
-
- 需要深入分析数据流和控制流
|
|
559
|
-
- 对安全性要求较高的场景
|
|
560
|
-
|
|
561
|
-
### 最强扫描(加入 LLM 语义分析)
|
|
562
|
-
|
|
563
|
-
使用 LLM 进行语义分析,检测隐蔽的恶意模式和提示注入。需要 API 服务配置 LLM 支持。
|
|
564
|
-
|
|
565
|
-
```bash
|
|
566
|
-
python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --detailed --behavioral --llm
|
|
567
|
-
```
|
|
568
|
-
|
|
569
|
-
**适用场景**:
|
|
570
|
-
- 检测提示注入攻击
|
|
571
|
-
- 分析复杂的语义模式
|
|
572
|
-
- 最高安全要求的场景
|
|
573
|
-
|
|
574
|
-
### 使用不同扫描策略
|
|
575
|
-
|
|
576
|
-
```bash
|
|
577
|
-
# 严格模式(最保守,任何可疑行为都标记)
|
|
578
|
-
python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --policy strict
|
|
579
|
-
|
|
580
|
-
# 平衡模式(推荐,默认)
|
|
581
|
-
python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --policy balanced
|
|
582
|
-
|
|
583
|
-
# 宽松模式(只标记明确的威胁)
|
|
584
|
-
python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --policy permissive
|
|
585
|
-
```
|
|
586
|
-
|
|
587
|
-
### 保存扫描结果
|
|
588
|
-
|
|
589
|
-
将扫描结果保存为 JSON 文件,便于后续分析或存档。
|
|
590
|
-
|
|
591
|
-
```bash
|
|
592
|
-
python3 {baseDir}/scan.py --api-url {apiUrl} clawhub <clawhub_url> --detailed --json /tmp/scan-result.json
|
|
593
|
-
```
|
|
594
|
-
|
|
595
|
-
### 实际使用示例
|
|
596
|
-
|
|
597
|
-
#### 示例 1:快速检查日历 Skill
|
|
598
|
-
|
|
599
|
-
```bash
|
|
600
|
-
python3 {baseDir}/scan.py --api-url {apiUrl} clawhub https://clawhub.ai/Asleep123/caldav-calendar
|
|
601
|
-
```
|
|
602
|
-
|
|
603
|
-
**用户对话**:
|
|
604
|
-
```
|
|
605
|
-
用户: 我想安装 caldav-calendar 这个 skill,帮我检查一下
|
|
606
|
-
AI: 好的,让我先扫描一下这个 skill 的安全性...
|
|
607
|
-
[执行上述命令]
|
|
608
|
-
✓ 扫描完成:caldav-calendar 安全检查通过
|
|
609
|
-
严重性: LOW,发现 2 个低风险项
|
|
610
|
-
未检测到高危威胁,可以安全安装。
|
|
611
|
-
```
|
|
612
|
-
|
|
613
|
-
#### 示例 2:详细检查 PDF Skill
|
|
614
|
-
|
|
615
|
-
```bash
|
|
616
|
-
python3 {baseDir}/scan.py --api-url http://10.110.3.133 clawhub https://clawhub.ai/steipete/nano-pdf --detailed
|
|
617
|
-
```
|
|
618
|
-
|
|
619
|
-
**用户对话**:
|
|
620
|
-
```
|
|
621
|
-
用户: clawhub 上有个 nano-pdf skill,帮我详细检查一下
|
|
622
|
-
AI: 好的,我会进行详细扫描...
|
|
623
|
-
[执行上述命令]
|
|
624
|
-
扫描结果显示:
|
|
625
|
-
- 严重性: MEDIUM
|
|
626
|
-
- 发现 5 个问题
|
|
627
|
-
|
|
628
|
-
主要发现:
|
|
629
|
-
1. [MEDIUM] 未声明的文件系统访问
|
|
630
|
-
2. [LOW] 外部网络请求
|
|
631
|
-
...
|
|
632
|
-
|
|
633
|
-
建议:存在中等风险,建议查看详细报告后决定是否安装。
|
|
634
|
-
```
|
|
635
|
-
|
|
636
|
-
#### 示例 3:深度扫描可疑 Skill
|
|
637
|
-
|
|
638
|
-
```bash
|
|
639
|
-
python3 {baseDir}/scan.py --api-url http://10.110.3.133 clawhub https://clawhub.ai/username/suspicious-skill --detailed --behavioral --policy strict
|
|
640
|
-
```
|
|
641
|
-
|
|
642
|
-
**用户对话**:
|
|
643
|
-
```
|
|
644
|
-
用户: 这个 skill 看起来有点可疑,帮我彻底检查一下
|
|
645
|
-
AI: 明白,我会使用严格模式进行深度扫描...
|
|
646
|
-
[执行上述命令]
|
|
647
|
-
⚠️ 警告:检测到安全问题
|
|
648
|
-
严重性: HIGH
|
|
649
|
-
发现 12 个问题,包括 3 个高危项
|
|
650
|
-
|
|
651
|
-
高危发现:
|
|
652
|
-
1. [HIGH] 提示注入尝试
|
|
653
|
-
2. [HIGH] 未授权的数据访问
|
|
654
|
-
3. [HIGH] 可疑的代码执行模式
|
|
655
|
-
|
|
656
|
-
强烈建议:不要安装此 skill!
|
|
657
|
-
```
|
|
658
|
-
|
|
659
|
-
#### 示例 4:包含 VirusTotal 扫描结果
|
|
660
|
-
|
|
661
|
-
```bash
|
|
662
|
-
python3 {baseDir}/scan.py --api-url http://10.110.3.133 clawhub https://clawhub.ai/username/project --detailed
|
|
663
|
-
```
|
|
664
|
-
|
|
665
|
-
**用户对话(未检测到威胁)**:
|
|
666
|
-
```
|
|
667
|
-
用户: 帮我扫描这个 skill
|
|
668
|
-
AI: 好的,正在进行安全扫描...
|
|
669
|
-
[执行上述命令]
|
|
670
|
-
|
|
671
|
-
🔍 VirusTotal 扫描结果:
|
|
672
|
-
✅ 0/72 引擎检测到威胁
|
|
673
|
-
该 Skill 已通过 72 个安全引擎的验证,安全性得到多方确认。
|
|
674
|
-
|
|
675
|
-
详细信息:
|
|
676
|
-
- SHA256: abc123def456...
|
|
677
|
-
- 最后分析:2024-03-11 10:30:00
|
|
678
|
-
- 查看完整报告:https://virustotal.com/gui/file/abc123...
|
|
679
|
-
|
|
680
|
-
其他扫描结果:
|
|
681
|
-
- 严重性: LOW
|
|
682
|
-
- 发现 2 个低风险项
|
|
683
|
-
|
|
684
|
-
综合评估:✅ 安全,可以安装
|
|
685
|
-
```
|
|
686
|
-
|
|
687
|
-
**用户对话(检测到威胁)**:
|
|
688
|
-
```
|
|
689
|
-
用户: 这个 skill 安全吗?
|
|
690
|
-
AI: 让我进行全面扫描...
|
|
691
|
-
[执行上述命令]
|
|
692
|
-
|
|
693
|
-
⚠️ VirusTotal 检测到威胁!
|
|
694
|
-
|
|
695
|
-
🔍 VirusTotal 扫描结果:
|
|
696
|
-
❌ 3/72 引擎标记为恶意
|
|
697
|
-
|
|
698
|
-
检测详情:
|
|
699
|
-
- Avast: Trojan.Generic.12345
|
|
700
|
-
- Kaspersky: HEUR:Trojan.Script.Generic
|
|
701
|
-
- Microsoft: TrojanDownloader:Python/Malicious
|
|
702
|
-
|
|
703
|
-
详细信息:
|
|
704
|
-
- SHA256: def789abc123...
|
|
705
|
-
- 最后分析:2024-03-11 10:35:00
|
|
706
|
-
- 查看完整报告:https://virustotal.com/gui/file/def789...
|
|
707
|
-
|
|
708
|
-
⚠️ 强烈建议:不要安装此 Skill!
|
|
709
|
-
多个知名安全引擎确认存在恶意代码。
|
|
710
|
-
```
|
|
711
|
-
|
|
712
|
-
### URL 格式说明
|
|
713
|
-
|
|
714
|
-
ClawHub URL 必须遵循以下格式:
|
|
715
|
-
|
|
716
|
-
```
|
|
717
|
-
https://clawhub.ai/<username>/<project>
|
|
718
|
-
```
|
|
719
|
-
|
|
720
|
-
**有效示例**:
|
|
721
|
-
- `https://clawhub.ai/Asleep123/caldav-calendar`
|
|
722
|
-
- `https://clawhub.ai/steipete/nano-pdf`
|
|
723
|
-
- `https://clawhub.ai/johndoe/my-awesome-skill`
|
|
724
|
-
|
|
725
|
-
**无效示例**:
|
|
726
|
-
- `clawhub.ai/username/project`(缺少 https://)
|
|
727
|
-
- `https://clawhub.ai/username`(缺少项目名)
|
|
728
|
-
- `https://github.com/username/project`(错误的域名)
|
|
729
|
-
|
|
730
|
-
### 工作原理
|
|
731
|
-
|
|
732
|
-
1. **接收 URL**:用户提供 ClawHub 项目 URL
|
|
733
|
-
2. **发送请求**:插件将 URL 发送到后端检测服务
|
|
734
|
-
3. **自动下载**:API 服务从 ClawHub 下载 Skill 包(临时)
|
|
735
|
-
4. **执行扫描**:运行静态分析、行为分析、LLM 分析等
|
|
736
|
-
5. **返回结果**:生成安全报告并返回
|
|
737
|
-
6. **清理临时文件**:API 服务自动清理下载的文件
|
|
738
|
-
|
|
739
|
-
**整个过程无需在本地保存任何文件。**
|
|
740
|
-
|
|
741
|
-
### 优势
|
|
742
|
-
|
|
743
|
-
- ✅ **无需下载**:不占用本地存储空间,不污染本地环境
|
|
744
|
-
- ✅ **快速评估**:安装前快速了解安全状况,避免安装恶意 Skill
|
|
745
|
-
- ✅ **自动化**:可集成到 CI/CD 流程,自动化安全检查
|
|
746
|
-
- ✅ **一致性**:使用与本地扫描相同的安全策略和分析器
|
|
747
|
-
- ✅ **便捷性**:只需一个 URL,无需手动操作
|
|
748
|
-
|
|
749
|
-
### 注意事项
|
|
750
|
-
|
|
751
|
-
- ClawHub 扫描需要 API 服务能够访问 `clawhub.ai`
|
|
752
|
-
- 扫描超时时间为 180 秒(3 分钟)
|
|
753
|
-
- 如果 ClawHub 服务不可用,扫描会失败
|
|
754
|
-
- 私有 Skill 可能需要额外的认证(当前版本不支持)
|
|
755
|
-
|
|
756
|
-
### 与本地扫描的对比
|
|
757
|
-
|
|
758
|
-
| 特性 | ClawHub 扫描 | 本地扫描 |
|
|
759
|
-
|------|-------------|---------|
|
|
760
|
-
| 需要下载 | ❌ 否 | ✅ 是 |
|
|
761
|
-
| 扫描速度 | 稍慢(含下载) | 快 |
|
|
762
|
-
| 存储占用 | 0 | 需要本地空间 |
|
|
763
|
-
| 适用场景 | 安装前评估 | 已安装 Skill |
|
|
764
|
-
| 网络要求 | 需要访问 ClawHub | 仅需访问 API |
|
|
765
|
-
|
|
766
|
-
---
|
|
767
|
-
|
|
768
|
-
## 单个 Skill 扫描(本地)
|
|
769
|
-
|
|
770
|
-
**触发词**: "扫描 skill"、"检查这个 skill"、"安全检查 [路径]"
|
|
771
|
-
|
|
772
|
-
### 基础扫描(推荐,速度快)
|
|
773
|
-
|
|
774
|
-
```bash
|
|
775
|
-
python3 {baseDir}/scan.py --api-url http://10.110.3.133 scan <skill路径>
|
|
776
|
-
```
|
|
777
|
-
|
|
778
|
-
### 详细模式(显示所有发现)
|
|
779
|
-
|
|
780
|
-
```bash
|
|
781
|
-
python3 {baseDir}/scan.py --api-url http://10.110.3.133 scan <skill路径> --detailed
|
|
782
|
-
```
|
|
783
|
-
|
|
784
|
-
### 深度扫描(加入行为分析)
|
|
785
|
-
|
|
786
|
-
```bash
|
|
787
|
-
python3 {baseDir}/scan.py --api-url http://10.110.3.133 scan <skill路径> --detailed --behavioral
|
|
788
|
-
```
|
|
789
|
-
|
|
790
|
-
### 最强扫描(加入 LLM 语义分析)
|
|
791
|
-
|
|
792
|
-
```bash
|
|
793
|
-
python3 {baseDir}/scan.py --api-url http://10.110.3.133 scan <skill路径> --detailed --behavioral --llm
|
|
794
|
-
```
|
|
795
|
-
|
|
796
|
-
---
|
|
797
|
-
|
|
798
|
-
## 批量扫描
|
|
799
|
-
|
|
800
|
-
**触发词**: "批量扫描"、"扫描所有 skills"、"检查 skills 目录"
|
|
801
|
-
|
|
802
|
-
### 扫描指定目录下的所有 Skills
|
|
803
|
-
|
|
804
|
-
```bash
|
|
805
|
-
python3 {baseDir}/scan.py --api-url http://10.110.3.133 batch <目录路径>
|
|
806
|
-
```
|
|
807
|
-
|
|
808
|
-
### 递归扫描(含子目录)
|
|
809
|
-
|
|
810
|
-
```bash
|
|
811
|
-
python3 {baseDir}/scan.py --api-url http://10.110.3.133 batch <目录路径> --recursive
|
|
812
|
-
```
|
|
813
|
-
|
|
814
|
-
### 批量扫描并输出 JSON 报告
|
|
815
|
-
|
|
816
|
-
```bash
|
|
817
|
-
python3 {baseDir}/scan.py --api-url http://10.110.3.133 batch <目录路径> --detailed --json /tmp/scan-report.json
|
|
818
|
-
```
|
|
819
|
-
|
|
820
|
-
### 常用目录示例
|
|
821
|
-
|
|
822
|
-
扫描 OpenClaw 默认 skills 目录:
|
|
823
|
-
```bash
|
|
824
|
-
python3 {baseDir}/scan.py --api-url http://10.110.3.133 batch ~/.openclaw/skills
|
|
825
|
-
```
|
|
826
|
-
|
|
827
|
-
扫描 workspace skills:
|
|
828
|
-
```bash
|
|
829
|
-
python3 {baseDir}/scan.py --api-url http://10.110.3.133 batch ~/.openclaw/workspace/skills --recursive
|
|
830
|
-
```
|
|
831
|
-
|
|
832
|
-
---
|
|
833
|
-
|
|
834
|
-
## 健康检查
|
|
835
|
-
|
|
836
|
-
检查 API 服务是否运行:
|
|
837
|
-
|
|
838
|
-
```bash
|
|
839
|
-
python3 {baseDir}/scan.py --api-url http://10.110.3.133 health
|
|
840
|
-
```
|
|
841
|
-
|
|
842
|
-
---
|
|
843
|
-
|
|
844
|
-
## 结果解读
|
|
845
|
-
|
|
846
|
-
### 总体安全状态
|
|
847
|
-
|
|
848
|
-
| 状态 | 含义 |
|
|
849
|
-
|------|------|
|
|
850
|
-
| ✅ 安全 | 未检测到 HIGH/CRITICAL 问题,可正常使用 |
|
|
851
|
-
| ⚠️ 需关注 | 存在 LOW/MEDIUM 问题,建议人工复核 |
|
|
852
|
-
| ❌ 发现问题 | 存在 HIGH/CRITICAL 威胁,**强烈建议不要安装** |
|
|
853
|
-
|
|
854
|
-
### 严重级别说明
|
|
855
|
-
|
|
856
|
-
- **CRITICAL**: 主动利用尝试(数据窃取、代码注入)
|
|
857
|
-
- **HIGH**: 危险模式(提示注入、未授权访问)
|
|
858
|
-
- **MEDIUM**: 可疑行为(未声明的能力、误导性描述)
|
|
859
|
-
- **LOW**: 轻微风险,需人工判断
|
|
860
|
-
|
|
861
|
-
### VirusTotal 结果解读 🔍
|
|
862
|
-
|
|
863
|
-
**VirusTotal 是多引擎病毒扫描服务,结果格式为 `检测数/总引擎数`**
|
|
864
|
-
|
|
865
|
-
| 检测结果 | 含义 | 建议 |
|
|
866
|
-
|---------|------|------|
|
|
867
|
-
| 0/70+ | 所有引擎均未检测到威胁 | ✅ 安全,可以安装 |
|
|
868
|
-
| 1-2/70+ | 极少数引擎标记(可能误报) | ⚠️ 谨慎评估,查看具体引擎和检测类型 |
|
|
869
|
-
| 3-5/70+ | 多个引擎标记为可疑 | ⚠️ 存在风险,建议详细审查 |
|
|
870
|
-
| 5+/70+ | 多个引擎确认为恶意 | ❌ 高风险,强烈建议不要安装 |
|
|
871
|
-
|
|
872
|
-
**VirusTotal 优先级**:
|
|
873
|
-
- VirusTotal 结果应优先于其他分析器结果展示
|
|
874
|
-
- 即使静态分析显示安全,VirusTotal 检测到威胁时仍需警惕
|
|
875
|
-
- VirusTotal 提供外部可验证的扫描报告链接
|
|
876
|
-
|
|
877
|
-
**示例展示**:
|
|
878
|
-
```
|
|
879
|
-
🔍 VirusTotal 扫描结果:
|
|
880
|
-
✅ 0/72 引擎检测到威胁
|
|
881
|
-
该文件已通过 72 个安全引擎的验证
|
|
882
|
-
|
|
883
|
-
详细信息:
|
|
884
|
-
- SHA256: abc123...
|
|
885
|
-
- 最后分析:2024-03-11
|
|
886
|
-
- 查看完整报告:https://virustotal.com/...
|
|
887
|
-
```
|
|
888
|
-
|
|
889
|
-
**注意事项**:
|
|
890
|
-
- VirusTotal 扫描需要 API 服务配置 VirusTotal API 密钥
|
|
891
|
-
- 如果未配置,扫描结果中不会包含 VirusTotal 数据
|
|
892
|
-
- VirusTotal 有 API 调用频率限制
|
|
893
|
-
|
|
894
|
-
---
|
|
895
|
-
|
|
896
|
-
## 🧠 记忆强化 - 每次操作前必读
|
|
897
|
-
|
|
898
|
-
**在处理任何 Skill 相关操作时,请先问自己这些问题:**
|
|
899
|
-
|
|
900
|
-
1. ✅ 如果是 ClawHub 安装且只有名称,我是否已经搜索了完整 URL?
|
|
901
|
-
2. ✅ 我是否已经更新了 skills-scanner 插件到最新版本?
|
|
902
|
-
3. ✅ 我是否已经扫描了这个 Skill?
|
|
903
|
-
4. ✅ 扫描是否通过?
|
|
904
|
-
5. ✅ 只有所有适用步骤都是 YES,才能继续操作
|
|
905
|
-
|
|
906
|
-
**如果你忘记搜索、更新或扫描就执行了操作,你就让用户的系统暴露在风险之中。**
|
|
907
|
-
|
|
908
|
-
### 🚨 强制性规则(永远不要忘记)
|
|
909
|
-
|
|
910
|
-
0. **ClawHub 安装且只有名称 → 先搜索完整 URL**
|
|
911
|
-
- `openclaw clawhub install xxx` → 先执行 `openclaw clawhub search xxx`
|
|
912
|
-
- 获取完整 URL(如 `https://clawhub.ai/username/xxx`)
|
|
913
|
-
- 然后才能继续后续步骤
|
|
914
|
-
|
|
915
|
-
1. **任何 Skill 操作前 → 先更新插件**
|
|
916
|
-
- 执行 `openclaw plugins update skills-scanner`
|
|
917
|
-
- 确保使用最新的威胁检测规则
|
|
918
|
-
- 即使更新失败也要继续扫描(但要警告用户)
|
|
919
|
-
|
|
920
|
-
2. **看到安装命令 → 搜索(如需要)→ 更新插件 → 立即扫描**
|
|
921
|
-
- `openclaw clawhub install xxx` → 先搜索,再更新插件,再扫描 ClawHub 上的 xxx
|
|
922
|
-
- `openclaw skill install xxx` → 先更新插件,再扫描本地或远程的 xxx
|
|
923
|
-
- 任何包含 "install"、"add"、"download" + "skill" 的命令 → 完整流程
|
|
924
|
-
|
|
925
|
-
3. **看到 Skill 路径 → 更新插件 → 立即扫描**
|
|
926
|
-
- 用户提到 `~/.openclaw/skills/xxx` → 先更新插件,再扫描
|
|
927
|
-
- 用户说 "我下载了一个 skill" → 先更新插件,再扫描
|
|
928
|
-
- 用户说 "这个 skill 有问题" → 先更新插件,再扫描
|
|
929
|
-
|
|
930
|
-
4. **看到 ClawHub URL → 更新插件 → 立即扫描**
|
|
931
|
-
- `https://clawhub.ai/username/project` → 先更新插件,再使用 clawhub 扫描
|
|
932
|
-
- 用户说 "ClawHub 上有个 skill" → 先更新插件,再扫描
|
|
933
|
-
|
|
934
|
-
### ❌ 绝对禁止的行为
|
|
935
|
-
|
|
936
|
-
- ❌ ClawHub 安装只有名称时,不搜索就直接扫描或安装
|
|
937
|
-
- ❌ 不更新插件就直接扫描(可能使用过时的检测规则)
|
|
938
|
-
- ❌ 直接执行 `openclaw clawhub install` 而不先搜索、更新和扫描
|
|
939
|
-
- ❌ 直接执行 `openclaw skill install` 而不先更新和扫描
|
|
940
|
-
- ❌ 看到 "安装 skill" 就直接安装,而不先搜索、更新和扫描
|
|
941
|
-
- ❌ 因为 "用户着急" 或 "看起来安全" 就跳过任何步骤
|
|
942
|
-
- ❌ 因为 "之前扫描过" 就不再更新和扫描(每次都要完整流程)
|
|
943
|
-
|
|
944
|
-
### ✅ 正确的行为模式
|
|
945
|
-
|
|
946
|
-
**模式 1:用户要求安装(只有名称)**
|
|
947
|
-
```
|
|
948
|
-
用户: 帮我安装 caldav-calendar
|
|
949
|
-
AI: 好的,让我先在 ClawHub 上搜索这个 skill...
|
|
950
|
-
[执行: openclaw clawhub search caldav-calendar]
|
|
951
|
-
找到: https://clawhub.ai/Asleep123/caldav-calendar
|
|
952
|
-
|
|
953
|
-
现在更新 skills-scanner 插件...
|
|
954
|
-
[执行: openclaw plugins update skills-scanner]
|
|
955
|
-
✅ 插件已更新到最新版本
|
|
956
|
-
|
|
957
|
-
扫描这个 skill 的安全性...
|
|
958
|
-
[执行扫描]
|
|
959
|
-
✅ 扫描通过,现在开始安装
|
|
960
|
-
```
|
|
961
|
-
|
|
962
|
-
**模式 2:用户输入安装命令(只有名称)**
|
|
963
|
-
```
|
|
964
|
-
用户: openclaw clawhub install nano-pdf
|
|
965
|
-
AI: 我看到你想安装 nano-pdf,让我先搜索它...
|
|
966
|
-
[执行: openclaw clawhub search nano-pdf]
|
|
967
|
-
找到: https://clawhub.ai/steipete/nano-pdf
|
|
968
|
-
|
|
969
|
-
更新扫描插件...
|
|
970
|
-
[执行: openclaw plugins update skills-scanner]
|
|
971
|
-
✅ 插件已更新
|
|
972
|
-
|
|
973
|
-
从 ClawHub 扫描它...
|
|
974
|
-
[执行 clawhub 扫描]
|
|
975
|
-
✅ 扫描通过,执行安装命令
|
|
976
|
-
```
|
|
977
|
-
|
|
978
|
-
**模式 3:用户提供完整 URL**
|
|
979
|
-
```
|
|
980
|
-
用户: openclaw clawhub install https://clawhub.ai/Asleep123/caldav-calendar
|
|
981
|
-
AI: 我看到你想安装 caldav-calendar,让我先更新扫描插件...
|
|
982
|
-
[执行: openclaw plugins update skills-scanner]
|
|
983
|
-
✅ 插件已更新
|
|
984
|
-
|
|
985
|
-
扫描安全性...
|
|
986
|
-
[执行扫描]
|
|
987
|
-
✅ 扫描通过,执行安装
|
|
988
|
-
```
|
|
989
|
-
|
|
990
|
-
**模式 4:用户下载了 Skill**
|
|
991
|
-
```
|
|
992
|
-
用户: 我从 GitHub 下载了一个 skill,帮我设置一下
|
|
993
|
-
AI: 好的,让我先更新扫描插件...
|
|
994
|
-
[执行: openclaw plugins update skills-scanner]
|
|
995
|
-
✅ 插件已更新
|
|
996
|
-
|
|
997
|
-
在设置之前扫描一下安全性...
|
|
998
|
-
[执行扫描]
|
|
999
|
-
✅ 扫描通过,现在帮你设置
|
|
1000
|
-
```
|
|
1001
|
-
|
|
1002
|
-
**记住:搜索(如需要)→ 更新插件 → 扫描 → 操作,这个顺序永远不能变。**
|
|
1003
|
-
|
|
1004
|
-
**记住:安全扫描是你的第一优先级,永远不要跳过。**
|
|
1005
|
-
|
|
1006
|
-
---
|
|
1007
|
-
|
|
1008
|
-
## 参数说明
|
|
1009
|
-
|
|
1010
|
-
| 参数 | 说明 |
|
|
1011
|
-
|------|------|
|
|
1012
|
-
| `--api-url <url>` | API 服务地址 |
|
|
1013
|
-
| `--detailed` | 显示每条 finding 的完整详情 |
|
|
1014
|
-
| `--behavioral` | 启用 AST 数据流分析(更准确,稍慢) |
|
|
1015
|
-
| `--llm` | 启用 LLM 语义分析(最准确,需 API 支持) |
|
|
1016
|
-
| `--recursive` | 批量扫描时递归子目录 |
|
|
1017
|
-
| `--json <文件>` | 将结果保存为 JSON 文件 |
|
|
1018
|
-
| `--policy <strict\|balanced\|permissive>` | 扫描策略(默认: balanced) |
|
|
1019
|
-
|
|
1020
|
-
## 命令类型
|
|
1021
|
-
|
|
1022
|
-
| 命令 | 用途 | 示例 |
|
|
1023
|
-
|------|------|------|
|
|
1024
|
-
| `scan <路径>` | 扫描本地单个 Skill | `scan ~/.openclaw/skills/my-skill` |
|
|
1025
|
-
| `batch <目录>` | 批量扫描本地 Skills | `batch ~/.openclaw/skills --recursive` |
|
|
1026
|
-
| `clawhub <URL>` | 扫描 ClawHub Skill | `clawhub https://clawhub.ai/user/project` |
|
|
1027
|
-
| `health` | 检查 API 服务状态 | `health` |
|
|
1028
|
-
|
|
1029
|
-
---
|
|
1030
|
-
|
|
1031
|
-
## 注意事项
|
|
1032
|
-
|
|
1033
|
-
- **扫描结果不等于安全保证**。`is_safe=True` 表示未检测到已知威胁模式,不代表 skill 绝对安全。
|
|
1034
|
-
- 扫描使用静态分析,不会执行任何 skill 中的代码。
|
|
1035
|
-
- ClawHub 扫描需要 API 服务能够访问 clawhub.ai。
|
|
1036
|
-
- **VirusTotal 结果优先**:如果扫描结果包含 VirusTotal 数据,必须优先展示,即使未检测到威胁。
|
|
1037
|
-
- VirusTotal 扫描需要 API 服务配置 VirusTotal API 密钥,否则不会包含 VirusTotal 数据。
|
|
1038
|
-
- VirusTotal 有 API 调用频率限制(免费版:4 次/分钟,付费版更高)。
|
|
1039
|
-
- 退出码 `0` 表示安全,`1` 表示存在问题(便于 CI/CD 集成)。
|
|
1040
|
-
- `{baseDir}` 占位符会自动替换为 Skill 的安装目录。
|
|
1041
|
-
- 如果你配置了非默认的 API URL(如 `http://10.110.3.133`),请在命令中使用 `--api-url` 参数指定你的 URL。
|
|
1042
|
-
|
|
1043
|
-
### VirusTotal 特别说明
|
|
1044
|
-
|
|
1045
|
-
**为什么 VirusTotal 结果如此重要?**
|
|
1046
|
-
|
|
1047
|
-
1. **多引擎交叉验证**:集成 70+ 个安全引擎(Avast、Kaspersky、Microsoft、Symantec 等)
|
|
1048
|
-
2. **业界标准**:全球安全研究人员和企业的首选恶意软件检测服务
|
|
1049
|
-
3. **外部验证**:提供独立的第三方验证,不依赖单一分析器
|
|
1050
|
-
4. **可追溯性**:每个扫描都有唯一的报告链接,可供审计和验证
|
|
1051
|
-
5. **实时更新**:病毒库持续更新,能检测最新威胁
|
|
1052
|
-
|
|
1053
|
-
**展示优先级**:
|
|
1054
|
-
```
|
|
1055
|
-
1. VirusTotal 结果(如果有)
|
|
1056
|
-
2. 静态分析发现的 CRITICAL/HIGH 问题
|
|
1057
|
-
3. 行为分析结果
|
|
1058
|
-
4. LLM 分析结果
|
|
1059
|
-
5. MEDIUM/LOW 问题
|
|
1060
|
-
```
|
|
1061
|
-
|
|
1062
|
-
**即使其他分析器显示安全,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": "🔍"}}
|
|
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
|
+
### 🎯 命令识别 - 自动触发安全扫描
|
|
27
|
+
|
|
28
|
+
**当用户输入以下任何命令或类似表达时,你必须先扫描再执行:**
|
|
29
|
+
|
|
30
|
+
1. **安装命令识别**:
|
|
31
|
+
- `openclaw clawhub install <skill-name>`
|
|
32
|
+
- `openclaw skill install <skill-name>`
|
|
33
|
+
- `openclaw skills add <skill-name>`
|
|
34
|
+
- "安装这个 skill"
|
|
35
|
+
- "帮我安装 xxx skill"
|
|
36
|
+
- "下载这个 skill"
|
|
37
|
+
- "添加这个 skill"
|
|
38
|
+
|
|
39
|
+
2. **ClawHub 安装流程(重要)**:
|
|
40
|
+
|
|
41
|
+
**如果用户只提供了 skill 名称(没有完整 URL),必须先搜索:**
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
用户:openclaw clawhub install caldav-calendar
|
|
45
|
+
AI: 我看到你想安装 caldav-calendar,让我先搜索这个 skill...
|
|
46
|
+
[执行:openclaw clawhub search caldav-calendar]
|
|
47
|
+
找到:https://clawhub.ai/Asleep123/caldav-calendar
|
|
48
|
+
|
|
49
|
+
扫描安全性...
|
|
50
|
+
[执行扫描]
|
|
51
|
+
✅ 扫描通过,开始安装
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**如果用户提供了完整 URL,直接扫描:**
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
用户:openclaw clawhub install https://clawhub.ai/Asleep123/caldav-calendar
|
|
58
|
+
AI: 我看到你想安装 caldav-calendar,让我先扫描安全性...
|
|
59
|
+
[执行扫描]
|
|
60
|
+
✅ 扫描通过,开始安装
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
3. **正确的处理流程**:
|
|
64
|
+
```
|
|
65
|
+
步骤 1: 如果只有名称 → 使用 clawhub search 查找完整 URL
|
|
66
|
+
步骤 2: 使用完整 URL 进行安全扫描
|
|
67
|
+
步骤 3: 扫描通过后执行安装命令
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 使用方法
|
|
73
|
+
|
|
74
|
+
### API 服务地址
|
|
75
|
+
|
|
76
|
+
默认使用 `https://110.vemic.com/skills-scanner`
|
|
77
|
+
|
|
78
|
+
### 0. API 服务可用性检查 🔌
|
|
79
|
+
|
|
80
|
+
在执行任何扫描操作前,建议先检查 API 服务是否可用:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
/skills-scanner health
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
如果服务不可用,跳过安全检查并告知用户。
|
|
87
|
+
|
|
88
|
+
### 1. 深度分析扫描结果,判断误报 🔍
|
|
89
|
+
|
|
90
|
+
**在展示扫描结果前,必须对检测到的问题进行深度分析,判断是否为误报。**
|
|
91
|
+
|
|
92
|
+
#### 常见误报场景
|
|
93
|
+
|
|
94
|
+
1. **合法的网络请求**
|
|
95
|
+
- 区分正常 API 调用和可疑的数据上传
|
|
96
|
+
- 检查请求目标是否为知名服务
|
|
97
|
+
|
|
98
|
+
2. **声明的文件系统访问**
|
|
99
|
+
- 检查 SKILL.md 的 `requires` 字段是否声明了文件访问
|
|
100
|
+
- 确认访问的文件路径是否合理
|
|
101
|
+
|
|
102
|
+
3. **正常的代码执行**
|
|
103
|
+
- 分析 `exec()` 或 `eval()` 执行的内容是否可控
|
|
104
|
+
|
|
105
|
+
4. **技术术语的正常使用**
|
|
106
|
+
- 区分变量命名和实际的敏感数据操作
|
|
107
|
+
|
|
108
|
+
### 2. VirusTotal 扫描结果优先提示 ⚠️
|
|
109
|
+
|
|
110
|
+
如果扫描结果中包含 VirusTotal 的扫描数据,必须优先、重点展示此结果。
|
|
111
|
+
|
|
112
|
+
**展示格式**:
|
|
113
|
+
```
|
|
114
|
+
🔍 VirusTotal 扫描结果:
|
|
115
|
+
• 扫描引擎数:70
|
|
116
|
+
• 检测为恶意:0
|
|
117
|
+
• 可疑标记:0
|
|
118
|
+
• 状态:✅ 未检测到威胁
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### 3. 内容翻译要求
|
|
122
|
+
|
|
123
|
+
检查结果中是否包含英文内容(如 category、description、finding 详情等),将所有英文内容翻译为中文后再展示给用户。
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## 命令用法
|
|
128
|
+
|
|
129
|
+
### 单个 Skill 扫描
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
/skills-scanner scan <skill 路径> [--detailed] [--behavioral]
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**示例**:
|
|
136
|
+
```
|
|
137
|
+
/skills-scanner scan ~/.openclaw/skills/my-skill
|
|
138
|
+
/skills-scanner scan ~/.openclaw/skills/my-skill --detailed
|
|
139
|
+
/skills-scanner scan ~/.openclaw/skills/my-skill --detailed --behavioral
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### ClawHub Skill 扫描
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
/skills-scanner scan clawhub <URL> [--detailed] [--behavioral]
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**示例**:
|
|
149
|
+
```
|
|
150
|
+
/skills-scanner scan clawhub https://clawhub.ai/Asleep123/caldav-calendar
|
|
151
|
+
/skills-scanner scan clawhub https://clawhub.ai/steipete/nano-pdf --detailed
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### 批量扫描
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
/skills-scanner scan <目录路径> --recursive [--detailed]
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**示例**:
|
|
161
|
+
```
|
|
162
|
+
/skills-scanner scan ~/.openclaw/skills --recursive
|
|
163
|
+
/skills-scanner scan ~/.openclaw/skills --recursive --detailed
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### 生成日报
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
/skills-scanner scan --report
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### 健康检查
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
/skills-scanner health
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## 结果解读
|
|
181
|
+
|
|
182
|
+
### 总体安全状态
|
|
183
|
+
|
|
184
|
+
| 状态 | 含义 |
|
|
185
|
+
|------|------|
|
|
186
|
+
| ✅ 安全 | 未检测到 HIGH/CRITICAL 问题,可正常使用 |
|
|
187
|
+
| ⚠️ 需关注 | 存在 LOW/MEDIUM 问题,建议人工复核 |
|
|
188
|
+
| ❌ 发现问题 | 存在 HIGH/CRITICAL 威胁,**强烈建议不要安装** |
|
|
189
|
+
|
|
190
|
+
### 严重级别说明
|
|
191
|
+
|
|
192
|
+
- **CRITICAL**: 主动利用尝试(数据窃取、代码注入)
|
|
193
|
+
- **HIGH**: 危险模式(提示注入、未授权访问)
|
|
194
|
+
- **MEDIUM**: 可疑行为(未声明的能力、误导性描述)
|
|
195
|
+
- **LOW**: 轻微风险,需人工判断
|
|
196
|
+
|
|
197
|
+
### VirusTotal 结果解读 🔍
|
|
198
|
+
|
|
199
|
+
| 检测结果 | 含义 | 建议 |
|
|
200
|
+
|---------|------|------|
|
|
201
|
+
| 0/70+ | 所有引擎均未检测到威胁 | ✅ 安全,可以安装 |
|
|
202
|
+
| 1-2/70+ | 极少数引擎标记(可能误报) | ⚠️ 谨慎评估,查看具体引擎和检测类型 |
|
|
203
|
+
| 3-5/70+ | 多个引擎标记为可疑 | ⚠️ 存在风险,建议详细审查 |
|
|
204
|
+
| 5+/70+ | 多个引擎确认为恶意 | ❌ 高风险,强烈建议不要安装 |
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## 🧠 记忆强化 - 每次操作前必读
|
|
209
|
+
|
|
210
|
+
**在处理任何 Skill 相关操作时,请先问自己这些问题:**
|
|
211
|
+
|
|
212
|
+
1. ✅ 如果是 ClawHub 安装且只有名称,我是否已经搜索了完整 URL?
|
|
213
|
+
2. ✅ 我是否已经扫描了这个 Skill?
|
|
214
|
+
3. ✅ 扫描是否通过?
|
|
215
|
+
4. ✅ 只有所有适用步骤都是 YES,才能继续操作
|
|
216
|
+
|
|
217
|
+
**如果你忘记搜索或扫描就执行了操作,你就让用户的系统暴露在风险之中。**
|
|
218
|
+
|
|
219
|
+
### 🚨 强制性规则(永远不要忘记)
|
|
220
|
+
|
|
221
|
+
1. **看到安装命令 → 搜索(如需要)→ 立即扫描**
|
|
222
|
+
- `openclaw clawhub install xxx` → 先搜索,再扫描
|
|
223
|
+
- 任何包含 "install"、"add"、"download" + "skill" 的命令 → 完整流程
|
|
224
|
+
|
|
225
|
+
2. **看到 Skill 路径 → 立即扫描**
|
|
226
|
+
- 用户提到 `~/.openclaw/skills/xxx` → 立即扫描
|
|
227
|
+
- 用户说 "我下载了一个 skill" → 立即扫描
|
|
228
|
+
|
|
229
|
+
3. **看到 ClawHub URL → 立即扫描**
|
|
230
|
+
- `https://clawhub.ai/username/project` → 立即扫描
|
|
231
|
+
|
|
232
|
+
### ❌ 绝对禁止的行为
|
|
233
|
+
|
|
234
|
+
- ❌ 直接执行安装命令而不先搜索和扫描
|
|
235
|
+
- ❌ 因为 "用户着急" 或 "看起来安全" 就跳过任何步骤
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## 注意事项
|
|
240
|
+
|
|
241
|
+
- **扫描结果不等于安全保证**。`is_safe=True` 表示未检测到已知威胁模式,不代表 skill 绝对安全。
|
|
242
|
+
- 扫描使用静态分析,不会执行任何 skill 中的代码。
|
|
243
|
+
- ClawHub 扫描需要 API 服务能够访问 clawhub.ai。
|
|
244
|
+
- **VirusTotal 结果优先**:如果扫描结果包含 VirusTotal 数据,必须优先展示。
|
|
245
|
+
- 退出码 `0` 表示安全,`1` 表示存在问题(便于 CI/CD 集成)。
|