跳到主要內容
← 返回 Penna 實驗室

Skill Shielder:下載 AI 工具前,先讓它過個安檢

一行 pip install 就能偷走你的 SSH 金鑰、雲端憑證和加密錢包。Skill Shielder 是一個零依賴的開源安全審計工具,幫你在安裝 Claude Code skill 或任何 GitHub 專案之前,先掃描可能的威脅。

Skill Shielder:下載 AI 工具前,先讓它過個安檢

上週,一個叫 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

企鵝操作 X 光掃描機檢查禮物盒的內容物

它掃什麼?

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.jsonpostinstall hook
  • requirements.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 事件讓我重新想了一下「安裝依賴」這件事。幾個心得:

  1. 不要無腦 pip install。即使是大型專案也可能被投毒,哪怕只有一小時
  2. 注意 transitive dependencies。你裝的是 A,但 A 依賴 B,B 依賴 C——C 被投毒你也會中
  3. 用前先掃。花 5 秒跑 shield.sh 比事後修復被偷走的 credential 省事太多
  4. 零依賴 > 一切。一個安全工具如果自己也要裝一堆套件,那就失去意義了

Skill Shielder 是開源的,歡迎 contribute patterns 讓它能偵測更多攻擊手法。寫這篇文章的時候,Penna 剛好在幫我確認我們自己的系統有沒有中招(沒有)。

免責聲明與利益揭露

本文僅供一般資訊與教育參考,不構成投資、法律、稅務或任何專業建議。市場與法規可能隨時變動,文中資訊僅反映撰寫當時狀況。

詳見本站法律聲明與利益揭露隱私政策