@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.
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/skills/skills-scanner/SKILL.md +634 -634
- package/skills/skills-scanner/scan.py +10 -4
package/openclaw.plugin.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "@pwddd/skills-scanner",
|
|
3
|
-
"version": "3.0.
|
|
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://
|
|
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://
|
|
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://
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
或直接调用时使用 `--api-url` 参数:
|
|
174
|
-
|
|
175
|
-
```bash
|
|
176
|
-
python3 {baseDir}/scan.py --api-url http://
|
|
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://
|
|
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://
|
|
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://
|
|
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://
|
|
460
|
-
```
|
|
461
|
-
|
|
462
|
-
### 详细模式(显示所有发现)
|
|
463
|
-
|
|
464
|
-
```bash
|
|
465
|
-
python3 {baseDir}/scan.py --api-url http://
|
|
466
|
-
```
|
|
467
|
-
|
|
468
|
-
### 深度扫描(加入行为分析)
|
|
469
|
-
|
|
470
|
-
```bash
|
|
471
|
-
python3 {baseDir}/scan.py --api-url http://
|
|
472
|
-
```
|
|
473
|
-
|
|
474
|
-
### 最强扫描(加入 LLM 语义分析)
|
|
475
|
-
|
|
476
|
-
```bash
|
|
477
|
-
python3 {baseDir}/scan.py --api-url http://
|
|
478
|
-
```
|
|
479
|
-
|
|
480
|
-
---
|
|
481
|
-
|
|
482
|
-
## 批量扫描
|
|
483
|
-
|
|
484
|
-
**触发词**: "批量扫描"、"扫描所有 skills"、"检查 skills 目录"
|
|
485
|
-
|
|
486
|
-
### 扫描指定目录下的所有 Skills
|
|
487
|
-
|
|
488
|
-
```bash
|
|
489
|
-
python3 {baseDir}/scan.py --api-url http://
|
|
490
|
-
```
|
|
491
|
-
|
|
492
|
-
### 递归扫描(含子目录)
|
|
493
|
-
|
|
494
|
-
```bash
|
|
495
|
-
python3 {baseDir}/scan.py --api-url http://
|
|
496
|
-
```
|
|
497
|
-
|
|
498
|
-
### 批量扫描并输出 JSON 报告
|
|
499
|
-
|
|
500
|
-
```bash
|
|
501
|
-
python3 {baseDir}/scan.py --api-url http://
|
|
502
|
-
```
|
|
503
|
-
|
|
504
|
-
### 常用目录示例
|
|
505
|
-
|
|
506
|
-
扫描 OpenClaw 默认 skills 目录:
|
|
507
|
-
```bash
|
|
508
|
-
python3 {baseDir}/scan.py --api-url http://
|
|
509
|
-
```
|
|
510
|
-
|
|
511
|
-
扫描 workspace skills:
|
|
512
|
-
```bash
|
|
513
|
-
python3 {baseDir}/scan.py --api-url http://
|
|
514
|
-
```
|
|
515
|
-
|
|
516
|
-
---
|
|
517
|
-
|
|
518
|
-
## 健康检查
|
|
519
|
-
|
|
520
|
-
检查 API 服务是否运行:
|
|
521
|
-
|
|
522
|
-
```bash
|
|
523
|
-
python3 {baseDir}/scan.py --api-url http://
|
|
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 =
|
|
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
|
-
'
|
|
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 到文件')
|