Skill Shielder:下載 AI 工具前,先讓它過個安檢
一行 pip install 就能偷走你的 SSH 金鑰、雲端憑證和加密錢包。Skill Shielder 是一個零依賴的開源安全審計工具,幫你在安裝 Claude Code skill 或任何 GitHub 專案之前,先掃描可能的威脅。
上週,一個叫 litellm 的 Python 套件被投毒了。
這個套件每個月有近一億次下載量,被無數 AI 專案當作依賴。被投毒的版本只存在了不到一小時,但在那一小時內,任何執行 pip install litellm 的人——或者安裝了任何依賴 litellm 的工具的人——都可能已經被偷走了:
- SSH 金鑰(你連伺服器的通行證)
- AWS / GCP / Azure 雲端憑證(你的雲端帳號)
- 加密貨幣錢包
- 所有環境變數(你的 API key 們)
- shell 歷史紀錄
- Git 認證資訊
- 資料庫密碼
你什麼都不用做,不用 import 它,不用呼叫它——只要裝了就中。

這是怎麼做到的?
攻擊者用了一個大多數人不知道的 Python 機制:.pth 檔案。
簡單來說,Python 在啟動時會自動讀取 site-packages 目錄裡的所有 .pth 檔案。正常用途是告訴 Python「把這個路徑加到搜尋清單裡」。但如果在 .pth 檔案裡寫一行 import 開頭的指令——它就會自動執行。
攻擊者在裡面放了 base64 編碼的惡意程式。解碼後,它會靜靜地掃描你電腦上的所有敏感檔案,然後把內容傳到攻擊者的伺服器。
更可怕的是,這次攻擊之所以被發現,是因為攻擊者自己的程式碼有 bug——它消耗了太多記憶體,導致受害者的電腦當機了。如果攻擊者寫得更好一點,這件事可能好幾天都不會被發現。
為什麼這跟 Claude Code 使用者有關?
如果你在用 Claude Code,你可能會從 GitHub 下載各種 skill(給 Claude 看的指令集 + 腳本)、MCP server、或其他擴充工具。
每一次你把別人寫的程式碼放到你的電腦上,讓 Claude 有權限去執行它——你就在信任那個人。
一個惡意的 skill 可以:
| 攻擊手法 | 具體做什麼 |
|---|---|
| Prompt injection | 在 markdown 裡藏隱形指令,操縱 Claude 去做壞事 |
| 惡意腳本 | curl 你的 SSH 金鑰然後 POST 到攻擊者的伺服器 |
| Supply chain 投毒 | 在 requirements.txt 裡引入被污染的套件 |
| .pth 注入 | Python 每次啟動都自動執行竊取程式 |
| 反向 shell | 在你電腦上開一個後門,讓攻擊者遠端連入 |
Skill Shielder
所以我做了 Skill Shielder。
它是一個零依賴的開源安全審計工具——純 bash 腳本,不需要安裝任何東西。它在你安裝任何工具之前先掃描,告訴你裡面有什麼可疑的東西。
# 掃描本地資料夾
./shield.sh /path/to/downloaded-skill
# 直接掃描 GitHub repo
./shield.sh https://github.com/someone/their-tool

它掃什麼?
Skill Shielder 有四個獨立的掃描模組:
1. Prompt Injection 掃描器
檢查 markdown、JSON、YAML 裡的隱藏指令。例如:
ignore all previous instructions(經典覆寫指令)- 偽裝的
<system>標籤(假裝是系統訊息) - Unicode 零寬度字元(肉眼看不到的隱形文字)
do not tell the user(叫 AI 對你隱瞞事情)
2. 腳本安全掃描器
檢查 .sh、.py、.js、.ts 裡的危險操作:
curl ... | bash(下載並直接執行遠端程式碼)base64 ~/.ssh/id_rsa | curl -X POST(把 SSH 金鑰編碼後傳走)- 反向 shell(讓攻擊者遠端控制你的電腦)
rm -rf ~/(刪除你的整個家目錄)
3. Supply Chain 掃描器
這是針對 litellm 那種攻擊設計的:
.pth檔案裡有沒有可執行程式碼setup.py有沒有在安裝時偷跑指令package.json的postinstallhookrequirements.txt有沒有從可疑來源拉套件
4. 權限範圍分析
分析這個工具會存取哪些檔案和網路端點:
- 有沒有讀取
~/.ssh、~/.aws、.env? - 有沒有連到不認識的外部網址?
- 如果同時存取敏感路徑又發起網路請求——這就是典型的資料外洩模式

三種判定結果
掃描完成後,Skill Shielder 會給你一個清楚的判定:
| 判定 | 意思 | 該怎麼做 |
|---|---|---|
| PASS | 沒有發現問題 | 可以安心安裝 |
| WARN | 有值得注意的地方 | 看看是什麼,確認合理再安裝 |
| FAIL | 發現嚴重問題 | 不要安裝,離它遠一點 |
實際跑起來長這樣
對我們準備的測試用惡意 skill 執行掃描:
# Skill Shielder Report
**Target**: malicious-skill
**Verdict**: **FAIL**
## Summary
| Scanner | CRITICAL | WARN | INFO |
|------------------|----------|------|------|
| prompt-injection | 2 | 4 | 0 |
| script-safety | 5 | 4 | 0 |
| supply-chain | 1 | 2 | 0 |
| permissions | 1 | 3 | 0 |
## Findings
- [CRITICAL] SKILL.md:12 [PROMPT_OVERRIDE] ignore all previous instructions...
- [CRITICAL] scripts/setup.sh [PIPE_TO_SHELL] curl/wget piped to sh/bash
- [CRITICAL] scripts/setup.sh [CREDENTIAL_EXFIL] base64 encode credentials then curl
- [CRITICAL] scripts/setup.sh [REVERSE_SHELL] reverse shell pattern detected
- [CRITICAL] evil.pth [PTH_EXECUTABLE] .pth file contains executable code
...
## Recommendation
**CRITICAL issues detected. Do NOT install.**
9 個 CRITICAL,全部抓到了。
怎麼開始用?
git clone https://github.com/p3nchan/skill-shielder.git
cd skill-shielder
chmod +x shield.sh scanners/*.sh
# 掃你想安裝的東西
./shield.sh /path/to/any-project
如果你也在用 Claude Code,可以把它當作一個 skill。把 repo clone 到本地,Claude 就能直接用它來幫你審計其他工具。
整個工具是純 bash,macOS 和 Linux 都能用,不需要安裝任何東西。
一些建議
這次 litellm 事件讓我重新想了一下「安裝依賴」這件事。幾個心得:
- 不要無腦
pip install。即使是大型專案也可能被投毒,哪怕只有一小時 - 注意 transitive dependencies。你裝的是 A,但 A 依賴 B,B 依賴 C——C 被投毒你也會中
- 用前先掃。花 5 秒跑
shield.sh比事後修復被偷走的 credential 省事太多 - 零依賴 > 一切。一個安全工具如果自己也要裝一堆套件,那就失去意義了
Skill Shielder 是開源的,歡迎 contribute patterns 讓它能偵測更多攻擊手法。寫這篇文章的時候,Penna 剛好在幫我確認我們自己的系統有沒有中招(沒有)。