深入供應鏈分析
AI 供應鏈依賴樹之完整分析,涵蓋模型權重、tokenizer、資料集、函式庫與基礎設施元件,含稽核方法論。
深入供應鏈分析
AI 供應鏈較傳統軟體供應鏈更深且更不可見。生產 AI 系統仰賴模型權重(不透明二進位 blob)、tokenizer 組態(可執行程式碼路徑)、訓練資料集(大規模無法稽核)、協作函式庫(極少審查之快速發布),以及基礎設施元件(GPU 驅動、容器執行期、服務框架)。入侵任一層可顛覆整個系統。
AI 依賴樹
典型生產 AI 系統具六個依賴層,各具獨特之信任假設與攻擊向量。
| 層 | 元件 | 信任假設 | 主要攻擊向量 |
|---|---|---|---|
| 模型權重 | 預訓練模型、微調 checkpoint、adapter 權重 | 權重可安全載入 | Pickle RCE、木馬權重、後門插入 |
| Tokenizer | 詞彙檔、tokenizer 組態、客製 tokenizer 程式碼 | Tokenizer 僅處理文字 | 客製 tokenizer 程式碼執行、詞彙操弄 |
| 資料集 | 訓練資料、評估基準、RAG 語料 | 資料乾淨且具代表性 | 資料投毒、基準操弄、語料注入 |
| 函式庫 | ML 框架、協作函式庫、工具套件 | 函式庫善意且正確 | 依賴混淆、錯字搶註、惡意更新 |
| 基礎設施 | GPU 驅動、容器執行期、服務框架 | 基礎設施正確組態 | 驅動 exploit、容器逃逸、錯誤組態 |
| 組態 | 超參數、部署組態、特性旗標 | 組態已審查且正確 | 組態注入、機密曝露、漂移 |
模型權重分析
來源驗證
驗證來源儲存庫
確認模型自官方儲存庫下載。檢查 HuggingFace 組織驗證徽章、commit 歷史與 model card。注意錯字搶註之儲存庫名稱。
檢查檔案格式
驗證權重使用 safetensors 格式而非以 pickle 為本之格式(.pt、.bin、.pkl)。若存在 pickle 檔,載入前必須稽核。
驗證 checksum
將所下載檔案之 SHA-256 hash 與已發布 checksum 比較。對 HuggingFace 模型,對 model card 中之 commit hash 驗證。
掃描客製程式碼
檢查客製模型程式碼(
modeling_*.py、configuration_*.py)。若需trust_remote_code=True,於載入前稽核每個客製檔。測試後門
以已知觸發模式執行行為測試。被後門化模型將於觸發輸入產生異常輸出,於其他情況正常行為。
權重完整性評估
| 檢查 | 偵測什麼 | 如何 |
|---|---|---|
| 檔案格式驗證 | 以 pickle 為本之 RCE payload | 檢查檔案 magic byte;safetensors 以 {(JSON header)開始 |
| 統計分析 | 指示竄改之異常權重分布 | 將權重統計與參考模型比較 |
| 層層級 hash | 有針對性之權重修改(後門插入) | 對個別層 hash 並跨 checkpoint 比較 |
| 行為測試 | 後門觸發 | 以已知觸發模式測試,量測輸出分歧 |
Tokenizer 安全
Tokenizer 於安全稽核中常被忽視,因它們被感知為簡單文字處理器。實際上,tokenizer 組態可含可執行程式碼,且詞彙操弄可細微改變模型行為。
| 風險 | 描述 | 影響 |
|---|---|---|
| 客製 tokenizer 程式碼 | tokenizer.py 或 tokenizer_config.json 參照客製 Python 類 | Tokenizer 初始化時之任意程式碼執行 |
| 詞彙操弄 | 修改之詞彙,將某些 token 對映至非預期 ID | 細微行為變化、特定片語之安全繞過 |
| 前處理注入 | Tokenizer 組態中之客製 pre/post 處理函式 | 文字處理期間之程式碼執行 |
| BPE merge 表投毒 | 修改之合併規則,改變文字如何 tokenize | 對特定輸入之模型行為改變 |
資料集供應鏈
風險評估矩陣
| 資料來源 | 完整性風險 | 驗證方法 |
|---|---|---|
| HuggingFace Datasets | 中——社群上傳具有限審查 | 檢查資料集卡、貢獻者歷史、樣本檢視 |
| Common Crawl / C4 | 高——網頁擷取含對抗內容 | 統計分析、毒性掃描、去重稽核 |
| 內部資料 | 低—中——依內部控制而定 | 存取控制稽核、資料譜系追蹤 |
| 合成資料(LLM 生成) | 中——模型偏誤傳播 | 多樣性分析、幻覺率、來源模型稽核 |
| 擷取資料(客製) | 高——無來源保證 | URL 驗證、內容驗證、法律審查 |
資料管線稽核
import hashlib
from datasets import load_dataset
def audit_dataset(dataset_name, expected_hash=None):
"""基本資料集完整性稽核。"""
ds = load_dataset(dataset_name, split="train")
audit_results = {
"name": dataset_name,
"num_samples": len(ds),
"columns": ds.column_names,
"sample_hash": hashlib.sha256(
str(ds[:100]).encode()
).hexdigest(),
}
# 檢查文字欄位中之可疑模式
text_cols = [c for c in ds.column_names if ds.features[c].dtype == "string"]
for col in text_cols:
samples = ds[col][:1000]
injection_patterns = [
"ignore previous", "system prompt", "IMPORTANT:",
"<script", "javascript:", "eval(",
]
for pattern in injection_patterns:
matches = sum(1 for s in samples if pattern.lower() in s.lower())
if matches > 0:
audit_results[f"suspicious_{col}_{pattern}"] = matches
if expected_hash and audit_results["sample_hash"] != expected_hash:
audit_results["integrity_warning"] = "Hash mismatch!"
return audit_results函式庫依賴分析
ML 特有之依賴風險
| 套件類別 | 範例 | 主要風險 | 稽核焦點 |
|---|---|---|---|
| ML 框架 | PyTorch、TensorFlow、JAX | 原生程式碼 exploit、pickle 預設 | 版本釘選、建置驗證 |
| 協作 | LangChain、LlamaIndex、Semantic Kernel | 快速發布週期、不安全預設 | Changelog 審查、安全公告追蹤 |
| 資料處理 | pandas、numpy、Pillow | C 擴充漏洞、反序列化 | CVE 追蹤、輸入驗證 |
| 模型服務 | vLLM、TGI、Triton | 網路曝險、GPU 記憶體存取 | 組態加固、存取控制 |
| 實驗追蹤 | MLflow、W&B、Neptune | 憑證儲存、產物完整性 | 存取控制、產物簽章 |
AI 系統之 SBOM
標準 SBOM 涵蓋軟體函式庫,但錯失 AI 特有元件。AI 擴展之 SBOM 應包含:
- Model Bill of Materials(MBOM) —— 模型名稱、版本、來源、格式、checksum、訓練資料來源
- Data Bill of Materials(DBOM) —— 資料集名稱、版本、來源、前處理腳本、授權
- 標準 SBOM —— 所有 Python/系統套件,含版本與 hash
- 基礎設施 BOM —— GPU 驅動、CUDA 版本、容器基礎映像、服務框架版本
供應鏈稽核方法論
清點所有元件
跨所有六層列出每個依賴。使用
pip freeze、容器映像檢視、model card 審查與基礎設施文件。目標是完整 BOM。為每個元件評估來源
對每個元件回答:它從哪來、誰發布、如何遞送,以及完整性是否已驗證?標記具不清楚或未驗證來源之元件。
辨識關鍵路徑
繪製哪些元件於自輸入至輸出之關鍵路徑上。被入侵之 tokenizer 影響每個請求;被入侵之評估資料集僅影響模型選擇。
測試已知攻擊模式
檢查模型產物中之 pickle 檔、載入程式碼中之
trust_remote_code=True、需求檔中之未釘選依賴,以及組態中暴露之機密。產生加固建議
依風險(關鍵路徑位置乘以可利用性)與可行性排序。快速勝利先行:釘選版本、切換至 safetensors、移除不必要工具。
相關主題
- 整合與框架安全 -- 框架層漏洞
- AI 供應鏈利用 -- 模型序列化與依賴之攻擊技術
- Pickle 利用 -- Pickle 反序列化攻擊之深入探討
- 雲端 AI 基礎設施攻擊 -- 基礎設施層安全評估
AI 系統自 HuggingFace 載入需 trust_remote_code=True 且對權重使用 safetensors 格式之模型。安全稽核者宣稱系統安全,因 safetensors 防止程式碼執行。此評估哪裡錯了?