跳至主要内容

技能稽核清單

在 ClawHavoc 事件中,2,400+ 個惡意技能透過 ClawHub 被分發到數千個 OpenClaw 實例。這份清單幫助你在安裝任何技能之前,系統性地評估其安全性。

不要跳過安全審查

ClawHub 上的技能由社群開發者提交。即使 ClawHub 現在整合了 VirusTotal 掃描,自動化掃描無法偵測所有惡意行為。人工審查仍然是必要的


快速風險評估

在進行完整審查之前,先用以下問題快速評估風險等級:

問題是 → 風險較高否 → 風險較低
技能需要網路存取?可能外傳資料離線操作較安全
技能需要檔案系統存取?可能讀取敏感檔案無法存取本機資料
技能需要 shell 執行權限?可能執行任意指令受限於沙箱
技能是新發布的(< 30 天)?未經時間考驗社群已使用一段時間
技能的安裝數 < 100?未經廣泛測試較多人使用過
技能開發者是新帳號?可能是惡意帳號有歷史紀錄
技能需要環境變數存取?可能讀取 API key無法取得 secrets

如果有 3 個以上的「是」,請進行完整的深度審查。


第一階段:基本資訊檢查

1.1 查看技能元資料

openclaw skill info <skill-name>

需要確認的項目:

檢查項目安全的可疑的
開發者已驗證帳號、有其他技能作品新帳號、無其他作品
版本有多個穩定版本(1.x+)只有 0.0.1 或頻繁大版本變更
安裝數1,000+< 50
最後更新近期有維護超過 6 個月未更新
授權MIT、Apache 2.0 等標準授權無授權或自訂授權
原始碼公開可見閉源或混淆

1.2 查看 VirusTotal 掃描結果

openclaw skill virustotal <skill-name>

解讀結果:

  • 0 偵測:通過所有引擎掃描(但不代表 100% 安全)
  • 1-2 偵測:可能是誤報,需要進一步調查
  • 3+ 偵測:高度可疑,不建議安裝
VirusTotal 的限制

VirusTotal 無法偵測所有惡意行為,尤其是:

  • 利用合法 API 竊取資料的行為
  • 延遲執行的惡意程式碼(安裝後數天才啟動)
  • 條件觸發的惡意行為(特定環境下才執行)

1.3 查看社群評價

openclaw skill reviews <skill-name>

需要注意的紅旗訊號:

  • 評論中提到「安裝後 API 用量暴增」
  • 評論中提到「異常的網路活動」
  • 只有正面評論(可能是刷評)
  • 評論帳號都是新帳號

第二階段:原始碼審查

2.1 下載原始碼(不安裝)

# 只下載,不安裝
openclaw skill inspect <skill-name> --download-only

# 原始碼會下載到臨時目錄
# ~/.openclaw/tmp/skill-inspect/<skill-name>/

2.2 檢查檔案結構

# 列出所有檔案
ls -laR ~/.openclaw/tmp/skill-inspect/<skill-name>/

# 一個正常的技能結構應該像這樣:
# ├── manifest.yaml # 技能宣告
# ├── index.js / main.py # 主要邏輯
# ├── README.md # 文件
# ├── package.json # 相依套件
# └── tests/ # 測試

可疑的檔案:

  • 二進位檔案(.so、.dll、.exe)
  • 混淆的程式碼(base64 編碼的大字串)
  • 隱藏檔案(以 . 開頭的非標準檔案)
  • 安裝後腳本(postinstall scripts)

2.3 關鍵程式碼模式搜尋

以下是需要特別關注的程式碼模式:

# 搜尋網路外傳行為
grep -rn "fetch\|axios\|http\.request\|urllib\|requests\.post" .

# 搜尋環境變數讀取(可能竊取 API key)
grep -rn "process\.env\|os\.environ\|getenv" .

# 搜尋檔案系統操作
grep -rn "readFile\|writeFile\|fs\.\|open(" .

# 搜尋 shell 執行
grep -rn "exec\|spawn\|system\|subprocess\|child_process" .

# 搜尋 base64(可能隱藏惡意 payload)
grep -rn "atob\|btoa\|base64\|Buffer\.from" .

# 搜尋動態程式碼執行
grep -rn "eval\|Function(\|new Function" .

# 搜尋混淆的字串
grep -rn "\\\\x[0-9a-f]\{2\}" .

# 搜尋對外連線(硬編碼的 URL)
grep -rn "https\?://[^\"' ]*" .

2.4 審查 manifest.yaml

# manifest.yaml — 技能宣告檔
name: example-skill
version: 1.0.0
permissions:
network:
enabled: true # ← 為什麼需要網路?
domains:
- "api.example.com" # ← 只存取必要的域名?
- "*" # ← ❌ 警告:萬用字元 = 可存取任何網站
filesystem:
enabled: true # ← 為什麼需要檔案存取?
paths:
- "/tmp" # ← 限制在暫存目錄 ✅
- "~/" # ← ❌ 警告:存取整個家目錄
environment:
enabled: true # ← 為什麼需要環境變數?
variables:
- "HOME" # ← 合理
- "*" # ← ❌ 警告:可讀取所有環境變數
shell:
enabled: true # ← ❌ 極高風險!為什麼需要 shell?

原則:每一個 enabled: true 都需要合理的解釋。

2.5 審查相依套件

# Node.js 技能
cd ~/.openclaw/tmp/skill-inspect/<skill-name>/
cat package.json | grep -A 50 "dependencies"

# 檢查相依套件的安全性
npm audit

# Python 技能
cat requirements.txt
pip audit -r requirements.txt

可疑的相依套件:

  • 名稱拼寫與知名套件相似(typosquatting)
  • 版本範圍過寬("*"">=0.0.0"
  • 來自非標準 registry 的套件
  • 安裝腳本中包含 curl 或 wget

第三階段:行為分析

3.1 在隔離環境中測試

# 建立隔離的測試環境
openclaw sandbox create test-env

# 在測試環境中安裝技能
openclaw sandbox exec test-env -- openclaw skill install <skill-name>

# 監控技能的行為
openclaw sandbox monitor test-env

3.2 網路行為監控

# 監控技能的網路連線
# Linux
sudo tcpdump -i any -w skill-traffic.pcap &
openclaw skill test <skill-name>
# 分析 pcap 檔案

# 或使用 wireshark
# 篩選器:tcp.port == 18789

# 簡易方法:檢查 DNS 查詢
# Linux
sudo tcpdump -i any port 53 | grep -v "127.0.0.1"

3.3 檔案系統行為監控

# Linux — 使用 inotifywait
inotifywait -rm ~/.openclaw/ -e create,modify,delete,access &
openclaw skill test <skill-name>

# macOS — 使用 fswatch
fswatch -r ~/.openclaw/ &
openclaw skill test <skill-name>

第四階段:安裝後監控

即使通過了上述所有檢查,安裝後仍需持續監控。

4.1 設定技能權限覆蓋

# ~/.openclaw/skills/<skill-name>/permissions.override.yaml
# 覆蓋 manifest.yaml 中的權限
permissions:
network:
enabled: true
domains:
- "api.example.com" # 只允許必要的域名
filesystem:
enabled: false # 覆蓋為不允許
environment:
enabled: false # 覆蓋為不允許
shell:
enabled: false # 覆蓋為不允許

4.2 持續監控清單

監控項目頻率工具
API 用量每日LLM 提供者的控制台
網路連線每週tcpdump / netstat
檔案存取每週inotifywait / fswatch
技能版本每次更新前openclaw skill check-updates
CPU / 記憶體每日top / htop

4.3 異常指標

以下情況表示技能可能有問題:

異常指標可能原因
API 用量突然增加技能洩漏 API key 給第三方
未知的對外連線技能正在外傳資料
CPU 持續高負載挖礦程式
新增未知檔案技能下載了額外的 payload
Gateway 日誌異常技能嘗試存取未授權的資源

技能安全分級表

根據權限需求,將技能分為四個安全等級:

第一級:低風險(Green)

權限需求:無網路、無檔案系統、無 shell、無環境變數
範例:文字格式化、數學計算、時間轉換
安裝建議:基本檢查即可

第二級:中風險(Yellow)

權限需求:網路存取(限定域名)或唯讀檔案存取
範例:Web 搜尋、天氣查詢、RSS 讀取
安裝建議:檢查原始碼 + 確認域名清單

第三級:高風險(Orange)

權限需求:網路 + 檔案系統,或環境變數存取
範例:Email 管理、Notion 整合、GitHub 操作
安裝建議:完整四階段審查

第四級:極高風險(Red)

權限需求:Shell 執行、萬用字元網路/檔案存取
範例:browser-use、shell-executor、系統管理
安裝建議:完整審查 + 隔離測試 + 持續監控

可列印版檢查清單

以下是一份可列印的快速參考清單:

安裝前

  • 查看技能元資料(開發者、版本、安裝數)
  • 查看 VirusTotal 掃描結果
  • 查看社群評價
  • 下載原始碼(不安裝)
  • 檢查檔案結構是否正常
  • 搜尋可疑的程式碼模式
  • 審查 manifest.yaml 權限宣告
  • 審查相依套件
  • 確認每個權限都有合理用途

安裝時

  • 設定權限覆蓋(限制不必要的權限)
  • 在隔離環境中先測試

安裝後

  • 監控 API 用量變化
  • 監控網路連線
  • 監控 CPU / 記憶體使用
  • 鎖定技能版本
  • 更新前檢查 changelog

遇到可疑技能?

如果你發現了可疑的技能,請立即回報:

# 透過 OpenClaw CLI 回報
openclaw skill report <skill-name> --reason "可疑的網路行為"

# 或在 GitHub 上提交 security issue
# https://github.com/openclaw/openclaw/security/advisories/new

同時建議在 r/openclaw 上分享你的發現,幫助其他使用者避免安裝惡意技能。


延伸閱讀